summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/uid_wrapper/uid_wrapper.c18
-rw-r--r--lib/uid_wrapper/uid_wrapper.h6
2 files changed, 24 insertions, 0 deletions
diff --git a/lib/uid_wrapper/uid_wrapper.c b/lib/uid_wrapper/uid_wrapper.c
index 442e349318..c43dbc1436 100644
--- a/lib/uid_wrapper/uid_wrapper.c
+++ b/lib/uid_wrapper/uid_wrapper.c
@@ -1,5 +1,6 @@
/*
Copyright (C) Andrew Tridgell 2009
+ Copyright (c) 2011 Andreas Schneider <asn@samba.org>
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
@@ -160,6 +161,23 @@ _PUBLIC_ int uwrap_setregid(gid_t rgid, gid_t egid)
}
#endif
+#ifdef HAVE_SETRESGID
+_PUBLIC_ int uwrap_setresgid(gid_t rgid, gid_t egid, gid_t sgid)
+{
+ uwrap_init();
+ if (!uwrap.enabled) {
+ return setresgid(rgid, egid, sgid);
+ }
+ /* assume for now that the ruid stays as root */
+ if (egid == 0) {
+ uwrap.egid = uwrap.mygid;
+ } else {
+ uwrap.egid = egid;
+ }
+ return 0;
+}
+#endif
+
_PUBLIC_ uid_t uwrap_getegid(void)
{
uwrap_init();
diff --git a/lib/uid_wrapper/uid_wrapper.h b/lib/uid_wrapper/uid_wrapper.h
index 27b7abccb3..7cb97af8df 100644
--- a/lib/uid_wrapper/uid_wrapper.h
+++ b/lib/uid_wrapper/uid_wrapper.h
@@ -1,5 +1,6 @@
/*
Copyright (C) Andrew Tridgell 2009
+ Copyright (c) 2011 Andreas Schneider <asn@samba.org>
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
@@ -57,6 +58,11 @@ gid_t uwrap_getgid(void);
#endif
#define setregid uwrap_setregid
+#ifdef setresgid
+#undef setresgid
+#endif
+#define setresgid uwrap_setresgid
+
#ifdef geteuid
#undef geteuid
#endif