diff options
Diffstat (limited to 'meta/recipes-extended/pam/libpam/pam-unix-nullok-secure.patch')
-rw-r--r-- | meta/recipes-extended/pam/libpam/pam-unix-nullok-secure.patch | 195 |
1 files changed, 0 insertions, 195 deletions
diff --git a/meta/recipes-extended/pam/libpam/pam-unix-nullok-secure.patch b/meta/recipes-extended/pam/libpam/pam-unix-nullok-secure.patch deleted file mode 100644 index d2cc66882e..0000000000 --- a/meta/recipes-extended/pam/libpam/pam-unix-nullok-secure.patch +++ /dev/null @@ -1,195 +0,0 @@ -From b6545b83f94c5fb7aec1478b8d458a1393f479c8 Mon Sep 17 00:00:00 2001 -From: "Maxin B. John" <maxin.john@intel.com> -Date: Wed, 25 May 2016 14:12:25 +0300 -Subject: [PATCH] pam_unix: support 'nullok_secure' option - -Debian patch to add a new 'nullok_secure' option to pam_unix, -which accepts users with null passwords only when the applicant is -connected from a tty listed in /etc/securetty. - -Authors: Sam Hartman <hartmans@debian.org>, - Steve Langasek <vorlon@debian.org> - -Upstream-Status: Pending - -Signed-off-by: Ming Liu <ming.liu@windriver.com> -Signed-off-by: Amarnath Valluri <amarnath.valluri@intel.com> -Signed-off-by: Maxin B. John <maxin.john@intel.com> ---- - modules/pam_unix/Makefile.am | 3 ++- - modules/pam_unix/pam_unix.8.xml | 19 ++++++++++++++++++- - modules/pam_unix/support.c | 40 +++++++++++++++++++++++++++++++++++----- - modules/pam_unix/support.h | 8 ++++++-- - 4 files changed, 61 insertions(+), 9 deletions(-) - -diff --git a/modules/pam_unix/Makefile.am b/modules/pam_unix/Makefile.am -index 56df178..2bba460 100644 ---- a/modules/pam_unix/Makefile.am -+++ b/modules/pam_unix/Makefile.am -@@ -30,7 +30,8 @@ if HAVE_VERSIONING - pam_unix_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map - endif - pam_unix_la_LIBADD = $(top_builddir)/libpam/libpam.la \ -- @LIBCRYPT@ @LIBSELINUX@ @TIRPC_LIBS@ @NSL_LIBS@ -+ @LIBCRYPT@ @LIBSELINUX@ @TIRPC_LIBS@ @NSL_LIBS@ \ -+ ../pam_securetty/tty_secure.lo - - securelib_LTLIBRARIES = pam_unix.la - -diff --git a/modules/pam_unix/pam_unix.8.xml b/modules/pam_unix/pam_unix.8.xml -index 1b318f1..be0330e 100644 ---- a/modules/pam_unix/pam_unix.8.xml -+++ b/modules/pam_unix/pam_unix.8.xml -@@ -159,7 +159,24 @@ - <para> - The default action of this module is to not permit the - user access to a service if their official password is blank. -- The <option>nullok</option> argument overrides this default. -+ The <option>nullok</option> argument overrides this default -+ and allows any user with a blank password to access the -+ service. -+ </para> -+ </listitem> -+ </varlistentry> -+ <varlistentry> -+ <term> -+ <option>nullok_secure</option> -+ </term> -+ <listitem> -+ <para> -+ The default action of this module is to not permit the -+ user access to a service if their official password is blank. -+ The <option>nullok_secure</option> argument overrides this -+ default and allows any user with a blank password to access -+ the service as long as the value of PAM_TTY is set to one of -+ the values found in /etc/securetty. - </para> - </listitem> - </varlistentry> -diff --git a/modules/pam_unix/support.c b/modules/pam_unix/support.c -index fc8595e..29e3341 100644 ---- a/modules/pam_unix/support.c -+++ b/modules/pam_unix/support.c -@@ -183,13 +183,22 @@ int _set_ctrl(pam_handle_t *pamh, int flags, int *remember, int *rounds, - /* now parse the arguments to this module */ - - for (; argc-- > 0; ++argv) { -+ int sl; - - D(("pam_unix arg: %s", *argv)); - - for (j = 0; j < UNIX_CTRLS_; ++j) { -- if (unix_args[j].token -- && !strncmp(*argv, unix_args[j].token, strlen(unix_args[j].token))) { -- break; -+ if (unix_args[j].token) { -+ sl = strlen(unix_args[j].token); -+ if (unix_args[j].token[sl-1] == '=') { -+ /* exclude argument from comparison */ -+ if (!strncmp(*argv, unix_args[j].token, sl)) -+ break; -+ } else { -+ /* compare full strings */ -+ if (!strcmp(*argv, unix_args[j].token)) -+ break; -+ } - } - } - -@@ -560,6 +569,7 @@ static int _unix_run_helper_binary(pam_handle_t *pamh, const char *passwd, - if (child == 0) { - static char *envp[] = { NULL }; - const char *args[] = { NULL, NULL, NULL, NULL }; -+ int nullok = off(UNIX__NONULL, ctrl); - - /* XXX - should really tidy up PAM here too */ - -@@ -587,7 +597,16 @@ static int _unix_run_helper_binary(pam_handle_t *pamh, const char *passwd, - /* exec binary helper */ - args[0] = CHKPWD_HELPER; - args[1] = user; -- if (off(UNIX__NONULL, ctrl)) { /* this means we've succeeded */ -+ if (on(UNIX_NULLOK_SECURE, ctrl)) { -+ const void *uttyname; -+ retval = pam_get_item(pamh, PAM_TTY, &uttyname); -+ if (retval != PAM_SUCCESS || uttyname == NULL -+ || _pammodutil_tty_secure(pamh, (const char *)uttyname) != PAM_SUCCESS) { -+ nullok = 0; -+ } -+ } -+ -+ if (nullok) { - args[2]="nullok"; - } else { - args[2]="nonull"; -@@ -672,6 +691,17 @@ _unix_blankpasswd (pam_handle_t *pamh, unsigned int ctrl, const char *name) - if (on(UNIX__NONULL, ctrl)) - return 0; /* will fail but don't let on yet */ - -+ if (on(UNIX_NULLOK_SECURE, ctrl)) { -+ int retval2; -+ const void *uttyname; -+ retval2 = pam_get_item(pamh, PAM_TTY, &uttyname); -+ if (retval2 != PAM_SUCCESS || uttyname == NULL) -+ return 0; -+ -+ if (_pammodutil_tty_secure(pamh, (const char *)uttyname) != PAM_SUCCESS) -+ return 0; -+ } -+ - /* UNIX passwords area */ - - retval = get_pwd_hash(pamh, name, &pwd, &salt); -@@ -758,7 +788,7 @@ int _unix_verify_password(pam_handle_t * pamh, const char *name - } - } - } else { -- retval = verify_pwd_hash(p, salt, off(UNIX__NONULL, ctrl)); -+ retval = verify_pwd_hash(p, salt, _unix_blankpasswd(pamh, ctrl, name)); - } - - if (retval == PAM_SUCCESS) { -diff --git a/modules/pam_unix/support.h b/modules/pam_unix/support.h -index b4c279c..8da4a8e 100644 ---- a/modules/pam_unix/support.h -+++ b/modules/pam_unix/support.h -@@ -98,8 +98,9 @@ typedef struct { - #define UNIX_QUIET 28 /* Don't print informational messages */ - #define UNIX_NO_PASS_EXPIRY 29 /* Don't check for password expiration if not used for authentication */ - #define UNIX_DES 30 /* DES, default */ -+#define UNIX_NULLOK_SECURE 31 /* NULL passwords allowed only on secure ttys */ - /* -------------- */ --#define UNIX_CTRLS_ 31 /* number of ctrl arguments defined */ -+#define UNIX_CTRLS_ 32 /* number of ctrl arguments defined */ - - #define UNIX_DES_CRYPT(ctrl) (off(UNIX_MD5_PASS,ctrl)&&off(UNIX_BIGCRYPT,ctrl)&&off(UNIX_SHA256_PASS,ctrl)&&off(UNIX_SHA512_PASS,ctrl)&&off(UNIX_BLOWFISH_PASS,ctrl)) - -@@ -117,7 +118,7 @@ static const UNIX_Ctrls unix_args[UNIX_CTRLS_] = - /* UNIX_AUTHTOK_TYPE */ {"authtok_type=", _ALL_ON_, 0100, 0}, - /* UNIX__PRELIM */ {NULL, _ALL_ON_^(0600), 0200, 0}, - /* UNIX__UPDATE */ {NULL, _ALL_ON_^(0600), 0400, 0}, --/* UNIX__NONULL */ {NULL, _ALL_ON_, 01000, 0}, -+/* UNIX__NONULL */ {NULL, _ALL_ON_^(02000000000), 01000, 0}, - /* UNIX__QUIET */ {NULL, _ALL_ON_, 02000, 0}, - /* UNIX_USE_AUTHTOK */ {"use_authtok", _ALL_ON_, 04000, 0}, - /* UNIX_SHADOW */ {"shadow", _ALL_ON_, 010000, 0}, -@@ -139,6 +140,7 @@ static const UNIX_Ctrls unix_args[UNIX_CTRLS_] = - /* UNIX_QUIET */ {"quiet", _ALL_ON_, 01000000000, 0}, - /* UNIX_NO_PASS_EXPIRY */ {"no_pass_expiry", _ALL_ON_, 02000000000, 0}, - /* UNIX_DES */ {"des", _ALL_ON_^(0260420000), 0, 1}, -+/* UNIX_NULLOK_SECURE */ {"nullok_secure", _ALL_ON_^(01000), 02000000000, 0}, - }; - - #define UNIX_DEFAULTS (unix_args[UNIX__NONULL].flag) -@@ -172,6 +174,8 @@ extern int _unix_read_password(pam_handle_t * pamh - ,const char *data_name - ,const void **pass); - -+extern int _pammodutil_tty_secure(const pam_handle_t *pamh, const char *uttyname); -+ - extern int _unix_run_verify_binary(pam_handle_t *pamh, - unsigned int ctrl, const char *user, int *daysleft); - #endif /* _PAM_UNIX_SUPPORT_H */ --- -2.4.0 - |