--- libaitcfg/src/pq.c 2012/09/19 11:47:39 1.1.2.2 +++ libaitcfg/src/pq.c 2012/09/19 12:25:16 1.1.2.6 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: pq.c,v 1.1.2.2 2012/09/19 11:47:39 misho Exp $ +* $Id: pq.c,v 1.1.2.6 2012/09/19 12:25:16 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -61,7 +61,7 @@ _selectPasswd(pwd_root_t * __restrict pwd, u_int uid, return RB_FIND(tagPWD, pwd, &fu); } - return cfg_findPasswdBy(pwd, PWD_CRIT_UID, uid); + return (struct tagUser*) cfg_findPasswdBy(pwd, PWD_CRIT_UID, uid); } /* --------------------------------------------------------------- */ @@ -74,7 +74,7 @@ _selectPasswd(pwd_root_t * __restrict pwd, u_int uid, * @arg1 = Username | UID | GID * return: NULL not found item or error and !=NULL found item */ -struct tagUser * +const struct tagUser * cfg_findPasswdBy(pwd_root_t * __restrict pwd, int criteria, ...) { struct tagUser *u; @@ -83,6 +83,8 @@ cfg_findPasswdBy(pwd_root_t * __restrict pwd, int crit if (!pwd) return NULL; + else + AIT_INIT_VAL(&v); va_start(lst, criteria); switch (criteria) { @@ -107,13 +109,13 @@ cfg_findPasswdBy(pwd_root_t * __restrict pwd, int crit } break; case PWD_CRIT_UID: - if (AIT_GET_U32(&u->usr_uid) == AIT_GET_U32(&v)) { + if (AIT_GET_LIKE(&u->usr_uid, u_int) == AIT_GET_U32(&v)) { AIT_FREE_VAL(&v); return u; } break; case PWD_CRIT_GID: - if (AIT_GET_U32(&u->usr_gid) == AIT_GET_U32(&v)) { + if (AIT_GET_LIKE(&u->usr_gid, u_int) == AIT_GET_U32(&v)) { AIT_FREE_VAL(&v); return u; } @@ -276,6 +278,7 @@ cfg_getPasswd(pwd_root_t * __restrict pwd, int criteri { struct tagUser *u; va_list lst; + char *str; if (!pwd) return NULL; @@ -283,7 +286,11 @@ cfg_getPasswd(pwd_root_t * __restrict pwd, int criteri va_start(lst, criteria); switch (criteria) { 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; case PWD_CRIT_UID: u = _selectPasswd(pwd, va_arg(lst, u_int), NULL);