diff options
-rw-r--r-- | source4/Makefile.in | 2 | ||||
-rw-r--r-- | source4/lib/system_smbd.c | 119 | ||||
-rw-r--r-- | source4/smbd/rewrite.c | 5 | ||||
-rw-r--r-- | source4/torture/raw/missing.txt | 2 |
4 files changed, 8 insertions, 120 deletions
diff --git a/source4/Makefile.in b/source4/Makefile.in index d6541a7b7a..3dcaf172ce 100644 --- a/source4/Makefile.in +++ b/source4/Makefile.in @@ -161,7 +161,7 @@ LIB_OBJ = lib/charcnv.o lib/debug.o lib/fault.o \ lib/module.o lib/genparser.o \ lib/ldap_escape.o lib/events.o lib/mutex.o -LIB_SMBD_OBJ = lib/system_smbd.o lib/util_smbd.o $(LIB_OBJ) +LIB_SMBD_OBJ = lib/util_smbd.o $(LIB_OBJ) READLINE_OBJ = lib/readline.o diff --git a/source4/lib/system_smbd.c b/source4/lib/system_smbd.c index 3ae0a6395e..e69de29bb2 100644 --- a/source4/lib/system_smbd.c +++ b/source4/lib/system_smbd.c @@ -1,119 +0,0 @@ -/* - Unix SMB/CIFS implementation. - system call wrapper interface. - Copyright (C) Andrew Tridgell 2002 - Copyright (C) Andrew Barteltt 2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -/* - This file may assume linkage with smbd - for things like become_root() - etc. -*/ - -#include "includes.h" - -#ifndef HAVE_GETGROUPLIST -/* - This is a *much* faster way of getting the list of groups for a user - without changing the current supplemenrary group list. The old - method used getgrent() which could take 20 minutes on a really big - network with hundeds of thousands of groups and users. The new method - takes a couple of seconds. - - NOTE!! this function only works if it is called as root! - */ -static int getgrouplist_internals(const char *user, gid_t gid, gid_t *groups, int *grpcnt) -{ - gid_t *gids_saved; - int ret, ngrp_saved, num_gids; - - 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) { - /* this shouldn't happen */ - return -1; - } - - gids_saved = (gid_t *)malloc(sizeof(gid_t) * (ngrp_saved+1)); - if (!gids_saved) { - errno = ENOMEM; - return -1; - } - - ngrp_saved = getgroups(ngrp_saved, gids_saved); - if (ngrp_saved == -1) { - SAFE_FREE(gids_saved); - /* very strange! */ - return -1; - } - - if (initgroups(user, gid) != 0) { - DEBUG(0, ("getgrouplist_internals: initgroups() failed!\n")); - SAFE_FREE(gids_saved); - return -1; - } - - /* this must be done to cope with systems that put the current egid in the - return from getgroups() */ - save_re_gid(); - set_effective_gid(gid); - setgid(gid); - - num_gids = getgroups(0, NULL); - if (num_gids + 1 > *grpcnt) { - *grpcnt = num_gids + 1; - ret = -1; - } else { - ret = getgroups(*grpcnt - 1, &groups[1]); - if (ret >= 0) { - groups[0] = gid; - *grpcnt = ret + 1; - } - } - - restore_re_gid(); - - if (setgroups(ngrp_saved, gids_saved) != 0) { - /* yikes! */ - DEBUG(0,("ERROR: getgrouplist: failed to reset group list!\n")); - smb_panic("getgrouplist: failed to reset group list!\n"); - free(gids_saved); - return -1; - } - - free(gids_saved); - return ret; -} -#endif - -int sys_getgrouplist(const char *user, gid_t gid, gid_t *groups, int *grpcnt) -{ -#ifdef HAVE_GETGROUPLIST - return getgrouplist(user, gid, groups, grpcnt); -#else - int retval; - become_root(); - retval = getgrouplist_internals(user, gid, groups, grpcnt); - unbecome_root(); - return retval; -#endif -} diff --git a/source4/smbd/rewrite.c b/source4/smbd/rewrite.c index c2f08e0236..4421d0c960 100644 --- a/source4/smbd/rewrite.c +++ b/source4/smbd/rewrite.c @@ -80,3 +80,8 @@ BOOL gid_to_sid(DOM_SID *sid, gid_t gid) BOOL become_user_permanently(uid_t uid, gid_t gid) { return True; } + +int sys_getgrouplist(const char *user, gid_t gid, gid_t *groups, int *ngroups) +{ + return 0; +} diff --git a/source4/torture/raw/missing.txt b/source4/torture/raw/missing.txt index 9a33e7ed6f..0f4104b596 100644 --- a/source4/torture/raw/missing.txt +++ b/source4/torture/raw/missing.txt @@ -1,3 +1,5 @@ +- RAW-CONTEXT passes on nt4 but TCON doesn't !!?? + - all messaging commands - writebraw |