Diff for /libaitcfg/src/aitcfg.c between versions 1.5 and 1.8

version 1.5, 2012/04/04 13:11:49 version 1.8, 2012/09/19 15:22:32
Line 45  SUCH DAMAGE. Line 45  SUCH DAMAGE.
 */  */
 #include "global.h"  #include "global.h"
 #include "aitcfg.h"  #include "aitcfg.h"
   #include "aitpwd.h"
   
   
 #pragma GCC visibility push(hidden)  #pragma GCC visibility push(hidden)
Line 53  int cfg_Errno; Line 54  int cfg_Errno;
 char cfg_Error[STRSIZ];  char cfg_Error[STRSIZ];
   
 inline int  inline int
   cfg_Write(FILE *f, char *fmt, ...)
   {
           int ret = 0;
           va_list lst;
   
           va_start(lst, fmt);
           ret = vfprintf(f, fmt, lst);
           va_end(lst);
   
           return ret;
   }
   
   inline int
 cfg_tree_cmp(struct tagCfg *a, struct tagCfg *b)  cfg_tree_cmp(struct tagCfg *a, struct tagCfg *b)
 {  {
         int ret;          int ret;
Line 154  cfgLoadConfig(const char *cfgName, cfg_root_t * __rest Line 168  cfgLoadConfig(const char *cfgName, cfg_root_t * __rest
 }  }
   
 /*  /*
 * cfgUnloadConfig() - Unload config from memory and free resources * cfgClearConfig() - Clear config and free resources
  *   *
  * @cfg = Config root   * @cfg = Config root
  * return: none   * return: none
  */   */
 void  void
cfgUnloadConfig(cfg_root_t * __restrict cfg)cfgClearConfig(cfg_root_t * __restrict cfg)
 {  {
         struct tagCfg *av;          struct tagCfg *av;
   
Line 174  cfgUnloadConfig(cfg_root_t * __restrict cfg) Line 188  cfgUnloadConfig(cfg_root_t * __restrict cfg)
                 AIT_FREE_VAL(&av->cfg_val);                  AIT_FREE_VAL(&av->cfg_val);
                 AIT_FREE_VAL(&av->cfg_attr);                  AIT_FREE_VAL(&av->cfg_attr);
                 AIT_FREE_VAL(&av->cfg_sec);                  AIT_FREE_VAL(&av->cfg_sec);
                free(av);                io_free(av);
         }          }
         cfg->rbh_root = NULL;          cfg->rbh_root = NULL;
         CFG_RC_UNLOCK(cfg);          CFG_RC_UNLOCK(cfg);
   }
   
   /*
    * cfgUnloadConfig() - Unload config from memory and destroy resources
    *
    * @cfg = Config root
    * return: none
    */
   void
   cfgUnloadConfig(cfg_root_t * __restrict cfg)
   {
           if (!cfg)
                   return;
   
           cfgClearConfig(cfg);
         pthread_mutex_destroy(&cfg->rc_mtx);          pthread_mutex_destroy(&cfg->rc_mtx);
 }  }
   
Line 206  cfgCreateConfig(const char *csConfigName, cfg_root_t * Line 234  cfgCreateConfig(const char *csConfigName, cfg_root_t *
         }          }
                   
         ret = cfgWriteConfig(f, cfg, whitespace);          ret = cfgWriteConfig(f, cfg, whitespace);
   
           fclose(f);
           return ret;
   }
   
   /*
    * cfgInitPasswd() - Init password root
    *
    * @pwd = Password root
    * return: -1 error or 0 ok
    */
   int
   cfgInitPasswd(pwd_root_t * __restrict pwd)
   {
           if (!pwd)
                   return -1;
   
           pthread_mutex_init(&pwd->pwd_mtx, NULL);
   
           SLIST_INIT(pwd);
           RB_INIT(pwd);
           return 0;
   }
   
   /*
    * cfgLoadPasswd() - Load passwords from file
    *
    * @pwdName = Passwords filename
    * @pwd = Password root
    * return: -1 error or 0 ok
    */
   int
   cfgLoadPasswd(const char *pwdName, pwd_root_t * __restrict pwd)
   {
           FILE *f;
           int ret;
   
           if (!pwdName || !pwd) {
                   cfg_SetErr(EINVAL, "Invalid parameter(s)");
                   return -1;
           } else
                   cfgInitPasswd(pwd);
   
           f = fopen(pwdName, "r");
           if (!f) {
                   LOGERR;
                   return -1;
           }
   
           ret = cfgReadPasswd(f, pwd);
   
           fclose(f);
           return ret;
   }
   
   /*
    * cfgClearPasswd() - Clear passwords and free resources
    *
    * @cfg = Password root
    * return: none
    */
   void
   cfgClearPasswd(pwd_root_t * __restrict pwd)
   {
           struct tagUser *p;
   
           if (!pwd)
                   return;
   
           PWD_LOCK(pwd);
           while ((p = SLIST_FIRST(pwd))) {
                   SLIST_REMOVE_HEAD(pwd, usr_next);
   
                   AIT_FREE_VAL(&p->usr_name);
                   AIT_FREE_VAL(&p->usr_pass);
                   AIT_FREE_VAL(&p->usr_uid);
                   AIT_FREE_VAL(&p->usr_gid);
                   AIT_FREE_VAL(&p->usr_class);
                   AIT_FREE_VAL(&p->usr_change);
                   AIT_FREE_VAL(&p->usr_expire);
                   AIT_FREE_VAL(&p->usr_realm);
                   AIT_FREE_VAL(&p->usr_home);
                   AIT_FREE_VAL(&p->usr_shell);
                   io_free(p);
           }
           pwd->rbh_root = NULL;
           PWD_UNLOCK(pwd);
   }
   
   /*
    * cfgUnloadPasswd() - Unload passwords from memory and destroy resources
    *
    * @pwd = Password root
    * return: none
    */
   void
   cfgUnloadPasswd(pwd_root_t * __restrict pwd)
   {
           if (!pwd)
                   return;
   
           cfgClearPasswd(pwd);
           pthread_mutex_destroy(&pwd->pwd_mtx);
   }
   
   /*
    * cfgCreatePasswd() - Create password file from memory
    *
    * @pwdName = New password filename
    * @pwd = Password root
    * return: -1 error or 0 ok
    */
   int
   cfgCreatePasswd(const char *pwdName, pwd_root_t * __restrict pwd)
   {
           FILE *f;
           int ret;
   
           if (!pwdName || !pwd)
                   return -1;
   
           f = fopen(pwdName, "w");
           if (!f) {
                   LOGERR;
                   return -1;
           }
           
           ret = cfgWritePasswd(f, pwd);
   
         fclose(f);          fclose(f);
         return ret;          return ret;

Removed from v.1.5  
changed lines
  Added in v.1.8


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>