aboutsummaryrefslogtreecommitdiff
path: root/debian/patches-applied/hurd_no_setfsuid
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-applied/hurd_no_setfsuid')
-rw-r--r--debian/patches-applied/hurd_no_setfsuid77
1 files changed, 0 insertions, 77 deletions
diff --git a/debian/patches-applied/hurd_no_setfsuid b/debian/patches-applied/hurd_no_setfsuid
deleted file mode 100644
index 00610a87..00000000
--- a/debian/patches-applied/hurd_no_setfsuid
+++ /dev/null
@@ -1,77 +0,0 @@
-On systems without setfsuid(), use setreuid() instead.
-
-Authors: Steve Langasek <vorlon@debian.org>
-
-Upstream status: to be forwarded, now that pam_modutil_{drop,regain}_priv
- are implemented
-
-Index: pam/libpam/pam_modutil_priv.c
-===================================================================
---- pam.orig/libpam/pam_modutil_priv.c
-+++ pam/libpam/pam_modutil_priv.c
-@@ -14,7 +14,9 @@
- #include <syslog.h>
- #include <pwd.h>
- #include <grp.h>
-+#ifdef HAVE_SYS_FSUID_H
- #include <sys/fsuid.h>
-+#endif /* HAVE_SYS_FSUID_H */
-
- /*
- * Two setfsuid() calls in a row are necessary to check
-@@ -22,17 +24,55 @@
- */
- static int change_uid(uid_t uid, uid_t *save)
- {
-+#ifdef HAVE_SYS_FSUID_H
- uid_t tmp = setfsuid(uid);
- if (save)
- *save = tmp;
- return (uid_t) setfsuid(uid) == uid ? 0 : -1;
-+#else
-+ uid_t euid = geteuid();
-+ uid_t ruid = getuid();
-+ if (save)
-+ *save = ruid;
-+ if (ruid == uid && uid != 0)
-+ if (setreuid(euid, uid))
-+ return -1;
-+ else {
-+ setreuid(0, -1);
-+ if (setreuid(-1, uid)) {
-+ setreuid(-1, 0);
-+ setreuid(0, -1);
-+ if (setreuid(-1, uid))
-+ return -1;
-+ }
-+ }
-+#endif
- }
- static int change_gid(gid_t gid, gid_t *save)
- {
-+#ifdef HAVE_SYS_FSUID_H
- gid_t tmp = setfsgid(gid);
- if (save)
- *save = tmp;
- return (gid_t) setfsgid(gid) == gid ? 0 : -1;
-+#else
-+ gid_t egid = getegid();
-+ gid_t rgid = getgid();
-+ if (save)
-+ *save = rgid;
-+ if (rgid == gid)
-+ if (setregid(egid, gid))
-+ return -1;
-+ else {
-+ setregid(0, -1);
-+ if (setregid(-1, gid)) {
-+ setregid(-1, 0);
-+ setregid(0, -1);
-+ if (setregid(-1, gid))
-+ return -1;
-+ }
-+ }
-+#endif
- }
-
- static int cleanup(struct pam_modutil_privs *p)