--- libaitcfg/src/pq.c 2012/09/19 12:35:10 1.1.2.7 +++ libaitcfg/src/pq.c 2012/09/19 13:02:58 1.1.2.8 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: pq.c,v 1.1.2.7 2012/09/19 12:35:10 misho Exp $ +* $Id: pq.c,v 1.1.2.8 2012/09/19 13:02:58 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -184,23 +184,23 @@ cfg_unsetPasswd(pwd_root_t * __restrict pwd, int crite * @cfg = Password root * @fields = Meaning continuous field * @csName = Username - * @csPass = Password - * @uid = UID - * @gid = GID - * @Class = Login class - * @change = Chage date - * @expire = Expire date - * @csRealm = Realm - * @csHome = Home dir - * @csShell = Shell + * @arg1 = Password + * @arg2 = UID + * @arg3 = GID + * @arg4 = Login class + * @arg5 = Chage date + * @arg6 = Expire date + * @arg7 = Realm + * @arg8 = Home dir + * @arg9 = Shell * return: 0 nothing changed, -1 error, 1 found and updated item or 2 added new item */ int -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) +cfg_setPasswd(pwd_root_t * __restrict pwd, u_char fields, const char *csName, ...) { struct tagUser *u; + register int i; + va_list lst; if (!pwd || !csName) return -1; @@ -224,16 +224,41 @@ cfg_setPasswd(pwd_root_t * __restrict pwd, u_char fiel PWD_UNLOCK(pwd); } - AIT_SET_STR(&u->usr_name, csName); - AIT_SET_STR(&u->usr_pass, csPass); - AIT_SET_U32(&u->usr_uid, uid); - AIT_SET_U32(&u->usr_gid, gid); - AIT_SET_STR(&u->usr_class, csClass); - AIT_SET_U32(&u->usr_change, change); - AIT_SET_U32(&u->usr_expire, expire); - AIT_SET_STR(&u->usr_realm, csRealm); - AIT_SET_STR(&u->usr_home, csHome); - AIT_SET_STR(&u->usr_shell, csShell); + va_start(lst, csName); + for (i = 0; i < (u->usr_fields + 1); i++) + switch (i) { + case 0: + AIT_SET_STR(&u->usr_name, va_arg(lst, char*)); + break; + case 1: + AIT_SET_STR(&u->usr_pass, va_arg(lst, char*)); + break; + 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*), io_align(AIT_LEN(&u->usr_name) - 1, 2) / 2); @@ -254,15 +279,38 @@ cfg_setPasswd(pwd_root_t * __restrict pwd, u_char fiel AIT_FREE_VAL(&u->usr_shell); /* Update element */ - AIT_SET_STR(&u->usr_pass, csPass); - AIT_SET_U32(&u->usr_uid, uid); - AIT_SET_U32(&u->usr_gid, gid); - AIT_SET_STR(&u->usr_class, csClass); - AIT_SET_U32(&u->usr_change, change); - AIT_SET_U32(&u->usr_expire, expire); - AIT_SET_STR(&u->usr_realm, csRealm); - AIT_SET_STR(&u->usr_home, csHome); - AIT_SET_STR(&u->usr_shell, csShell); + va_start(lst, csName); + for (i = 1; i < (u->usr_fields + 1); i++) + switch (i) { + case 1: + AIT_SET_STR(&u->usr_pass, va_arg(lst, char*)); + break; + 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); return 1; }