Simplify processing of "admin user". If a user is an admin_user ensure their conn...
[kai/samba.git] / source3 / smbd / uid.c
index 5e3b84da50060d170cff437a259bd7efe4cf27ac..9dc354bf5a1bd3f5a24fb70fcc36601c1fc80bc0 100644 (file)
@@ -167,6 +167,9 @@ static bool check_user_ok(connection_struct *conn,
 
        conn->read_only = readonly_share;
        conn->admin_user = admin_user;
+       if (conn->admin_user) {
+               conn->server_info->utok.uid = sec_initial_uid();
+       }
 
        return(True);
 }
@@ -278,26 +281,22 @@ bool change_to_user(connection_struct *conn, uint16 vuid)
                return false;
        }
 
+       /* security = share sets force_user. */
+       if (!conn->force_user && !vuser) {
+               DEBUG(2,("change_to_user: Invalid vuid used %d in accessing "
+                       "share %s.\n",vuid, lp_servicename(snum) ));
+               return False;
+       }
+
        /*
         * conn->server_info is now correctly set up with a copy we can mess
         * with for force_group etc.
         */
 
-       if (conn->force_user) /* security = share sets this too */ {
-               uid = conn->server_info->utok.uid;
-               gid = conn->server_info->utok.gid;
-               group_list = conn->server_info->utok.groups;
-               num_groups = conn->server_info->utok.ngroups;
-       } else if (vuser) {
-               uid = conn->admin_user ? 0 : vuser->server_info->utok.uid;
-               gid = conn->server_info->utok.gid;
-               num_groups = conn->server_info->utok.ngroups;
-               group_list  = conn->server_info->utok.groups;
-       } else {
-               DEBUG(2,("change_to_user: Invalid vuid used %d in accessing "
-                        "share %s.\n",vuid, lp_servicename(snum) ));
-               return False;
-       }
+       uid = conn->server_info->utok.uid;
+       gid = conn->server_info->utok.gid;
+       num_groups = conn->server_info->utok.ngroups;
+       group_list  = conn->server_info->utok.groups;
 
        /*
         * See if we should force group for this service.