Cosmetic in error strings. Sort Xrefs. Add usage (with syslog capability).

This commit is contained in:
Philippe Charnier 1997-11-20 07:21:55 +00:00
parent e84f19ceda
commit 864b6b6e0a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=31306
3 changed files with 68 additions and 56 deletions

View File

@ -23,6 +23,11 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef lint
static const char rcsid[] =
"$Id$";
#endif /* not lint */
/* System Headers */
#include <sys/fcntl.h>
@ -32,17 +37,17 @@
#include <sys/param.h>
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
#include <pwd.h>
#include <err.h>
#include <grp.h>
#include <pwd.h>
#include <signal.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include <time.h>
#include <unistd.h>
#include <syslog.h>
#include <utmp.h>
#ifdef __FreeBSD__
#include <paths.h>
@ -78,11 +83,10 @@
/* File scope variables */
static char *namep;
static char rcsid[] = "$Id: atrun.c,v 1.10 1997/04/12 01:04:50 davidn Exp $";
static debug = 0;
void perr(const char *a);
static void usage __P((void));
/* Local functions */
static int
@ -132,14 +136,14 @@ run_file(const char *filename, uid_t uid, gid_t gid)
if (chmod(filename, S_IRUSR) != 0)
{
perr("Cannot change file permissions");
perr("cannot change file permissions");
}
PRIV_END
pid = fork();
if (pid == -1)
perr("Cannot fork");
perr("cannot fork");
else if (pid != 0)
return;
@ -172,16 +176,16 @@ run_file(const char *filename, uid_t uid, gid_t gid)
#endif
if (stream == NULL)
perr("Cannot open input file");
perr("cannot open input file");
if ((fd_in = dup(fileno(stream))) <0)
perr("Error duplicating input file descriptor");
perr("error duplicating input file descriptor");
if (fstat(fd_in, &buf) == -1)
perr("Error in fstat of input file descriptor");
perr("error in fstat of input file descriptor");
if (lstat(filename, &lbuf) == -1)
perr("Error in fstat of input file");
perr("error in fstat of input file");
if (S_ISLNK(lbuf.st_mode)) {
syslog(LOG_ERR,"Symbolic link encountered in job %s - aborting",
@ -201,7 +205,7 @@ run_file(const char *filename, uid_t uid, gid_t gid)
exit(EXIT_FAILURE);
}
if ((fflags = fcntl(fd_in, F_GETFD)) <0)
perr("Error in fcntl");
perr("error in fcntl");
fcntl(fd_in, F_SETFD, fflags & ~FD_CLOEXEC);
@ -228,14 +232,14 @@ run_file(const char *filename, uid_t uid, gid_t gid)
}
fclose(stream);
if (chdir(ATSPOOL_DIR) < 0)
perr("Cannot chdir to " ATSPOOL_DIR);
perr("cannot chdir to " ATSPOOL_DIR);
/* Create a file to hold the output of the job we are about to run.
* Write the mail header.
*/
if((fd_out=open(filename,
O_WRONLY | O_CREAT | O_EXCL, S_IWUSR | S_IRUSR)) < 0)
perr("Cannot create output file");
perr("cannot create output file");
write_string(fd_out, "Subject: Output from your job ");
write_string(fd_out, filename);
@ -249,7 +253,7 @@ run_file(const char *filename, uid_t uid, gid_t gid)
pid = fork();
if (pid < 0)
perr("Error in fork");
perr("error in fork");
else if (pid == 0)
{
@ -261,21 +265,21 @@ run_file(const char *filename, uid_t uid, gid_t gid)
*/
if (lseek(fd_in, (off_t) 0, SEEK_SET) < 0)
perr("Error in lseek");
perr("error in lseek");
if (dup(fd_in) != STDIN_FILENO)
perr("Error in I/O redirection");
perr("error in I/O redirection");
if (dup(fd_out) != STDOUT_FILENO)
perr("Error in I/O redirection");
perr("error in I/O redirection");
if (dup(fd_out) != STDERR_FILENO)
perr("Error in I/O redirection");
perr("error in I/O redirection");
close(fd_in);
close(fd_out);
if (chdir(ATJOB_DIR) < 0)
perr("Cannot chdir to " ATJOB_DIR);
perr("cannot chdir to " ATJOB_DIR);
queue = *filename;
@ -284,22 +288,22 @@ run_file(const char *filename, uid_t uid, gid_t gid)
nice(tolower(queue) - 'a');
if (initgroups(pentry->pw_name,pentry->pw_gid))
perr("Cannot delete saved userids");
perr("cannot delete saved userids");
if (setgid(gid) < 0 || setegid(pentry->pw_gid) < 0)
perr("Cannot change group");
perr("cannot change group");
if (setlogin(pentry->pw_name))
perr("Cannot set login name");
perr("cannot set login name");
if (setuid(uid) < 0 || seteuid(uid) < 0)
perr("Cannot set user id");
perr("cannot set user id");
if (chdir(pentry->pw_dir))
chdir("/");
if(execle("/bin/sh","sh",(char *) NULL, nenvp) != 0)
perr("Exec failed for /bin/sh");
perr("exec failed for /bin/sh");
PRIV_END
}
@ -314,7 +318,7 @@ run_file(const char *filename, uid_t uid, gid_t gid)
*/
stat(filename, &buf);
if (open(filename, O_RDONLY) != STDIN_FILENO)
perr("Open of jobfile failed");
perr("open of jobfile failed");
unlink(filename);
if ((buf.st_size != size) || send_mail)
@ -322,16 +326,16 @@ run_file(const char *filename, uid_t uid, gid_t gid)
PRIV_START
if (initgroups(pentry->pw_name,pentry->pw_gid))
perr("Cannot delete saved userids");
perr("cannot delete saved userids");
if (setgid(gid) < 0 || setegid(pentry->pw_gid) < 0)
perr("Cannot change group");
perr("cannot change group");
if (setlogin(pentry->pw_name))
perr("Cannot set login name");
perr("cannot set login name");
if (setuid(uid) < 0 || seteuid(uid) < 0)
perr("Cannot set user id");
perr("cannot set user id");
if (chdir(pentry->pw_dir))
chdir("/");
@ -343,7 +347,7 @@ run_file(const char *filename, uid_t uid, gid_t gid)
#else
execl(MAIL_CMD, MAIL_CMD, mailname, (char *) NULL);
#endif
perr("Exec failed for mail command");
perr("exec failed for mail command");
PRIV_END
}
@ -358,7 +362,7 @@ perr(const char *a)
{
if (debug)
{
perror(a);
warn("%s", a);
}
else
syslog(LOG_ERR, "%s: %m", a);
@ -402,7 +406,6 @@ main(int argc, char *argv[])
openlog("atrun", LOG_PID, LOG_CRON);
opterr = 0;
errno = 0;
while((c=getopt(argc, argv, "dl:"))!= -1)
{
switch (c)
@ -419,18 +422,13 @@ main(int argc, char *argv[])
break;
case '?':
perr("unknown option");
break;
default:
perr("idiotic option - aborted");
break;
usage();
}
}
namep = argv[0];
if (chdir(ATJOB_DIR) != 0)
perr("Cannot change to " ATJOB_DIR);
perr("cannot change to " ATJOB_DIR);
/* Main loop. Open spool directory for reading and look over all the
* files in there. If the filename indicates that the job should be run
@ -443,7 +441,7 @@ main(int argc, char *argv[])
* atrun.
*/
if ((spool = opendir(".")) == NULL)
perr("Cannot read " ATJOB_DIR);
perr("cannot read " ATJOB_DIR);
now = time(NULL);
run_batch = 0;
@ -452,7 +450,7 @@ main(int argc, char *argv[])
while ((dirent = readdir(spool)) != NULL) {
if (stat(dirent->d_name,&buf) != 0)
perr("Cannot stat in " ATJOB_DIR);
perr("cannot stat in " ATJOB_DIR);
/* We don't want directories
*/
@ -490,3 +488,14 @@ main(int argc, char *argv[])
closelog();
exit(EXIT_SUCCESS);
}
static void
usage()
{
if (debug)
fprintf(stderr, "usage: atrun [-l load_avg] [-d]\n");
else
syslog(LOG_ERR, "usage: atrun [-l load_avg] [-d]");
exit(EXIT_FAILURE);
}

