[SCM] Samba Shared Repository - branch v3-6-test updated
Volker Lendecke
vlendec at samba.org
Sat Mar 19 03:12:13 MDT 2011
The branch, v3-6-test has been updated
via 0268296 s3: use getgrset() when it is available
from 95a28ca SMB2 renames return SHARING_VIOLATION if there is any existing oplock on a file. (cherry picked from commit f555a0ea2b14ecb7d1037852b594e7e25ef2c4b5)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test
- Log -----------------------------------------------------------------
commit 026829635072d6446b80df27c1f13c062ce934a5
Author: Christian Ambach <christian.ambach at de.ibm.com>
Date: Mon Mar 14 08:08:58 2011 -0400
s3: use getgrset() when it is available
When getgrouplist() is not defined, use getgrset() if it is defined
instead of using the initgroups() + getgroups() combo
Major contributions from Yannick Bergeron <yaberger at ca.ibm.com>
Autobuild-User: Volker Lendecke <vlendec at samba.org>
Autobuild-Date: Sat Mar 19 10:09:38 CET 2011 on sn-devel-104
(cherry picked from commit ed46dfc4f16e230645fae5f3b3b21c462694c30a)
-----------------------------------------------------------------------
Summary of changes:
source3/configure.in | 1 +
source3/lib/system_smbd.c | 59 +++++++++++++++++++++++++++++++++++++++++++-
source3/wscript | 2 +-
3 files changed, 59 insertions(+), 3 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/configure.in b/source3/configure.in
index 74df9d4..6033b0b 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -1070,6 +1070,7 @@ AC_CHECK_FUNCS(fdatasync,,[AC_CHECK_LIB_EXT(rt, LIBS, fdatasync)])
AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
AC_CHECK_FUNCS(initgroups select rdchk getgrnam getgrent pathconf)
+AC_CHECK_FUNCS(getgrset)
AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf stat64 fstat64)
AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt lseek64 ftruncate64 posix_fallocate posix_fallocate64)
AC_CHECK_FUNCS(fallocate fallocate64)
diff --git a/source3/lib/system_smbd.c b/source3/lib/system_smbd.c
index 3bb2c42..12538c4 100644
--- a/source3/lib/system_smbd.c
+++ b/source3/lib/system_smbd.c
@@ -28,6 +28,56 @@
#ifndef HAVE_GETGROUPLIST
+#ifdef HAVE_GETGRSET
+static int getgrouplist_getgrset(const char *user, gid_t gid, gid_t *groups,
+ int *grpcnt)
+{
+ char *grplist;
+ char *grp;
+ gid_t temp_gid;
+ int num_gids = 1;
+ int ret = 0;
+ long l;
+
+ grplist = getgrset(user);
+
+ DEBUG(10, ("getgrset returned %s\n", grplist));
+
+ if (grplist == NULL) {
+ return -1;
+ }
+
+ if (*grpcnt > 0) {
+ groups[0] = gid;
+ }
+
+ while ((grp = strsep(&grplist, ",")) != NULL) {
+ l = strtol(grp, NULL, 10);
+ temp_gid = (gid_t) l;
+ if (temp_gid == gid) {
+ continue;
+ }
+
+ if (num_gids + 1 > *grpcnt) {
+ num_gids++;
+ continue;
+ }
+ groups[num_gids++] = temp_gid;
+ }
+ free(grplist);
+
+ if (num_gids > *grpcnt) {
+ ret = -1;
+ }
+ *grpcnt = num_gids;
+
+ DEBUG(10, ("Found %d groups for user %s\n", *grpcnt, user));
+
+ return ret;
+}
+
+#else /* HAVE_GETGRSET */
+
/*
This is a *much* faster way of getting the list of groups for a user
without changing the current supplementary group list. The old
@@ -113,7 +163,8 @@ static int getgrouplist_internals(const char *user, gid_t gid, gid_t *groups,
free(gids_saved);
return ret;
}
-#endif
+#endif /* HAVE_GETGRSET */
+#endif /* HAVE_GETGROUPLIST */
static int sys_getgrouplist(const char *user, gid_t gid, gid_t *groups, int *grpcnt)
{
@@ -131,10 +182,14 @@ static int sys_getgrouplist(const char *user, gid_t gid, gid_t *groups, int *grp
#ifdef HAVE_GETGROUPLIST
retval = getgrouplist(user, gid, groups, grpcnt);
#else
+#ifdef HAVE_GETGRSET
+ retval = getgrouplist_getgrset(user, gid, groups, grpcnt);
+#else
become_root();
retval = getgrouplist_internals(user, gid, groups, grpcnt);
unbecome_root();
-#endif
+#endif /* HAVE_GETGRSET */
+#endif /* HAVE_GETGROUPLIST */
/* allow winbindd lookups, but only if they were not already disabled */
if (!winbind_env) {
diff --git a/source3/wscript b/source3/wscript
index c9ee928..56d4db4 100644
--- a/source3/wscript
+++ b/source3/wscript
@@ -269,7 +269,7 @@ _fork __fork fremoveea fremovexattr fseek64 fseeko64 fsetea
fsetproplist fsetxattr _fstat __fstat fstat64 _fstat64 __fstat64 fsync
ftell64 ftello64 ftruncate64 futimens futimes __fxstat getauthuid
getcwd _getcwd __getcwd getdents __getdents getdents64 getdirentries
-getgrent getgrnam getgrouplist getmntent getpagesize
+getgrent getgrnam getgrouplist getgrset getmntent getpagesize
getproplist get_proplist_entry getpwanam getpwent_r getrlimit gettext
glob grantpt hstrerror initgroups innetgr
inotify_init lgetea lgetxattr listea listxattr llistea llistxattr
--
Samba Shared Repository
More information about the samba-cvs
mailing list