* seriously this will be secret.
*/
- pw = sys_getpwnam("root");
+ pw = getpwnam_alloc("root");
if (pw && pw->pw_passwd) {
size_t i;
unsigned char md4_tmp[16];
mdfour(md4_tmp, (unsigned char *)pw->pw_passwd, strlen(pw->pw_passwd));
for (i=0;i<16;i++)
seed_inbuf[8+i] ^= md4_tmp[i];
+ passwd_free(&pw);
}
/*
if (winbind_nametouid(&u, name))
return u;
- pass = sys_getpwnam(name);
- if (pass)
+ pass = getpwnam_alloc(name);
+ if (pass) {
return(pass->pw_uid);
+ passwd_free(&pass);
+ }
return (uid_t)-1;
}
/* These values MAY be in LDAP, but they can also be retrieved through
* sys_getpw*() which is how we're doing it
*/
- pw = getpwnam(username);
+ pw = getpwnam_alloc(username);
if (pw == NULL) {
DEBUG (2,("init_sam_from_ldap: User [%s] does not ave a uid!\n", username));
return False;
uid = pw->pw_uid;
gid = pw->pw_gid;
+ passwd_free(&pw);
+
/* FIXME: hours stuff should be cleaner */
logon_divs = 168;
if (result->status != NIS_SUCCESS || NIS_RES_NUMOBJ(result) <= 0)
{
+ struct passwd *passwd;
DEBUG(3, ("nis_list failure: %s: %s\n",
nisname, nis_sperrno(result->status)));
nis_freeresult(result);
- if (!sys_getpwnam(pdb_get_username(newpwd))) {
+ if (!passwd = getpwnam_alloc(pdb_get_username(newpwd))) {
/* no such user in system! */
return False;
}
+ passwd_free(&passwd);
+
/*
* user is defined, but not in passwd.org_dir.
*/
* getpwnam() is used instead of Get_Pwnam() as we do not need
* to try case permutations
*/
- if (!username || !(pw=getpwnam(username))) {
- DEBUG(0,("tdb_sam: getpwnam(%s) return NULL. User does not exist!\n",
+ if (!username || !(pw=getpwnam_alloc(username))) {
+ DEBUG(0,("tdb_sam: getpwnam_alloc(%s) return NULL. User does not exist!\n",
username?username:"NULL"));
ret = False;
goto done;
}
uid = pw->pw_uid;
gid = pw->pw_gid;
+
+ passwd_free(&pw);
pdb_set_uid(sampass, uid);
pdb_set_gid(sampass, gid);
ZERO_STRUCT(sam_pwent);
- if (!(pwd = sys_getpwnam(username))) {
- fprintf (stderr, "User %s does not exist in system passwd!\n", username);
- return -1;
- }
+ if (pwd = getpwnam_alloc(username)) {
- pdb_init_sam_pw (&sam_pwent, pwd);
+ pdb_init_sam_pw (&sam_pwent, pwd);
+ passwd_free(&pwd);
+ } else {
+ fprintf (stderr, "WARNING: user %s does not exist in system passwd\n", username);
+ pdb_init_sam(&sam_pwent);
+ if (!pdb_set_username(sam_pwent, username)) {
+ return False;
+ }
+ }
password1 = getpass("new password:");
password2 = getpass("retype new password:");
pdb_set_plaintext_passwd(sam_pwent, password1);
- pdb_set_username(sam_pwent, username);
if (fullname)
pdb_set_fullname(sam_pwent, fullname);
if (homedir)