View File

@ -1,4 +1,4 @@
.\" $Id$
.\" $Id: atrun.man,v 1.3 1997/02/22 14:20:55 peter Exp $
.Dd April 12, 1995
.Dt ATRUN 8
.Os "FreeBSD 2.1"
@ -29,12 +29,12 @@ At every invocation, every job in lowercase queues whose starting time
has passed is started.
A maximum of one batch jobs (denoted by uppercase queues) are started
each time
.Nm atrun
.Nm
is invoked.
.Sh OPTIONS
.Bl -tag -width indent
.It Fl l Ar load_avg
Specifies a limiting load factor, over which batch jobs should
Specify a limiting load factor, over which batch jobs should
not be run, instead of the compiled \- in value of _LOADAVG_MX.
.It Fl d
Debug; print error messages to standard error instead of using
@ -42,7 +42,7 @@ Debug; print error messages to standard error instead of using
.El
.Sh WARNINGS
For
.Nm atrun
.Nm
to work, you have to start up a
.Xr cron 8
daemon.
@ -54,13 +54,13 @@ Directory containing output spool files
Directory containing job files
.El
.Sh SEE ALSO
.Xr cron 8 ,
.Xr crontab 1 ,
.Xr crontab 5 ,
.Xr at 1 ,
.Xr syslog 3 .
.Xr crontab 1 ,
.Xr syslog 3 ,
.Xr crontab 5 ,
.Xr cron 8
.Sh BUGS
The functionality of
.Nm atrun
.Nm
should be merged into
.Xr cron 8 .

View File

@ -23,6 +23,11 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef lint
static const char rcsid[] =
"$Id$";
#endif /* not lint */
#ifndef __FreeBSD__
#define _POSIX_SOURCE 1
@ -37,12 +42,10 @@
#include "gloadavg.h"
/* File scope variables */
static char rcsid[] = "$Id$";
/* Global functions */
void perr(const char *a);
double
gloadavg(void)
/* return the current load average as a floating point number, or <0 for
@ -63,7 +66,7 @@ gloadavg(void)
}
#else
if (getloadavg(&result, 1) != 1)
perr("Error in getloadavg");
perr("error in getloadavg");
#endif
return result;
}