diff --git a/SOURCES/pam-1.1.8-faillock-never.patch b/SOURCES/pam-1.1.8-faillock-never.patch new file mode 100644 index 0000000..be84329 --- /dev/null +++ b/SOURCES/pam-1.1.8-faillock-never.patch @@ -0,0 +1,91 @@ +diff -up Linux-PAM-1.1.8/modules/pam_faillock/pam_faillock.c.never Linux-PAM-1.1.8/modules/pam_faillock/pam_faillock.c +--- Linux-PAM-1.1.8/modules/pam_faillock/pam_faillock.c.never 2016-03-03 10:01:15.000000000 +0100 ++++ Linux-PAM-1.1.8/modules/pam_faillock/pam_faillock.c 2016-04-22 14:31:34.239752334 +0200 +@@ -125,17 +125,26 @@ args_parse(pam_handle_t *pamh, int argc, + } + else if (strncmp(argv[i], "unlock_time=", 12) == 0) { + unsigned int temp; +- if (sscanf(argv[i]+12, "%u", &temp) != 1 || ++ ++ if (strcmp(argv[i]+12, "never") == 0) { ++ opts->unlock_time = 0; ++ } ++ else if (sscanf(argv[i]+12, "%u", &temp) != 1 || + temp > MAX_TIME_INTERVAL) { + pam_syslog(pamh, LOG_ERR, + "Bad number supplied for unlock_time argument"); +- } else { ++ } ++ else { + opts->unlock_time = temp; + } + } + else if (strncmp(argv[i], "root_unlock_time=", 17) == 0) { + unsigned int temp; +- if (sscanf(argv[i]+17, "%u", &temp) != 1 || ++ ++ if (strcmp(argv[i]+17, "never") == 0) { ++ opts->root_unlock_time = 0; ++ } ++ else if (sscanf(argv[i]+17, "%u", &temp) != 1 || + temp > MAX_TIME_INTERVAL) { + pam_syslog(pamh, LOG_ERR, + "Bad number supplied for root_unlock_time argument"); +@@ -258,8 +267,8 @@ check_tally(pam_handle_t *pamh, struct o + } + + if (opts->deny && failures >= opts->deny) { +- if ((opts->uid && latest_time + opts->unlock_time < opts->now) || +- (!opts->uid && latest_time + opts->root_unlock_time < opts->now)) { ++ if ((opts->uid && opts->unlock_time && latest_time + opts->unlock_time < opts->now) || ++ (!opts->uid && opts->root_unlock_time && latest_time + opts->root_unlock_time < opts->now)) { + #ifdef HAVE_LIBAUDIT + if (opts->action != FAILLOCK_ACTION_PREAUTH) { /* do not audit in preauth */ + char buf[64]; +@@ -420,11 +429,17 @@ faillock_message(pam_handle_t *pamh, str + left = opts->latest_time + opts->root_unlock_time - opts->now; + } + +- left /= 60; /* minutes */ ++ if (left > 0) { ++ left = (left + 59)/60; /* minutes */ + +- pam_info(pamh, _("Account temporarily locked due to %d failed logins"), +- opts->failures); +- pam_info(pamh, _("(%d minutes left to unlock)"), (int)left); ++ pam_info(pamh, _("Account temporarily locked due to %d failed logins"), ++ opts->failures); ++ pam_info(pamh, _("(%d minutes left to unlock)"), (int)left); ++ } ++ else { ++ pam_info(pamh, _("Account locked due to %d failed logins"), ++ opts->failures); ++ } + } + } + +diff -up Linux-PAM-1.1.8/modules/pam_faillock/pam_faillock.8.xml.never Linux-PAM-1.1.8/modules/pam_faillock/pam_faillock.8.xml +--- Linux-PAM-1.1.8/modules/pam_faillock/pam_faillock.8.xml.never 2016-04-22 15:25:57.000000000 +0200 ++++ Linux-PAM-1.1.8/modules/pam_faillock/pam_faillock.8.xml 2016-04-28 16:43:14.109794294 +0200 +@@ -201,6 +201,21 @@ + n seconds after the lock out. + The default is 600 (10 minutes). + ++ ++ If the n is set to never or 0 ++ the access will not be reenabled at all until administrator ++ explicitly reenables it with the faillock command. ++ Note though that the default directory that pam_faillock ++ uses is usually cleared on system boot so the access will be also reenabled ++ after system reboot. If that is undesirable a different tally directory ++ must be set with the option. ++ ++ ++ Also note that it is usually undesirable to permanently lock ++ out the users as they can become easily a target of denial of service ++ attack unless the usernames are random and kept secret to potential ++ attackers. ++ + + + diff --git a/SOURCES/pam-1.1.8-lastlog-localtime.patch b/SOURCES/pam-1.1.8-lastlog-localtime.patch new file mode 100644 index 0000000..8108ff2 --- /dev/null +++ b/SOURCES/pam-1.1.8-lastlog-localtime.patch @@ -0,0 +1,22 @@ +diff -up Linux-PAM-1.1.8/modules/pam_lastlog/pam_lastlog.c.localtime Linux-PAM-1.1.8/modules/pam_lastlog/pam_lastlog.c +--- Linux-PAM-1.1.8/modules/pam_lastlog/pam_lastlog.c.localtime 2016-03-03 10:01:15.000000000 +0100 ++++ Linux-PAM-1.1.8/modules/pam_lastlog/pam_lastlog.c 2016-04-22 15:24:10.085018141 +0200 +@@ -276,12 +276,12 @@ last_login_read(pam_handle_t *pamh, int + time_t ll_time; + + ll_time = last_login.ll_time; +- tm = localtime_r (&ll_time, &tm_buf); +- strftime (the_time, sizeof (the_time), +- /* TRANSLATORS: "strftime options for date of last login" */ +- _(" %a %b %e %H:%M:%S %Z %Y"), tm); +- +- date = the_time; ++ if ((tm = localtime_r (&ll_time, &tm_buf)) != NULL) { ++ strftime (the_time, sizeof (the_time), ++ /* TRANSLATORS: "strftime options for date of last login" */ ++ _(" %a %b %e %H:%M:%S %Z %Y"), tm); ++ date = the_time; ++ } + } + + /* we want & have the host? */ diff --git a/SOURCES/pam-1.1.8-loginuid-log-auditd.patch b/SOURCES/pam-1.1.8-loginuid-log-auditd.patch new file mode 100644 index 0000000..6ccadc7 --- /dev/null +++ b/SOURCES/pam-1.1.8-loginuid-log-auditd.patch @@ -0,0 +1,19 @@ +diff -up Linux-PAM-1.1.8/modules/pam_loginuid/pam_loginuid.c.log-auditd Linux-PAM-1.1.8/modules/pam_loginuid/pam_loginuid.c +--- Linux-PAM-1.1.8/modules/pam_loginuid/pam_loginuid.c.log-auditd 2013-06-18 16:11:21.000000000 +0200 ++++ Linux-PAM-1.1.8/modules/pam_loginuid/pam_loginuid.c 2016-04-22 14:21:35.868204427 +0200 +@@ -195,9 +195,12 @@ _pam_loginuid(pam_handle_t *pamh, int fl + argv++; + } + +- if (require_auditd) +- return check_auditd(); +- else ++ if (require_auditd) { ++ int rc = check_auditd(); ++ if (rc != PAM_SUCCESS) ++ pam_syslog(pamh, LOG_ERR, "required running auditd not detected"); ++ return rc; ++ } else + #endif + return PAM_SUCCESS; + } diff --git a/SOURCES/pam-1.1.8-man-delay.patch b/SOURCES/pam-1.1.8-man-delay.patch new file mode 100644 index 0000000..5a4833a --- /dev/null +++ b/SOURCES/pam-1.1.8-man-delay.patch @@ -0,0 +1,30 @@ +diff -up Linux-PAM-1.1.8/doc/man/pam_fail_delay.3.xml.delay Linux-PAM-1.1.8/doc/man/pam_fail_delay.3.xml +--- Linux-PAM-1.1.8/doc/man/pam_fail_delay.3.xml.delay 2013-06-18 16:11:21.000000000 +0200 ++++ Linux-PAM-1.1.8/doc/man/pam_fail_delay.3.xml 2016-05-30 12:08:40.708053159 +0200 +@@ -39,7 +39,7 @@ + + pam_authenticate3 + fail, the failing return to the application is +- delayed by an amount of time randomly distributed (by up to 25%) ++ delayed by an amount of time randomly distributed (by up to 50%) + about this longest value. + + +@@ -135,7 +135,7 @@ void (*delay_fn)(int retval, unsigned us + + + if the modules do not request a delay, the failure delay will be +- between 2.25 and 3.75 seconds. ++ between 1.5 and 4.5 seconds. + + + +@@ -150,7 +150,7 @@ module #2: pam_fail_delay (pamh, 4000 + + + in this case, it is the largest requested value that is used to +- compute the actual failed delay: here between 3 and 5 seconds. ++ compute the actual failed delay: here between 2 and 6 seconds. + + + diff --git a/SOURCES/pam-1.1.8-man-environment.patch b/SOURCES/pam-1.1.8-man-environment.patch new file mode 100644 index 0000000..d869211 --- /dev/null +++ b/SOURCES/pam-1.1.8-man-environment.patch @@ -0,0 +1,78 @@ +diff -up Linux-PAM-1.1.8/modules/pam_env/Makefile.am.environment Linux-PAM-1.1.8/modules/pam_env/Makefile.am +--- Linux-PAM-1.1.8/modules/pam_env/Makefile.am.environment 2013-06-18 16:11:21.000000000 +0200 ++++ Linux-PAM-1.1.8/modules/pam_env/Makefile.am 2016-04-22 14:10:49.921649262 +0200 +@@ -7,7 +7,7 @@ MAINTAINERCLEANFILES = $(MANS) README + + EXTRA_DIST = README pam_env.conf $(MANS) $(XMLS) tst-pam_env environment + +-man_MANS = pam_env.conf.5 pam_env.8 ++man_MANS = pam_env.conf.5 pam_env.8 environment.5 + + XMLS = README.xml pam_env.conf.5.xml pam_env.8.xml + +@@ -30,6 +30,7 @@ sysconf_DATA = environment + if ENABLE_REGENERATE_MAN + noinst_DATA = README + README: pam_env.8.xml pam_env.conf.5.xml ++environment.5: pam_env.conf.5.xml + -include $(top_srcdir)/Make.xml.rules + endif + +diff -up Linux-PAM-1.1.8/modules/pam_env/Makefile.in.environment Linux-PAM-1.1.8/modules/pam_env/Makefile.in +--- Linux-PAM-1.1.8/modules/pam_env/Makefile.in.environment 2016-04-22 14:14:41.475866891 +0200 ++++ Linux-PAM-1.1.8/modules/pam_env/Makefile.in 2016-04-22 14:13:58.239892651 +0200 +@@ -285,7 +285,7 @@ top_srcdir = @top_srcdir@ + CLEANFILES = *~ + MAINTAINERCLEANFILES = $(MANS) README + EXTRA_DIST = README pam_env.conf $(MANS) $(XMLS) tst-pam_env environment +-man_MANS = pam_env.conf.5 pam_env.8 ++man_MANS = pam_env.conf.5 pam_env.8 environment.5 + XMLS = README.xml pam_env.conf.5.xml pam_env.8.xml + securelibdir = $(SECUREDIR) + secureconfdir = $(SCONFIGDIR) +@@ -836,6 +836,7 @@ uninstall-man: uninstall-man5 uninstall- + uninstall-sysconfDATA + + @ENABLE_REGENERATE_MAN_TRUE@README: pam_env.8.xml pam_env.conf.5.xml ++@ENABLE_REGENERATE_MAN_TRUE@environment.5: pam_env.conf.5.xml + @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules + + # Tell versions [3.59,3.63) of GNU make to not export all variables. +diff -up Linux-PAM-1.1.8/modules/pam_env/pam_env.conf.5.xml.environment Linux-PAM-1.1.8/modules/pam_env/pam_env.conf.5.xml +--- Linux-PAM-1.1.8/modules/pam_env/pam_env.conf.5.xml.environment 2013-06-18 16:11:21.000000000 +0200 ++++ Linux-PAM-1.1.8/modules/pam_env/pam_env.conf.5.xml 2016-04-22 14:12:49.150335851 +0200 +@@ -12,7 +12,8 @@ + + + pam_env.conf +- the environment variables config file ++ environment ++ the environment variables config files + + + +@@ -58,6 +59,14 @@ + at front) can be used to mark this line as a comment line. + + ++ ++ The /etc/environment file specifies ++ the environment variables to be set. The file must consist of simple ++ NAME=VALUE pairs on separate lines. ++ The pam_env8 ++ module will read the file after the pam_env.conf ++ file. ++ + + + +@@ -110,7 +119,8 @@ + + pam_env8, + pam.d5, +- pam8 ++ pam8, ++ environ7 + + + diff --git a/SOURCES/pam-1.1.8-relax-audit.patch b/SOURCES/pam-1.1.8-relax-audit.patch new file mode 100644 index 0000000..8355fa4 --- /dev/null +++ b/SOURCES/pam-1.1.8-relax-audit.patch @@ -0,0 +1,12 @@ +diff -up Linux-PAM-1.1.8/libpam/pam_audit.c.relax-audit Linux-PAM-1.1.8/libpam/pam_audit.c +--- Linux-PAM-1.1.8/libpam/pam_audit.c.relax-audit 2016-03-03 10:01:15.000000000 +0100 ++++ Linux-PAM-1.1.8/libpam/pam_audit.c 2016-04-22 15:18:55.692925308 +0200 +@@ -53,7 +53,7 @@ _pam_audit_writelog(pam_handle_t *pamh, + pamh->audit_state |= PAMAUDIT_LOGGED; + + if (rc < 0) { +- if (rc == -EPERM && getuid() != 0) ++ if (rc == -EPERM) + return 0; + if (errno != old_errno) { + old_errno = errno; diff --git a/SOURCES/pam-1.1.8-succeed-if-large-uid.patch b/SOURCES/pam-1.1.8-succeed-if-large-uid.patch new file mode 100644 index 0000000..74ec3f3 --- /dev/null +++ b/SOURCES/pam-1.1.8-succeed-if-large-uid.patch @@ -0,0 +1,85 @@ +diff -up Linux-PAM-1.1.8/modules/pam_succeed_if/pam_succeed_if.c.large-uid Linux-PAM-1.1.8/modules/pam_succeed_if/pam_succeed_if.c +--- Linux-PAM-1.1.8/modules/pam_succeed_if/pam_succeed_if.c.large-uid 2013-06-18 16:11:21.000000000 +0200 ++++ Linux-PAM-1.1.8/modules/pam_succeed_if/pam_succeed_if.c 2016-07-19 15:00:57.366549150 +0200 +@@ -68,20 +68,20 @@ + * PAM_SERVICE_ERR if the arguments can't be parsed as numbers. */ + static int + evaluate_num(const pam_handle_t *pamh, const char *left, +- const char *right, int (*cmp)(int, int)) ++ const char *right, int (*cmp)(long long, long long)) + { +- long l, r; ++ long long l, r; + char *p; + int ret = PAM_SUCCESS; + + errno = 0; +- l = strtol(left, &p, 0); ++ l = strtoll(left, &p, 0); + if ((p == NULL) || (*p != '\0') || errno) { + pam_syslog(pamh, LOG_INFO, "\"%s\" is not a number", left); + ret = PAM_SERVICE_ERR; + } + +- r = strtol(right, &p, 0); ++ r = strtoll(right, &p, 0); + if ((p == NULL) || (*p != '\0') || errno) { + pam_syslog(pamh, LOG_INFO, "\"%s\" is not a number", right); + ret = PAM_SERVICE_ERR; +@@ -96,32 +96,32 @@ evaluate_num(const pam_handle_t *pamh, c + + /* Simple numeric comparison callbacks. */ + static int +-eq(int i, int j) ++eq(long long i, long long j) + { + return i == j; + } + static int +-ne(int i, int j) ++ne(long long i, long long j) + { + return i != j; + } + static int +-lt(int i, int j) ++lt(long long i, long long j) + { + return i < j; + } + static int +-le(int i, int j) ++le(long long i, long long j) + { + return lt(i, j) || eq(i, j); + } + static int +-gt(int i, int j) ++gt(long long i, long long j) + { + return i > j; + } + static int +-ge(int i, int j) ++ge(long long i, long long j) + { + return gt(i, j) || eq(i, j); + } +@@ -298,7 +298,7 @@ evaluate(pam_handle_t *pamh, int debug, + } + if (strcasecmp(left, "rhost") == 0) { + const void *rhost; +- if (pam_get_item(pamh, PAM_SERVICE, &rhost) != PAM_SUCCESS || ++ if (pam_get_item(pamh, PAM_RHOST, &rhost) != PAM_SUCCESS || + rhost == NULL) + rhost = ""; + snprintf(buf, sizeof(buf), "%s", (const char *)rhost); +@@ -306,7 +306,7 @@ evaluate(pam_handle_t *pamh, int debug, + } + if (strcasecmp(left, "tty") == 0) { + const void *tty; +- if (pam_get_item(pamh, PAM_SERVICE, &tty) != PAM_SUCCESS || ++ if (pam_get_item(pamh, PAM_TTY, &tty) != PAM_SUCCESS || + tty == NULL) + tty = ""; + snprintf(buf, sizeof(buf), "%s", (const char *)tty); diff --git a/SOURCES/pam-1.1.8-unix-expiry.patch b/SOURCES/pam-1.1.8-unix-expiry.patch new file mode 100644 index 0000000..7e0e9f0 --- /dev/null +++ b/SOURCES/pam-1.1.8-unix-expiry.patch @@ -0,0 +1,134 @@ +diff -up Linux-PAM-1.1.8/modules/pam_unix/pam_unix_acct.c.expiry Linux-PAM-1.1.8/modules/pam_unix/pam_unix_acct.c +--- Linux-PAM-1.1.8/modules/pam_unix/pam_unix_acct.c.expiry 2016-03-03 09:58:52.677684261 +0100 ++++ Linux-PAM-1.1.8/modules/pam_unix/pam_unix_acct.c 2016-03-03 09:58:52.712685101 +0100 +@@ -244,6 +244,19 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int + } else + retval = check_shadow_expiry(pamh, spent, &daysleft); + ++ if (on(UNIX_NO_PASS_EXPIRY, ctrl)) { ++ const void *pretval = NULL; ++ int authrv = PAM_AUTHINFO_UNAVAIL; /* authentication not called */ ++ ++ if (pam_get_data(pamh, "unix_setcred_return", &pretval) == PAM_SUCCESS ++ && pretval) ++ authrv = *(const int *)pretval; ++ ++ if (authrv != PAM_SUCCESS ++ && (retval == PAM_NEW_AUTHTOK_REQD || retval == PAM_AUTHTOK_EXPIRED)) ++ retval = PAM_SUCCESS; ++ } ++ + switch (retval) { + case PAM_ACCT_EXPIRED: + pam_syslog(pamh, LOG_NOTICE, +diff -up Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c.expiry Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c +--- Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c.expiry 2013-06-18 16:11:21.000000000 +0200 ++++ Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c 2016-03-03 09:58:52.712685101 +0100 +@@ -82,14 +82,13 @@ + + #define AUTH_RETURN \ + do { \ +- if (on(UNIX_LIKE_AUTH, ctrl) && ret_data) { \ ++ if (ret_data) { \ + D(("recording return code for next time [%d]", \ + retval)); \ + *ret_data = retval; \ + pam_set_data(pamh, "unix_setcred_return", \ + (void *) ret_data, setcred_free); \ +- } else if (ret_data) \ +- free (ret_data); \ ++ } \ + D(("done. [%s]", pam_strerror(pamh, retval))); \ + return retval; \ + } while (0) +@@ -115,9 +114,8 @@ pam_sm_authenticate(pam_handle_t *pamh, + ctrl = _set_ctrl(pamh, flags, NULL, NULL, NULL, argc, argv); + + /* Get a few bytes so we can pass our return value to +- pam_sm_setcred(). */ +- if (on(UNIX_LIKE_AUTH, ctrl)) +- ret_data = malloc(sizeof(int)); ++ pam_sm_setcred() and pam_sm_acct_mgmt(). */ ++ ret_data = malloc(sizeof(int)); + + /* get the user'name' */ + +@@ -194,20 +192,24 @@ pam_sm_authenticate(pam_handle_t *pamh, + */ + + int +-pam_sm_setcred (pam_handle_t *pamh, int flags UNUSED, +- int argc UNUSED, const char **argv UNUSED) ++pam_sm_setcred (pam_handle_t *pamh, int flags, ++ int argc, const char **argv) + { + int retval; + const void *pretval = NULL; ++ unsigned int ctrl; + + D(("called.")); + ++ ctrl = _set_ctrl(pamh, flags, NULL, NULL, NULL, argc, argv); ++ + retval = PAM_SUCCESS; + + D(("recovering return code from auth call")); + /* We will only find something here if UNIX_LIKE_AUTH is set -- + don't worry about an explicit check of argv. */ +- if (pam_get_data(pamh, "unix_setcred_return", &pretval) == PAM_SUCCESS ++ if (on(UNIX_LIKE_AUTH, ctrl) ++ && pam_get_data(pamh, "unix_setcred_return", &pretval) == PAM_SUCCESS + && pretval) { + retval = *(const int *)pretval; + pam_set_data(pamh, "unix_setcred_return", NULL, NULL); +diff -up Linux-PAM-1.1.8/modules/pam_unix/pam_unix.8.xml.expiry Linux-PAM-1.1.8/modules/pam_unix/pam_unix.8.xml +--- Linux-PAM-1.1.8/modules/pam_unix/pam_unix.8.xml.expiry 2016-03-03 09:58:52.710685053 +0100 ++++ Linux-PAM-1.1.8/modules/pam_unix/pam_unix.8.xml 2016-03-03 09:58:52.712685101 +0100 +@@ -346,6 +346,25 @@ + + + ++ ++ ++ ++ ++ ++ ++ When set ignore password expiration as defined by the ++ shadow entry of the user. The option has an ++ effect only in case pam_unix was not used ++ for the authentication or it returned authentication failure ++ meaning that other authentication source or method succeeded. ++ The example can be public key authentication in ++ sshd. The module will return ++ PAM_SUCCESS instead of eventual ++ PAM_NEW_AUTHTOK_REQD or ++ PAM_AUTHTOK_EXPIRED. ++ ++ ++ + + + Invalid arguments are logged with +diff -up Linux-PAM-1.1.8/modules/pam_unix/support.h.expiry Linux-PAM-1.1.8/modules/pam_unix/support.h +--- Linux-PAM-1.1.8/modules/pam_unix/support.h.expiry 2016-03-03 09:58:52.712685101 +0100 ++++ Linux-PAM-1.1.8/modules/pam_unix/support.h 2016-03-03 10:00:31.642061166 +0100 +@@ -97,8 +97,9 @@ typedef struct { + password hash algorithms */ + #define UNIX_BLOWFISH_PASS 26 /* new password hashes will use blowfish */ + #define UNIX_MIN_PASS_LEN 27 /* min length for password */ ++#define UNIX_NO_PASS_EXPIRY 28 /* Don't check for password expiration if not used for authentication */ + /* -------------- */ +-#define UNIX_CTRLS_ 28 /* number of ctrl arguments defined */ ++#define UNIX_CTRLS_ 29 /* 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)) + +@@ -135,6 +136,7 @@ static const UNIX_Ctrls unix_args[UNIX_C + /* UNIX_ALGO_ROUNDS */ {"rounds=", _ALL_ON_, 0100000000, 0}, + /* UNIX_BLOWFISH_PASS */ {"blowfish", _ALL_ON_^(0260420000), 0200000000, 1}, + /* UNIX_MIN_PASS_LEN */ {"minlen=", _ALL_ON_, 0400000000, 0}, ++/* UNIX_NO_PASS_EXPIRY */ {"no_pass_expiry", _ALL_ON_, 02000000000, 0}, + }; + + #define UNIX_DEFAULTS (unix_args[UNIX__NONULL].flag) diff --git a/SPECS/pam.spec b/SPECS/pam.spec index f6f1c57..0cbf153 100644 --- a/SPECS/pam.spec +++ b/SPECS/pam.spec @@ -3,7 +3,7 @@ Summary: An extensible library which provides authentication for applications Name: pam Version: 1.1.8 -Release: 12%{?dist}.1 +Release: 18%{?dist} # The library is BSD licensed with option to relicense as GPLv2+ # - this option is redundant as the BSD license allows that anyway. # pam_timestamp, pam_loginuid, and pam_console modules are GPLv2+. @@ -56,6 +56,14 @@ Patch41: pam-1.1.8-limits-check-process.patch Patch42: pam-1.1.8-limits-docfix.patch Patch43: pam-1.1.8-audit-user-mgmt.patch Patch44: pam-1.1.8-cve-2015-3238.patch +Patch45: pam-1.1.8-unix-expiry.patch +Patch46: pam-1.1.8-man-environment.patch +Patch47: pam-1.1.8-loginuid-log-auditd.patch +Patch48: pam-1.1.8-faillock-never.patch +Patch49: pam-1.1.8-relax-audit.patch +Patch50: pam-1.1.8-lastlog-localtime.patch +Patch51: pam-1.1.8-man-delay.patch +Patch52: pam-1.1.8-succeed-if-large-uid.patch %define _pamlibdir %{_libdir} %define _moduledir %{_libdir}/security @@ -145,6 +153,14 @@ mv pam-redhat-%{pam_redhat_version}/* modules %patch42 -p1 -b .docfix %patch43 -p1 -b .audit-user-mgmt %patch44 -p1 -b .password-limit +%patch45 -p1 -b .expiry +%patch46 -p1 -b .man-environment +%patch47 -p1 -b .log-auditd +%patch48 -p1 -b .never +%patch49 -p1 -b .relax-audit +%patch50 -p1 -b .localtime +%patch51 -p1 -b .delay +%patch52 -p1 -b .large-uid %build autoreconf -i @@ -393,7 +409,25 @@ fi %doc doc/adg/*.txt doc/adg/html %changelog -* Tue Aug 4 2015 Tomáš Mráz 1.1.8-12.1 +* Tue Jul 19 2016 Tomáš Mráz 1.1.8-18 +- pam_succeed_if: fix handling of large uids, tty, and rhost + +* Mon May 30 2016 Tomáš Mráz 1.1.8-17 +- fix pam_fail_delay() manual page (#1130053) + +* Thu Apr 28 2016 Tomáš Mráz 1.1.8-15 +- pam_faillock: support permanent locking of user with + unlock_time=never option + +* Fri Apr 22 2016 Tomáš Mráz 1.1.8-14 +- pam_unix: add no_pass_expiry option for ignoring password + expiration in crond and sshd with public key authentication +- add manual page for environment(5) (#1110257) +- pam_loginuid: log if auditd not detected +- always ignore audit error when -EPERM is returned (#1287800) +- pam_lastlog: fix possible NULL dereference when localtime fails (#1313537) + +* Tue Aug 4 2015 Tomáš Mráz 1.1.8-13 - fix CVE-2015-3238 - DoS due to blocking pipe with very long password * Fri Oct 17 2014 Tomáš Mráz 1.1.8-12