Try to support non-root-mode systems without getgrouplist().
authorAndrew Bartlett <abartlet@samba.org>
Mon, 26 Aug 2002 00:43:06 +0000 (00:43 +0000)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 26 Aug 2002 00:43:06 +0000 (00:43 +0000)
Andrew Bartlett
(This used to be commit 17096315a0f30f946ddecb79708604a111c37011)

source3/auth/auth_sam.c
source3/auth/auth_util.c
source3/lib/system_smbd.c

index 58def0567ae8e78dede87e26e84883a212aa5b4c..ca611c46b9f4751193658a40dc43ea117ae4f816 100644 (file)
@@ -404,7 +404,7 @@ static NTSTATUS check_sam_security(const struct auth_context *auth_context,
        }
 
        if (!NT_STATUS_IS_OK(nt_status = make_server_info_sam(server_info, sampass))) {         
-               DEBUG(0,("failed to malloc memory for server_info ret: %s\n", nt_errstr(nt_status)));
+               DEBUG(0,("check_sam_security: make_server_info_sam() failed with '%s'\n", nt_errstr(nt_status)));
                return nt_status;
        }
 
index 210c4d09f92b745bf041a156ddc5ac6d33f08514..118126a2756805aa1a6765dc12a09c5229ff8533 100644 (file)
@@ -643,7 +643,7 @@ static NTSTATUS get_user_groups_from_local_sam(const DOM_SID *user_sid,
        }
        
        if (sys_getgrouplist(usr->pw_name, usr->pw_gid, *unix_groups, &n_unix_groups) == -1) {
-               *unix_groups = realloc(unix_groups, sizeof(gid_t) * n_unix_groups);
+               *unix_groups = Realloc(unix_groups, sizeof(gid_t) * n_unix_groups);
                if (sys_getgrouplist(usr->pw_name, usr->pw_gid, *unix_groups, &n_unix_groups) == -1) {
                        DEBUG(0, ("get_user_groups_from_local_sam: failed to get the unix group list\n"));
                        SAFE_FREE(unix_groups);
@@ -657,12 +657,14 @@ static NTSTATUS get_user_groups_from_local_sam(const DOM_SID *user_sid,
        DEBUG(5,("get_user_groups_from_local_sam: user is in the unix following groups\n"));
        for (i = 0; i < n_unix_groups; i++)
                DEBUGADD(5,("supplementary group gid:%ld\n",(long int)(*unix_groups)[i]));
-       
-       *groups   = malloc(sizeof(DOM_SID) * n_unix_groups);
-       if (!*groups) {
-               DEBUG(0, ("get_user_group_from_local_sam: malloc() failed for DOM_SID list!\n"));
-               SAFE_FREE(unix_groups);
-               return NT_STATUS_NO_MEMORY;
+
+       if (n_unix_groups > 0) {
+               *groups   = malloc(sizeof(DOM_SID) * n_unix_groups);
+               if (!*groups) {
+                       DEBUG(0, ("get_user_group_from_local_sam: malloc() failed for DOM_SID list!\n"));
+                       SAFE_FREE(unix_groups);
+                       return NT_STATUS_NO_MEMORY;
+               }
        }
 
        *n_groups = n_unix_groups;
index 580ef8a4634ff0adb58a2afd9a1203ea08932632..5eda37d90345f868c9ca1b73c593fd4ed8abdb2f 100644 (file)
@@ -41,6 +41,11 @@ static int getgrouplist_internals(const char *user, gid_t gid, gid_t *groups, in
        gid_t *gids_saved;
        int ret, ngrp_saved;
 
+       if (non_root_mode()) {
+               *grpcnt = 0;
+               return 0;
+       }
+
        /* work out how many groups we need to save */
        ngrp_saved = getgroups(0, NULL);
        if (ngrp_saved == -1) {