Disabled installation of cron, crontab by default. Fixed up all information files to reflect this.

This commit is contained in:
dale_mellor 2003-07-05 12:13:19 +00:00
commit 62b0403363
13 changed files with 118 additions and 98 deletions

6
BUGS
View file

@ -1,4 +1,4 @@
-*-text-*- -*-text-*-
* If two users modify their crontabs simultaneously, there will be contention * If two users modify their crontabs simultaneously, there will be contention
for /var/cron/update between themselves and with the main daemon. for /var/cron/update between themselves and with the main daemon.
@ -9,5 +9,7 @@
Coordinated Time (UTC). Coordinated Time (UTC).
* As often as not the cron daemon crashes (segfaults) when crontab sends it a * As often as not the cron daemon crashes (segfaults) when crontab sends it a
SIGHUP. SIGHUP. For this reason, the current release does not install cron or
crontab.

View file

@ -1,23 +1,7 @@
2003-06-30 hydro23 <Dale Mellor <dale@dmellor.dabsol.co.uk>> 2003-07-05 Dale Mellor <dale_mellor@users.sourceforge.net>
* mcron.scm: Introduced arbiters to marshall access to updates * configure.ac, makefile.am: Disabled installation of cron,
structure between main routing and HUP signal action procedure. crontab programs by default as they are broken.
* crontab.scm: When an empty /tmp file is produced for editing,
make it owned by the real user (so he can edit it).
* mcron.scm, makefile.am: Check explicitly for root user when
running cron personality. Install with only root execute
permission.
* mcron.scm: Don't create /var/run/cron.pid if the -s option has
been used (this is an undocumented possibility).
* configure.ac, config.scm.in: Added configure option
--enable-debug to determine whether debugging and traceback should
be turned on.
* Version bumped to 0.99.2.
2003-06-28 Dale Mellor <dale_mellor@users.sourceforge.net> 2003-06-28 Dale Mellor <dale_mellor@users.sourceforge.net>
@ -26,5 +10,3 @@
testing... testing...
* Version set at 0.99.1 * Version set at 0.99.1

16
NEWS
View file

@ -1,11 +1,23 @@
Historic moments in the life of mcron. Historic moments in the life of mcron. -*-text-*-
Copyright (C) 1992, 1993, 1995-2002 Free Software Foundation, Inc. Copyright (C) 2003 Dale Mellor
See the end for copying conditions. See the end for copying conditions.
Please send bug reports to dale_mellor@users.sourceforge.net. Please send bug reports to dale_mellor@users.sourceforge.net.
Saturday, 5th July 2003
Released version 0.99.1, with installation of cron and crontab disabled by
default (suspect problems with Guile internals are preventing these from
working properly). The CVS tag is release_0-99-1 (no branch has been created
for it).
Friday, 4th July 2003
We have been accepted as a Savannah project. A CVS repository and web home
page have been created. We're still waiting for acceptance as a GNU project.
---------------------------------------------------------------------- ----------------------------------------------------------------------

51
README
View file

@ -1,38 +1,51 @@
-*-text-*-
This is version 0.99.1 of the mcron program, designed and written by Dale This is version 0.99.1 of the mcron program, designed and written by Dale
Mellor, which replaces and hugely enhances Vixie cron. It is functionally Mellor, which replaces and hugely enhances Vixie cron. It is functionally
complete, production quality code (did you expect less?), but has not received complete, production quality code (did you expect less?), but has not received
much testing yet and contains known bugs. It has only been built on a GNU/Linux much testing yet and contains known bugs. It has only been built on a GNU/Linux
system, and will most likely fail on others (but you never know...). system, and will most likely fail on others (but you never know...).
Mcron is supposed to be 100% Vixie compatible. However, in the current release
this is broken, and by default only 50% compatibility is installed.
---------------------------------------------------------------------- ----------------------------------------------------------------------
IMPORTANT NOTICES IMPORTANT NOTICES
Read the BUGS file. Read the BUGS file.
Do not (yet) install this software on a machine which relies for its functioning By default, the cron and crontab programs are not installed, and mcron will
on its current set of crontabs. happiliy coexist alongside any existing cron programs you have on your
system. The Vixie-style programs can be installed by specifying --enable-vixie
to the configure command, in which case you must take heed of the following
notes.
The package must be installed by root.
Before installing this package for the first time, it is necessary to terminate Do not (yet) install this software on a machine which relies for its
any running cron daemons on your system. If your old cron is not accurately functioning on its current set of crontabs.
Vixie compatible (files in /var/cron/tabs*, /var/cron/allow, /var/cron/deny,
/etc/crontab, /var/run/cron.pid) then you will need to clear out all old
crontabs and make new ones afresh.
If your old cron is Vixie, or very similar, mcron should fall right into place The package must be installed by root.
where your old cron was (the binaries cron and crontab will be replaced), and
you should be able to continue to use your existing crontabs without noticing
any changes. Bear in mind that if you use /etc/crontab, then changes to this
file will *not* take immediate effect (this is the 1% incompatibility between
mcron and Vixie cron); you may want to add a comment to this file with a note to
this effect. Alternatively, use the new mcron program, it's better!
If you don't want to clobber your existing cron executables, you can specify the Before installing this package for the first time, it is necessary to
--program-prefix option to configure with a prefix ending in a non-alphabetic terminate any running cron daemons on your system. If your old cron is not
character, for example "m.", and then run the programs as m.mcron, m.cron and accurately Vixie compatible (files in /var/cron/tabs*, /var/cron/allow,
m.crontab. /var/cron/deny, /etc/crontab, /var/run/cron.pid) then you will need to clear
out all old crontabs and make new ones afresh.
If your old cron is Vixie, or very similar, mcron should fall right into
place where your old cron was (the binaries cron and crontab will be
replaced), and you should be able to continue to use your existing crontabs
without noticing any changes. Bear in mind that if you use /etc/crontab,
then changes to this file will *not* take immediate effect (this is the 1%
incompatibility between mcron and Vixie cron); you may want to add a comment
to this file with a note to this effect. Alternatively, use the new mcron
program, it's better!
If you don't want to clobber your existing cron executables, you can specify
the --program-prefix option to configure with a prefix ending in a
non-alphabetic character, for example "m.", and then run the programs as
m.mcron, m.cron and m.crontab.
---------------------------------------------------------------------- ----------------------------------------------------------------------

