r1506: Fix inspired by patches from Michael Collin Nielsen <michael@hum.aau.dk> ...
authorJeremy Allison <jra@samba.org>
Thu, 15 Jul 2004 00:58:35 +0000 (00:58 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:52:13 +0000 (10:52 -0500)
home directory service number is correctly reused.
Jeremy.
(This used to be commit 9d6347be8580d092cda0357b5d1a81fc6876ac1f)

source3/smbd/password.c

index b2dbde151d0ff1bc2d6f0627bb9cd54d1eb768ba..3be1516cf045807a8a91e304f292b00e6a35dfc5 100644 (file)
@@ -253,19 +253,23 @@ int register_vuid(auth_serversupplied_info *server_info, DATA_BLOB session_key,
 
        /* Register a home dir service for this user iff
           (a) This is not a guest connection,
-          (b) we have a home directory defined, and
-          (c) there s not an existing static share by that name */
-
-       if ( (!vuser->guest) 
-               && vuser->unix_homedir 
-               && *(vuser->unix_homedir) 
-               && (lp_servicenumber(vuser->user.unix_name) == -1) ) 
-       {
-                       DEBUG(3, ("Adding/updating homes service for user '%s' using home directory: '%s'\n", 
+          (b) we have a home directory defined 
+          If a share exists by this name (autoloaded or not) reuse it so
+          long as the home directory is the same as the share directory. */
+
+       if ( (!vuser->guest) && vuser->unix_homedir && *(vuser->unix_homedir)) {
+               int servicenumber = lp_servicenumber(vuser->user.unix_name);
+               if ( servicenumber == -1 ) {
+                       DEBUG(3, ("Adding homes service for user '%s' using home directory: '%s'\n", 
                                vuser->user.unix_name, vuser->unix_homedir));
-
                        vuser->homes_snum = add_home_service(vuser->user.unix_name, 
-                               vuser->user.unix_name, vuser->unix_homedir);
+                                               vuser->user.unix_name, vuser->unix_homedir);
+               } else if (strcmp(lp_pathname(servicenumber),vuser->unix_homedir) == 0) {
+                       DEBUG(3, ("Reusing homes service for user '%s' using home directory: '%s'\n", 
+                               vuser->user.unix_name, vuser->unix_homedir));
+
+                       vuser->homes_snum = servicenumber;
+               }
        } else {
                vuser->homes_snum = -1;
        }