diff options
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | include/libbb.h | 6 | ||||
| -rw-r--r-- | libpwdgrp/pwd_grp.c | 20 | ||||
| -rw-r--r-- | loginutils/passwd.c | 4 | ||||
| -rw-r--r-- | loginutils/sulogin.c | 7 |
5 files changed, 33 insertions, 8 deletions
| @@ -1,8 +1,8 @@ | |||
| 1 | VERSION = 1 | 1 | VERSION = 1 |
| 2 | PATCHLEVEL = 3 | 2 | PATCHLEVEL = 3 |
| 3 | SUBLEVEL = 1 | 3 | SUBLEVEL = 2 |
| 4 | EXTRAVERSION = | 4 | EXTRAVERSION = |
| 5 | NAME = Christmas Tree | 5 | NAME = Unnamed |
| 6 | 6 | ||
| 7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
| 8 | # To see a list of typical targets execute "make help" | 8 | # To see a list of typical targets execute "make help" |
diff --git a/include/libbb.h b/include/libbb.h index 65430d254..1f9be8f61 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
| @@ -46,11 +46,13 @@ | |||
| 46 | #ifdef CONFIG_LOCALE_SUPPORT | 46 | #ifdef CONFIG_LOCALE_SUPPORT |
| 47 | #include <locale.h> | 47 | #include <locale.h> |
| 48 | #else | 48 | #else |
| 49 | #define setlocale(x,y) | 49 | #define setlocale(x,y) ((void)0) |
| 50 | #endif | 50 | #endif |
| 51 | 51 | ||
| 52 | #include "pwd_.h" | 52 | #include "pwd_.h" |
| 53 | #include "grp_.h" | 53 | #include "grp_.h" |
| 54 | /* ifdef it out, because it may include <shadow.h> */ | ||
| 55 | /* and we may not even _have_ <shadow.h>! */ | ||
| 54 | #if ENABLE_FEATURE_SHADOWPASSWDS | 56 | #if ENABLE_FEATURE_SHADOWPASSWDS |
| 55 | #include "shadow_.h" | 57 | #include "shadow_.h" |
| 56 | #endif | 58 | #endif |
| @@ -59,7 +61,7 @@ | |||
| 59 | #include <limits.h> | 61 | #include <limits.h> |
| 60 | #include <sys/param.h> | 62 | #include <sys/param.h> |
| 61 | #ifndef PATH_MAX | 63 | #ifndef PATH_MAX |
| 62 | #define PATH_MAX 256 | 64 | #define PATH_MAX 256 |
| 63 | #endif | 65 | #endif |
| 64 | 66 | ||
| 65 | /* Tested to work correctly (IIRC :]) */ | 67 | /* Tested to work correctly (IIRC :]) */ |
diff --git a/libpwdgrp/pwd_grp.c b/libpwdgrp/pwd_grp.c index ac65d4c5b..ddfdfec2e 100644 --- a/libpwdgrp/pwd_grp.c +++ b/libpwdgrp/pwd_grp.c | |||
| @@ -52,7 +52,9 @@ | |||
| 52 | 52 | ||
| 53 | extern int __parsepwent(void *pw, char *line); | 53 | extern int __parsepwent(void *pw, char *line); |
| 54 | extern int __parsegrent(void *gr, char *line); | 54 | extern int __parsegrent(void *gr, char *line); |
| 55 | #if ENABLE_USE_BB_SHADOW | ||
| 55 | extern int __parsespent(void *sp, char *line); | 56 | extern int __parsespent(void *sp, char *line); |
| 57 | #endif | ||
| 56 | 58 | ||
| 57 | extern int __pgsreader(int (*__parserfunc)(void *d, char *line), void *data, | 59 | extern int __pgsreader(int (*__parserfunc)(void *d, char *line), void *data, |
| 58 | char *__restrict line_buff, size_t buflen, FILE *f); | 60 | char *__restrict line_buff, size_t buflen, FILE *f); |
| @@ -103,6 +105,7 @@ int fgetgrent_r(FILE *__restrict stream, struct group *__restrict resultbuf, | |||
| 103 | return rv; | 105 | return rv; |
| 104 | } | 106 | } |
| 105 | 107 | ||
| 108 | #if ENABLE_USE_BB_SHADOW | ||
| 106 | int fgetspent_r(FILE *__restrict stream, struct spwd *__restrict resultbuf, | 109 | int fgetspent_r(FILE *__restrict stream, struct spwd *__restrict resultbuf, |
| 107 | char *__restrict buffer, size_t buflen, | 110 | char *__restrict buffer, size_t buflen, |
| 108 | struct spwd **__restrict result) | 111 | struct spwd **__restrict result) |
| @@ -117,6 +120,7 @@ int fgetspent_r(FILE *__restrict stream, struct spwd *__restrict resultbuf, | |||
| 117 | 120 | ||
| 118 | return rv; | 121 | return rv; |
| 119 | } | 122 | } |
| 123 | #endif | ||
| 120 | 124 | ||
| 121 | /**********************************************************************/ | 125 | /**********************************************************************/ |
| 122 | /* For the various fget??ent funcs, return NULL on failure and a | 126 | /* For the various fget??ent funcs, return NULL on failure and a |
| @@ -144,6 +148,7 @@ struct group *fgetgrent(FILE *stream) | |||
| 144 | return result; | 148 | return result; |
| 145 | } | 149 | } |
| 146 | 150 | ||
| 151 | #if ENABLE_USE_BB_SHADOW | ||
| 147 | extern int fgetspent_r(FILE *__restrict stream, struct spwd *__restrict resultbuf, | 152 | extern int fgetspent_r(FILE *__restrict stream, struct spwd *__restrict resultbuf, |
| 148 | char *__restrict buffer, size_t buflen, | 153 | char *__restrict buffer, size_t buflen, |
| 149 | struct spwd **__restrict result); | 154 | struct spwd **__restrict result); |
| @@ -184,6 +189,7 @@ int sgetspent_r(const char *string, struct spwd *result_buf, | |||
| 184 | DONE: | 189 | DONE: |
| 185 | return rv; | 190 | return rv; |
| 186 | } | 191 | } |
| 192 | #endif | ||
| 187 | 193 | ||
| 188 | /**********************************************************************/ | 194 | /**********************************************************************/ |
| 189 | 195 | ||
| @@ -207,6 +213,7 @@ int sgetspent_r(const char *string, struct spwd *result_buf, | |||
| 207 | #define DO_GETXXKEY_R_PATHNAME _PATH_GROUP | 213 | #define DO_GETXXKEY_R_PATHNAME _PATH_GROUP |
| 208 | #include "pwd_grp_internal.c" | 214 | #include "pwd_grp_internal.c" |
| 209 | 215 | ||
| 216 | #if ENABLE_USE_BB_SHADOW | ||
| 210 | #define GETXXKEY_R_FUNC getspnam_R | 217 | #define GETXXKEY_R_FUNC getspnam_R |
| 211 | #define GETXXKEY_R_PARSER __parsespent | 218 | #define GETXXKEY_R_PARSER __parsespent |
| 212 | #define GETXXKEY_R_ENTTYPE struct spwd | 219 | #define GETXXKEY_R_ENTTYPE struct spwd |
| @@ -214,6 +221,7 @@ int sgetspent_r(const char *string, struct spwd *result_buf, | |||
| 214 | #define DO_GETXXKEY_R_KEYTYPE const char *__restrict | 221 | #define DO_GETXXKEY_R_KEYTYPE const char *__restrict |
| 215 | #define DO_GETXXKEY_R_PATHNAME _PATH_SHADOW | 222 | #define DO_GETXXKEY_R_PATHNAME _PATH_SHADOW |
| 216 | #include "pwd_grp_internal.c" | 223 | #include "pwd_grp_internal.c" |
| 224 | #endif | ||
| 217 | 225 | ||
| 218 | #define GETXXKEY_R_FUNC getpwuid_R | 226 | #define GETXXKEY_R_FUNC getpwuid_R |
| 219 | #define GETXXKEY_R_PARSER __parsepwent | 227 | #define GETXXKEY_R_PARSER __parsepwent |
| @@ -253,6 +261,7 @@ struct group *getgrgid(gid_t gid) | |||
| 253 | return result; | 261 | return result; |
| 254 | } | 262 | } |
| 255 | 263 | ||
| 264 | #if 0 //ENABLE_USE_BB_SHADOW | ||
| 256 | /* This function is non-standard and is currently not built. It seems | 265 | /* This function is non-standard and is currently not built. It seems |
| 257 | * to have been created as a reentrant version of the non-standard | 266 | * to have been created as a reentrant version of the non-standard |
| 258 | * functions getspuid. Why getspuid was added, I do not know. */ | 267 | * functions getspuid. Why getspuid was added, I do not know. */ |
| @@ -286,6 +295,7 @@ struct spwd *getspuid(uid_t uid) | |||
| 286 | getspuid_r(uid, &resultbuf, buffer, sizeof(buffer), &result); | 295 | getspuid_r(uid, &resultbuf, buffer, sizeof(buffer), &result); |
| 287 | return result; | 296 | return result; |
| 288 | } | 297 | } |
| 298 | #endif | ||
| 289 | 299 | ||
| 290 | struct passwd *getpwnam(const char *name) | 300 | struct passwd *getpwnam(const char *name) |
| 291 | { | 301 | { |
| @@ -307,6 +317,7 @@ struct group *getgrnam(const char *name) | |||
| 307 | return result; | 317 | return result; |
| 308 | } | 318 | } |
| 309 | 319 | ||
| 320 | #if ENABLE_USE_BB_SHADOW | ||
| 310 | struct spwd *getspnam(const char *name) | 321 | struct spwd *getspnam(const char *name) |
| 311 | { | 322 | { |
| 312 | static char buffer[PWD_BUFFER_SIZE]; | 323 | static char buffer[PWD_BUFFER_SIZE]; |
| @@ -316,6 +327,7 @@ struct spwd *getspnam(const char *name) | |||
| 316 | getspnam_r(name, &resultbuf, buffer, sizeof(buffer), &result); | 327 | getspnam_r(name, &resultbuf, buffer, sizeof(buffer), &result); |
| 317 | return result; | 328 | return result; |
| 318 | } | 329 | } |
| 330 | #endif | ||
| 319 | 331 | ||
| 320 | int getpw(uid_t uid, char *buf) | 332 | int getpw(uid_t uid, char *buf) |
| 321 | { | 333 | { |
| @@ -444,6 +456,7 @@ int getgrent_r(struct group *__restrict resultbuf, | |||
| 444 | return rv; | 456 | return rv; |
| 445 | } | 457 | } |
| 446 | 458 | ||
| 459 | #if ENABLE_USE_BB_SHADOW | ||
| 447 | static FILE *spf /*= NULL*/; | 460 | static FILE *spf /*= NULL*/; |
| 448 | void setspent(void) | 461 | void setspent(void) |
| 449 | { | 462 | { |
| @@ -488,6 +501,7 @@ int getspent_r(struct spwd *resultbuf, char *buffer, | |||
| 488 | UNLOCK; | 501 | UNLOCK; |
| 489 | return rv; | 502 | return rv; |
| 490 | } | 503 | } |
| 504 | #endif | ||
| 491 | 505 | ||
| 492 | struct passwd *getpwent(void) | 506 | struct passwd *getpwent(void) |
| 493 | { | 507 | { |
| @@ -509,6 +523,7 @@ struct group *getgrent(void) | |||
| 509 | return result; | 523 | return result; |
| 510 | } | 524 | } |
| 511 | 525 | ||
| 526 | #if ENABLE_USE_BB_SHADOW | ||
| 512 | struct spwd *getspent(void) | 527 | struct spwd *getspent(void) |
| 513 | { | 528 | { |
| 514 | static char line_buff[PWD_BUFFER_SIZE]; | 529 | static char line_buff[PWD_BUFFER_SIZE]; |
| @@ -528,6 +543,7 @@ struct spwd *sgetspent(const char *string) | |||
| 528 | sgetspent_r(string, &spwd, line_buff, sizeof(line_buff), &result); | 543 | sgetspent_r(string, &spwd, line_buff, sizeof(line_buff), &result); |
| 529 | return result; | 544 | return result; |
| 530 | } | 545 | } |
| 546 | #endif | ||
| 531 | 547 | ||
| 532 | int initgroups(const char *user, gid_t gid) | 548 | int initgroups(const char *user, gid_t gid) |
| 533 | { | 549 | { |
| @@ -643,6 +659,7 @@ int putgrent(const struct group *__restrict p, FILE *__restrict f) | |||
| 643 | return rv; | 659 | return rv; |
| 644 | } | 660 | } |
| 645 | 661 | ||
| 662 | #if ENABLE_USE_BB_SHADOW | ||
| 646 | static const unsigned char _sp_off[] = { | 663 | static const unsigned char _sp_off[] = { |
| 647 | offsetof(struct spwd, sp_lstchg), /* 2 - not a char ptr */ | 664 | offsetof(struct spwd, sp_lstchg), /* 2 - not a char ptr */ |
| 648 | offsetof(struct spwd, sp_min), /* 3 - not a char ptr */ | 665 | offsetof(struct spwd, sp_min), /* 3 - not a char ptr */ |
| @@ -688,6 +705,7 @@ int putspent(const struct spwd *p, FILE *stream) | |||
| 688 | DO_UNLOCK: | 705 | DO_UNLOCK: |
| 689 | return rv; | 706 | return rv; |
| 690 | } | 707 | } |
| 708 | #endif | ||
| 691 | 709 | ||
| 692 | /**********************************************************************/ | 710 | /**********************************************************************/ |
| 693 | /* Internal uClibc functions. */ | 711 | /* Internal uClibc functions. */ |
| @@ -846,6 +864,7 @@ int __parsegrent(void *data, char *line) | |||
| 846 | 864 | ||
| 847 | /**********************************************************************/ | 865 | /**********************************************************************/ |
| 848 | 866 | ||
| 867 | #if ENABLE_USE_BB_SHADOW | ||
| 849 | static const unsigned char sp_off[] = { | 868 | static const unsigned char sp_off[] = { |
| 850 | offsetof(struct spwd, sp_namp), /* 0 */ | 869 | offsetof(struct spwd, sp_namp), /* 0 */ |
| 851 | offsetof(struct spwd, sp_pwdp), /* 1 */ | 870 | offsetof(struct spwd, sp_pwdp), /* 1 */ |
| @@ -900,6 +919,7 @@ int __parsespent(void *data, char * line) | |||
| 900 | 919 | ||
| 901 | return EINVAL; | 920 | return EINVAL; |
| 902 | } | 921 | } |
| 922 | #endif | ||
| 903 | 923 | ||
| 904 | /**********************************************************************/ | 924 | /**********************************************************************/ |
| 905 | 925 | ||
diff --git a/loginutils/passwd.c b/loginutils/passwd.c index bcb7f2b26..0d910f56a 100644 --- a/loginutils/passwd.c +++ b/loginutils/passwd.c | |||
| @@ -275,7 +275,8 @@ int passwd_main(int argc, char **argv) | |||
| 275 | } | 275 | } |
| 276 | 276 | ||
| 277 | filename = bb_path_passwd_file; | 277 | filename = bb_path_passwd_file; |
| 278 | if (ENABLE_FEATURE_SHADOWPASSWDS) { | 278 | #if ENABLE_FEATURE_SHADOWPASSWDS |
| 279 | { | ||
| 279 | struct spwd *sp = getspnam(name); | 280 | struct spwd *sp = getspnam(name); |
| 280 | if (!sp) { | 281 | if (!sp) { |
| 281 | /* LOGMODE_BOTH */ | 282 | /* LOGMODE_BOTH */ |
| @@ -287,6 +288,7 @@ int passwd_main(int argc, char **argv) | |||
| 287 | pw->pw_passwd = sp->sp_pwdp; | 288 | pw->pw_passwd = sp->sp_pwdp; |
| 288 | } | 289 | } |
| 289 | } | 290 | } |
| 291 | #endif | ||
| 290 | 292 | ||
| 291 | /* Decide what the new password will be */ | 293 | /* Decide what the new password will be */ |
| 292 | newp = NULL; | 294 | newp = NULL; |
diff --git a/loginutils/sulogin.c b/loginutils/sulogin.c index c07264e7b..8bcb393f5 100644 --- a/loginutils/sulogin.c +++ b/loginutils/sulogin.c | |||
| @@ -41,7 +41,6 @@ int sulogin_main(int argc, char **argv) | |||
| 41 | char *timeout_arg; | 41 | char *timeout_arg; |
| 42 | const char * const *p; | 42 | const char * const *p; |
| 43 | struct passwd *pwd; | 43 | struct passwd *pwd; |
| 44 | struct spwd *spwd; | ||
| 45 | const char *shell; | 44 | const char *shell; |
| 46 | 45 | ||
| 47 | logmode = LOGMODE_BOTH; | 46 | logmode = LOGMODE_BOTH; |
| @@ -75,13 +74,15 @@ int sulogin_main(int argc, char **argv) | |||
| 75 | goto auth_error; | 74 | goto auth_error; |
| 76 | } | 75 | } |
| 77 | 76 | ||
| 78 | if (ENABLE_FEATURE_SHADOWPASSWDS) { | 77 | #if ENABLE_FEATURE_SHADOWPASSWDS |
| 79 | spwd = getspnam(pwd->pw_name); | 78 | { |
| 79 | struct spwd *spwd = getspnam(pwd->pw_name); | ||
| 80 | if (!spwd) { | 80 | if (!spwd) { |
| 81 | goto auth_error; | 81 | goto auth_error; |
| 82 | } | 82 | } |
| 83 | pwd->pw_passwd = spwd->sp_pwdp; | 83 | pwd->pw_passwd = spwd->sp_pwdp; |
| 84 | } | 84 | } |
| 85 | #endif | ||
| 85 | 86 | ||
| 86 | while (1) { | 87 | while (1) { |
| 87 | /* cp points to a static buffer that is zeroed every time */ | 88 | /* cp points to a static buffer that is zeroed every time */ |
