Fixed potential bug in "become_guest" pointed out by elrond. Get_Pwnam()
authorJeremy Allison <jra@samba.org>
Sun, 15 Apr 2001 23:36:05 +0000 (23:36 +0000)
committerJeremy Allison <jra@samba.org>
Sun, 15 Apr 2001 23:36:05 +0000 (23:36 +0000)
returns a pointer to changable storage so ensure we save the details and
don't use the pointer directly.
Jeremy.

source/smbd/uid.c

index 02522a37a2cb6555be183544542fd676037c7ab2..da4c5383197368f2e7b5b949198095d60bf0d274 100644 (file)
@@ -33,19 +33,26 @@ extern struct current_user current_user;
 BOOL become_guest(void)
 {
        static struct passwd *pass=NULL;
-       
-       if (!pass)
+       static uid_t guest_uid = (uid_t)-1;
+       static gid_t guest_gid = (gid_t)-1;
+       static fstring guest_name;
+
+       if (!pass) {
                pass = Get_Pwnam(lp_guestaccount(-1),True);
-       if (!pass)
-               return(False);
+               if (!pass)
+                       return(False);
+               guest_uid = pass->pw_uid;
+               guest_gid = pass->pw_gid;
+               fstrcpy(guest_name, pass->pw_name);
+       }
        
 #ifdef AIX
        /* MWW: From AIX FAQ patch to WU-ftpd: call initgroups before 
           setting IDs */
-       initgroups(pass->pw_name, (gid_t)pass->pw_gid);
+       initgroups(guest_name, guest_gid);
 #endif
        
-       set_sec_ctx(pass->pw_uid, pass->pw_gid, 0, NULL, NULL);
+       set_sec_ctx(guest_uid, guest_gid, 0, NULL, NULL);
        
        current_user.conn = NULL;
        current_user.vuid = UID_FIELD_INVALID;