#define RIDPREFIX "RID_"
extern int DEBUGLEVEL;
-extern pstring samlogon_user;
-extern BOOL sam_logon_in_ssb;
struct tdb_enum_info {
TDB_CONTEXT *passwd_tdb;
uint32 len = 0;
uint32 lmpwlen, ntpwlen, hourslen;
BOOL ret = True;
+
+ if(sampass == NULL || buf == NULL) {
+ DEBUG(0, ("init_sam_from_buffer: NULL parameters found!\n"));
+ return False;
+ }
/* unpack the buffer into variables */
len = tdb_unpack (buf, buflen, TDB_FORMAT_STRING,
pdb_set_domain (sampass, domain_len?domain:NULL);
pdb_set_nt_username (sampass, nt_username_len?nt_username:NULL);
pdb_set_fullname (sampass, fullname_len?fullname:NULL);
- pdb_set_homedir (sampass, homedir_len?homedir:NULL);
- pdb_set_dir_drive (sampass, dir_drive_len?dir_drive:NULL);
- pdb_set_logon_script (sampass, logon_script_len?logon_script:NULL);
- pdb_set_profile_path (sampass, profile_path_len?profile_path:NULL);
+ pdb_set_homedir (sampass, homedir_len?homedir:NULL, True);
+ pdb_set_dir_drive (sampass, dir_drive_len?dir_drive:NULL, True);
+ pdb_set_logon_script (sampass, logon_script_len?logon_script:NULL, True);
+ pdb_set_profile_path (sampass, profile_path_len?profile_path:NULL, True);
pdb_set_acct_desc (sampass, acct_desc_len?acct_desc:NULL);
pdb_set_workstations (sampass, workstations_len?workstations:NULL);
pdb_set_munged_dial (sampass, munged_dial_len?munged_dial:NULL);
- pdb_set_lanman_passwd(sampass, lmpwlen?lm_pw_ptr:NULL);
- pdb_set_nt_passwd (sampass, ntpwlen?nt_pw_ptr:NULL);
+ if (!pdb_set_lanman_passwd(sampass, lmpwlen?lm_pw_ptr:NULL)) {
+ ret = False;
+ goto done;
+ }
+ if (!pdb_set_nt_passwd(sampass, ntpwlen?nt_pw_ptr:NULL)) {
+ ret = False;
+ goto done;
+ }
/*pdb_set_uid(sampass, uid);
pdb_set_gid(sampass, gid);*/
pdb_set_unknown_5(sampass, unknown_5);
pdb_set_unknown_6(sampass, unknown_6);
pdb_set_acct_ctrl(sampass, acct_ctrl);
- pdb_set_logons_divs(sampass, logon_divs);
+ pdb_set_logon_divs(sampass, logon_divs);
pdb_set_hours(sampass, hours);
done:
uint32 nt_pw_len = 16;
/* do we have a valid SAM_ACCOUNT pointer? */
- if (sampass == NULL)
+ if (sampass == NULL) {
+ DEBUG(0, ("init_buffer_from_sam: SAM_ACCOUNT is NULL!\n"));
return -1;
-
+ }
+
*buf = NULL;
buflen = 0;
global_tdb_ent.passwd_tdb = NULL;
}
- DEBUG(7, ("endtdbpwent: closed password file.\n"));
+ DEBUG(7, ("endtdbpwent: closed sam database.\n"));
}
/*****************************************************************
char *prefix = USERPREFIX;
int prefixlen = strlen (prefix);
+ const char *sam_user;
+ pstring sam_subst;
+
if (user==NULL) {
DEBUG(0,("pdb_get_sampwent: SAM_ACCOUNT is NULL.\n"));
return False;
}
- /* skip all RID entries */
- while ((global_tdb_ent.key.dsize != 0) && (strncmp (global_tdb_ent.key.dptr, prefix, prefixlen)))
+ /* skip all non-USER entries (eg. RIDs) */
+ while ((global_tdb_ent.key.dsize != 0) && (strncmp(global_tdb_ent.key.dptr, prefix, prefixlen)))
/* increment to next in line */
- global_tdb_ent.key = tdb_nextkey (global_tdb_ent.passwd_tdb, global_tdb_ent.key);
+ global_tdb_ent.key = tdb_nextkey(global_tdb_ent.passwd_tdb, global_tdb_ent.key);
/* do we have an valid interation pointer? */
if(global_tdb_ent.passwd_tdb == NULL) {
return False;
}
- data = tdb_fetch (global_tdb_ent.passwd_tdb, global_tdb_ent.key);
+ data = tdb_fetch(global_tdb_ent.passwd_tdb, global_tdb_ent.key);
if (!data.dptr) {
DEBUG(5,("pdb_getsampwent: database entry not found.\n"));
return False;
}
/* unpack the buffer */
- if (!init_sam_from_buffer (user, data.dptr, data.dsize)) {
+ if (!init_sam_from_buffer(user, data.dptr, data.dsize)) {
DEBUG(0,("pdb_getsampwent: Bad SAM_ACCOUNT entry returned from TDB!\n"));
SAFE_FREE(data.dptr);
return False;
uid = pw->pw_uid;
gid = pw->pw_gid;
- pdb_set_uid (user, &uid);
- pdb_set_gid (user, &gid);
+ pdb_set_uid(user, uid);
+ pdb_set_gid(user, gid);
+
+ /* 21 days from present */
+ pdb_set_pass_must_change_time(user, time(NULL)+1814400);
+
+ sam_user = pdb_get_username(user);
+ pstrcpy(sam_subst, pdb_get_logon_script(user));
+ standard_sub_advanced(-1, sam_user, "", gid, sam_user, sam_subst);
+ pdb_set_logon_script(user, sam_subst, True);
+ pstrcpy(sam_subst, pdb_get_profile_path(user));
+ standard_sub_advanced(-1, pdb_get_username(user), "", gid, pdb_get_username(user), sam_subst);
+ pdb_set_profile_path(user, sam_subst, True);
+ pstrcpy(sam_subst, pdb_get_homedir(user));
+ standard_sub_advanced(-1, pdb_get_username(user), "", gid, pdb_get_username(user), sam_subst);
+ pdb_set_homedir(user, sam_subst, True);
/* increment to next in line */
- global_tdb_ent.key = tdb_nextkey (global_tdb_ent.passwd_tdb, global_tdb_ent.key);
+ global_tdb_ent.key = tdb_nextkey(global_tdb_ent.passwd_tdb, global_tdb_ent.key);
return True;
}
uid_t uid;
gid_t gid;
+ const char *sam_user;
+ pstring sam_subst;
if (user==NULL) {
DEBUG(0,("pdb_getsampwnam: SAM_ACCOUNT is NULL.\n"));
unix_strlower(sname, -1, name, sizeof(name));
get_private_directory(tdbfile);
- pstrcat (tdbfile, PASSDB_FILE_NAME);
+ pstrcat(tdbfile, PASSDB_FILE_NAME);
/* set search key */
slprintf(keystr, sizeof(keystr)-1, "%s%s", USERPREFIX, name);
key.dptr = keystr;
- key.dsize = strlen (keystr) + 1;
+ key.dsize = strlen(keystr) + 1;
/* open the accounts TDB */
if (!(pwd_tdb = tdb_open_log(tdbfile, 0, TDB_DEFAULT, O_RDONLY, 0600))) {
}
/* get the record */
- data = tdb_fetch (pwd_tdb, key);
+ data = tdb_fetch(pwd_tdb, key);
if (!data.dptr) {
DEBUG(5,("pdb_getsampwnam (TDB): error fetching database.\n"));
DEBUGADD(5, (" Error: %s\n", tdb_errorstr(pwd_tdb)));
- tdb_close (pwd_tdb);
+ tdb_close(pwd_tdb);
return False;
}
/* unpack the buffer */
- if (!init_sam_from_buffer (user, data.dptr, data.dsize)) {
+ if (!init_sam_from_buffer(user, data.dptr, data.dsize)) {
DEBUG(0,("pdb_getsampwent: Bad SAM_ACCOUNT entry returned from TDB!\n"));
SAFE_FREE(data.dptr);
+ tdb_close(pwd_tdb);
return False;
}
SAFE_FREE(data.dptr);
+
+ /* no further use for database, close it now */
+ tdb_close(pwd_tdb);
/* validate the account and fill in UNIX uid and gid. sys_getpwnam()
- is used instaed of Get_Pwnam() as we do not need to try case
+ is used instead of Get_Pwnam() as we do not need to try case
permutations */
if ((pw=sys_getpwnam(pdb_get_username(user)))) {
uid = pw->pw_uid;
gid = pw->pw_gid;
- pdb_set_uid (user, &uid);
- pdb_set_gid (user, &gid);
+ pdb_set_uid(user, uid);
+ pdb_set_gid(user, gid);
+
+ /* 21 days from present */
+ pdb_set_pass_must_change_time(user, time(NULL)+1814400);
+
+ sam_user = pdb_get_username(user);
+ pstrcpy(sam_subst, pdb_get_logon_script(user));
+ standard_sub_advanced(-1, sam_user, "", gid, sam_user, sam_subst);
+ pdb_set_logon_script(user, sam_subst, True);
+ pstrcpy(sam_subst, pdb_get_profile_path(user));
+ standard_sub_advanced(-1, pdb_get_username(user), "", gid, pdb_get_username(user), sam_subst);
+ pdb_set_profile_path(user, sam_subst, True);
+ pstrcpy(sam_subst, pdb_get_homedir(user));
+ standard_sub_advanced(-1, pdb_get_username(user), "", gid, pdb_get_username(user), sam_subst);
+ pdb_set_homedir(user, sam_subst, True);
}
-
- /* cleanup */
- tdb_close (pwd_tdb);
-
- return True;
-}
-
-/***************************************************************************
- Search by uid
- **************************************************************************/
-
-BOOL pdb_getsampwuid (SAM_ACCOUNT* user, uid_t uid)
-{
- struct passwd *pw;
- fstring name;
-
- if (user==NULL) {
- DEBUG(0,("pdb_getsampwuid: SAM_ACCOUNT is NULL.\n"));
- return False;
- }
-
- pw = sys_getpwuid(uid);
- if (pw == NULL) {
- DEBUG(0,("pdb_getsampwuid: getpwuid(%d) return NULL. User does not exist!\n", uid));
+ else {
+ DEBUG(0,("pdb_getsampwent: getpwnam(%s) return NULL. User does not exist!\n",
+ pdb_get_username(user)));
return False;
}
- fstrcpy (name, pw->pw_name);
-
- return pdb_getsampwnam (user, name);
+ return True;
}
/***************************************************************************
}
/* unpack the buffer */
- if (!pdb_init_sam (&sam_pass)) {
+ if (!NT_STATUS_IS_OK(pdb_init_sam (&sam_pass))) {
tdb_close (pwd_tdb);
return False;
}