version 1.7, 2000/06/19 22:42:28 |
version 1.8, 2000/06/19 23:06:24 |
|
|
} |
} |
|
|
int |
int |
tcfspwdbr_edit (tcfspwdb **tmp, int flags, ...) |
tcfspwdbr_edit(tcfspwdb **tmp, int flags, ...) |
{ |
{ |
va_list argv; |
va_list argv; |
char *d; |
char *d; |
|
|
|
|
if (flags & F_GID) { |
if (flags & F_GID) { |
gid_t d; |
gid_t d; |
|
|
d = va_arg(argv, gid_t); |
d = va_arg(argv, gid_t); |
(*tmp)->gid = d; |
(*tmp)->gid = d; |
} |
} |
|
|
if (flags & F_MEMBERS) { |
if (flags & F_MEMBERS) { |
int d; |
int d; |
|
|
d = va_arg(argv, int); |
d = va_arg(argv, int); |
(*tmp)->n = d; |
(*tmp)->n = d; |
} |
} |
|
|
if (flags & F_THRESHOLD) { |
if (flags & F_THRESHOLD) { |
int d; |
int d; |
|
|
d = va_arg(argv, int); |
d = va_arg(argv, int); |
(*tmp)->soglia = d; |
(*tmp)->soglia = d; |
} |
} |
|
|
if (!pdb) |
if (!pdb) |
return (NULL); |
return (NULL); |
|
|
key = (char*)calloc(strlen(user)+4/*gid lenght*/+1/*null*/,sizeof(char)); |
key = (char *)calloc(strlen(user) + 4 /* gid length */ + 1 /* null */, |
|
sizeof(char)); |
if (!key) |
if (!key) |
return (NULL); |
return (NULL); |
|
|
|
|
while (dbkey.data) { |
while (dbkey.data) { |
char *tmp; |
char *tmp; |
|
|
tmp = (char*)calloc(1024, sizeof(char)); |
tmp = (char *)calloc(1024, sizeof(char)); |
|
|
sprintf(tmp, "\33%d\0", gid); |
sprintf(tmp, "\33%d\0", gid); |
if (strstr(dbkey.data, tmp)) { |
if (strstr(dbkey.data, tmp)) { |
|
|
tcfspwdb *user_info = NULL; |
tcfspwdb *user_info = NULL; |
unsigned char *key; |
unsigned char *key; |
|
|
key = (unsigned char*)calloc(UUKEYSIZE + 1, sizeof(char)); |
key = (unsigned char *)calloc(UUKEYSIZE + 1, sizeof(char)); |
|
|
if (!tcfs_getpwnam(user, &user_info)) |
if (!tcfs_getpwnam(user, &user_info)) |
return (0); |
return (0); |
|
|
int |
int |
tcfs_chgpassword(char *user, char *old, char *new) |
tcfs_chgpassword(char *user, char *old, char *new) |
{ |
{ |
int error1=0; |
int error1 = 0; |
DB *gpdb; |
DB *gpdb; |
DBT found, key; |
DBT found, key; |
unsigned char *ckey; |
unsigned char *ckey; |
|
|
ckey = (unsigned char*)calloc(UUGKEYSIZE + 1, sizeof(char)); |
ckey = (unsigned char *)calloc(UUGKEYSIZE + 1, sizeof(char)); |
if (!ckey) |
if (!ckey) |
return (0); |
return (0); |
|
|
|
|
|
|
gpdb->get(gpdb, &key, &found, 0); |
gpdb->get(gpdb, &key, &found, 0); |
|
|
if (!tcfs_decrypt_key(old, ((tcfsgpwdb *)found.data)->gkey, ckey, GKEYSIZE)) |
if (!tcfs_decrypt_key(old, ((tcfsgpwdb *)found.data)->gkey, |
|
ckey, GKEYSIZE)) |
return (0); |
return (0); |
|
|
if (!tcfs_encrypt_key(new, ckey, GKEYSIZE, ((tcfsgpwdb *)found.data)->gkey, UUGKEYSIZE + 1)) |
if (!tcfs_encrypt_key(new, ckey, GKEYSIZE, |
|
((tcfsgpwdb *)found.data)->gkey, UUGKEYSIZE + 1)) |
return (0); |
return (0); |
|
|
if (gpdb->put(gpdb, &key, &found, 0)) { |
if (gpdb->put(gpdb, &key, &found, 0)) { |