mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
gnu: linux-pam: Allow compilation on GNU/Hurd.
* gnu/packages/patches/linux-pam-no-setfsuid.patch: New file. * gnu/packages/linux.scm (linux-pam)[source]: Use it. (linux-pam-1.2)[source]: Likewise. * gnu/local.mk (dist_patch_DATA): Add it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
789f09a073
commit
411264c250
3 changed files with 83 additions and 3 deletions
|
@ -5,6 +5,7 @@
|
|||
# Copyright © 2013, 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
|
||||
# Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
|
||||
# Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
|
||||
# Copyright © 2016 Rene Saavedra <rennes@openmailbox.org>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
|
@ -651,6 +652,7 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/libwmf-CVE-2015-4695.patch \
|
||||
%D%/packages/patches/libwmf-CVE-2015-4696.patch \
|
||||
%D%/packages/patches/libxslt-generated-ids.patch \
|
||||
%D%/packages/patches/linux-pam-no-setfsuid.patch \
|
||||
%D%/packages/patches/lirc-localstatedir.patch \
|
||||
%D%/packages/patches/lm-sensors-hwmon-attrs.patch \
|
||||
%D%/packages/patches/lua-CVE-2014-5461.patch \
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
|
||||
;;; Copyright © 2016 David Craven <david@craven.ch>
|
||||
;;; Copyright © 2016 John Darrington <jmd@gnu.org>
|
||||
;;; Copyright © 2016 Rene Saavedra <rennes@openmailbox.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -414,7 +415,9 @@ (define-public linux-pam
|
|||
"Linux-PAM-" version ".tar.bz2"))
|
||||
(sha256
|
||||
(base32
|
||||
"1fyi04d5nsh8ivd0rn2y0z83ylgc0licz7kifbb6xxi2ylgfs6i4"))))
|
||||
"1fyi04d5nsh8ivd0rn2y0z83ylgc0licz7kifbb6xxi2ylgfs6i4"))
|
||||
(patches (search-patches "linux-pam-no-setfsuid.patch"))))
|
||||
|
||||
(build-system gnu-build-system)
|
||||
(native-inputs
|
||||
`(("flex" ,flex)
|
||||
|
@ -455,8 +458,8 @@ (define-public linux-pam-1.2
|
|||
"Linux-PAM-" version ".tar.bz2"))
|
||||
(sha256
|
||||
(base32
|
||||
"1n9lnf9gjs72kbj1g354v1xhi2j27aqaah15vykh7cnkq08i4arl"))))))
|
||||
|
||||
"1n9lnf9gjs72kbj1g354v1xhi2j27aqaah15vykh7cnkq08i4arl"))
|
||||
(patches (search-patches "linux-pam-no-setfsuid.patch"))))))
|
||||
|
||||
|
||||
;;;
|
||||
|
|
75
gnu/packages/patches/linux-pam-no-setfsuid.patch
Normal file
75
gnu/packages/patches/linux-pam-no-setfsuid.patch
Normal file
|
@ -0,0 +1,75 @@
|
|||
On systems without 'setfsuid', use 'setreuid' instead.
|
||||
|
||||
The patch originates from the Debian project for GNU/Hurd.
|
||||
Authors: Steve Langasek <vorlon@debian.org>
|
||||
Upstream status: A ticket was opened to request apply the patch,
|
||||
ticket: 'https://fedorahosted.org/linux-pam/ticket/64'.
|
||||
|
||||
--- Linux-PAM-1.2.1/libpam/pam_modutil_priv.c 2015-03-24 06:02:32.000000000 -0600
|
||||
+++ pam_modutil_priv-mod.c 2016-09-20 13:36:53.150663205 -0500
|
||||
@@ -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)
|
Loading…
Reference in a new issue