diff options
| author | Glenn L McGrath <bug1@ihug.co.nz> | 2003-09-03 12:18:42 +0000 |
|---|---|---|
| committer | Glenn L McGrath <bug1@ihug.co.nz> | 2003-09-03 12:18:42 +0000 |
| commit | 99bd5adf995ee0f83bdda92384137ae810c4c92b (patch) | |
| tree | 253331bcdcf278ef28a6f67f87faf80786b78e97 /miscutils | |
| parent | 759d7ececd56e5b25bbfcc54a04bf939d80c7ee9 (diff) | |
| download | busybox-w32-99bd5adf995ee0f83bdda92384137ae810c4c92b.tar.gz busybox-w32-99bd5adf995ee0f83bdda92384137ae810c4c92b.tar.bz2 busybox-w32-99bd5adf995ee0f83bdda92384137ae810c4c92b.zip | |
more crond+crontab integrating with loginutil libbb functions and deleted
patch from Thomas Gleixner to init.
Viodz last_patch_108
Diffstat (limited to 'miscutils')
| -rw-r--r-- | miscutils/crond.c | 16 | ||||
| -rw-r--r-- | miscutils/crontab.c | 31 |
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 | |||
| 299 | ChangeUser(const char *user) | 299 | ChangeUser(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 | ||
| 336 | static void | ||
| 337 | log(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 | |||
| 348 | static int | 336 | static int |
| 349 | ChangeUser(const char *user, short dochdir) | 337 | ChangeUser(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 | } |
