diff options
Diffstat (limited to 'source/a/dcron/dcron-2.3.3.diff2')
-rw-r--r-- | source/a/dcron/dcron-2.3.3.diff2 | 477 |
1 files changed, 0 insertions, 477 deletions
diff --git a/source/a/dcron/dcron-2.3.3.diff2 b/source/a/dcron/dcron-2.3.3.diff2 deleted file mode 100644 index 8eb8242c5..000000000 --- a/source/a/dcron/dcron-2.3.3.diff2 +++ /dev/null @@ -1,477 +0,0 @@ ---- ./CHANGES:1.1 Fri Jan 7 18:15:59 2000 -+++ ./CHANGES Thu Apr 20 12:10:36 2000 -@@ -1,3 +1,15 @@ -+20/03/00 - TEMHOTA <temnota@kmv.ru> -+ Adding SIGHUP signal handler. crond die when init send to it SIGHUP. -+ Rewrtited all loging code. Added logging through syslog and normal -+ logging to file. -+ -+ Technical details: -+ + logging through syslog used facility LOG_CRON -+ + log_err - now *always* write message to logger (if selected logging -+ through syslog - message send as LOG_ERR). -+ + log9 - sends message hrough syslog loglevel LOG_WARNING -+ + for all other log levels - default syslog loglevel LOG_NOTICE -+ - 02/16/98 - Jordan Mendelson (jordy@wserv.com) - - Numerous people have reported a problem with logging. I'm sorry ---- ./Makefile:1.1 Fri Jan 7 18:15:59 2000 -+++ ./Makefile Thu Apr 20 12:24:40 2000 -@@ -27,7 +27,7 @@ - rm -f crond crontab - - cleano: -- rm -f *.o dcron.tgz $(PROTOS) -+ rm -f *.o dcron.tgz $(PROTOS) *~ - - install: crond crontab - install -o root -g root -m 0755 crond /usr/sbin ---- ./crontab.c:1.1 Fri Jan 7 18:15:59 2000 -+++ ./crontab.c Sun Mar 19 15:03:36 2000 -@@ -15,6 +15,9 @@ - char *CDir = CRONTABS; - int UserId; - short LogLevel = 9; -+short DebugOpt = 0; -+short LoggerOpt = 0; -+char *LogFile = LOG_FILE; - - void EditFile(const char *user, const char *file); - int GetReplaceStream(const char *user, const char *file); -@@ -136,7 +139,7 @@ - */ - - if (chdir(CDir) < 0) { -- fprintf(stderr, "cannot change diir to %s: %s\n", CDir, strerror(errno)); -+ fprintf(stderr, "cannot change dir to %s: %s\n", CDir, strerror(errno)); - exit(1); - } - ---- ./defs.h:1.1 Fri Jan 7 18:15:59 2000 -+++ ./defs.h Sun Mar 19 15:03:36 2000 -@@ -17,6 +17,9 @@ - #include <pwd.h> - #include <unistd.h> - #include <grp.h> -+#include <syslog.h> -+#include <signal.h> -+#include <getopt.h> - #include <sys/ioctl.h> - #include <sys/wait.h> - #include <sys/stat.h> -@@ -30,6 +33,9 @@ - #endif - #ifndef TMPDIR - #define TMPDIR "/var/spool/cron" -+#endif -+#ifndef LOG_FILE -+#define LOG_FILE "/var/log/cron" - #endif - #ifndef OPEN_MAX - #define OPEN_MAX 256 ---- ./job.c:1.1 Fri Jan 7 18:15:59 2000 -+++ ./job.c Thu Apr 20 12:10:36 2000 -@@ -16,7 +16,7 @@ - { - char mailFile[128]; - int mailFd; -- -+ - line->cl_Pid = 0; - line->cl_MailFlag = 0; - -@@ -57,14 +57,6 @@ - log(5, "Child Running %s\n", line->cl_Shell); - - /* -- * Setup close-on-exec descriptor in case exec fails -- */ -- -- dup2(2, 8); -- fcntl(8, F_SETFD, 1); -- fclose(stderr); -- -- /* - * stdin is already /dev/null, setup stdout and stderr - */ - -@@ -73,13 +65,13 @@ - dup2(mailFd, 2); - close(mailFd); - } else { -- logfd(8, "unable to create mail file user %s file %s, output to /dev/null\n", -+ log_err("unable to create mail file user %s file %s, output to /dev/null\n", - file->cf_User, - mailFile - ); - } - execl("/bin/sh", "/bin/sh", "-c", line->cl_Shell, NULL, NULL); -- logfd(8, "unable to exec, user %s cmd /bin/sh -c %s\n", -+ log_err("unable to exec, user %s cmd /bin/sh -c %s\n", - file->cf_User, - line->cl_Shell - ); -@@ -89,7 +81,7 @@ - /* - * PARENT, FORK FAILED - */ -- log9("couldn't fork, user %s\n", file->cf_User); -+ log_err("couldn't fork, user %s\n", file->cf_User); - line->cl_Pid = 0; - remove(mailFile); - } else { -@@ -158,6 +150,7 @@ - if (mailFd < 0) { - return; - } -+ - if (fstat(mailFd, &sbuf) < 0 || - sbuf.st_uid != DaemonUid || - sbuf.st_nlink != 0 || -@@ -182,15 +175,6 @@ - exit(0); - - /* -- * create close-on-exec log descriptor in case exec fails -- */ -- -- dup2(2, 8); -- fcntl(8, F_SETFD, 1); -- -- fclose(stderr); -- -- /* - * run sendmail with mail file as standard input, only if - * mail file exists! - */ -@@ -200,7 +184,7 @@ - close(mailFd); - - execl(SENDMAIL, SENDMAIL, SENDMAIL_ARGS, NULL, NULL); -- logfd(8, "unable to exec %s %s, user %s, output to sink null", -+ log_err("unable to exec %s %s, user %s, output to sink null", - SENDMAIL, - SENDMAIL_ARGS, - file->cf_User -@@ -210,7 +194,7 @@ - /* - * PARENT, FORK FAILED - */ -- log9("unable to fork, user %s", file->cf_User); -+ log_err("unable to fork, user %s", file->cf_User); - line->cl_Pid = 0; - } else { - /* ---- ./main.c:1.1 Fri Jan 7 18:15:59 2000 -+++ ./main.c Sun Mar 19 15:03:36 2000 -@@ -15,14 +15,18 @@ - Prototype short DebugOpt; - Prototype short LogLevel; - Prototype short ForegroundOpt; --Prototype char *CDir; --Prototype int DaemonUid; -+Prototype short LoggerOpt; -+Prototype char *CDir; -+Prototype char *LogFile; -+Prototype uid_t DaemonUid; - - short DebugOpt; - short LogLevel = 8; --short ForegroundOpt; -+short ForegroundOpt = 0; -+short LoggerOpt; - char *CDir = CRONTABS; --int DaemonUid; -+char *LogFile = LOG_FILE; -+uid_t DaemonUid; - - int - main(int ac, char **av) -@@ -35,48 +39,49 @@ - - DaemonUid = getuid(); - -- for (i = 1; i < ac; ++i) { -- char *ptr = av[i]; -+ opterr = 0; /* disable getopt 'errors' message.*/ - -- if (*ptr == '-') { -- ptr += 2; -- -- switch(ptr[-1]) { -+ while ((i = getopt(ac,av,"d:l:L:fbSc:")) != EOF){ -+ -+ switch (i){ - case 'l': -- LogLevel = (*ptr) ? strtol(ptr, NULL, 0) : 1; -- continue; -+ LogLevel = atoi(optarg); -+ break; - case 'd': -- DebugOpt = (*ptr) ? strtol(ptr, NULL, 0) : 1; -+ DebugOpt = atoi(optarg); - LogLevel = 0; - /* fall through */ -+ break; - case 'f': - ForegroundOpt = 1; -- continue; -+ break; - case 'b': - ForegroundOpt = 0; -- continue; -+ break; -+ case 'S': /* select logging to syslog */ -+ LoggerOpt = 0; -+ break; -+ case 'L': /* select internal file logger */ -+ LoggerOpt = 1; -+ if (*optarg != 0) LogFile = optarg; -+ break; - case 'c': -- CDir = (*ptr) ? ptr : av[++i]; -- continue; -+ if (*optarg != 0) CDir = optarg; -+ break; - default: -+ /* -+ * parse error -+ */ -+ printf("dcron " VERSION "\n"); -+ printf("dcron -d [#] -l [#] -S -L logfile -f -b -c dir\n"); -+ printf("-d num\tdebug level\n-l num\tlog level (8 - default)\n-S\tlog to syslod (defualt)\n"); -+ printf("-L file\tlog to file\n-f\trun in fordeground\n"); -+ printf("-b\trun in background (default)\n-c dir\tworking dir\n"); -+ exit(1); - break; -- } -- } -- break; /* error */ -- } -- -- /* -- * check for parse error -- */ -- -- if (i != ac) { -- if (i > ac) -- puts("expected argument for option"); -- printf("dcron " VERSION "\n"); -- printf("dcron -d[#] -l[#] -f -b -c dir\n"); -- exit(1); -+ } - } -- -+ - /* - * change directory - */ -@@ -87,14 +92,15 @@ - } - - /* -- * close stdin and stdout (stderr normally redirected by caller). -- * close unused descriptors -+ * close stdin and stdout, stderr. -+ * close unused descriptors - don't need. - * optional detach from controlling terminal - */ - - fclose(stdin); - fclose(stdout); -- -+ fclose(stderr); -+ - i = open("/dev/null", O_RDWR); - if (i < 0) { - perror("open: /dev/null:"); -@@ -102,15 +108,14 @@ - } - dup2(i, 0); - dup2(i, 1); -+ dup2(i, 2); - -- for (i = 3; i < OPEN_MAX; ++i) { -- close(i); -- } -- - if (ForegroundOpt == 0) { - int fd; - int pid; -- -+ if (setsid() < 0) -+ perror("setsid"); -+ - if ((fd = open("/dev/tty", O_RDWR)) >= 0) { - ioctl(fd, TIOCNOTTY, 0); - close(fd); -@@ -125,13 +130,17 @@ - if (pid > 0) - exit(0); - } -- -+ -+ (void)startlogger(); /* need if syslog mode selected */ -+ (void)initsignals(); /* set some signal handlers */ -+ - /* - * main loop - synchronize to 1 second after the minute, minimum sleep - * of 1 second. - */ -+ -+ log(9,"%s " VERSION " dillon, started, log level %d\n", av[0], LogLevel); - -- log9("%s " VERSION " dillon, started\n", av[0]); - SynchronizeDir("."); - - { ---- ./subs.c:1.1 Fri Jan 7 18:15:59 2000 -+++ ./subs.c Sun Mar 19 15:03:36 2000 -@@ -10,43 +10,62 @@ - - Prototype void log(int level, const char *ctl, ...); - Prototype void log9(const char *ctl, ...); --Prototype void logfd(int fd, const char *ctl, ...); -+Prototype void log_err(const char *ctl, ...); - Prototype void fdprintf(int fd, const char *ctl, ...); --Prototype int ChangeUser(const char *user, short dochdir); --Prototype void vlog(int level, int fd, const char *ctl, va_list va); --Prototype int slog(char *buf, size_t sz, const char *ctl, va_list va, short useDate); -+Prototype void vlog(int level, int MLOG_LEVEL, const char *ctl, va_list va); -+Prototype int ChangeUser(const char *user, short dochdir); - Prototype char *xx_strdup(const char *); -+Prototype void startlogger(void); -+Prototype void initsignals(void); - -+/* -+ set log_level=9 and log messages -+*/ -+ - void - log9(const char *ctl, ...) - { - va_list va; - - va_start(va, ctl); -- vlog(9, 2, ctl, va); -+ vlog(9, LOG_WARNING, ctl, va); - va_end(va); - } - -+/* -+ normal logger call point. -+*/ -+ - void - log(int level, const char *ctl, ...) - { - va_list va; - - va_start(va, ctl); -- vlog(level, 2, ctl, va); -+ vlog(level, LOG_NOTICE, ctl, va); - va_end(va); - } - -+/* -+ Original: void -+ logfd(int fd, const char *ctl, ...) -+ Updated to: log_error (used by jobs.c) -+*/ -+ - void --logfd(int fd, const char *ctl, ...) -+log_err(const char *ctl, ...) - { - va_list va; - - va_start(va, ctl); -- vlog(9, fd, ctl, va); -+ vlog(20, LOG_ERR, ctl, va); - va_end(va); - } - -+/* -+ used by jobs.c (write to temp file..) -+*/ -+ - void - fdprintf(int fd, const char *ctl, ...) - { -@@ -60,32 +79,28 @@ - } - - void --vlog(int level, int fd, const char *ctl, va_list va) -+vlog(int level, int MLOG_LEVEL, const char *ctl, va_list va) - { - char buf[1024]; -- short n; -- static short useDate = 1; -+ int logfd; - - if (level >= LogLevel) { -- write(fd, buf, n = slog(buf, sizeof(buf), ctl, va, useDate)); -- useDate = (n && buf[n-1] == '\n'); -+ -+ vsnprintf(buf,sizeof(buf), ctl, va); -+ if (DebugOpt) fprintf(stderr,"%s",buf); -+ else -+ if (LoggerOpt == 0) syslog(MLOG_LEVEL, "%s",buf ); -+ else { -+ if ((logfd = open(LogFile,O_WRONLY|O_CREAT|O_APPEND,600)) >= 0){ -+ write(logfd, buf, strlen(buf)); -+ close(logfd); -+ } else -+ fprintf(stderr,"Can't open log file. Err: %s",strerror(errno)); -+ } - } - } - - int --slog(char *buf, size_t sz, const char *ctl, va_list va, short useDate) --{ -- time_t t = time(NULL); -- struct tm *tp = localtime(&t); -- -- buf[0] = 0; -- if (useDate) -- strftime(buf, 128, "%d-%b-%Y %H:%M ", tp); -- vsnprintf(buf + strlen(buf), sz - strlen(buf), ctl, va); -- return(strlen(buf)); --} -- --int - ChangeUser(const char *user, short dochdir) - { - struct passwd *pas; -@@ -141,3 +156,28 @@ - return(ptr); - } - -+ -+void -+startlogger(void){ -+int logfd; -+ -+ if (LoggerOpt == 0) -+ openlog("crond",LOG_CONS|LOG_PID,LOG_CRON); -+ -+ else { /* test logfile */ -+ if ((logfd = open(LogFile,O_WRONLY|O_CREAT|O_APPEND,600)) >= 0) -+ close(logfd); -+ else -+ printf("Failed to open log file '%s' reason: %s",LogFile,strerror(errno)); -+ } -+} -+ -+ -+void -+initsignals(void){ -+ -+ signal(SIGHUP,SIG_IGN); /* hmm.. but, if kill -HUP original -+ * version - his died. ;( -+ */ -+ -+} |