aboutsummaryrefslogtreecommitdiff
path: root/loginutils/adduser.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2011-05-13 03:19:01 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2011-05-13 03:19:01 +0200
commit12a432715f066cf9d677316a39c9e0ebc6d72404 (patch)
tree14a33cdedbd6ba7739449cc3dec968b55a01efad /loginutils/adduser.c
parent0806e401d6747c391fa0427e0ccba9951f9a1c3d (diff)
downloadbusybox-w32-12a432715f066cf9d677316a39c9e0ebc6d72404.tar.gz
busybox-w32-12a432715f066cf9d677316a39c9e0ebc6d72404.tar.bz2
busybox-w32-12a432715f066cf9d677316a39c9e0ebc6d72404.zip
adduser: safe username passing to passwd/addgroup
passwd: support creating SHA passwords random code shrink function old new delta crypt_make_pw_salt - 87 +87 adduser_main 883 904 +21 ... crypt_make_salt 99 89 -10 chpasswd_main 329 312 -17 packed_usage 28731 28691 -40 passwd_main 1070 1000 -70 cryptpw_main 310 224 -86 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 4/12 up/down: 154/-288) Total: -134 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'loginutils/adduser.c')
-rw-r--r--loginutils/adduser.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/loginutils/adduser.c b/loginutils/adduser.c
index 1944d9d56..a05b72158 100644
--- a/loginutils/adduser.c
+++ b/loginutils/adduser.c
@@ -82,21 +82,23 @@ static void passwd_study(struct passwd *p)
82 82
83static void addgroup_wrapper(struct passwd *p, const char *group_name) 83static void addgroup_wrapper(struct passwd *p, const char *group_name)
84{ 84{
85 char *argv[5]; 85 char *argv[6];
86 86
87 argv[0] = (char*)"addgroup"; 87 argv[0] = (char*)"addgroup";
88 if (group_name) { 88 if (group_name) {
89 /* Add user to existing group */ 89 /* Add user to existing group */
90 argv[1] = p->pw_name; 90 argv[1] = (char*)"--";
91 argv[2] = (char*)group_name; 91 argv[2] = p->pw_name;
92 argv[3] = NULL; 92 argv[3] = (char*)group_name;
93 argv[4] = NULL;
93 } else { 94 } else {
94 /* Add user to his own group with the first free gid found in passwd_study */ 95 /* Add user to his own group with the first free gid found in passwd_study */
95//TODO: to be compatible with external addgroup programs we should use --gid instead... 96//TODO: to be compatible with external addgroup programs we should use --gid instead...
96 argv[1] = (char*)"-g"; 97 argv[1] = (char*)"-g";
97 argv[2] = utoa(p->pw_gid); 98 argv[2] = utoa(p->pw_gid);
98 argv[3] = p->pw_name; 99 argv[3] = (char*)"--";
99 argv[4] = NULL; 100 argv[4] = p->pw_name;
101 argv[5] = NULL;
100 } 102 }
101 103
102 spawn_and_wait(argv); 104 spawn_and_wait(argv);
@@ -106,7 +108,7 @@ static void passwd_wrapper(const char *login_name) NORETURN;
106 108
107static void passwd_wrapper(const char *login_name) 109static void passwd_wrapper(const char *login_name)
108{ 110{
109 BB_EXECLP("passwd", "passwd", login_name, NULL); 111 BB_EXECLP("passwd", "passwd", "--", login_name, NULL);
110 bb_error_msg_and_die("can't execute passwd, you must set password manually"); 112 bb_error_msg_and_die("can't execute passwd, you must set password manually");
111} 113}
112 114