diff options
| -rw-r--r-- | meta/recipes-extended/pam/libpam/use-utmpx.patch | 233 | ||||
| -rw-r--r-- | meta/recipes-extended/pam/libpam_1.2.1.bb | 4 |
2 files changed, 236 insertions, 1 deletions
diff --git a/meta/recipes-extended/pam/libpam/use-utmpx.patch b/meta/recipes-extended/pam/libpam/use-utmpx.patch new file mode 100644 index 0000000000..dd04bbb844 --- /dev/null +++ b/meta/recipes-extended/pam/libpam/use-utmpx.patch | |||
| @@ -0,0 +1,233 @@ | |||
| 1 | utmp() may not be configured in and use posix compliant utmpx always | ||
| 2 | UTMP is SVID legacy, UTMPX is mandated by POSIX | ||
| 3 | |||
| 4 | Upstream-Status: Pending | ||
| 5 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 6 | Index: Linux-PAM-1.2.1/libpam/pam_modutil_getlogin.c | ||
| 7 | =================================================================== | ||
| 8 | --- Linux-PAM-1.2.1.orig/libpam/pam_modutil_getlogin.c | ||
| 9 | +++ Linux-PAM-1.2.1/libpam/pam_modutil_getlogin.c | ||
| 10 | @@ -10,8 +10,7 @@ | ||
| 11 | |||
| 12 | #include <stdlib.h> | ||
| 13 | #include <unistd.h> | ||
| 14 | -#include <utmp.h> | ||
| 15 | - | ||
| 16 | +#include <utmpx.h> | ||
| 17 | #define _PAMMODUTIL_GETLOGIN "_pammodutil_getlogin" | ||
| 18 | |||
| 19 | const char * | ||
| 20 | @@ -22,7 +21,7 @@ pam_modutil_getlogin(pam_handle_t *pamh) | ||
| 21 | const void *void_curr_tty; | ||
| 22 | const char *curr_tty; | ||
| 23 | char *curr_user; | ||
| 24 | - struct utmp *ut, line; | ||
| 25 | + struct utmpx *ut, line; | ||
| 26 | |||
| 27 | status = pam_get_data(pamh, _PAMMODUTIL_GETLOGIN, &logname); | ||
| 28 | if (status == PAM_SUCCESS) { | ||
| 29 | @@ -48,10 +47,10 @@ pam_modutil_getlogin(pam_handle_t *pamh) | ||
| 30 | } | ||
| 31 | logname = NULL; | ||
| 32 | |||
| 33 | - setutent(); | ||
| 34 | + setutxent(); | ||
| 35 | strncpy(line.ut_line, curr_tty, sizeof(line.ut_line)); | ||
| 36 | |||
| 37 | - if ((ut = getutline(&line)) == NULL) { | ||
| 38 | + if ((ut = getutxline(&line)) == NULL) { | ||
| 39 | goto clean_up_and_go_home; | ||
| 40 | } | ||
| 41 | |||
| 42 | @@ -74,7 +73,7 @@ pam_modutil_getlogin(pam_handle_t *pamh) | ||
| 43 | |||
| 44 | clean_up_and_go_home: | ||
| 45 | |||
| 46 | - endutent(); | ||
| 47 | + endutxent(); | ||
| 48 | |||
| 49 | return logname; | ||
| 50 | } | ||
| 51 | Index: Linux-PAM-1.2.1/modules/pam_issue/pam_issue.c | ||
| 52 | =================================================================== | ||
| 53 | --- Linux-PAM-1.2.1.orig/modules/pam_issue/pam_issue.c | ||
| 54 | +++ Linux-PAM-1.2.1/modules/pam_issue/pam_issue.c | ||
| 55 | @@ -25,7 +25,7 @@ | ||
| 56 | #include <string.h> | ||
| 57 | #include <unistd.h> | ||
| 58 | #include <sys/utsname.h> | ||
| 59 | -#include <utmp.h> | ||
| 60 | +#include <utmpx.h> | ||
| 61 | #include <time.h> | ||
| 62 | #include <syslog.h> | ||
| 63 | |||
| 64 | @@ -246,13 +246,13 @@ read_issue_quoted(pam_handle_t *pamh, FI | ||
| 65 | case 'U': | ||
| 66 | { | ||
| 67 | unsigned int users = 0; | ||
| 68 | - struct utmp *ut; | ||
| 69 | - setutent(); | ||
| 70 | - while ((ut = getutent())) { | ||
| 71 | + struct utmpx *ut; | ||
| 72 | + setutxent(); | ||
| 73 | + while ((ut = getutxent())) { | ||
| 74 | if (ut->ut_type == USER_PROCESS) | ||
| 75 | ++users; | ||
| 76 | } | ||
| 77 | - endutent(); | ||
| 78 | + endutxent(); | ||
| 79 | if (c == 'U') | ||
| 80 | snprintf (buf, sizeof buf, "%u %s", users, | ||
| 81 | (users == 1) ? "user" : "users"); | ||
| 82 | Index: Linux-PAM-1.2.1/modules/pam_lastlog/pam_lastlog.c | ||
| 83 | =================================================================== | ||
| 84 | --- Linux-PAM-1.2.1.orig/modules/pam_lastlog/pam_lastlog.c | ||
| 85 | +++ Linux-PAM-1.2.1/modules/pam_lastlog/pam_lastlog.c | ||
| 86 | @@ -15,8 +15,9 @@ | ||
| 87 | #include <errno.h> | ||
| 88 | #ifdef HAVE_UTMP_H | ||
| 89 | # include <utmp.h> | ||
| 90 | -#else | ||
| 91 | -# include <lastlog.h> | ||
| 92 | +#endif | ||
| 93 | +#ifdef HAVE_UTMPX_H | ||
| 94 | +# include <utmpx.h> | ||
| 95 | #endif | ||
| 96 | #include <pwd.h> | ||
| 97 | #include <stdlib.h> | ||
| 98 | @@ -27,6 +28,12 @@ | ||
| 99 | #include <syslog.h> | ||
| 100 | #include <unistd.h> | ||
| 101 | |||
| 102 | +#ifndef HAVE_UTMP_H | ||
| 103 | +#define UT_LINESIZE 32 | ||
| 104 | +#define UT_HOSTSIZE 32 | ||
| 105 | +#define UT_NAMESIZE 256 | ||
| 106 | +#endif | ||
| 107 | + | ||
| 108 | #if defined(hpux) || defined(sunos) || defined(solaris) | ||
| 109 | # ifndef _PATH_LASTLOG | ||
| 110 | # define _PATH_LASTLOG "/usr/adm/lastlog" | ||
| 111 | @@ -38,7 +45,7 @@ | ||
| 112 | # define UT_LINESIZE 12 | ||
| 113 | # endif /* UT_LINESIZE */ | ||
| 114 | #endif | ||
| 115 | -#if defined(hpux) | ||
| 116 | +#if defined(hpux) || !defined HAVE_UTMP_H | ||
| 117 | struct lastlog { | ||
| 118 | time_t ll_time; | ||
| 119 | char ll_line[UT_LINESIZE]; | ||
| 120 | @@ -447,8 +454,8 @@ last_login_failed(pam_handle_t *pamh, in | ||
| 121 | { | ||
| 122 | int retval; | ||
| 123 | int fd; | ||
| 124 | - struct utmp ut; | ||
| 125 | - struct utmp utuser; | ||
| 126 | + struct utmpx ut; | ||
| 127 | + struct utmpx utuser; | ||
| 128 | int failed = 0; | ||
| 129 | char the_time[256]; | ||
| 130 | char *date = NULL; | ||
| 131 | Index: Linux-PAM-1.2.1/modules/pam_limits/pam_limits.c | ||
| 132 | =================================================================== | ||
| 133 | --- Linux-PAM-1.2.1.orig/modules/pam_limits/pam_limits.c | ||
| 134 | +++ Linux-PAM-1.2.1/modules/pam_limits/pam_limits.c | ||
| 135 | @@ -33,7 +33,7 @@ | ||
| 136 | #include <sys/resource.h> | ||
| 137 | #include <limits.h> | ||
| 138 | #include <glob.h> | ||
| 139 | -#include <utmp.h> | ||
| 140 | +#include <utmpx.h> | ||
| 141 | #ifndef UT_USER /* some systems have ut_name instead of ut_user */ | ||
| 142 | #define UT_USER ut_user | ||
| 143 | #endif | ||
| 144 | @@ -227,7 +227,7 @@ static int | ||
| 145 | check_logins (pam_handle_t *pamh, const char *name, int limit, int ctrl, | ||
| 146 | struct pam_limit_s *pl) | ||
| 147 | { | ||
| 148 | - struct utmp *ut; | ||
| 149 | + struct utmpx *ut; | ||
| 150 | int count; | ||
| 151 | |||
| 152 | if (ctrl & PAM_DEBUG_ARG) { | ||
| 153 | @@ -242,7 +242,7 @@ check_logins (pam_handle_t *pamh, const | ||
| 154 | return LOGIN_ERR; | ||
| 155 | } | ||
| 156 | |||
| 157 | - setutent(); | ||
| 158 | + setutxent(); | ||
| 159 | |||
| 160 | /* Because there is no definition about when an application | ||
| 161 | actually adds a utmp entry, some applications bizarrely do the | ||
| 162 | @@ -260,7 +260,7 @@ check_logins (pam_handle_t *pamh, const | ||
| 163 | count = 1; | ||
| 164 | } | ||
| 165 | |||
| 166 | - while((ut = getutent())) { | ||
| 167 | + while((ut = getutxent())) { | ||
| 168 | #ifdef USER_PROCESS | ||
| 169 | if (ut->ut_type != USER_PROCESS) { | ||
| 170 | continue; | ||
| 171 | @@ -296,7 +296,7 @@ check_logins (pam_handle_t *pamh, const | ||
| 172 | break; | ||
| 173 | } | ||
| 174 | } | ||
| 175 | - endutent(); | ||
| 176 | + endutxent(); | ||
| 177 | if (count > limit) { | ||
| 178 | if (name) { | ||
| 179 | pam_syslog(pamh, LOG_WARNING, | ||
| 180 | Index: Linux-PAM-1.2.1/modules/pam_timestamp/pam_timestamp.c | ||
| 181 | =================================================================== | ||
| 182 | --- Linux-PAM-1.2.1.orig/modules/pam_timestamp/pam_timestamp.c | ||
| 183 | +++ Linux-PAM-1.2.1/modules/pam_timestamp/pam_timestamp.c | ||
| 184 | @@ -56,7 +56,7 @@ | ||
| 185 | #include <time.h> | ||
| 186 | #include <sys/time.h> | ||
| 187 | #include <unistd.h> | ||
| 188 | -#include <utmp.h> | ||
| 189 | +#include <utmpx.h> | ||
| 190 | #include <syslog.h> | ||
| 191 | #include <paths.h> | ||
| 192 | #include "hmacsha1.h" | ||
| 193 | @@ -197,15 +197,15 @@ timestamp_good(time_t then, time_t now, | ||
| 194 | static int | ||
| 195 | check_login_time(const char *ruser, time_t timestamp) | ||
| 196 | { | ||
| 197 | - struct utmp utbuf, *ut; | ||
| 198 | + struct utmpx utbuf, *ut; | ||
| 199 | time_t oldest_login = 0; | ||
| 200 | |||
| 201 | - setutent(); | ||
| 202 | + setutxent(); | ||
| 203 | while( | ||
| 204 | #ifdef HAVE_GETUTENT_R | ||
| 205 | - !getutent_r(&utbuf, &ut) | ||
| 206 | + !getutxent_r(&utbuf, &ut) | ||
| 207 | #else | ||
| 208 | - (ut = getutent()) != NULL | ||
| 209 | + (ut = getutxent()) != NULL | ||
| 210 | #endif | ||
| 211 | ) { | ||
| 212 | if (ut->ut_type != USER_PROCESS) { | ||
| 213 | @@ -218,7 +218,7 @@ check_login_time(const char *ruser, time | ||
| 214 | oldest_login = ut->ut_tv.tv_sec; | ||
| 215 | } | ||
| 216 | } | ||
| 217 | - endutent(); | ||
| 218 | + endutxent(); | ||
| 219 | if(oldest_login == 0 || timestamp < oldest_login) { | ||
| 220 | return PAM_AUTH_ERR; | ||
| 221 | } | ||
| 222 | Index: Linux-PAM-1.2.1/modules/pam_unix/support.c | ||
| 223 | =================================================================== | ||
| 224 | --- Linux-PAM-1.2.1.orig/modules/pam_unix/support.c | ||
| 225 | +++ Linux-PAM-1.2.1/modules/pam_unix/support.c | ||
| 226 | @@ -13,7 +13,6 @@ | ||
| 227 | #include <pwd.h> | ||
| 228 | #include <shadow.h> | ||
| 229 | #include <limits.h> | ||
| 230 | -#include <utmp.h> | ||
| 231 | #include <errno.h> | ||
| 232 | #include <signal.h> | ||
| 233 | #include <ctype.h> | ||
diff --git a/meta/recipes-extended/pam/libpam_1.2.1.bb b/meta/recipes-extended/pam/libpam_1.2.1.bb index ac3097ef7c..0353356568 100644 --- a/meta/recipes-extended/pam/libpam_1.2.1.bb +++ b/meta/recipes-extended/pam/libpam_1.2.1.bb | |||
| @@ -28,7 +28,9 @@ SRC_URI = "http://linux-pam.org/library/Linux-PAM-${PV}.tar.bz2 \ | |||
| 28 | SRC_URI[md5sum] = "9dc53067556d2dd567808fd509519dd6" | 28 | SRC_URI[md5sum] = "9dc53067556d2dd567808fd509519dd6" |
| 29 | SRC_URI[sha256sum] = "342b1211c0d3b203a7df2540a5b03a428a087bd8a48c17e49ae268f992b334d9" | 29 | SRC_URI[sha256sum] = "342b1211c0d3b203a7df2540a5b03a428a087bd8a48c17e49ae268f992b334d9" |
| 30 | 30 | ||
| 31 | SRC_URI_append_libc-uclibc = " file://pam-no-innetgr.patch" | 31 | SRC_URI_append_libc-uclibc = " file://pam-no-innetgr.patch \ |
| 32 | file://use-utmpx.patch" | ||
| 33 | |||
| 32 | SRC_URI_append_libc-musl = " file://pam-no-innetgr.patch" | 34 | SRC_URI_append_libc-musl = " file://pam-no-innetgr.patch" |
| 33 | 35 | ||
| 34 | DEPENDS = "bison flex flex-native cracklib" | 36 | DEPENDS = "bison flex flex-native cracklib" |
