version 1.1.2.3, 2012/09/19 12:04:44
|
version 1.1.2.11, 2012/09/19 14:07:20
|
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 107 cfg_findPasswdBy(pwd_root_t * __restrict pwd, int crit
|
Line 109 cfg_findPasswdBy(pwd_root_t * __restrict pwd, int crit
|
} |
} |
break; |
break; |
case PWD_CRIT_UID: |
case PWD_CRIT_UID: |
if (AIT_GET_U32(&u->usr_uid) == AIT_GET_U32(&v)) { | if ((u_int) AIT_RAW(&u->usr_uid) == AIT_GET_U32(&v)) { |
AIT_FREE_VAL(&v); |
AIT_FREE_VAL(&v); |
return u; |
return u; |
} |
} |
break; |
break; |
case PWD_CRIT_GID: |
case PWD_CRIT_GID: |
if (AIT_GET_U32(&u->usr_gid) == AIT_GET_U32(&v)) { | if ((u_int) AIT_RAW(&u->usr_gid) == AIT_GET_U32(&v)) { |
AIT_FREE_VAL(&v); |
AIT_FREE_VAL(&v); |
return u; |
return u; |
} |
} |
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); |