summaryrefslogtreecommitdiff
path: root/loginutils/passwd.c
diff options
context:
space:
mode:
authorDenis Vlasenko2007-03-13 13:01:14 +0000
committerDenis Vlasenko2007-03-13 13:01:14 +0000
commit5df955fce2fbdc5b2acc365a120327ff943403da (patch)
tree41763239e81807259b7532aeef540ebc4804ce3d /loginutils/passwd.c
parentc9c893d4f59418c50c8eb42bd80390026e123dd8 (diff)
downloadbusybox-5df955fce2fbdc5b2acc365a120327ff943403da.zip
busybox-5df955fce2fbdc5b2acc365a120327ff943403da.tar.gz
Do not fail password check if shadow password does not exist -
fall back to ordinary one Reduced usage of functions returning datain static buffers. (mostly passwd/group/shadow related): function old new delta correct_password 143 193 +50 sulogin_main 490 533 +43 adduser_main 732 774 +42 passwd_main 1875 1915 +40 addgroup_main 330 365 +35 bb_internal_getspnam 38 - -38 bb_internal_fgetpwent 38 - -38 bb_internal_fgetgrent 38 - -38 static.resultbuf 168 88 -80 static.buffer 1872 1104 -768 ------------------------------------------------------------------------------ (add/remove: 0/3 grow/shrink: 5/2 up/down: 210/-962) Total: -752 bytes
Diffstat (limited to 'loginutils/passwd.c')
-rw-r--r--loginutils/passwd.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/loginutils/passwd.c b/loginutils/passwd.c
index 4531e63..b937ce4 100644
--- a/loginutils/passwd.c
+++ b/loginutils/passwd.c
@@ -252,6 +252,13 @@ int passwd_main(int argc, char **argv)
struct rlimit rlimit_fsize;
char c;
+#if ENABLE_FEATURE_SHADOWPASSWDS
+ /* Using _r function to avoid pulling in static buffers */
+ struct spwd spw;
+ struct spwd *result;
+ char buffer[256];
+#endif
+
logmode = LOGMODE_BOTH;
openlog(applet_name, LOG_NOWAIT, LOG_AUTH);
opt = getopt32(argc, argv, "a:lud", &opt_a);
@@ -278,17 +285,14 @@ int passwd_main(int argc, char **argv)
filename = bb_path_passwd_file;
#if ENABLE_FEATURE_SHADOWPASSWDS
- {
- struct spwd *sp = getspnam(name);
- if (!sp) {
- /* LOGMODE_BOTH */
- bb_error_msg("no record of %s in %s, using %s",
- name, bb_path_shadow_file,
- bb_path_passwd_file);
- } else {
- filename = bb_path_shadow_file;
- pw->pw_passwd = sp->sp_pwdp;
- }
+ if (getspnam_r(pw->pw_name, &spw, buffer, sizeof(buffer), &result)) {
+ /* LOGMODE_BOTH */
+ bb_error_msg("no record of %s in %s, using %s",
+ name, bb_path_shadow_file,
+ bb_path_passwd_file);
+ } else {
+ filename = bb_path_shadow_file;
+ pw->pw_passwd = spw.sp_pwdp;
}
#endif