--- libaitcfg/src/pq.c 2012/09/19 12:04:44 1.1.2.3 +++ libaitcfg/src/pq.c 2012/09/19 12:35:10 1.1.2.7 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: pq.c,v 1.1.2.3 2012/09/19 12:04:44 misho Exp $ +* $Id: pq.c,v 1.1.2.7 2012/09/19 12:35:10 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -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; } @@ -180,6 +182,7 @@ cfg_unsetPasswd(pwd_root_t * __restrict pwd, int crite * cfg_setPasswd() - Set item in password or adding new item if not exists * * @cfg = Password root + * @fields = Meaning continuous field * @csName = Username * @csPass = Password * @uid = UID @@ -193,7 +196,7 @@ cfg_unsetPasswd(pwd_root_t * __restrict pwd, int crite * return: 0 nothing changed, -1 error, 1 found and updated item or 2 added new item */ 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, const char *csPass, u_int uid, u_int gid, const char *csClass, u_int change, u_int expire, const char *csRealm, const char *csHome, const char *csShell) { @@ -211,6 +214,10 @@ cfg_setPasswd(pwd_root_t * __restrict pwd, const char return -1; } else { 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); SLIST_INSERT_HEAD(pwd, u, usr_next); @@ -276,6 +283,7 @@ cfg_getPasswd(pwd_root_t * __restrict pwd, int criteri { struct tagUser *u; va_list lst; + char *str; if (!pwd) return NULL; @@ -283,7 +291,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);