[SCM] Samba Shared Repository - branch v3-4-test updated - release-4-0-0alpha7-1096-g0677a06

Günther Deschner gd at samba.org
Fri May 29 11:45:20 GMT 2009


The branch, v3-4-test has been updated
       via  0677a068dce0bd1cc76fc3ea13322e57b1d1c3af (commit)
       via  db2fa7179db37d5cb6475006b88ff648636ac602 (commit)
       via  1a129e79baac7c7ebbc63c9e077ede4b123cf390 (commit)
       via  0f93abf8222672e5f7c09fd0b55337de82e9569f (commit)
       via  8bda8295ffc6fa9a9776f821b11075b6bac7a80d (commit)
       via  bf255ec2a81f2f44a9ef0379beaec0a51bbfb000 (commit)
      from  1b401a1b5374d037757954bb023287fa57b1c9b9 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-test


- Log -----------------------------------------------------------------
commit 0677a068dce0bd1cc76fc3ea13322e57b1d1c3af
Author: Günther Deschner <gd at samba.org>
Date:   Thu May 28 11:51:46 2009 +0200

    nss_wrapper: fix nss_wrapper build for solaris.
    
    Guenther
    (cherry picked from commit 136b2a3eb21eda28e7a18547751ee20f097e7492)

commit db2fa7179db37d5cb6475006b88ff648636ac602
Author: Günther Deschner <gd at samba.org>
Date:   Thu May 28 10:53:53 2009 +0200

    nss_wrapper: remove re-structuring leftovers (unused variables).
    
    Guenther
    (cherry picked from commit 37e4c92b383397a2c77db7e5d8adf2fa4a24d398)

commit 1a129e79baac7c7ebbc63c9e077ede4b123cf390
Author: Günther Deschner <gd at samba.org>
Date:   Thu May 28 10:40:22 2009 +0200

    s3-selftest: use nss_wrapper.pl as "add user to group" and "delete user from group" script.
    
    Guenther
    (cherry picked from commit 7a5475f098c6a20f867adc081ca455e6c393755b)

commit 0f93abf8222672e5f7c09fd0b55337de82e9569f
Author: Günther Deschner <gd at samba.org>
Date:   Thu May 28 10:39:37 2009 +0200

    nss_wrapper: support member add and delete for groups in nss_wrapper.pl.
    
    Guenther
    (cherry picked from commit ebf8df35c9583619a012e85964f2ad5187a199fe)

commit 8bda8295ffc6fa9a9776f821b11075b6bac7a80d
Author: Günther Deschner <gd at samba.org>
Date:   Wed May 27 22:35:14 2009 +0200

    nss_wrapper: split out passwd and group paths in nss_wrapper.pl.
    
    Guenther
    (cherry picked from commit 7bb9e08d7e75be88a9788563f053794554f680a8)

commit bf255ec2a81f2f44a9ef0379beaec0a51bbfb000
Author: Günther Deschner <gd at samba.org>
Date:   Wed May 27 18:38:10 2009 +0200

    nss_wrapper: restructure nwrap calls.
    
    Guenther
    (cherry picked from commit ec9a0917055d731aa95e2fea2045445f9945b74d)

-----------------------------------------------------------------------

Summary of changes:
 lib/nss_wrapper/nss_wrapper.c    |  242 ++++++++++++++++++++++++++------------
 lib/nss_wrapper/nss_wrapper.pl   |  197 ++++++++++++++++++++++++++-----
 selftest/target/Samba3.pm        |   12 +-
 source3/script/tests/selftest.sh |   12 +-
 4 files changed, 346 insertions(+), 117 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/nss_wrapper/nss_wrapper.c b/lib/nss_wrapper/nss_wrapper.c
index da09083..1875dc3 100644
--- a/lib/nss_wrapper/nss_wrapper.c
+++ b/lib/nss_wrapper/nss_wrapper.c
@@ -771,14 +771,11 @@ static int nwrap_gr_copy_r(const struct group *src, struct group *dst,
 }
 
 /* user functions */
