Don't assume that the SAM knows the unix home directory - look it up by
authorAndrew Bartlett <abartlet@samba.org>
Sat, 7 Jun 2003 03:20:09 +0000 (03:20 +0000)
committerAndrew Bartlett <abartlet@samba.org>
Sat, 7 Jun 2003 03:20:09 +0000 (03:20 +0000)
getpwnam() if need be.

Fixes bug #130

Andrew Bartlett
(This used to be commit a4bc789a3993be4b25955c729b533b86dba666f4)

source3/smbd/password.c

index 283eed73ef7de8a8dfd82484a1f945a28b0f3d22..9560449aa51f4731251f3e61182011e670d912ce 100644 (file)
@@ -168,16 +168,24 @@ int register_vuid(auth_serversupplied_info *server_info, const char *smb_name)
        {
                /* Keep the homedir handy */
                const char *homedir = pdb_get_homedir(server_info->sam_account);
-               const char *unix_homedir = pdb_get_unix_homedir(server_info->sam_account);
                const char *logon_script = pdb_get_logon_script(server_info->sam_account);
+
+               if (!IS_SAM_DEFAULT(server_info->sam_account, PDB_UNIXHOMEDIR)) {
+                       const char *unix_homedir = pdb_get_unix_homedir(server_info->sam_account);
+                       if (unix_homedir) {
+                               vuser->unix_homedir = smb_xstrdup(unix_homedir);
+                       }
+               } else {
+                       struct passwd *passwd = getpwnam_alloc(vuser->user.unix_name);
+                       if (passwd) {
+                               vuser->unix_homedir = smb_xstrdup(passwd->pw_dir);
+                               passwd_free(&passwd);
+                       }
+               }
+               
                if (homedir) {
                        vuser->homedir = smb_xstrdup(homedir);
                }
-
-               if (unix_homedir) {
-                       vuser->unix_homedir = smb_xstrdup(unix_homedir);
-               }
-
                if (logon_script) {
                        vuser->logon_script = smb_xstrdup(logon_script);
                }