Diff for /libaitcfg/src/pq.c between versions 1.1.2.4 and 1.1.2.10

version 1.1.2.4, 2012/09/19 12:07:23 version 1.1.2.10, 2012/09/19 13:30:46
Line 83  cfg_findPasswdBy(pwd_root_t * __restrict pwd, int crit Line 83  cfg_findPasswdBy(pwd_root_t * __restrict pwd, int crit
   
         if (!pwd)          if (!pwd)
                 return NULL;                  return NULL;
           else
                   AIT_INIT_VAL(&v);
   
         va_start(lst, criteria);          va_start(lst, criteria);
         switch (criteria) {          switch (criteria) {
Line 135  cfg_findPasswdBy(pwd_root_t * __restrict pwd, int crit Line 137  cfg_findPasswdBy(pwd_root_t * __restrict pwd, int crit
 int  int
 cfg_unsetPasswd(pwd_root_t * __restrict pwd, int criteria, ...)  cfg_unsetPasswd(pwd_root_t * __restrict pwd, int criteria, ...)
 {  {
        struct tagUser *u;        struct tagUser *u, *u2;
         va_list lst;          va_list lst;
           u_int n = 0;
           char *name = NULL;
   
         if (!pwd)          if (!pwd)
                 return -1;                  return -1;
   
         va_start(lst, criteria);          va_start(lst, criteria);
         switch (criteria) {          switch (criteria) {
                 case PWD_CRIT_NAME:  
                         u = _selectPasswd(pwd, 0, va_arg(lst, char*));  
                         break;  
                 case PWD_CRIT_UID:                  case PWD_CRIT_UID:
                        u = _selectPasswd(pwd, va_arg(lst, u_int), NULL);                        n = va_arg(lst, u_int);
                         break;                          break;
                   case PWD_CRIT_NAME:
                           name = va_arg(lst, char*);
                           if (name)
                                   break;
                 default:                  default:
                         va_end(lst);                          va_end(lst);
                         return -1;                          return -1;
         }          }
         va_end(lst);          va_end(lst);
   
           u = _selectPasswd(pwd, n, name);
         if (!u)          if (!u)
                 return 0;                  return 0;
   
         PWD_LOCK(pwd);          PWD_LOCK(pwd);
         RB_REMOVE(tagPWD, pwd, u);          RB_REMOVE(tagPWD, pwd, u);
         SLIST_REMOVE(pwd, u, tagUser, usr_next);          SLIST_REMOVE(pwd, u, tagUser, usr_next);
   
           /* if duplicates exists, then update r/b tree */
           SLIST_FOREACH(u2, pwd, usr_next)
                   if (!AIT_ISEMPTY(&u2->usr_name) && 
                                   !strcmp(AIT_GET_STR(&u->usr_name), AIT_GET_STR(&u2->usr_name))) {
                           RB_INSERT(tagPWD, pwd, u2);
                           break;
                   }
         PWD_UNLOCK(pwd);          PWD_UNLOCK(pwd);
   
         AIT_FREE_VAL(&u->usr_name);          AIT_FREE_VAL(&u->usr_name);
Line 180  cfg_unsetPasswd(pwd_root_t * __restrict pwd, int crite Line 195  cfg_unsetPasswd(pwd_root_t * __restrict pwd, int crite
  * cfg_setPasswd() - Set item in password or adding new item if not exists   * cfg_setPasswd() - Set item in password or adding new item if not exists
  *   *
  * @cfg = Password root   * @cfg = Password root
    * @fields = Meaning continuous field
  * @csName = Username   * @csName = Username
 * @csPass = Password * @arg1 = Password
 * @uid = UID * @arg2 = UID
 * @gid = GID * @arg3 = GID
 * @Class = Login class * @arg4 = Login class
 * @change = Chage date * @arg5 = Chage date
 * @expire = Expire date * @arg6 = Expire date
 * @csRealm = Realm * @arg7 = Realm
 * @csHome = Home dir * @arg8 = Home dir
 * @csShell = Shell * @arg9 = Shell
  * return: 0 nothing changed, -1 error, 1 found and updated item or 2 added new item   * return: 0 nothing changed, -1 error, 1 found and updated item or 2 added new item
  */   */
 int  int
cfg_setPasswd(pwd_root_t * __restrict pwd, const char *csName, const char *csPass, cfg_setPasswd(pwd_root_t * __restrict pwd, u_char fields, const char *csName, ...) 
                u_int uid, u_int gid, const char *csClass, u_int change, u_int expire,  
                const char *csRealm, const char *csHome, const char *csShell) 
 {  {
         struct tagUser *u;          struct tagUser *u;
           register int i;
           va_list lst;
   
         if (!pwd || !csName)          if (!pwd || !csName)
                 return -1;                  return -1;
Line 211  cfg_setPasswd(pwd_root_t * __restrict pwd, const char  Line 227  cfg_setPasswd(pwd_root_t * __restrict pwd, const char 
                         return -1;                          return -1;
                 } else {                  } else {
                         memset(u, 0, sizeof(struct tagUser));                          memset(u, 0, sizeof(struct tagUser));
                           if (fields && fields < PWD_MAX_FIELDS)
                                   u->usr_fields = fields;
                           else
                                   u->usr_fields = PWD_MAX_FIELDS - 1;
   
                         PWD_LOCK(pwd);                          PWD_LOCK(pwd);
                         SLIST_INSERT_HEAD(pwd, u, usr_next);                          SLIST_INSERT_HEAD(pwd, u, usr_next);
                         PWD_UNLOCK(pwd);                          PWD_UNLOCK(pwd);
                 }                  }
   
                AIT_SET_STR(&u->usr_name, csName);                va_start(lst, csName);
                AIT_SET_STR(&u->usr_pass, csPass);                for (i = 0; i < (u->usr_fields + 1); i++)
                AIT_SET_U32(&u->usr_uid, uid);                        switch (i) {
                AIT_SET_U32(&u->usr_gid, gid);                                case 0:
                AIT_SET_STR(&u->usr_class, csClass);                                        AIT_SET_STR(&u->usr_name, csName);
                AIT_SET_U32(&u->usr_change, change);                                        break;
                AIT_SET_U32(&u->usr_expire, expire);                                case 1:
                AIT_SET_STR(&u->usr_realm, csRealm);                                        AIT_SET_STR(&u->usr_pass, va_arg(lst, char*));
                AIT_SET_STR(&u->usr_home, csHome);                                        break;
                AIT_SET_STR(&u->usr_shell, csShell);                                case 2:
                                         AIT_SET_U32(&u->usr_uid, va_arg(lst, u_int));
                                         break;
                                 case 3:
                                         AIT_SET_U32(&u->usr_gid, va_arg(lst, u_int));
                                         break;
                                 case 4:
                                         AIT_SET_STR(&u->usr_class, va_arg(lst, char*));
                                         break;
                                 case 5:
                                         AIT_SET_U32(&u->usr_change, va_arg(lst, u_int));
                                         break;
                                 case 6:
                                         AIT_SET_U32(&u->usr_expire, va_arg(lst, u_int));
                                         break;
                                 case 7:
                                         AIT_SET_STR(&u->usr_realm, va_arg(lst, char*));
                                         break;
                                 case 8:
                                         AIT_SET_STR(&u->usr_home, va_arg(lst, char*));
                                         break;
                                 case 9:
                                         AIT_SET_STR(&u->usr_shell, va_arg(lst, char*));
                                         break;
                         }
                 va_end(lst);
   
                 AIT_KEY(&u->usr_name) = crcFletcher16(AIT_GET_LIKE(&u->usr_name, u_short*),                   AIT_KEY(&u->usr_name) = crcFletcher16(AIT_GET_LIKE(&u->usr_name, u_short*), 
                                 io_align(AIT_LEN(&u->usr_name) - 1, 2) / 2);                                  io_align(AIT_LEN(&u->usr_name) - 1, 2) / 2);
Line 247  cfg_setPasswd(pwd_root_t * __restrict pwd, const char  Line 292  cfg_setPasswd(pwd_root_t * __restrict pwd, const char 
                 AIT_FREE_VAL(&u->usr_shell);                  AIT_FREE_VAL(&u->usr_shell);
   
                 /* Update element */                  /* Update element */
                AIT_SET_STR(&u->usr_pass, csPass);                va_start(lst, csName);
                AIT_SET_U32(&u->usr_uid, uid);                for (i = 1; i < (u->usr_fields + 1); i++)
                AIT_SET_U32(&u->usr_gid, gid);                        switch (i) {
                AIT_SET_STR(&u->usr_class, csClass);                                case 1:
                AIT_SET_U32(&u->usr_change, change);                                        AIT_SET_STR(&u->usr_pass, va_arg(lst, char*));
                AIT_SET_U32(&u->usr_expire, expire);                                        break;
                AIT_SET_STR(&u->usr_realm, csRealm);                                case 2:
                AIT_SET_STR(&u->usr_home, csHome);                                        AIT_SET_U32(&u->usr_uid, va_arg(lst, u_int));
                AIT_SET_STR(&u->usr_shell, csShell);                                        break;
                                 case 3:
                                         AIT_SET_U32(&u->usr_gid, va_arg(lst, u_int));
                                         break;
                                 case 4:
                                         AIT_SET_STR(&u->usr_class, va_arg(lst, char*));
                                         break;
                                 case 5:
                                         AIT_SET_U32(&u->usr_change, va_arg(lst, u_int));
                                         break;
                                 case 6:
                                         AIT_SET_U32(&u->usr_expire, va_arg(lst, u_int));
                                         break;
                                 case 7:
                                         AIT_SET_STR(&u->usr_realm, va_arg(lst, char*));
                                         break;
                                 case 8:
                                         AIT_SET_STR(&u->usr_home, va_arg(lst, char*));
                                         break;
                                 case 9:
                                         AIT_SET_STR(&u->usr_shell, va_arg(lst, char*));
                                         break;
                         }
                 va_end(lst);
                 return 1;                  return 1;
         }          }
   
Line 276  cfg_getPasswd(pwd_root_t * __restrict pwd, int criteri Line 344  cfg_getPasswd(pwd_root_t * __restrict pwd, int criteri
 {  {
         struct tagUser *u;          struct tagUser *u;
         va_list lst;          va_list lst;
           char *str;
   
         if (!pwd)          if (!pwd)
                 return NULL;                  return NULL;
Line 283  cfg_getPasswd(pwd_root_t * __restrict pwd, int criteri Line 352  cfg_getPasswd(pwd_root_t * __restrict pwd, int criteri
         va_start(lst, criteria);          va_start(lst, criteria);
         switch (criteria) {          switch (criteria) {
                 case PWD_CRIT_NAME:                  case PWD_CRIT_NAME:
                        u = _selectPasswd(pwd, 0, va_arg(lst, char*));                        str = va_arg(lst, char*);
                         if (!str)
                                 u = NULL;
                         else
                                 u = _selectPasswd(pwd, 0, str);
                         break;                          break;
                 case PWD_CRIT_UID:                  case PWD_CRIT_UID:
                         u = _selectPasswd(pwd, va_arg(lst, u_int), NULL);                          u = _selectPasswd(pwd, va_arg(lst, u_int), NULL);

Removed from v.1.1.2.4  
changed lines
  Added in v.1.1.2.10


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