diff options
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 ChangeUser(const char *user) { struct passwd *pas; + const char *err_msg; /* * Obtain password entry and change privilages @@ -315,18 +316,9 @@ ChangeUser(const char *user) /* * Change running state to the user in question */ - - if (initgroups(user, pas->pw_gid) < 0) { - crondlog("\011initgroups failed: %s %m", user); - return(-1); - } - /* drop all priviledges */ - if (setgid(pas->pw_gid) < 0) { - crondlog("\011setgid failed: %s %d", user, pas->pw_gid); - return(-1); - } - if (setuid(pas->pw_uid) < 0) { - crondlog("\011setuid failed: %s %d", user, pas->pw_uid); + err_msg = change_identity_e2str(pas); + if (err_msg) { + crondlog("\011%s for user %s", err_msg, user); return(-1); } 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) wait4(pid, NULL, 0, NULL); } -static void -log(const char *ctl, ...) -{ - va_list va; - char buf[1024]; - - va_start(va, ctl); - vsnprintf(buf, sizeof(buf), ctl, va); - syslog(LOG_NOTICE, "%s",buf ); - va_end(va); -} - static int ChangeUser(const char *user, short dochdir) { @@ -355,7 +343,7 @@ ChangeUser(const char *user, short dochdir) */ if ((pas = getpwnam(user)) == 0) { - log("failed to get uid for %s", user); + bb_perror_msg_and_die("failed to get uid for %s", user); return(-1); } setenv("USER", pas->pw_name, 1); @@ -365,24 +353,13 @@ ChangeUser(const char *user, short dochdir) /* * Change running state to the user in question */ + change_identity(pas); - if (initgroups(user, pas->pw_gid) < 0) { - log("initgroups failed: %s %m", user); - return(-1); - } - if (setregid(pas->pw_gid, pas->pw_gid) < 0) { - log("setregid failed: %s %d", user, pas->pw_gid); - return(-1); - } - if (setreuid(pas->pw_uid, pas->pw_uid) < 0) { - log("setreuid failed: %s %d", user, pas->pw_uid); - return(-1); - } if (dochdir) { if (chdir(pas->pw_dir) < 0) { + bb_perror_msg_and_die("chdir failed: %s %s", user, pas->pw_dir); if (chdir(TMPDIR) < 0) { - log("chdir failed: %s %s", user, pas->pw_dir); - log("chdir failed: %s " TMPDIR, user); + bb_perror_msg_and_die("chdir failed: %s %s", user, TMPDIR); return(-1); } } |