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
for /var/cron/update between themselves and with the main daemon.
@ -9,5 +9,7 @@
Coordinated Time (UTC).
* 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
structure between main routing and HUP signal action procedure.
* 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.
* configure.ac, makefile.am: Disabled installation of cron,
crontab programs by default as they are broken.
2003-06-28 Dale Mellor <dale_mellor@users.sourceforge.net>
@ -26,5 +10,3 @@
testing...
* 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.
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
Mellor, which replaces and hugely enhances Vixie cron. It is functionally
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
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
Read the BUGS file.
Do not (yet) install this software on a machine which relies for its functioning
on its current set of crontabs.
By default, the cron and crontab programs are not installed, and mcron will
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
any running cron daemons on your system. If your old cron is not accurately
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.
Do not (yet) install this software on a machine which relies for its
functioning on its current set of crontabs.
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!
The package must be installed by root.
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.
Before installing this package for the first time, it is necessary to
terminate any running cron daemons on your system. If your old cron is not
accurately 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 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...
* Logging.
@ -16,8 +18,9 @@ There are no plans to actually do the following any time soon...
* Full security audit for Vixie mode.
* Move internal functions into a namespace such that configuration files
cannot interfere with mcron itself.
* Move internal functions into a namespace, or provide alternative
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
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-bugreport "@PACKAGE_BUGREPORT@")
(define config-sendmail "@SENDMAIL@")
(define config-cat "@CAT@")

View file

@ -20,30 +20,41 @@ else
fi
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
GUILE_PROGS
GUILE_FLAGS
# 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)
if test "x$ac_cv_prog_ED" = "x"; then
AC_MSG_ERROR(ed not found)
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)
if test "x$ac_cv_prog_WHICH" = "x"; then
AC_MSG_ERROR(which not found)
fi
# Now find a sendmail or equivalent.
AC_CHECK_PROGS(SENDMAIL, sendmail)
@ -66,14 +77,6 @@ fi
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//`
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
;; another user.
(define crontab-user
(option-ref options 'user crontab-real-user))
(define crontab-user (option-ref options 'user crontab-real-user))
@ -147,12 +146,11 @@
((option-ref options 'edit #f)
(let ((temp-file (string-append "/tmp/crontab." (number->string (getpid))))
(editor (if (getenv "VISUAL") (getenv "VISUAL")
(if (getenv "EDITOR") (getenv "EDITOR")
"vi"))))
(catch #t
(lambda () (copy-file crontab-file temp-file))
(lambda (key . args) (with-output-to-file temp-file (lambda () #t))))
(editor (cond ((getenv "VISUAL") (getenv "VISUAL"))
((getenv "EDITOR") (getenv "EDITOR"))
(else "vi"))))
(catch #t (lambda () (copy-file crontab-file temp-file))
(lambda (key . args) (with-output-to-file temp-file noop)))
(chown temp-file (getuid) (getgid))
(system (string-append editor " " temp-file))
(read-vixie-file temp-file)
@ -167,7 +165,7 @@
((option-ref options 'remove #f)
(catch #t (lambda () (delete-file crontab-file)
(hit-server crontab-user))
(lambda (key . args) #t)))
noop))
;; 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.
(else
(display
"crontab: usage error: file name must be specified for replace.\n")
(display "crontab: usage error: file name must be specified for replace.\n")
(primitive-exit 15)))

View file

@ -36,14 +36,14 @@
;; to control is added at the end of the list.
(define (impose-default-environment env-alist passwd-entry)
(append (list (cons "HOME" (passwd:dir passwd-entry))
(cons "CWD" (passwd:dir passwd-entry))
(cons "SHELL" (passwd:shell passwd-entry))
'("TERM" . #f)
'("TERMCAP" . #f))
(append `(("HOME" . ,(passwd:dir passwd-entry))
("CWD" . ,(passwd:dir passwd-entry))
("SHELL" . ,(passwd:shell passwd-entry))
("TERM" . #f)
("TERMCAP" . #f))
env-alist
(list (cons "LOGNAME" (passwd:name passwd-entry))
(cons "USER" (passwd:name passwd-entry)))))
`(("LOGNAME" . ,(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
install-exec-local:
@IFEQ_VIXIE@
@if [ `id -u` -ne 0 ]; then \
echo "*** MUST BE ROOT TO INSTALL MCRON ***"; \
exit 1; \
fi
@ENDIF@
#full program prefix
fpp = $(DESTDIR)$(bindir)/@real_program_prefix@
install-exec-hook:
@IFEQ_VIXIE@
@rm -f $(fpp)cron$(EXEEXT) > /dev/null 2>&1
@$(INSTALL) --mode='u=rwx' mcron$(EXEEXT) $(fpp)cron$(EXEEXT)
@rm -f $(fpp)crontab$(EXEEXT) > /dev/null 2>&1
@$(INSTALL) --mode='u=rwxs,og=rx' mcron$(EXEEXT) $(fpp)crontab$(EXEEXT)
@ENDIF@
./mkinstalldirs -m 'u=rwx' /var/cron
./mkinstalldirs -m 'u=rwx,og=rx' /var/run
uninstall-hook:
@IFEQ_VIXIE@
@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")
(primitive-exit 1)))
(if (not (option-ref options 'schedule #f))
(with-output-to-file "/var/run/cron.pid"
(lambda () #t)))
(with-output-to-file "/var/run/cron.pid" noop))
(setenv "MAILTO" #f)
(c-set-cron-signals)))
@ -604,19 +603,17 @@ Report bugs to " config-package-bugreport ".\n
(use-modules (srfi srfi-2))
(define (process-files-in-system-directory)
;;; (catch #t (lambda ()
(catch #t (lambda ()
(let ((directory (opendir "/var/cron/tabs")))
(do ((file-name (readdir directory) (readdir directory)))
((eof-object? file-name) (closedir directory))
(and-let* ((user (valid-user file-name)))
(set! configuration-user user)
(read-vixie-file (string-append "/var/cron/tabs/"
file-name)))))
;;; )
;;; (lambda (key . args)
;;; (display "You do not have permission to access the system crontabs.\n")
;;; (primitive-exit 4)))
)
file-name))))))
(lambda (key . args)
(display "You do not have permission to access the system crontabs.\n")
(primitive-exit 4))))

View file

@ -10,6 +10,12 @@
This file documents the @code{mcron} command for running jobs at
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
This is free software. See the source files for the terms of the
copyright.

View file

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