10
TODO
View file

@ -1,3 +1,5 @@
-*-text-*-
Maybe in the near future... Maybe in the near future...
* Logging. * Logging.
@ -16,8 +18,9 @@ There are no plans to actually do the following any time soon...
* Full security audit for Vixie mode. * Full security audit for Vixie mode.
* Move internal functions into a namespace such that configuration files * Move internal functions into a namespace, or provide alternative
cannot interfere with mcron itself. environments, such that configuration files cannot interfere with mcron
itself.
@ -28,7 +31,8 @@ Quite likely to happen if version 2.0 ever materializes...
* UNIX or TCP socket will allow interrogation and control of a running * UNIX or TCP socket will allow interrogation and control of a running
daemon (should be more reliable, efficient and useful than using the daemon (should be more reliable, efficient and useful than using the
SIGHUP-/var/cron/update method). SIGHUP-/var/cron/update method). (I did already try this but, as with
processes, Guile's use of threads falls over.)

View file

@ -24,4 +24,3 @@
(define config-package-string "@PACKAGE_STRING@") (define config-package-string "@PACKAGE_STRING@")
(define config-package-bugreport "@PACKAGE_BUGREPORT@") (define config-package-bugreport "@PACKAGE_BUGREPORT@")
(define config-sendmail "@SENDMAIL@") (define config-sendmail "@SENDMAIL@")
(define config-cat "@CAT@")

View file

@ -20,30 +20,41 @@ else
fi fi
AC_SUBST(CONFIG_DEBUG) AC_SUBST(CONFIG_DEBUG)
AC_MSG_CHECKING([whether the (broken) Vixie programs are requested])
AC_ARG_ENABLE(vixie,
AC_HELP_STRING([--enable-vixie],
[enable installation of cron and crontab programs]),
CONFIG_ENABLE_VIXIE=$enableval,
CONFIG_ENABLE_VIXIE=no)
AC_MSG_RESULT($CONFIG_ENABLE_VIXIE)
AC_SUBST(CONFIG_ENABLE_VIXIE)
# We substitute the following commands into the makefile by configure, because
# automake is confused by the ifeq command.
IFEQ_VIXIE="ifeq (\$(CONFIG_ENABLE_VIXIE), yes)"
AC_SUBST(IFEQ_VIXIE)
ENDIF="endif"
AC_SUBST(ENDIF)
AC_PROG_CC AC_PROG_CC
GUILE_PROGS GUILE_PROGS
GUILE_FLAGS GUILE_FLAGS
# Checks for programs. # Checks for programs.
# AC_CHECK_PROG(CHMOD, chmod, chmod)
AC_CHECK_PROGS(CHMOD, chmod)
if test "x$ac_cv_prog_CHMOD" = "x"; then
AC_MSG_ERROR(chmod not found)
fi
AC_CHECK_PROGS(ED, ed) AC_CHECK_PROGS(ED, ed)
if test "x$ac_cv_prog_ED" = "x"; then if test "x$ac_cv_prog_ED" = "x"; then
AC_MSG_ERROR(ed not found) AC_MSG_ERROR(ed not found)
fi fi
AC_CHECK_PROGS(CAT, cat)
if test "x$ac_cv_prog_CAT" = "x"; then
AC_MSG_ERROR(cat not found)
fi
AC_CHECK_PROGS(WHICH, which) AC_CHECK_PROGS(WHICH, which)
if test "x$ac_cv_prog_WHICH" = "x"; then if test "x$ac_cv_prog_WHICH" = "x"; then
AC_MSG_ERROR(which not found) AC_MSG_ERROR(which not found)
fi fi
# Now find a sendmail or equivalent. # Now find a sendmail or equivalent.
AC_CHECK_PROGS(SENDMAIL, sendmail) AC_CHECK_PROGS(SENDMAIL, sendmail)
@ -66,14 +77,6 @@ fi
SENDMAIL=$ac_cv_prog_SENDMAIL SENDMAIL=$ac_cv_prog_SENDMAIL
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
real_program_prefix=`echo $program_prefix | sed s/NONE//` real_program_prefix=`echo $program_prefix | sed s/NONE//`
AC_SUBST(real_program_prefix) AC_SUBST(real_program_prefix)

View file

@ -82,8 +82,7 @@
;; Iff the real user is root, he can use the -u option to access files of ;; Iff the real user is root, he can use the -u option to access files of
;; another user. ;; another user.
(define crontab-user (define crontab-user (option-ref options 'user crontab-real-user))
(option-ref options 'user crontab-real-user))
@ -147,12 +146,11 @@
((option-ref options 'edit #f) ((option-ref options 'edit #f)
(let ((temp-file (string-append "/tmp/crontab." (number->string (getpid)))) (let ((temp-file (string-append "/tmp/crontab." (number->string (getpid))))
(editor (if (getenv "VISUAL") (getenv "VISUAL") (editor (cond ((getenv "VISUAL") (getenv "VISUAL"))
(if (getenv "EDITOR") (getenv "EDITOR") ((getenv "EDITOR") (getenv "EDITOR"))
"vi")))) (else "vi"))))
(catch #t (catch #t (lambda () (copy-file crontab-file temp-file))
(lambda () (copy-file crontab-file temp-file)) (lambda (key . args) (with-output-to-file temp-file noop)))
(lambda (key . args) (with-output-to-file temp-file (lambda () #t))))
(chown temp-file (getuid) (getgid)) (chown temp-file (getuid) (getgid))
(system (string-append editor " " temp-file)) (system (string-append editor " " temp-file))
(read-vixie-file temp-file) (read-vixie-file temp-file)
@ -167,7 +165,7 @@
((option-ref options 'remove #f) ((option-ref options 'remove #f)
(catch #t (lambda () (delete-file crontab-file) (catch #t (lambda () (delete-file crontab-file)
(hit-server crontab-user)) (hit-server crontab-user))
(lambda (key . args) #t))) noop))
;; In the case of the replace personality we loop over all the arguments on the ;; In the case of the replace personality we loop over all the arguments on the
@ -194,6 +192,5 @@
;; used to put out, for total compatibility. ;; used to put out, for total compatibility.
(else (else
(display (display "crontab: usage error: file name must be specified for replace.\n")
"crontab: usage error: file name must be specified for replace.\n")
(primitive-exit 15))) (primitive-exit 15)))

View file

@ -36,14 +36,14 @@
;; to control is added at the end of the list. ;; to control is added at the end of the list.
(define (impose-default-environment env-alist passwd-entry) (define (impose-default-environment env-alist passwd-entry)
(append (list (cons "HOME" (passwd:dir passwd-entry)) (append `(("HOME" . ,(passwd:dir passwd-entry))
(cons "CWD" (passwd:dir passwd-entry)) ("CWD" . ,(passwd:dir passwd-entry))
(cons "SHELL" (passwd:shell passwd-entry)) ("SHELL" . ,(passwd:shell passwd-entry))
'("TERM" . #f) ("TERM" . #f)
'("TERMCAP" . #f)) ("TERMCAP" . #f))
env-alist env-alist
(list (cons "LOGNAME" (passwd:name passwd-entry)) `(("LOGNAME" . ,(passwd:name passwd-entry))
(cons "USER" (passwd:name passwd-entry))))) ("USER" . ,(passwd:name passwd-entry)))))

View file

@ -41,21 +41,27 @@ mcron.c : config.scm mcron.scm vixie.scm environment.scm email.scm crontab.scm \
@rm -f mcron.escaped.scm > /dev/null 2>&1 @rm -f mcron.escaped.scm > /dev/null 2>&1
install-exec-local: install-exec-local:
@IFEQ_VIXIE@
@if [ `id -u` -ne 0 ]; then \ @if [ `id -u` -ne 0 ]; then \
echo "*** MUST BE ROOT TO INSTALL MCRON ***"; \ echo "*** MUST BE ROOT TO INSTALL MCRON ***"; \
exit 1; \ exit 1; \
fi fi
@ENDIF@
#full program prefix #full program prefix
fpp = $(DESTDIR)$(bindir)/@real_program_prefix@ fpp = $(DESTDIR)$(bindir)/@real_program_prefix@
install-exec-hook: install-exec-hook:
@IFEQ_VIXIE@
@rm -f $(fpp)cron$(EXEEXT) > /dev/null 2>&1 @rm -f $(fpp)cron$(EXEEXT) > /dev/null 2>&1
@$(INSTALL) --mode='u=rwx' mcron$(EXEEXT) $(fpp)cron$(EXEEXT) @$(INSTALL) --mode='u=rwx' mcron$(EXEEXT) $(fpp)cron$(EXEEXT)
@rm -f $(fpp)crontab$(EXEEXT) > /dev/null 2>&1 @rm -f $(fpp)crontab$(EXEEXT) > /dev/null 2>&1
@$(INSTALL) --mode='u=rwxs,og=rx' mcron$(EXEEXT) $(fpp)crontab$(EXEEXT) @$(INSTALL) --mode='u=rwxs,og=rx' mcron$(EXEEXT) $(fpp)crontab$(EXEEXT)
@ENDIF@
./mkinstalldirs -m 'u=rwx' /var/cron ./mkinstalldirs -m 'u=rwx' /var/cron
./mkinstalldirs -m 'u=rwx,og=rx' /var/run ./mkinstalldirs -m 'u=rwx,og=rx' /var/run
uninstall-hook: uninstall-hook:
@IFEQ_VIXIE@
@rm -f $(fpp){cron,crontab}$(EXEEXT) @rm -f $(fpp){cron,crontab}$(EXEEXT)
@ENDIF@

View file

@ -239,8 +239,7 @@ Report bugs to " config-package-bugreport ".\n
(display " /var/run/cron.pid.)\n") (display " /var/run/cron.pid.)\n")
(primitive-exit 1))) (primitive-exit 1)))
(if (not (option-ref options 'schedule #f)) (if (not (option-ref options 'schedule #f))
(with-output-to-file "/var/run/cron.pid" (with-output-to-file "/var/run/cron.pid" noop))
(lambda () #t)))
(setenv "MAILTO" #f) (setenv "MAILTO" #f)
(c-set-cron-signals))) (c-set-cron-signals)))
@ -604,19 +603,17 @@ Report bugs to " config-package-bugreport ".\n
(use-modules (srfi srfi-2)) (use-modules (srfi srfi-2))
(define (process-files-in-system-directory) (define (process-files-in-system-directory)
;;; (catch #t (lambda () (catch #t (lambda ()
(let ((directory (opendir "/var/cron/tabs"))) (let ((directory (opendir "/var/cron/tabs")))
(do ((file-name (readdir directory) (readdir directory))) (do ((file-name (readdir directory) (readdir directory)))
((eof-object? file-name) (closedir directory)) ((eof-object? file-name) (closedir directory))
(and-let* ((user (valid-user file-name))) (and-let* ((user (valid-user file-name)))
(set! configuration-user user) (set! configuration-user user)
(read-vixie-file (string-append "/var/cron/tabs/" (read-vixie-file (string-append "/var/cron/tabs/"
file-name))))) file-name))))))
;;; ) (lambda (key . args)
;;; (lambda (key . args) (display "You do not have permission to access the system crontabs.\n")
;;; (display "You do not have permission to access the system crontabs.\n") (primitive-exit 4))))
;;; (primitive-exit 4)))
)

View file

@ -10,6 +10,12 @@
This file documents the @code{mcron} command for running jobs at This file documents the @code{mcron} command for running jobs at
scheduled times. scheduled times.
IMPORTANT NOTICE:
IT IS VERY LIKELY THAT THE CRON AND CRONTAB PROGRAMS DESCRIBED IN THIS
MANUAL HAVE NOT BEEN INSTALLED IN YOUR SYSTEM (THEY ARE CURRENTLY
BROKEN). THUS, ONLY THE MCRON PERSONALITY IS CURRENTLY AVAILABLE FOR
USE.
Copyright (C) 2003 Dale Mellor Copyright (C) 2003 Dale Mellor
This is free software. See the source files for the terms of the This is free software. See the source files for the terms of the
copyright. copyright.

View file

@ -416,11 +416,10 @@
((eof-object? line)) ((eof-object? line))
;; If the line ends with \, append the next line. ;; If the line ends with \, append the next line.
(do () (while ((and (>= (string-length line) 1)
((or (< (string-length line) 1) (char=? (string-ref line
(not (char=? (string-ref line (- (string-length line) 1))
(- (string-length line) 1)) #\\)))
#\\))))
(let ((next-line (read-line port))) (let ((next-line (read-line port)))
(if (eof-object? next-line) (if (eof-object? next-line)
(set! next-line "")) (set! next-line ""))