Magellan Linux

Annotation of /trunk/busybox/patches/busybox-1.19.2-chpasswd.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1541 - (hide annotations) (download)
Mon Sep 26 15:52:03 2011 UTC (12 years, 7 months ago) by niro
File size: 1542 byte(s)
-added upstream patches
1 niro 1541 --- 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     }