home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / modempool / part01 / db.c next >
C/C++ Source or Header  |  1993-04-05  |  4KB  |  159 lines

  1. /*******************************************************************
  2.  * 
  3.  * Module: @(#)db.c    4.2
  4.  *
  5.  * Description:
  6.  *    Handle user database functions.
  7.  *
  8.  * Revision:
  9.  *    Date    By            Reason    
  10.  *    ----    --            ------    
  11.  *    910414    Lars Berntzon        Created
  12.  *      910124  Lars H Carlsson     Changed pid format to %10d\n
  13.  *      910124  Lars H Carlsson        Changed mode of lockfile to 0444
  14.  *    910129    Lars Berntzon        Changed to termio for eightbit tty.
  15.  *      910224  Lars Berntzon        Newline right when loggin in.
  16.  *      910227  Lars Berntzon           The loggfile now reopens everytime.
  17.  *
  18.  *******************************************************************/
  19. static char SccsId[] = "@(#)db.c    4.2 92/04/16";
  20.  
  21. #include <stdio.h>
  22. #include <string.h>
  23. #include <fcntl.h>
  24. #include <stdarg.h>
  25.  
  26. #include "modempool.h"
  27.  
  28. /*
  29.  * Local stuff.
  30.  */
  31. static FILE *db_fp = NULL;
  32.  
  33. static db_open(char *filename);
  34. static db_read(char **ptrs, int n_ptrs);
  35. static db_close(void);
  36.  
  37. /*******************************************************************
  38.  *        D B _ F I N D
  39.  *        -------------
  40.  *
  41.  * Description:
  42.  *    Lookup user in database.
  43.  *
  44.  * Arguments:
  45.  *    filename    - Name of users database.
  46.  *    ptrs        - Pointers to result vectors.
  47.  *    n_ptrs        - Number of vectors.
  48.  *    key_fiels    - Key-field index.
  49.  *     key        - Value to match.
  50.  *
  51.  * Return:
  52.  *    E_OK
  53.  *    E_FAIL        - Internal error.
  54.  *    E_NOTFOUND    - Key not found.
  55.  *
  56.  *******************************************************************/
  57. db_find(char *filename, char **ptrs, int n_ptrs, int key_field, char *key)
  58. {
  59.     if (key == NULL) {
  60.     logerr("db_find: programming error: null-key");
  61.     return E_FAIL;
  62.     }
  63.  
  64.     if (key_field >= n_ptrs) {
  65.     logerr("db_find: programming error: key_field >= n_ptrs");
  66.     }
  67.  
  68.     if (db_open(filename) != E_OK) {
  69.     return E_FAIL;
  70.     }
  71.     
  72.     while(db_read(ptrs, n_ptrs) == E_OK)
  73.     {
  74.     if (ptrs[key_field] != NULL && strcmp(ptrs[key_field], key) == 0)
  75.     {
  76.         db_close();
  77.         return E_OK;
  78.     }
  79.     }
  80.  
  81.     db_close();
  82.     return E_NOTFOUND;
  83. }
  84.  
  85. /*******************************************************************
  86.  *        D B _ R E A D
  87.  *        -------------
  88.  *
  89.  * Description:
  90.  *    Read one row in users database.
  91.  *
  92.  * Arguments:
  93.  *    ptrs    - Pointers to result vectors.
  94.  *    n_ptrs    - Number of verctors.
  95.  *
  96.  * Return:
  97.  *     E_OK    
  98.  *    E_EOF    - No more users.
  99.  *
  100.  *******************************************************************/
  101. static db_read(char **ptrs, int n_ptrs) 
  102. {
  103.     static char in_line[NAME_SIZE];
  104.     char *p;
  105.     int i;
  106.  
  107.     while (fgets(in_line, sizeof in_line, db_fp) != NULL)
  108.     {
  109.     p = strtok(in_line, ":\n");
  110.  
  111.     for(i = 0; i < n_ptrs; i++) {
  112.         ptrs[i] = p;
  113.         if (p != NULL) p = strtok(NULL, ":\n");
  114.     }
  115.     if (ptrs[0] == NULL || ptrs[0][0] == '#') continue;
  116.  
  117.     return E_OK;
  118.     }
  119.  
  120.     return E_EOF;
  121. }
  122.  
  123. /*******************************************************************
  124.  *        D B _ O P E N
  125.  *        -------------
  126.  *
  127.  * Description:
  128.  *    Open the users database.
  129.  *
  130.  * Arguments:
  131.  *    filename    - the users database filename.
  132.  *
  133.  *******************************************************************/
  134. static db_open(char *filename)
  135. {
  136.     if ((db_fp = fopen(filename, "r")) == NULL) {
  137.          logerr("db_open: failed to open user database");
  138.          return E_FAIL;
  139.     }
  140.  
  141.     return E_OK;
  142. }
  143.  
  144. /*******************************************************************
  145.  *        D B _ C L O S E
  146.  *        ---------------
  147.  *
  148.  * Description:
  149.  *    Close the users database.
  150.  *
  151.  *******************************************************************/
  152. static db_close(void)
  153. {
  154.     if (db_fp) fclose(db_fp);
  155.     db_fp = NULL;
  156.  
  157.     return E_OK;
  158. }
  159.