-_PUBLIC_ struct passwd *nwrap_getpwnam(const char *name)
+
+static struct passwd *nwrap_files_getpwnam(const char *name)
 {
 	int i;
 
-	if (!nwrap_enabled()) {
-		return real_getpwnam(name);
-	}
-
 	nwrap_cache_reload(nwrap_pw_global.cache);
 
 	for (i=0; i<nwrap_pw_global.num; i++) {
@@ -798,15 +795,20 @@ _PUBLIC_ struct passwd *nwrap_getpwnam(const char *name)
 	return NULL;
 }
 
-_PUBLIC_ int nwrap_getpwnam_r(const char *name, struct passwd *pwdst,
-			      char *buf, size_t buflen, struct passwd **pwdstp)
+_PUBLIC_ struct passwd *nwrap_getpwnam(const char *name)
 {
-	struct passwd *pw;
-
 	if (!nwrap_enabled()) {
-		return real_getpwnam_r(name, pwdst, buf, buflen, pwdstp);
+		return real_getpwnam(name);
 	}
 
+	return nwrap_files_getpwnam(name);
+}
+
+static int nwrap_files_getpwnam_r(const char *name, struct passwd *pwdst,
+				  char *buf, size_t buflen, struct passwd **pwdstp)
+{
+	struct passwd *pw;
+
 	pw = nwrap_getpwnam(name);
 	if (!pw) {
 		if (errno == 0) {
@@ -818,14 +820,20 @@ _PUBLIC_ int nwrap_getpwnam_r(const char *name, struct passwd *pwdst,
 	return nwrap_pw_copy_r(pw, pwdst, buf, buflen, pwdstp);
 }
 
-_PUBLIC_ struct passwd *nwrap_getpwuid(uid_t uid)
+_PUBLIC_ int nwrap_getpwnam_r(const char *name, struct passwd *pwdst,
+			      char *buf, size_t buflen, struct passwd **pwdstp)
 {
-	int i;
-
 	if (!nwrap_enabled()) {
-		return real_getpwuid(uid);
+		return real_getpwnam_r(name, pwdst, buf, buflen, pwdstp);
 	}
 
+	return nwrap_files_getpwnam_r(name, pwdst, buf, buflen, pwdstp);
+}
+
+static struct passwd *nwrap_files_getpwuid(uid_t uid)
+{
+	int i;
+
 	nwrap_cache_reload(nwrap_pw_global.cache);
 
 	for (i=0; i<nwrap_pw_global.num; i++) {
@@ -845,15 +853,20 @@ _PUBLIC_ struct passwd *nwrap_getpwuid(uid_t uid)
 	return NULL;
 }
 
-_PUBLIC_ int nwrap_getpwuid_r(uid_t uid, struct passwd *pwdst,
-			      char *buf, size_t buflen, struct passwd **pwdstp)
+_PUBLIC_ struct passwd *nwrap_getpwuid(uid_t uid)
 {
-	struct passwd *pw;
-
 	if (!nwrap_enabled()) {
-		return real_getpwuid_r(uid, pwdst, buf, buflen, pwdstp);
+		return real_getpwuid(uid);
 	}
 
+	return nwrap_files_getpwuid(uid);
+}
+
+static int nwrap_files_getpwuid_r(uid_t uid, struct passwd *pwdst,
+				  char *buf, size_t buflen, struct passwd **pwdstp)
+{
+	struct passwd *pw;
+
 	pw = nwrap_getpwuid(uid);
 	if (!pw) {
 		if (errno == 0) {
@@ -865,24 +878,35 @@ _PUBLIC_ int nwrap_getpwuid_r(uid_t uid, struct passwd *pwdst,
 	return nwrap_pw_copy_r(pw, pwdst, buf, buflen, pwdstp);
 }
 
+_PUBLIC_ int nwrap_getpwuid_r(uid_t uid, struct passwd *pwdst,
+			      char *buf, size_t buflen, struct passwd **pwdstp)
+{
+	if (!nwrap_enabled()) {
+		return real_getpwuid_r(uid, pwdst, buf, buflen, pwdstp);
+	}
+
+	return nwrap_files_getpwuid_r(uid, pwdst, buf, buflen, pwdstp);
+}
+
 /* user enum functions */
+static void nwrap_files_setpwent(void)
+{
+	nwrap_pw_global.idx = 0;
+}
+
 _PUBLIC_ void nwrap_setpwent(void)
 {
 	if (!nwrap_enabled()) {
 		real_setpwent();
 	}
 
-	nwrap_pw_global.idx = 0;
+	nwrap_files_setpwent();
 }
 
-_PUBLIC_ struct passwd *nwrap_getpwent(void)
+static struct passwd *nwrap_files_getpwent(void)
 {
 	struct passwd *pw;
 
-	if (!nwrap_enabled()) {
-		return real_getpwent();
-	}
-
 	if (nwrap_pw_global.idx == 0) {
 		nwrap_cache_reload(nwrap_pw_global.cache);
 	}
@@ -900,13 +924,37 @@ _PUBLIC_ struct passwd *nwrap_getpwent(void)
 	return pw;
 }
 
-_PUBLIC_ int nwrap_getpwent_r(struct passwd *pwdst, char *buf,
-			      size_t buflen, struct passwd **pwdstp)
+_PUBLIC_ struct passwd *nwrap_getpwent(void)
+{
+	if (!nwrap_enabled()) {
+		return real_getpwent();
+	}
+
+	return nwrap_files_getpwent();
+}
+
+static int nwrap_files_getpwent_r(struct passwd *pwdst, char *buf,
+				  size_t buflen, struct passwd **pwdstp)
 {
 	struct passwd *pw;
 
+	pw = nwrap_getpwent();
+	if (!pw) {
+		if (errno == 0) {
+			return ENOENT;
+		}
+		return errno;
+	}
+
+	return nwrap_pw_copy_r(pw, pwdst, buf, buflen, pwdstp);
+}
+
+_PUBLIC_ int nwrap_getpwent_r(struct passwd *pwdst, char *buf,
+			      size_t buflen, struct passwd **pwdstp)
+{
 	if (!nwrap_enabled()) {
 #ifdef SOLARIS_GETPWENT_R
+		struct passwd *pw;
 		pw = real_getpwent_r(pwdst, buf, buflen);
 		if (!pw) {
 			if (errno == 0) {
@@ -923,15 +971,12 @@ _PUBLIC_ int nwrap_getpwent_r(struct passwd *pwdst, char *buf,
 #endif
 	}
 
-	pw = nwrap_getpwent();
-	if (!pw) {
-		if (errno == 0) {
-			return ENOENT;
-		}
-		return errno;
-	}
+	return nwrap_files_getpwent_r(pwdst, buf, buflen, pwdstp);
+}
 
-	return nwrap_pw_copy_r(pw, pwdst, buf, buflen, pwdstp);
+static void nwrap_files_endpwent(void)
+{
+	nwrap_pw_global.idx = 0;
 }
 
 _PUBLIC_ void nwrap_endpwent(void)
@@ -940,29 +985,30 @@ _PUBLIC_ void nwrap_endpwent(void)
 		real_endpwent();
 	}
 
-	nwrap_pw_global.idx = 0;
+	nwrap_files_endpwent();
 }
 
 /* misc functions */
+static int nwrap_files_initgroups(const char *user, gid_t group)
+{
+	/* TODO: maybe we should also fake this... */
+	return EPERM;
+}
+
 _PUBLIC_ int nwrap_initgroups(const char *user, gid_t group)
 {
 	if (!nwrap_enabled()) {
 		return real_initgroups(user, group);
 	}
 
-	/* TODO: maybe we should also fake this... */
-	return EPERM;
+	return nwrap_files_initgroups(user, group);
 }
 
 /* group functions */
-_PUBLIC_ struct group *nwrap_getgrnam(const char *name)
+static struct group *nwrap_files_getgrnam(const char *name)
 {
 	int i;
 
-	if (!nwrap_enabled()) {
-		return real_getgrnam(name);
-	}
-
 	nwrap_cache_reload(nwrap_gr_global.cache);
 
 	for (i=0; i<nwrap_gr_global.num; i++) {
@@ -982,15 +1028,20 @@ _PUBLIC_ struct group *nwrap_getgrnam(const char *name)
 	return NULL;
 }
 
-_PUBLIC_ int nwrap_getgrnam_r(const char *name, struct group *grdst,
-			      char *buf, size_t buflen, struct group **grdstp)
+_PUBLIC_ struct group *nwrap_getgrnam(const char *name)
 {
-	struct group *gr;
-
 	if (!nwrap_enabled()) {
-		return real_getgrnam_r(name, grdst, buf, buflen, grdstp);
+		return real_getgrnam(name);
 	}
 
+	return nwrap_files_getgrnam(name);
+}
+
+static int nwrap_files_getgrnam_r(const char *name, struct group *grdst,
+				  char *buf, size_t buflen, struct group **grdstp)
+{
+	struct group *gr;
+
 	gr = nwrap_getgrnam(name);
 	if (!gr) {
 		if (errno == 0) {
@@ -1002,14 +1053,20 @@ _PUBLIC_ int nwrap_getgrnam_r(const char *name, struct group *grdst,
 	return nwrap_gr_copy_r(gr, grdst, buf, buflen, grdstp);
 }
 
-_PUBLIC_ struct group *nwrap_getgrgid(gid_t gid)
+_PUBLIC_ int nwrap_getgrnam_r(const char *name, struct group *grdst,
+			      char *buf, size_t buflen, struct group **grdstp)
 {
-	int i;
-
 	if (!nwrap_enabled()) {
-		return real_getgrgid(gid);
+		return real_getgrnam_r(name, grdst, buf, buflen, grdstp);
 	}
 
+	return nwrap_files_getgrnam_r(name, grdst, buf, buflen, grdstp);
+}
+
+static struct group *nwrap_files_getgrgid(gid_t gid)
+{
+	int i;
+
 	nwrap_cache_reload(nwrap_gr_global.cache);
 
 	for (i=0; i<nwrap_gr_global.num; i++) {
@@ -1029,15 +1086,20 @@ _PUBLIC_ struct group *nwrap_getgrgid(gid_t gid)
 	return NULL;
 }
 
-_PUBLIC_ int nwrap_getgrgid_r(gid_t gid, struct group *grdst,
-			      char *buf, size_t buflen, struct group **grdstp)
+_PUBLIC_ struct group *nwrap_getgrgid(gid_t gid)
 {
-	struct group *gr;
-
 	if (!nwrap_enabled()) {
-		return real_getgrgid_r(gid, grdst, buf, buflen, grdstp);
+		return real_getgrgid(gid);
 	}
 
+	return nwrap_files_getgrgid(gid);
+}
+
+static int nwrap_files_getgrgid_r(gid_t gid, struct group *grdst,
+				  char *buf, size_t buflen, struct group **grdstp)
+{
+	struct group *gr;
+
 	gr = nwrap_getgrgid(gid);
 	if (!gr) {
 		if (errno == 0) {
@@ -1051,24 +1113,35 @@ _PUBLIC_ int nwrap_getgrgid_r(gid_t gid, struct group *grdst,
 	return ENOENT;
 }
 
+_PUBLIC_ int nwrap_getgrgid_r(gid_t gid, struct group *grdst,
+			      char *buf, size_t buflen, struct group **grdstp)
+{
+	if (!nwrap_enabled()) {
+		return real_getgrgid_r(gid, grdst, buf, buflen, grdstp);
+	}
+
+	return nwrap_files_getgrgid_r(gid, grdst, buf, buflen, grdstp);
+}
+
 /* group enum functions */
+static void nwrap_files_setgrent(void)
+{
+	nwrap_gr_global.idx = 0;
+}
+
 _PUBLIC_ void nwrap_setgrent(void)
 {
 	if (!nwrap_enabled()) {
 		real_setgrent();
 	}
 
-	nwrap_gr_global.idx = 0;
+	nwrap_files_setgrent();
 }
 
-_PUBLIC_ struct group *nwrap_getgrent(void)
+static struct group *nwrap_files_getgrent(void)
 {
 	struct group *gr;
 
-	if (!nwrap_enabled()) {
-		return real_getgrent();
-	}
-
 	if (nwrap_gr_global.idx == 0) {
 		nwrap_cache_reload(nwrap_gr_global.cache);
 	}
@@ -1086,13 +1159,37 @@ _PUBLIC_ struct group *nwrap_getgrent(void)
 	return gr;
 }
 
-_PUBLIC_ int nwrap_getgrent_r(struct group *grdst, char *buf,
-			      size_t buflen, struct group **grdstp)
+_PUBLIC_ struct group *nwrap_getgrent(void)
+{
+	if (!nwrap_enabled()) {
+		return real_getgrent();
+	}
+
+	return nwrap_files_getgrent();
+}
+
+static int nwrap_files_getgrent_r(struct group *grdst, char *buf,
+				  size_t buflen, struct group **grdstp)
 {
 	struct group *gr;
 
+	gr = nwrap_getgrent();
+	if (!gr) {
+		if (errno == 0) {
+			return ENOENT;
+		}
+		return errno;
+	}
+
+	return nwrap_gr_copy_r(gr, grdst, buf, buflen, grdstp);
+}
+
+_PUBLIC_ int nwrap_getgrent_r(struct group *grdst, char *buf,
+			      size_t buflen, struct group **grdstp)
+{
 	if (!nwrap_enabled()) {
 #ifdef SOLARIS_GETGRENT_R
+		struct group *gr;
 		gr = real_getgrent_r(grdst, buf, buflen);
 		if (!gr) {
 			if (errno == 0) {
@@ -1109,15 +1206,12 @@ _PUBLIC_ int nwrap_getgrent_r(struct group *grdst, char *buf,
 #endif
 	}
 
-	gr = nwrap_getgrent();
-	if (!gr) {
-		if (errno == 0) {
-			return ENOENT;
-		}
-		return errno;
-	}
+	return nwrap_files_getgrent_r(grdst, buf, buflen, grdstp);
+}
 
-	return nwrap_gr_copy_r(gr, grdst, buf, buflen, grdstp);
+static void nwrap_files_endgrent(void)
+{
+	nwrap_gr_global.idx = 0;
 }
 
 _PUBLIC_ void nwrap_endgrent(void)
@@ -1126,5 +1220,5 @@ _PUBLIC_ void nwrap_endgrent(void)
 		real_endgrent();
 	}
 
-	nwrap_gr_global.idx = 0;
+	nwrap_files_endgrent();
 }
diff --git a/lib/nss_wrapper/nss_wrapper.pl b/lib/nss_wrapper/nss_wrapper.pl
index cfd3206..1f1aef1 100644
--- a/lib/nss_wrapper/nss_wrapper.pl
+++ b/lib/nss_wrapper/nss_wrapper.pl
@@ -7,26 +7,35 @@ use Getopt::Long;
 use Cwd qw(abs_path);
 
 my $opt_help = 0;
-my $opt_path = undef;
+my $opt_passwd_path = undef;
+my $opt_group_path = undef;
 my $opt_action = undef;
 my $opt_type = undef;
 my $opt_name = undef;
+my $opt_member = undef;
 
 my $passwdfn = undef;
 my $groupfn = undef;
+my $memberfn = undef;
 my $actionfn = undef;
 
-sub passwd_add($$);
-sub passwd_delete($$);
-sub group_add($$);
-sub group_delete($$);
+sub passwd_add($$$$);
+sub passwd_delete($$$$);
+sub group_add($$$$);
+sub group_delete($$$$);
+sub member_add($$$$);
+sub member_delete($$$$);
+
+sub check_path($$);
 
 my $result = GetOptions(
 	'help|h|?'	=> \$opt_help,
-	'path=s'	=> \$opt_path,
+	'passwd_path=s'	=> \$opt_passwd_path,
+	'group_path=s'	=> \$opt_group_path,
 	'action=s'	=> \$opt_action,
 	'type=s'	=> \$opt_type,
-	'name=s'	=> \$opt_name
+	'name=s'	=> \$opt_name,
+	'member=s'	=> \$opt_member
 );
 
 sub usage($;$)
@@ -39,14 +48,16 @@ sub usage($;$)
 
 	--help|-h|-?		Show this help.
 
-	--path <path>		Path of the 'passwd' or 'group' file.
+	--passwd_path <path>	Path of the 'passwd' file.
+	--group_path <path>	Path of the 'group' file.
 
-	--type <type>		Only 'passwd' and 'group' are supported yet,
-				maybe 'member' will be added in future.
+	--type <type>		'passwd', 'group' and 'member' are supported.
 
 	--action <action>	'add' or 'delete'.
 
 	--name <name>		The name of the object.
+
+	--member <member>	The name of the member.
 ";
 	exit($ret);
 }
@@ -55,38 +66,39 @@ usage(1) if (not $result);
 
 usage(0) if ($opt_help);
 
-if (not defined($opt_path)) {
-	usage(1, "missing: --path <path>");


-- 
Samba Shared Repository


More information about the samba-cvs mailing list