aboutsummaryrefslogtreecommitdiff
path: root/miscutils/crontab.c
diff options
context:
space:
mode:
Diffstat (limited to 'miscutils/crontab.c')
-rw-r--r--miscutils/crontab.c36
1 files changed, 8 insertions, 28 deletions
diff --git a/miscutils/crontab.c b/miscutils/crontab.c
index 0ed59b0dc..a8e650c60 100644
--- a/miscutils/crontab.c
+++ b/miscutils/crontab.c
@@ -11,22 +11,6 @@
11 */ 11 */
12 12
13#include "busybox.h" 13#include "busybox.h"
14#include <stdio.h>
15#include <stdlib.h>
16#include <stdarg.h>
17#include <string.h>
18#include <errno.h>
19#include <time.h>
20#include <dirent.h>
21#include <fcntl.h>
22#include <unistd.h>
23#include <syslog.h>
24#include <signal.h>
25#include <getopt.h>
26#include <sys/ioctl.h>
27#include <sys/wait.h>
28#include <sys/stat.h>
29#include <sys/resource.h>
30 14
31#ifndef CRONTABS 15#ifndef CRONTABS
32#define CRONTABS "/var/spool/cron/crontabs" 16#define CRONTABS "/var/spool/cron/crontabs"
@@ -47,8 +31,7 @@ static void EditFile(const char *user, const char *file);
47static int GetReplaceStream(const char *user, const char *file); 31static int GetReplaceStream(const char *user, const char *file);
48static int ChangeUser(const char *user, short dochdir); 32static int ChangeUser(const char *user, short dochdir);
49 33
50int 34int crontab_main(int ac, char **av)
51crontab_main(int ac, char **av)
52{ 35{
53 enum { NONE, EDIT, LIST, REPLACE, DELETE } option = NONE; 36 enum { NONE, EDIT, LIST, REPLACE, DELETE } option = NONE;
54 const struct passwd *pas; 37 const struct passwd *pas;
@@ -147,7 +130,7 @@ crontab_main(int ac, char **av)
147 * Change directory to our crontab directory 130 * Change directory to our crontab directory
148 */ 131 */
149 132
150 bb_xchdir(CDir); 133 xchdir(CDir);
151 134
152 /* 135 /*
153 * Handle options as appropriate 136 * Handle options as appropriate
@@ -177,7 +160,7 @@ crontab_main(int ac, char **av)
177 char buf[1024]; 160 char buf[1024];
178 161
179 snprintf(tmp, sizeof(tmp), TMPDIR "/crontab.%d", getpid()); 162 snprintf(tmp, sizeof(tmp), TMPDIR "/crontab.%d", getpid());
180 fd = bb_xopen3(tmp, O_RDWR|O_CREAT|O_TRUNC|O_EXCL, 0600); 163 fd = xopen3(tmp, O_RDWR|O_CREAT|O_TRUNC|O_EXCL, 0600);
181 chown(tmp, getuid(), getgid()); 164 chown(tmp, getuid(), getgid());
182 if ((fi = fopen(pas->pw_name, "r"))) { 165 if ((fi = fopen(pas->pw_name, "r"))) {
183 while ((n = fread(buf, 1, sizeof(buf), fi)) > 0) 166 while ((n = fread(buf, 1, sizeof(buf), fi)) > 0)
@@ -244,8 +227,7 @@ crontab_main(int ac, char **av)
244 return 0; 227 return 0;
245} 228}
246 229
247static int 230static int GetReplaceStream(const char *user, const char *file)
248GetReplaceStream(const char *user, const char *file)
249{ 231{
250 int filedes[2]; 232 int filedes[2];
251 int pid; 233 int pid;
@@ -284,7 +266,7 @@ GetReplaceStream(const char *user, const char *file)
284 exit(0); 266 exit(0);
285 267
286 bb_default_error_retval = 0; 268 bb_default_error_retval = 0;
287 fd = bb_xopen3(file, O_RDONLY, 0); 269 fd = xopen3(file, O_RDONLY, 0);
288 buf[0] = 0; 270 buf[0] = 0;
289 write(filedes[1], buf, 1); 271 write(filedes[1], buf, 1);
290 while ((n = read(fd, buf, sizeof(buf))) > 0) { 272 while ((n = read(fd, buf, sizeof(buf))) > 0) {
@@ -293,8 +275,7 @@ GetReplaceStream(const char *user, const char *file)
293 exit(0); 275 exit(0);
294} 276}
295 277
296static void 278static void EditFile(const char *user, const char *file)
297EditFile(const char *user, const char *file)
298{ 279{
299 int pid; 280 int pid;
300 281
@@ -324,8 +305,7 @@ EditFile(const char *user, const char *file)
324 wait4(pid, NULL, 0, NULL); 305 wait4(pid, NULL, 0, NULL);
325} 306}
326 307
327static int 308static int ChangeUser(const char *user, short dochdir)
328ChangeUser(const char *user, short dochdir)
329{ 309{
330 struct passwd *pas; 310 struct passwd *pas;
331 311
@@ -349,7 +329,7 @@ ChangeUser(const char *user, short dochdir)
349 if (dochdir) { 329 if (dochdir) {
350 if (chdir(pas->pw_dir) < 0) { 330 if (chdir(pas->pw_dir) < 0) {
351 bb_perror_msg("chdir failed: %s %s", user, pas->pw_dir); 331 bb_perror_msg("chdir failed: %s %s", user, pas->pw_dir);
352 bb_xchdir(TMPDIR); 332 xchdir(TMPDIR);
353 } 333 }
354 } 334 }
355 return(pas->pw_uid); 335 return(pas->pw_uid);