summaryrefslogtreecommitdiff
path: root/source3/passdb/passdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/passdb/passdb.c')
-rw-r--r--source3/passdb/passdb.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c
index 634ea8fdac..671f18a7b0 100644
--- a/source3/passdb/passdb.c
+++ b/source3/passdb/passdb.c
@@ -130,6 +130,10 @@ BOOL pdb_init_sam(SAM_ACCOUNT **user)
BOOL pdb_init_sam_pw(SAM_ACCOUNT **new_sam_acct, struct passwd *pwd)
{
+ pstring str;
+ extern BOOL sam_logon_in_ssb;
+ extern pstring samlogon_user;
+
if (!pwd) {
new_sam_acct = NULL;
return False;
@@ -144,10 +148,32 @@ BOOL pdb_init_sam_pw(SAM_ACCOUNT **new_sam_acct, struct passwd *pwd)
pdb_set_fullname(*new_sam_acct, pwd->pw_gecos);
pdb_set_uid(*new_sam_acct, pwd->pw_uid);
pdb_set_gid(*new_sam_acct, pwd->pw_gid);
- pdb_set_profile_path(*new_sam_acct, lp_logon_path());
- pdb_set_homedir(*new_sam_acct, lp_logon_home());
- pdb_set_dir_drive(*new_sam_acct, lp_logon_drive());
- pdb_set_logon_script(*new_sam_acct, lp_logon_script());
+
+ pdb_set_user_rid(*new_sam_acct, pdb_uid_to_user_rid(pwd->pw_uid));
+ pdb_set_group_rid(*new_sam_acct, pdb_gid_to_group_rid(pwd->pw_gid));
+
+ /* UGLY, UGLY HACK!!! */
+ pstrcpy(samlogon_user, pwd->pw_name);
+
+ sam_logon_in_ssb = True;
+
+ pstrcpy(str, lp_logon_path());
+ standard_sub_advanced(-1, pwd->pw_name, "", pwd->pw_gid, str);
+ pdb_set_profile_path(*new_sam_acct, str);
+
+ pstrcpy(str, lp_logon_home());
+ standard_sub_advanced(-1, pwd->pw_name, "", pwd->pw_gid, str);
+ pdb_set_homedir(*new_sam_acct, str);
+
+ pstrcpy(str, lp_logon_drive());
+ standard_sub_advanced(-1, pwd->pw_name, "", pwd->pw_gid, str);
+ pdb_set_dir_drive(*new_sam_acct, str);
+
+ pstrcpy(str, lp_logon_script());
+ standard_sub_advanced(-1, pwd->pw_name, "", pwd->pw_gid, str);
+ pdb_set_logon_script(*new_sam_acct, str);
+
+ sam_logon_in_ssb = False;
return True;
}