Contents of /trunk/busybox/patches/busybox-1.19.2-chpasswd.patch
Parent Directory | Revision Log
Revision 1541 -
(show annotations)
(download)
Mon Sep 26 15:52:03 2011 UTC (13 years ago) by niro
File size: 1542 byte(s)
Mon Sep 26 15:52:03 2011 UTC (13 years ago) by niro
File size: 1542 byte(s)
-added upstream patches
1 | --- busybox-1.19.2/loginutils/chpasswd.c |
2 | +++ busybox-1.19.2-chpasswd/loginutils/chpasswd.c |
3 | @@ -33,9 +33,8 @@ static const char chpasswd_longopts[] AL |
4 | int chpasswd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
5 | int chpasswd_main(int argc UNUSED_PARAM, char **argv) |
6 | { |
7 | - char *name, *pass; |
8 | - char salt[sizeof("$N$XXXXXXXX")]; |
9 | - int opt, rc; |
10 | + char *name; |
11 | + int opt; |
12 | |
13 | if (getuid() != 0) |
14 | bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); |
15 | @@ -45,6 +44,10 @@ int chpasswd_main(int argc UNUSED_PARAM, |
16 | opt = getopt32(argv, "em"); |
17 | |
18 | while ((name = xmalloc_fgetline(stdin)) != NULL) { |
19 | + char *free_me; |
20 | + char *pass; |
21 | + int rc; |
22 | + |
23 | pass = strchr(name, ':'); |
24 | if (!pass) |
25 | bb_error_msg_and_die("missing new password"); |
26 | @@ -52,7 +55,10 @@ int chpasswd_main(int argc UNUSED_PARAM, |
27 | |
28 | xuname2uid(name); /* dies if there is no such user */ |
29 | |
30 | + free_me = NULL; |
31 | if (!(opt & OPT_ENC)) { |
32 | + char salt[sizeof("$N$XXXXXXXX")]; |
33 | + |
34 | crypt_make_salt(salt, 1); |
35 | if (opt & OPT_MD5) { |
36 | salt[0] = '$'; |
37 | @@ -60,7 +66,7 @@ int chpasswd_main(int argc UNUSED_PARAM, |
38 | salt[2] = '$'; |
39 | crypt_make_salt(salt + 3, 4); |
40 | } |
41 | - pass = pw_encrypt(pass, salt, 0); |
42 | + free_me = pass = pw_encrypt(pass, salt, 0); |
43 | } |
44 | |
45 | /* This is rather complex: if user is not found in /etc/shadow, |
46 | @@ -81,8 +87,7 @@ int chpasswd_main(int argc UNUSED_PARAM, |
47 | bb_info_msg("Password for '%s' changed", name); |
48 | logmode = LOGMODE_STDIO; |
49 | free(name); |
50 | - if (!(opt & OPT_ENC)) |
51 | - free(pass); |
52 | + free(free_me); |
53 | } |
54 | return EXIT_SUCCESS; |
55 | } |