aboutsummaryrefslogtreecommitdiff
path: root/miscutils/crontab.c
diff options
context:
space:
mode:
Diffstat (limited to 'miscutils/crontab.c')
-rw-r--r--miscutils/crontab.c31
1 files changed, 4 insertions, 27 deletions
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 }