aboutsummaryrefslogtreecommitdiff
path: root/miscutils
diff options
context:
space:
mode:
Diffstat (limited to 'miscutils')
-rw-r--r--miscutils/crond.c16
-rw-r--r--miscutils/crontab.c31
2 files changed, 8 insertions, 39 deletions
diff --git a/miscutils/crond.c b/miscutils/crond.c
index 637e09dd8..7915b860a 100644
--- a/miscutils/crond.c
+++ b/miscutils/crond.c
@@ -299,6 +299,7 @@ static int
299ChangeUser(const char *user) 299ChangeUser(const char *user)
300{ 300{
301 struct passwd *pas; 301 struct passwd *pas;
302 const char *err_msg;
302 303
303 /* 304 /*
304 * Obtain password entry and change privilages 305 * Obtain password entry and change privilages
@@ -315,18 +316,9 @@ ChangeUser(const char *user)
315 /* 316 /*
316 * Change running state to the user in question 317 * Change running state to the user in question
317 */ 318 */
318 319 err_msg = change_identity_e2str(pas);
319 if (initgroups(user, pas->pw_gid) < 0) { 320 if (err_msg) {
320 crondlog("\011initgroups failed: %s %m", user); 321 crondlog("\011%s for user %s", err_msg, user);
321 return(-1);
322 }
323 /* drop all priviledges */
324 if (setgid(pas->pw_gid) < 0) {
325 crondlog("\011setgid failed: %s %d", user, pas->pw_gid);
326 return(-1);
327 }
328 if (setuid(pas->pw_uid) < 0) {
329 crondlog("\011setuid failed: %s %d", user, pas->pw_uid);
330 return(-1); 322 return(-1);
331 } 323 }
332 if (chdir(pas->pw_dir) < 0) { 324 if (chdir(pas->pw_dir) < 0) {
diff --git a/miscutils/crontab.c b/miscutils/crontab.c
index 6c4da95fe..52d08dda3 100644
--- a/miscutils/crontab.c
+++ b/miscutils/crontab.c
@@ -333,18 +333,6 @@ EditFile(const char *user, const char *file)
333 wait4(pid, NULL, 0, NULL); 333 wait4(pid, NULL, 0, NULL);
334} 334}
335 335
336static void
337log(const char *ctl, ...)
338{
339 va_list va;
340 char buf[1024];
341
342 va_start(va, ctl);
343 vsnprintf(buf, sizeof(buf), ctl, va);
344 syslog(LOG_NOTICE, "%s",buf );
345 va_end(va);
346}
347
348static int 336static int
349ChangeUser(const char *user, short dochdir) 337ChangeUser(const char *user, short dochdir)
350{ 338{
@@ -355,7 +343,7 @@ ChangeUser(const char *user, short dochdir)
355 */ 343 */
356 344
357 if ((pas = getpwnam(user)) == 0) { 345 if ((pas = getpwnam(user)) == 0) {
358 log("failed to get uid for %s", user); 346 bb_perror_msg_and_die("failed to get uid for %s", user);
359 return(-1); 347 return(-1);
360 } 348 }
361 setenv("USER", pas->pw_name, 1); 349 setenv("USER", pas->pw_name, 1);
@@ -365,24 +353,13 @@ ChangeUser(const char *user, short dochdir)
365 /* 353 /*
366 * Change running state to the user in question 354 * Change running state to the user in question
367 */ 355 */
356 change_identity(pas);
368 357
369 if (initgroups(user, pas->pw_gid) < 0) {
370 log("initgroups failed: %s %m", user);
371 return(-1);
372 }
373 if (setregid(pas->pw_gid, pas->pw_gid) < 0) {
374 log("setregid failed: %s %d", user, pas->pw_gid);
375 return(-1);
376 }
377 if (setreuid(pas->pw_uid, pas->pw_uid) < 0) {
378 log("setreuid failed: %s %d", user, pas->pw_uid);
379 return(-1);
380 }
381 if (dochdir) { 358 if (dochdir) {
382 if (chdir(pas->pw_dir) < 0) { 359 if (chdir(pas->pw_dir) < 0) {
360 bb_perror_msg_and_die("chdir failed: %s %s", user, pas->pw_dir);
383 if (chdir(TMPDIR) < 0) { 361 if (chdir(TMPDIR) < 0) {
384 log("chdir failed: %s %s", user, pas->pw_dir); 362 bb_perror_msg_and_die("chdir failed: %s %s", user, TMPDIR);
385 log("chdir failed: %s " TMPDIR, user);
386 return(-1); 363 return(-1);
387 } 364 }
388 } 365 }