2.11BSD/src/usr.sbin/cron/grot/diffs
diff -c -r /tmp/cron/Makefile cron/Makefile
*** /tmp/cron/Makefile Fri Jun 18 19:37:52 1999
--- cron/Makefile Tue Jun 15 20:53:11 1999
***************
*** 45,96 ****
#
# there's more configuration info in config.h; edit that first!
- #################################### begin configurable stuff
- #<<DESTROOT is assumed to have ./etc, ./bin, and ./man subdirectories>>
DESTROOT = $(DESTDIR)/usr
DESTSBIN = $(DESTROOT)/sbin
DESTBIN = $(DESTROOT)/bin
! DESTMAN = $(DESTROOT)/share/man
! #<<need bitstring.h>>
INCLUDE = -I.
- #INCLUDE =
- #<<need getopt()>>
LIBS =
! #<<optimize or debug?>>
! #OPTIM = -O
! OPTIM = -g
! #<<ATT or BSD or POSIX?>>
! # (ATT untested)
! #COMPAT = -DATT
! #(BSD is only needed if <sys/params.h> does not define it, as on ULTRIX)
! #COMPAT = -DBSD
! # (POSIX)
! #COMPAT = -DPOSIX
#<<lint flags of choice?>>
! LINTFLAGS = -hbxa $(INCLUDE) $(COMPAT) $(DEBUGGING)
! #<<want to use a nonstandard CC?>>
! #CC = vcc
! #<<manifest defines>>
DEFS =
! #(SGI IRIX systems need this)
! #DEFS = -D_BSD_SIGNALS -Dconst=
! #<<the name of the BSD-like install program>>
! #INSTALL = installbsd
! INSTALL = install
! #<<any special load flags>>
! LDFLAGS =
#################################### end configurable stuff
SHELL = /bin/sh
! CFLAGS = $(OPTIM) $(INCLUDE) $(COMPAT) $(DEFS)
- INFOS = README CHANGES FEATURES INSTALL CONVERSION THANKS MAIL
- MANPAGES = bitstring.3 crontab.5 crontab.1 cron.8 putman.sh
- HEADERS = bitstring.h cron.h config.h pathnames.h \
- externs.h compat.h
- SOURCES = cron.c crontab.c database.c do_command.c entry.c \
- env.c job.c user.c popen.c misc.c compat.c
- SHAR_SOURCE = $(INFOS) $(MANPAGES) Makefile $(HEADERS) $(SOURCES)
LINT_CRON = cron.c database.c user.c entry.c compat.c \
misc.c job.c do_command.c env.c popen.c
LINT_CRONTAB = crontab.c misc.c entry.c env.c compat.c
--- 45,68 ----
#
# there's more configuration info in config.h; edit that first!
DESTROOT = $(DESTDIR)/usr
DESTSBIN = $(DESTROOT)/sbin
DESTBIN = $(DESTROOT)/bin
! DESTMAN = $(DESTROOT)/man
INCLUDE = -I.
LIBS =
! OPTIM = -O
#<<lint flags of choice?>>
! LINTFLAGS = -hbxa $(INCLUDE)
! CC = cc
DEFS =
! INSTALL = install
! LDFLAGS = -i
#################################### end configurable stuff
SHELL = /bin/sh
! CFLAGS = $(OPTIM) $(INCLUDE) $(DEFS)
LINT_CRON = cron.c database.c user.c entry.c compat.c \
misc.c job.c do_command.c env.c popen.c
LINT_CRONTAB = crontab.c misc.c entry.c env.c compat.c
***************
*** 98,128 ****
misc.o env.o popen.o compat.o
CRONTAB_OBJ = crontab.o misc.o entry.o env.o compat.o
! all : cron crontab
! lint :
! lint $(LINTFLAGS) $(LINT_CRON) $(LIBS) \
! |grep -v "constant argument to NOT" 2>&1
! lint $(LINTFLAGS) $(LINT_CRONTAB) $(LIBS) \
! |grep -v "constant argument to NOT" 2>&1
! cron : $(CRON_OBJ)
! $(CC) $(LDFLAGS) -o cron $(CRON_OBJ) $(LIBS)
! crontab : $(CRONTAB_OBJ)
! $(CC) $(LDFLAGS) -o crontab $(CRONTAB_OBJ) $(LIBS)
! install : all
! $(INSTALL) -c -m 111 -o root -s cron $(DESTSBIN)/
! $(INSTALL) -c -m 4111 -o root -s crontab $(DESTBIN)/
! sh putman.sh crontab.1 $(DESTMAN)
! sh putman.sh cron.8 $(DESTMAN)
! sh putman.sh crontab.5 $(DESTMAN)
! clean :; rm -f *.o cron crontab a.out core tags *~ #*
!
! kit : $(SHAR_SOURCE)
! makekit -m -s99k $(SHAR_SOURCE)
$(CRON_OBJ) : cron.h compat.h config.h externs.h pathnames.h Makefile
$(CRONTAB_OBJ) : cron.h compat.h config.h externs.h pathnames.h Makefile
--- 70,98 ----
misc.o env.o popen.o compat.o
CRONTAB_OBJ = crontab.o misc.o entry.o env.o compat.o
! all: cron crontab
! lint:
! lint $(LINTFLAGS) $(LINT_CRON) $(LIBS) \
! |grep -v "constant argument to NOT" 2>&1
! lint $(LINTFLAGS) $(LINT_CRONTAB) $(LIBS) \
! |grep -v "constant argument to NOT" 2>&1
! cron: $(CRON_OBJ)
! $(CC) $(LDFLAGS) -o cron $(CRON_OBJ) $(LIBS)
! crontab: $(CRONTAB_OBJ)
! $(CC) $(LDFLAGS) -o crontab $(CRONTAB_OBJ) $(LIBS)
! install: all
! $(INSTALL) -c -m 111 -o root -s cron $(DESTSBIN)/cron
! $(INSTALL) -c -m 4111 -o root -s crontab $(DESTBIN)/crontab
! sh putman.sh crontab.1 $(DESTMAN)
! sh putman.sh cron.8 $(DESTMAN)
! sh putman.sh crontab.5 $(DESTMAN)
! clean:
! rm -f *.o cron crontab a.out core tags *~ #*
$(CRON_OBJ) : cron.h compat.h config.h externs.h pathnames.h Makefile
$(CRONTAB_OBJ) : cron.h compat.h config.h externs.h pathnames.h Makefile
diff -c -r /tmp/cron/compat.c cron/compat.c
*** /tmp/cron/compat.c Fri Jun 18 19:37:52 1999
--- cron/compat.c Tue Jun 15 22:04:11 1999
***************
*** 25,233 ****
#include "cron.h"
- #ifdef NEED_GETDTABLESIZE
- # include <limits.h>
- #endif
- #if defined(NEED_SETSID) && defined(BSD)
- # include <sys/ioctl.h>
- #endif
- #include <errno.h>
! /* the code does not depend on any of vfork's
! * side-effects; it just uses it as a quick
! * fork-and-exec.
! */
! #ifdef NEED_VFORK
! PID_T
! vfork() {
! return (fork());
! }
! #endif
!
!
! #ifdef NEED_STRDUP
! char *
! strdup(str)
! char *str;
! {
! char *temp;
!
! temp = malloc(strlen(str) + 1);
! (void) strcpy(temp, str);
! return temp;
! }
! #endif
!
!
! #ifdef NEED_STRERROR
! char *
! strerror(error)
! int error;
! {
! extern char *sys_errlist[];
! extern int sys_nerr;
! static char buf[32];
!
! if ((error <= sys_nerr) && (error > 0)) {
! return sys_errlist[error];
! }
!
! sprintf(buf, "Unknown error: %d", error);
! return buf;
! }
! #endif
!
!
! #ifdef NEED_STRCASECMP
int
- strcasecmp(left, right)
- char *left;
- char *right;
- {
- while (*left && (MkLower(*left) == MkLower(*right))) {
- left++;
- right++;
- }
- return MkLower(*left) - MkLower(*right);
- }
- #endif
-
-
- #ifdef NEED_SETSID
- int
setsid()
{
int newpgrp;
! # if defined(BSD)
! int fd;
! # if defined(POSIX)
! newpgrp = setpgid((pid_t)0, getpid());
! # else
newpgrp = setpgrp(0, getpid());
! # endif
! if ((fd = open("/dev/tty", 2)) >= 0)
! {
(void) ioctl(fd, TIOCNOTTY, (char*)0);
(void) close(fd);
! }
! # else /*BSD*/
! newpgrp = setpgrp();
!
! (void) close(STDIN); (void) open("/dev/null", 0);
! (void) close(STDOUT); (void) open("/dev/null", 1);
! (void) close(STDERR); (void) open("/dev/null", 2);
! # endif /*BSD*/
return newpgrp;
}
- #endif /*NEED_SETSID*/
-
-
- #ifdef NEED_GETDTABLESIZE
- int
- getdtablesize() {
- #ifdef _SC_OPEN_MAX
- return sysconf(_SC_OPEN_MAX);
- #else
- return _POSIX_OPEN_MAX;
- #endif
- }
- #endif
-
-
- #ifdef NEED_FLOCK
- /* The following flock() emulation snarfed intact *) from the HP-UX
- * "BSD to HP-UX porting tricks" maintained by
- * system@alchemy.chem.utoronto.ca (System Admin (Mike Peterson))
- * from the version "last updated: 11-Jan-1993"
- * Snarfage done by Jarkko Hietaniemi <Jarkko.Hietaniemi@hut.fi>
- * *) well, almost, had to K&R the function entry, HPUX "cc"
- * does not grok ANSI function prototypes */
-
- /*
- * flock (fd, operation)
- *
- * This routine performs some file locking like the BSD 'flock'
- * on the object described by the int file descriptor 'fd',
- * which must already be open.
- *
- * The operations that are available are:
- *
- * LOCK_SH - get a shared lock.
- * LOCK_EX - get an exclusive lock.
- * LOCK_NB - don't block (must be ORed with LOCK_SH or LOCK_EX).
- * LOCK_UN - release a lock.
- *
- * Return value: 0 if lock successful, -1 if failed.
- *
- * Note that whether the locks are enforced or advisory is
- * controlled by the presence or absence of the SETGID bit on
- * the executable.
- *
- * Note that there is no difference between shared and exclusive
- * locks, since the 'lockf' system call in SYSV doesn't make any
- * distinction.
- *
- * The file "<sys/file.h>" should be modified to contain the definitions
- * of the available operations, which must be added manually (see below
- * for the values).
- */
-
- /* this code has been reformatted by vixie */
-
- int
- flock(fd, operation)
- int fd;
- int operation;
- {
- int i;
-
- switch (operation) {
- case LOCK_SH: /* get a shared lock */
- case LOCK_EX: /* get an exclusive lock */
- i = lockf (fd, F_LOCK, 0);
- break;
-
- case LOCK_SH|LOCK_NB: /* get a non-blocking shared lock */
- case LOCK_EX|LOCK_NB: /* get a non-blocking exclusive lock */
- i = lockf (fd, F_TLOCK, 0);
- if (i == -1)
- if ((errno == EAGAIN) || (errno == EACCES))
- errno = EWOULDBLOCK;
- break;
-
- case LOCK_UN: /* unlock */
- i = lockf (fd, F_ULOCK, 0);
- break;
-
- default: /* can't decipher operation */
- i = -1;
- errno = EINVAL;
- break;
- }
-
- return (i);
- }
- #endif /*NEED_FLOCK*/
-
-
- #ifdef NEED_SETENV
- int
- setenv(name, value, overwrite)
- char *name, *value;
- int overwrite;
- {
- char *tmp;
-
- if (overwrite && getenv(name))
- return -1;
-
- if (!(tmp = malloc(strlen(name) + strlen(value) + 2))) {
- errno = ENOMEM;
- return -1;
- }
-
- sprintf("%s=%s", name, value);
- return putenv(tmp); /* intentionally orphan 'tmp' storage */
- }
- #endif
--- 25,57 ----
#include "cron.h"
+ #include <fcntl.h>
+ #include <sys/ioctl.h>
! /*
! * Ripped off from daemon(3) - differences are this sets the process group
! * and does not fork (because that has been done already).
! */
int
setsid()
{
int newpgrp;
! register int fd;
!
newpgrp = setpgrp(0, getpid());
! if ((fd = open(_PATH_TTY, 2)) >= 0)
! {
(void) ioctl(fd, TIOCNOTTY, (char*)0);
(void) close(fd);
! }
! if ((fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1)
! {
! (void)dup2(fd, 0);
! (void)dup2(fd, 1);
! (void)dup2(fd, 2);
! if (fd > 2)
! (void)close(fd);
! }
return newpgrp;
}
diff -c -r /tmp/cron/compat.h cron/compat.h
*** /tmp/cron/compat.h Fri Jun 18 19:37:52 1999
--- cron/compat.h Tue Jun 15 20:32:58 1999
***************
*** 20,137 ****
*/
#ifndef __P
! # ifdef __STDC__
! # define __P(x) x
! # else
! # define __P(x) ()
! # define const
! # endif
#endif
- #if defined(UNIXPC) || defined(unixpc)
- # define UNIXPC 1
- # define ATT 1
- #endif
-
- #if defined(hpux) || defined(_hpux) || defined(__hpux)
- # define HPUX 1
- # define seteuid(e) setresuid(-1,e,-1)
- # define setreuid(r,e) setresuid(r,e,-1)
- #endif
-
- #if defined(_IBMR2)
- # define AIX 1
- #endif
-
- #if defined(__convex__)
- # define CONVEX 1
- #endif
-
- #if defined(sgi) || defined(_sgi) || defined(__sgi)
- # define IRIX 1
- /* IRIX 4 hdrs are broken: one cannot #include both <stdio.h>
- * and <stdlib.h> because they disagree on system(), perror().
- * Therefore we must zap the "const" keyword BEFORE including
- * either of them.
- */
- # define const
- #endif
-
- #if defined(_UNICOS)
- # define UNICOS 1
- #endif
-
- #ifndef POSIX
- # if (BSD >= 199103) || defined(__linux) || defined(ultrix) || defined(AIX) ||\
- defined(HPUX) || defined(CONVEX) || defined(IRIX)
- # define POSIX
- # endif
- #endif
-
- #ifndef BSD
- # if defined(ultrix)
- # define BSD 198902
- # endif
- #endif
-
/*****************************************************************/
! #if !defined(BSD) && !defined(HPUX) && !defined(CONVEX) && !defined(__linux)
! # define NEED_VFORK
! #endif
!
! #if (!defined(BSD) || (BSD < 198902)) && !defined(__linux) && \
! !defined(IRIX) && !defined(NeXT) && !defined(HPUX)
! # define NEED_STRCASECMP
! #endif
!
! #if (!defined(BSD) || (BSD < 198911)) && !defined(__linux) &&\
! !defined(IRIX) && !defined(UNICOS) && !defined(HPUX)
! # define NEED_STRDUP
! #endif
!
! #if (!defined(BSD) || (BSD < 198911)) && !defined(POSIX) && !defined(NeXT)
! # define NEED_STRERROR
! #endif
!
! #if defined(HPUX) || defined(AIX) || defined(UNIXPC)
! # define NEED_FLOCK
! #endif
!
! #ifndef POSIX
! # define NEED_SETSID
! #endif
!
! #if (defined(POSIX) && !defined(BSD)) && !defined(__linux)
! # define NEED_GETDTABLESIZE
! #endif
!
! #if (BSD >= 199103)
! # define HAVE_SAVED_UIDS
! #endif
!
! #if !defined(ATT) && !defined(__linux) && !defined(IRIX) && !defined(UNICOS)
! # define USE_SIGCHLD
! #endif
!
! #if !defined(AIX) && !defined(UNICOS)
! # define SYS_TIME_H 1
! #else
! # define SYS_TIME_H 0
! #endif
!
! #if defined(BSD) && !defined(POSIX)
! # define USE_UTIMES
! #endif
!
! #if defined(AIX) || defined(HPUX) || defined(IRIX)
! # define NEED_SETENV
! #endif
!
! #if !defined(UNICOS) && !defined(UNIXPC)
! # define HAS_FCHOWN
! #endif
!
! #if !defined(UNICOS) && !defined(UNIXPC)
! # define HAS_FCHMOD
! #endif
--- 20,31 ----
*/
#ifndef __P
! #define __P(x) ()
! #define const
#endif
/*****************************************************************/
! #define WAIT_T union wait
! #define PID_T pid_t
! #define TIME_T time_t
diff -c -r /tmp/cron/cron.c cron/cron.c
*** /tmp/cron/cron.c Fri Jun 18 19:37:52 1999
--- cron/cron.c Tue Jun 15 21:11:15 1999
***************
*** 25,45 ****
#include "cron.h"
#include <sys/signal.h>
! #if SYS_TIME_H
! # include <sys/time.h>
! #else
! # include <time.h>
! #endif
-
static void usage __P((void)),
run_reboot_jobs __P((cron_db *)),
cron_tick __P((cron_db *)),
cron_sync __P((void)),
cron_sleep __P((void)),
- #ifdef USE_SIGCHLD
sigchld_handler __P((int)),
- #endif
sighup_handler __P((int)),
parse_args __P((int c, char *v[]));
--- 25,38 ----
#include "cron.h"
#include <sys/signal.h>
! #include <sys/time.h>
static void usage __P((void)),
run_reboot_jobs __P((cron_db *)),
cron_tick __P((cron_db *)),
cron_sync __P((void)),
cron_sleep __P((void)),
sigchld_handler __P((int)),
sighup_handler __P((int)),
parse_args __P((int c, char *v[]));
***************
*** 60,77 ****
ProgramName = argv[0];
- #if defined(BSD)
setlinebuf(stdout);
setlinebuf(stderr);
- #endif
parse_args(argc, argv);
- #ifdef USE_SIGCHLD
(void) signal(SIGCHLD, sigchld_handler);
- #else
- (void) signal(SIGCLD, SIG_IGN);
- #endif
(void) signal(SIGHUP, sighup_handler);
acquire_daemonlock(0);
--- 53,64 ----
***************
*** 78,86 ****
set_cron_uid();
set_cron_cwd();
- #if defined(POSIX)
setenv("PATH", _PATH_DEFPATH, 1);
- #endif
/* if there are no debug flags turned on, fork as a daemon should.
*/
--- 65,71 ----
***************
*** 244,250 ****
}
- #ifdef USE_SIGCHLD
static void
sigchld_handler(x) {
WAIT_T waiter;
--- 229,234 ----
***************
*** 251,261 ****
PID_T pid;
for (;;) {
- #ifdef POSIX
pid = waitpid(-1, &waiter, WNOHANG);
- #else
- pid = wait3(&waiter, WNOHANG, (struct rusage *)0);
- #endif
switch (pid) {
case -1:
Debug(DPROC,
--- 235,241 ----
***************
*** 272,279 ****
}
}
}
- #endif /*USE_SIGCHLD*/
-
static void
sighup_handler(x) {
--- 252,257 ----
diff -c -r /tmp/cron/cron.h cron/cron.h
*** /tmp/cron/cron.h Fri Jun 18 19:37:52 1999
--- cron/cron.h Tue Jun 15 20:31:36 1999
***************
*** 112,119 ****
;
#endif /* DEBUGGING */
- #define MkLower(ch) (isupper(ch) ? tolower(ch) : ch)
- #define MkUpper(ch) (islower(ch) ? toupper(ch) : ch)
#define Set_LineNum(ln) {Debug(DPARS|DEXT,("linenum=%d\n",ln)); \
LineNumber = ln; \
}
--- 112,117 ----
diff -c -r /tmp/cron/crontab.c cron/crontab.c
*** /tmp/cron/crontab.c Fri Jun 18 19:48:38 1999
--- cron/crontab.c Tue Jun 15 21:11:42 1999
***************
*** 33,52 ****
#include <fcntl.h>
#include <sys/file.h>
#include <sys/stat.h>
! #ifdef USE_UTIMES
! # include <sys/time.h>
! #else
! # include <time.h>
! # include <utime.h>
! #endif
! #if defined(POSIX)
! # include <locale.h>
! #endif
-
#define NHEADER_LINES 3
-
enum opt_t { opt_unknown, opt_list, opt_delete, opt_edit, opt_replace };
#if DEBUGGING
--- 33,42 ----
#include <fcntl.h>
#include <sys/file.h>
#include <sys/stat.h>
! #include <sys/time.h>
#define NHEADER_LINES 3
enum opt_t { opt_unknown, opt_list, opt_delete, opt_edit, opt_replace };
#if DEBUGGING
***************
*** 95,107 ****
Pid = getpid();
ProgramName = argv[0];
- #if defined(POSIX)
- setlocale(LC_ALL, "");
- #endif
-
- #if defined(BSD)
setlinebuf(stderr);
! #endif
parse_args(argc, argv); /* sets many globals, opens a file */
set_cron_uid();
set_cron_cwd();
--- 85,92 ----
Pid = getpid();
ProgramName = argv[0];
setlinebuf(stderr);
!
parse_args(argc, argv); /* sets many globals, opens a file */
set_cron_uid();
set_cron_cwd();
***************
*** 242,248 ****
static void
list_cmd() {
char n[MAX_FNAME];
! FILE *f;
int ch;
log_it(RealUser, Pid, "LIST", User);
--- 227,233 ----
static void
list_cmd() {
char n[MAX_FNAME];
! register FILE *f;
int ch;
log_it(RealUser, Pid, "LIST", User);
***************
*** 293,300 ****
static void
edit_cmd() {
char n[MAX_FNAME], q[MAX_TEMPSTR], *editor;
! FILE *f;
! int ch, t, x;
struct stat statbuf;
time_t mtime;
WAIT_T waiter;
--- 278,286 ----
static void
edit_cmd() {
char n[MAX_FNAME], q[MAX_TEMPSTR], *editor;
! register FILE *f;
! register int ch;
! int t, x;
struct stat statbuf;
time_t mtime;
WAIT_T waiter;
***************
*** 320,330 ****
perror(Filename);
goto fatal;
}
- #ifdef HAS_FCHOWN
if (fchown(t, getuid(), getgid()) < 0) {
- #else
- if (chown(Filename, getuid(), getgid()) < 0) {
- #endif
perror("fchown");
goto fatal;
}
--- 306,312 ----
***************
*** 490,497 ****
static int
replace_cmd() {
char n[MAX_FNAME], envstr[MAX_ENVSTR], tn[MAX_FNAME];
! FILE *tmp;
! int ch, eof;
entry *e;
time_t now = time(NULL);
char **envp = env_init();
--- 472,480 ----
static int
replace_cmd() {
char n[MAX_FNAME], envstr[MAX_ENVSTR], tn[MAX_FNAME];
! register FILE *tmp;
! register int ch;
! int eof;
entry *e;
time_t now = time(NULL);
char **envp = env_init();
***************
*** 557,583 ****
return (-1);
}
- #ifdef HAS_FCHOWN
if (fchown(fileno(tmp), ROOT_UID, -1) < OK)
! #else
! if (chown(tn, ROOT_UID, -1) < OK)
! #endif
! {
perror("chown");
fclose(tmp); unlink(tn);
return (-2);
! }
- #ifdef HAS_FCHMOD
if (fchmod(fileno(tmp), 0600) < OK)
! #else
! if (chmod(tn, 0600) < OK)
! #endif
! {
perror("chown");
fclose(tmp); unlink(tn);
return (-2);
! }
if (fclose(tmp) == EOF) {
perror("fclose");
--- 540,558 ----
return (-1);
}
if (fchown(fileno(tmp), ROOT_UID, -1) < OK)
! {
perror("chown");
fclose(tmp); unlink(tn);
return (-2);
! }
if (fchmod(fileno(tmp), 0600) < OK)
! {
perror("chown");
fclose(tmp); unlink(tn);
return (-2);
! }
if (fclose(tmp) == EOF) {
perror("fclose");
***************
*** 603,613 ****
static void
poke_daemon() {
- #ifdef USE_UTIMES
struct timeval tvs[2];
- struct timezone tz;
! (void) gettimeofday(&tvs[0], &tz);
tvs[1] = tvs[0];
if (utimes(SPOOL_DIR, tvs) < OK) {
fprintf(stderr, "crontab: can't update mtime on spooldir\n");
--- 578,586 ----
static void
poke_daemon() {
struct timeval tvs[2];
! (void) gettimeofday(&tvs[0], NULL);
tvs[1] = tvs[0];
if (utimes(SPOOL_DIR, tvs) < OK) {
fprintf(stderr, "crontab: can't update mtime on spooldir\n");
***************
*** 614,624 ****
perror(SPOOL_DIR);
return;
}
- #else
- if (utime(SPOOL_DIR, NULL) < OK) {
- fprintf(stderr, "crontab: can't update mtime on spooldir\n");
- perror(SPOOL_DIR);
- return;
- }
- #endif /*USE_UTIMES*/
}
--- 587,590 ----
diff -c -r /tmp/cron/database.c cron/database.c
*** /tmp/cron/database.c Fri Jun 18 19:37:52 1999
--- cron/database.c Sat Jun 12 16:04:08 1999
***************
*** 44,50 ****
DIR *dir;
struct stat statbuf;
struct stat syscron_stat;
! DIR_T *dp;
cron_db new_db;
user *u, *nu;
--- 44,50 ----
DIR *dir;
struct stat statbuf;
struct stat syscron_stat;
! register DIR_T *dp;
cron_db new_db;
user *u, *nu;
***************
*** 145,152 ****
void
link_user(db, u)
! cron_db *db;
! user *u;
{
if (db->head == NULL)
db->head = u;
--- 145,152 ----
void
link_user(db, u)
! register cron_db *db;
! register user *u;
{
if (db->head == NULL)
db->head = u;
***************
*** 160,167 ****
void
unlink_user(db, u)
! cron_db *db;
! user *u;
{
if (u->prev == NULL)
db->head = u->next;
--- 160,167 ----
void
unlink_user(db, u)
! register cron_db *db;
! register user *u;
{
if (u->prev == NULL)
db->head = u->next;
***************
*** 178,187 ****
user *
find_user(db, name)
cron_db *db;
! char *name;
{
char *env_get();
! user *u;
for (u = db->head; u != NULL; u = u->next)
if (!strcmp(u->name, name))
--- 178,187 ----
user *
find_user(db, name)
cron_db *db;
! register char *name;
{
char *env_get();
! register user *u;
for (u = db->head; u != NULL; u = u->next)
if (!strcmp(u->name, name))
***************
*** 201,207 ****
{
struct passwd *pw = NULL;
int crontab_fd = OK - 1;
! user *u;
if (strcmp(fname, "*system*") && !(pw = getpwnam(uname))) {
/* file doesn't have a user in passwd file.
--- 201,207 ----
{
struct passwd *pw = NULL;
int crontab_fd = OK - 1;
! register user *u;
if (strcmp(fname, "*system*") && !(pw = getpwnam(uname))) {
/* file doesn't have a user in passwd file.
diff -c -r /tmp/cron/do_command.c cron/do_command.c
*** /tmp/cron/do_command.c Fri Jun 18 19:37:56 1999
--- cron/do_command.c Tue Jun 15 21:24:29 1999
***************
*** 19,39 ****
static char rcsid[] = "$Id: do_command.c,v 2.12 1994/01/15 20:43:43 vixie Exp $";
#endif
-
#include "cron.h"
#include <sys/signal.h>
- #if defined(sequent)
- # include <sys/universe.h>
- #endif
#if defined(SYSLOG)
# include <syslog.h>
#endif
- static void child_process __P((entry *, user *)),
- do_univ __P((user *));
-
-
void
do_command(e, u)
entry *e;
--- 19,32 ----
static char rcsid[] = "$Id: do_command.c,v 2.12 1994/01/15 20:43:43 vixie Exp $";
#endif
#include "cron.h"
#include <sys/signal.h>
#if defined(SYSLOG)
# include <syslog.h>
#endif
+ static void child_process __P((entry *, user *));
void
do_command(e, u)
entry *e;
***************
*** 76,82 ****
int stdin_pipe[2], stdout_pipe[2];
register char *input_data;
char *usernm, *mailto;
! int children = 0;
Debug(DPROC, ("[%d] child_process('%s')\n", getpid(), e->cmd))
--- 69,76 ----
int stdin_pipe[2], stdout_pipe[2];
register char *input_data;
char *usernm, *mailto;
! register int ch;
! int children = 0, escaped;
Debug(DPROC, ("[%d] child_process('%s')\n", getpid(), e->cmd))
***************
*** 83,101 ****
/* mark ourselves as different to PS command watchers by upshifting
* our program name. This has no effect on some kernels.
*/
! /*local*/{
! register char *pch;
- for (pch = ProgramName; *pch; pch++)
- *pch = MkUpper(*pch);
- }
-
/* discover some useful and important environment settings
*/
usernm = env_get("LOGNAME", e->envp);
mailto = env_get("MAILTO", e->envp);
- #ifdef USE_SIGCHLD
/* our parent is watching for our death by catching SIGCHLD. we
* do not care to watch for our children's deaths this way -- we
* use wait() explictly. so we have to disable the signal (which
--- 77,90 ----
/* mark ourselves as different to PS command watchers by upshifting
* our program name. This has no effect on some kernels.
*/
! for (input_data = ProgramName; ch = *input_data; input_data++)
! *input_data = (islower(ch) ? toupper(ch) : ch);
/* discover some useful and important environment settings
*/
usernm = env_get("LOGNAME", e->envp);
mailto = env_get("MAILTO", e->envp);
/* our parent is watching for our death by catching SIGCHLD. we
* do not care to watch for our children's deaths this way -- we
* use wait() explictly. so we have to disable the signal (which
***************
*** 102,114 ****
* was inherited from the parent).
*/
(void) signal(SIGCHLD, SIG_IGN);
- #else
- /* on system-V systems, we are ignoring SIGCLD. we have to stop
- * ignoring it now or the wait() in cron_pclose() won't work.
- * because of this, we have to wait() for our children here, as well.
- */
- (void) signal(SIGCLD, SIG_DFL);
- #endif /*BSD*/
/* create some pipes to talk to our future child
*/
--- 91,96 ----
***************
*** 123,146 ****
* the command. Subsequent %'s will be transformed into newlines,
* but that happens later.
*/
! /*local*/{
! register int escaped = FALSE;
! register int ch;
!
! for (input_data = e->cmd; ch = *input_data; input_data++) {
! if (escaped) {
! escaped = FALSE;
! continue;
! }
! if (ch == '\\') {
! escaped = TRUE;
! continue;
! }
! if (ch == '%') {
! *input_data++ = '\0';
! break;
! }
}
}
/* fork again, this time so we can exec the user's command.
--- 105,124 ----
* the command. Subsequent %'s will be transformed into newlines,
* but that happens later.
*/
! escaped = FALSE;
! for (input_data = e->cmd; ch = *input_data; input_data++) {
! if (escaped) {
! escaped = FALSE;
! continue;
}
+ if (ch == '\\') {
+ escaped = TRUE;
+ continue;
+ }
+ if (ch == '%') {
+ *input_data++ = '\0';
+ break;
+ }
}
/* fork again, this time so we can exec the user's command.
***************
*** 197,215 ****
close(stdin_pipe[READ_PIPE]);
close(stdout_pipe[WRITE_PIPE]);
- /* set our login universe. Do this in the grandchild
- * so that the child can invoke /usr/lib/sendmail
- * without surprises.
- */
- do_univ(u);
-
/* set our directory, uid and gid. Set gid first, since once
* we set uid, we've lost root privledges.
*/
setgid(e->gid);
- # if defined(BSD)
initgroups(env_get("LOGNAME", e->envp), e->gid);
- # endif
setuid(e->uid); /* we aren't root after this... */
chdir(env_get("HOME", e->envp));
--- 175,185 ----
***************
*** 460,501 ****
Debug(DPROC, (", dumped core"))
Debug(DPROC, ("\n"))
}
- }
-
-
- static void
- do_univ(u)
- user *u;
- {
- #if defined(sequent)
- /* Dynix (Sequent) hack to put the user associated with
- * the passed user structure into the ATT universe if
- * necessary. We have to dig the gecos info out of
- * the user's password entry to see if the magic
- * "universe(att)" string is present.
- */
-
- struct passwd *p;
- char *s;
- int i;
-
- p = getpwuid(u->uid);
- (void) endpwent();
-
- if (p == NULL)
- return;
-
- s = p->pw_gecos;
-
- for (i = 0; i < 4; i++)
- {
- if ((s = strchr(s, ',')) == NULL)
- return;
- s++;
- }
- if (strcmp(s, "universe(att)"))
- return;
-
- (void) universe(U_ATT);
- #endif
}
--- 430,433 ----
diff -c -r /tmp/cron/entry.c cron/entry.c
*** /tmp/cron/entry.c Fri Jun 18 19:37:56 1999
--- cron/entry.c Tue Jun 15 21:11:55 1999
***************
*** 55,61 ****
void
free_entry(e)
! entry *e;
{
free(e->cmd);
env_free(e->envp);
--- 55,61 ----
void
free_entry(e)
! register entry *e;
{
free(e->cmd);
env_free(e->envp);
***************
*** 70,76 ****
load_entry(file, error_func, pw, envp)
FILE *file;
void (*error_func)();
! struct passwd *pw;
char **envp;
{
/* this function reads one crontab entry -- the next -- from a file.
--- 70,76 ----
load_entry(file, error_func, pw, envp)
FILE *file;
void (*error_func)();
! register struct passwd *pw;
char **envp;
{
/* this function reads one crontab entry -- the next -- from a file.
***************
*** 87,93 ****
*/
ecode_e ecode = e_none;
! entry *e;
int ch;
char cmd[MAX_COMMAND];
char envstr[MAX_ENVSTR];
--- 87,93 ----
*/
ecode_e ecode = e_none;
! register entry *e;
int ch;
char cmd[MAX_COMMAND];
char envstr[MAX_ENVSTR];
***************
*** 262,271 ****
}
sprintf(envstr, "%s=%s", "LOGNAME", pw->pw_name);
e->envp = env_set(e->envp, envstr);
- #if defined(BSD)
sprintf(envstr, "%s=%s", "USER", pw->pw_name);
e->envp = env_set(e->envp, envstr);
- #endif
Debug(DPARS, ("load_entry()...about to parse command\n"))
--- 262,269 ----
***************
*** 309,315 ****
int low, high; /* bounds, impl. offset for bitstr */
char *names[]; /* NULL or *[] of names for these elements */
int ch; /* current character being processed */
! FILE *file; /* file being read */
{
register int done;
--- 307,313 ----
int low, high; /* bounds, impl. offset for bitstr */
char *names[]; /* NULL or *[] of names for these elements */
int ch; /* current character being processed */
! register FILE *file; /* file being read */
{
register int done;
***************
*** 355,361 ****
bitstr_t *bits; /* one bit per flag, default=FALSE */
int low, high; /* bounds, impl. offset for bitstr */
char *names[]; /* NULL or names of elements */
! int ch; /* current character being processed */
FILE *file; /* file being read */
{
/* range = number | number "-" number [ "/" number ]
--- 353,359 ----
bitstr_t *bits; /* one bit per flag, default=FALSE */
int low, high; /* bounds, impl. offset for bitstr */
char *names[]; /* NULL or names of elements */
! register int ch; /* current character being processed */
FILE *file; /* file being read */
{
/* range = number | number "-" number [ "/" number ]
***************
*** 440,446 ****
int *numptr; /* where does the result go? */
int low; /* offset applied to result if symbolic enum used */
char *names[]; /* symbolic names, if any, for enums */
! int ch; /* current character */
FILE *file; /* source */
{
char temp[MAX_TEMPSTR], *pc;
--- 438,444 ----
int *numptr; /* where does the result go? */
int low; /* offset applied to result if symbolic enum used */
char *names[]; /* symbolic names, if any, for enums */
! register int ch; /* current character */
FILE *file; /* source */
{
char temp[MAX_TEMPSTR], *pc;
diff -c -r /tmp/cron/env.c cron/env.c
*** /tmp/cron/env.c Fri Jun 18 19:48:38 1999
--- cron/env.c Sat Jun 12 16:11:43 1999
***************
*** 37,43 ****
env_free(envp)
char **envp;
{
! char **p;
for (p = envp; *p; p++)
free(*p);
--- 37,43 ----
env_free(envp)
char **envp;
{
! register char **p;
for (p = envp; *p; p++)
free(*p);
***************
*** 47,53 ****
char **
env_copy(envp)
! register char **envp;
{
register int count, i;
register char **p;
--- 47,53 ----
char **
env_copy(envp)
! char **envp;
{
register int count, i;
register char **p;
***************
*** 162,169 ****
char *
env_get(name, envp)
! register char *name;
! register char **envp;
{
register int len = strlen(name);
register char *p, *q;
--- 162,169 ----
char *
env_get(name, envp)
! char *name;
! char **envp;
{
register int len = strlen(name);
register char *p, *q;
diff -c -r /tmp/cron/externs.h cron/externs.h
*** /tmp/cron/externs.h Fri Jun 18 19:37:52 1999
--- cron/externs.h Tue Jun 15 20:32:34 1999
***************
*** 15,145 ****
* Paul Vixie <paul@vix.com> uunet!decwrl!vixie!paul
*/
! #if defined(POSIX) || defined(ATT)
! # include <stdlib.h>
! # include <unistd.h>
! # include <string.h>
! # include <dirent.h>
! # define DIR_T struct dirent
! # define WAIT_T int
! # define WAIT_IS_INT 1
! extern char *tzname[2];
! # define TZONE(tm) tzname[(tm).tm_isdst]
! #endif
! #if defined(UNIXPC)
! # undef WAIT_T
! # undef WAIT_IS_INT
! # define WAIT_T union wait
! #endif
- #if defined(POSIX)
- # define SIG_T sig_t
- # define TIME_T time_t
- # define PID_T pid_t
- #endif
-
- #if defined(ATT)
- # define SIG_T void
- # define TIME_T long
- # define PID_T int
- #endif
-
- #if !defined(POSIX) && !defined(ATT)
- /* classic BSD */
- extern time_t time();
- extern unsigned sleep();
- extern struct tm *localtime();
- extern struct passwd *getpwnam();
- extern int errno;
- extern void perror(), exit(), free();
- extern char *getenv(), *strcpy(), *strchr(), *strtok();
- extern void *malloc(), *realloc();
- # define SIG_T void
- # define TIME_T long
- # define PID_T int
- # define WAIT_T union wait
- # define DIR_T struct direct
- # include <sys/dir.h>
- # define TZONE(tm) (tm).tm_zone
- #endif
-
- /* getopt() isn't part of POSIX. some systems define it in <stdlib.h> anyway.
- * of those that do, some complain that our definition is different and some
- * do not. to add to the misery and confusion, some systems define getopt()
- * in ways that we cannot predict or comprehend, yet do not define the adjunct
- * external variables needed for the interface.
- */
- #if (!defined(BSD) || (BSD < 198911)) && !defined(ATT) && !defined(UNICOS)
- int getopt __P((int, char * const *, const char *));
- #endif
-
- #if (!defined(BSD) || (BSD < 199103))
- extern char *optarg;
- extern int optind, opterr, optopt;
- #endif
-
- #if WAIT_IS_INT
- # ifndef WEXITSTATUS
- # define WEXITSTATUS(x) (((x) >> 8) & 0xff)
- # endif
- # ifndef WTERMSIG
- # define WTERMSIG(x) ((x) & 0x7f)
- # endif
- # ifndef WCOREDUMP
- # define WCOREDUMP(x) ((x) & 0x80)
- # endif
- #else /*WAIT_IS_INT*/
- # ifndef WEXITSTATUS
- # define WEXITSTATUS(x) ((x).w_retcode)
- # endif
- # ifndef WTERMSIG
- # define WTERMSIG(x) ((x).w_termsig)
- # endif
- # ifndef WCOREDUMP
- # define WCOREDUMP(x) ((x).w_coredump)
- # endif
- #endif /*WAIT_IS_INT*/
-
- #ifndef WIFSIGNALED
- #define WIFSIGNALED(x) (WTERMSIG(x) != 0)
- #endif
- #ifndef WIFEXITED
- #define WIFEXITED(x) (WTERMSIG(x) == 0)
- #endif
-
- #ifdef NEED_STRCASECMP
- extern int strcasecmp __P((char *, char *));
- #endif
-
- #ifdef NEED_STRDUP
- extern char *strdup __P((char *));
- #endif
-
- #ifdef NEED_STRERROR
- extern char *strerror __P((int));
- #endif
-
- #ifdef NEED_FLOCK
- extern int flock __P((int, int));
- # define LOCK_SH 1
- # define LOCK_EX 2
- # define LOCK_NB 4
- # define LOCK_UN 8
- #endif
-
- #ifdef NEED_SETSID
extern int setsid __P((void));
- #endif
-
- #ifdef NEED_GETDTABLESIZE
- extern int getdtablesize __P((void));
- #endif
-
- #ifdef NEED_SETENV
- extern int setenv __P((char *, char *, int));
- #endif
-
- #ifdef NEED_VFORK
- extern PID_T vfork __P((void));
- #endif
--- 15,28 ----
* Paul Vixie <paul@vix.com> uunet!decwrl!vixie!paul
*/
! #include <stdlib.h>
! #include <unistd.h>
! #include <string.h>
! #include <sys/dir.h>
! #define DIR_T struct direct
! #define WEXITSTATUS(x) ((x).w_retcode)
! #define WTERMSIG(x) ((x).w_termsig)
! #define WCOREDUMP(x) ((x).w_coredump)
extern int setsid __P((void));
diff -c -r /tmp/cron/misc.c cron/misc.c
*** /tmp/cron/misc.c Fri Jun 18 19:37:56 1999
--- cron/misc.c Fri Jun 18 20:55:14 1999
***************
*** 25,35 ****
#include "cron.h"
! #if SYS_TIME_H
! # include <sys/time.h>
! #else
! # include <time.h>
! #endif
#include <sys/file.h>
#include <sys/stat.h>
#include <errno.h>
--- 25,31 ----
#include "cron.h"
! #include <sys/time.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <errno.h>
***************
*** 44,57 ****
#define LOG_CRON LOG_DAEMON
#endif
-
static int LogFD = ERR;
-
int
strcmp_until(left, right, until)
! char *left;
! char *right;
int until;
{
register int diff;
--- 40,51 ----
#define LOG_CRON LOG_DAEMON
#endif
static int LogFD = ERR;
int
strcmp_until(left, right, until)
! register char *left;
! register char *right;
int until;
{
register int diff;
***************
*** 76,84 ****
*/
int
strdtb(s)
! char *s;
{
! char *x = s;
/* scan forward to the null
*/
--- 70,78 ----
*/
int
strdtb(s)
! register char *s;
{
! register char *x = s;
/* scan forward to the null
*/
***************
*** 120,126 ****
#else /* DEBUGGING */
! char *pc = flags;
DebugFlags = 0;
--- 114,120 ----
#else /* DEBUGGING */
! register char *pc = flags;
DebugFlags = 0;
***************
*** 173,189 ****
void
set_cron_uid()
{
- #if defined(BSD) || defined(POSIX)
if (seteuid(ROOT_UID) < OK) {
perror("seteuid");
exit(ERROR_EXIT);
}
- #else
- if (setuid(ROOT_UID) < OK) {
- perror("setuid");
- exit(ERROR_EXIT);
- }
- #endif
}
--- 167,176 ----
***************
*** 302,310 ****
*/
int
get_char(file)
! FILE *file;
{
! int ch;
ch = getc(file);
if (ch == '\n')
--- 289,297 ----
*/
int
get_char(file)
! register FILE *file;
{
! register int ch;
ch = getc(file);
if (ch == '\n')
***************
*** 317,324 ****
*/
void
unget_char(ch, file)
! int ch;
! FILE *file;
{
ungetc(ch, file);
if (ch == '\n')
--- 304,311 ----
*/
void
unget_char(ch, file)
! register int ch;
! register FILE *file;
{
ungetc(ch, file);
if (ch == '\n')
***************
*** 334,345 ****
*/
int
get_string(string, size, file, terms)
! char *string;
int size;
FILE *file;
char *terms;
{
! int ch;
while (EOF != (ch = get_char(file)) && !strchr(terms, ch)) {
if (size > 1) {
--- 321,332 ----
*/
int
get_string(string, size, file, terms)
! register char *string;
int size;
FILE *file;
char *terms;
{
! register int ch;
while (EOF != (ch = get_char(file)) && !strchr(terms, ch)) {
if (size > 1) {
***************
*** 359,367 ****
*/
void
skip_comments(file)
! FILE *file;
{
! int ch;
while (EOF != (ch = get_char(file))) {
/* ch is now the first character of a line.
--- 346,354 ----
*/
void
skip_comments(file)
! register FILE *file;
{
! register int ch;
while (EOF != (ch = get_char(file))) {
/* ch is now the first character of a line.
***************
*** 475,481 ****
#if defined(LOG_FILE)
/* we assume that MAX_TEMPSTR will hold the date, time, &punctuation.
*/
! msg = malloc(strlen(username)
+ strlen(event)
+ strlen(detail)
+ MAX_TEMPSTR);
--- 462,468 ----
#if defined(LOG_FILE)
/* we assume that MAX_TEMPSTR will hold the date, time, &punctuation.
*/
! msg = (char *)malloc(strlen(username)
+ strlen(event)
+ strlen(detail)
+ MAX_TEMPSTR);
***************
*** 518,528 ****
* our client may not be our own. therefore we want to
* print the pid ourselves.
*/
- # ifdef LOG_DAEMON
openlog(ProgramName, LOG_PID, LOG_CRON);
- # else
- openlog(ProgramName, LOG_PID);
- # endif
syslog_open = TRUE; /* assume openlog success */
}
--- 505,511 ----
***************
*** 555,561 ****
char *
first_word(s, t)
register char *s; /* string we want the first word of */
! register char *t; /* terminators, implicitly including \0 */
{
static char retbuf[2][MAX_TEMPSTR + 1]; /* sure wish C had GC */
static int retsel = 0;
--- 538,544 ----
char *
first_word(s, t)
register char *s; /* string we want the first word of */
! char *t; /* terminators, implicitly including \0 */
{
static char retbuf[2][MAX_TEMPSTR + 1]; /* sure wish C had GC */
static int retsel = 0;
***************
*** 617,626 ****
*/
char *
mkprints(src, len)
! register unsigned char *src;
! register unsigned int len;
{
! register char *dst = malloc(len*4 + 1);
mkprint(dst, src, len);
--- 600,609 ----
*/
char *
mkprints(src, len)
! unsigned char *src;
! unsigned int len;
{
! register char *dst = (char *)malloc(len*4 + 1);
mkprint(dst, src, len);
***************
*** 653,664 ****
}
#endif /*MAIL_DATE*/
-
- #ifdef HAVE_SAVED_SUIDS
static int save_euid;
! int swap_uids() { save_euid = geteuid(); return seteuid(getuid()); }
! int swap_uids_back() { return seteuid(save_euid); }
! #else /*HAVE_SAVED_UIDS*/
! int swap_uids() { return setreuid(geteuid(), getuid()); }
! int swap_uids_back() { return swap_uids(); }
! #endif /*HAVE_SAVED_UIDS*/
--- 636,649 ----
}
#endif /*MAIL_DATE*/
static int save_euid;
! int swap_uids()
! {
! save_euid = geteuid();
! return(seteuid(getuid()));
! }
!
! int swap_uids_back()
! {
! return(seteuid(save_euid));
! }
diff -c -r /tmp/cron/pathnames.h cron/pathnames.h
*** /tmp/cron/pathnames.h Fri Jun 18 19:37:52 1999
--- cron/pathnames.h Fri Jun 18 20:56:50 1999
***************
*** 19,27 ****
* $Id: pathnames.h,v 1.3 1994/01/15 20:43:43 vixie Exp $
*/
! #if (defined(BSD)) && (BSD >= 199103) || defined(__linux) || defined(AIX)
! # include <paths.h>
! #endif /*BSD*/
#ifndef CRONDIR
/* CRONDIR is where crond(8) and crontab(1) both chdir
--- 19,25 ----
* $Id: pathnames.h,v 1.3 1994/01/15 20:43:43 vixie Exp $
*/
! #include <paths.h>
#ifndef CRONDIR
/* CRONDIR is where crond(8) and crontab(1) both chdir
***************
*** 49,55 ****
*/
#define ALLOW_FILE "allow" /*-*/
#define DENY_FILE "deny" /*-*/
! #define LOG_FILE "log" /*-*/
/* where should the daemon stick its PID?
*/
--- 47,53 ----
*/
#define ALLOW_FILE "allow" /*-*/
#define DENY_FILE "deny" /*-*/
! #undef LOG_FILE /* "log" */
/* where should the daemon stick its PID?
*/
diff -c -r /tmp/cron/putman.sh cron/putman.sh
*** /tmp/cron/putman.sh Fri Jun 18 19:37:52 1999
--- cron/putman.sh Tue Jun 15 21:04:25 1999
***************
*** 9,23 ****
DIR=$2
SECT=`expr $PAGE : '[a-z]*.\([0-9]\)'`
! [ -d $DIR/man$SECT ] && {
! set -x
! cp $PAGE $DIR/man$SECT/$PAGE
! set +x
! } || {
! set -x
! nroff -man $PAGE >$DIR/cat$SECT/`basename $PAGE .$SECT`.0
! set +x
! }
exit 0
--- 9,26 ----
DIR=$2
SECT=`expr $PAGE : '[a-z]*.\([0-9]\)'`
+ MDIR="$DIR/cat$SECT"
+ DEST="$MDIR/`basename $PAGE .$SECT`.0"
! set -x
! if [ ! -d $MDIR ]; then
! rm -f $MDIR
! mkdir -p $MDIR
! chmod 755 $MDIR
! fi
!
! nroff -man $PAGE >$DEST
! chmod 444 $DEST
! set +x
exit 0
diff -c -r /tmp/cron/user.c cron/user.c
*** /tmp/cron/user.c Fri Jun 18 19:37:52 1999
--- cron/user.c Sat Jun 12 16:16:24 1999
***************
*** 30,36 ****
free_user(u)
user *u;
{
! entry *e, *ne;
free(u->name);
for (e = u->crontab; e != NULL; e = ne) {
--- 30,36 ----
free_user(u)
user *u;
{
! register entry *e, *ne;
free(u->name);
for (e = u->crontab; e != NULL; e = ne) {
***************
*** 49,56 ****
{
char envstr[MAX_ENVSTR];
FILE *file;
! user *u;
! entry *e;
int status;
char **envp;
--- 49,56 ----
{
char envstr[MAX_ENVSTR];
FILE *file;
! register user *u;
! register entry *e;
int status;
char **envp;