Index: defs.h
===================================================================
--- defs.h (nonexistent)
+++ defs.h (revision 5)
@@ -0,0 +1,165 @@
+
+/*
+ * DEFS.H
+ *
+ * Copyright 1994-1998 Matthew Dillon (dillon@backplane.com)
+ * Copyright 2009-2011 James Pryor <profjim@jimpryor.net>
+ * May be distributed under the GNU General Public License
+ */
+
+/*
+ * portability issues
+ * 0. gcc defaults to _BSD_SOURCE and _POSIX_SOURCE
+ * 1. need _POSIX_SOURCE or _XOPEN_SOURCE for getopt, fileno, sigaction
+ * 2. need _XOPEN_SOURCE for strptime
+ * 3. need _BSD_SOURCE for setenv, mk{d,s}temp, [v]snprintf, initgroups, strsep, strdup, setre{u,g}id, gethostname, perror
+ * 4. use concat.c instead of requiring asprintf / _GNU_SOURCE
+ */
+
+#define _XOPEN_SOURCE 1
+#define _DEFAULT_SOURCE 1
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <sys/wait.h>
+#include <sys/resource.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <pwd.h>
+#ifndef S_SPLINT_S
+#include <unistd.h>
+#endif
+#include <grp.h>
+#include <syslog.h>
+#include <signal.h>
+#include <getopt.h>
+#include <err.h>
+#include <limits.h>
+
+#include <time.h>
+#include <string.h>
+#include <stdio.h>
+
+#define Prototype extern
+#define arysize(ary) (sizeof(ary)/sizeof((ary)[0]))
+
+#ifndef SCRONTABS
+#define SCRONTABS "/etc/cron.d"
+#endif
+#ifndef CRONTABS
+#define CRONTABS "/var/spool/cron/crontabs"
+#endif
+#ifndef CRONSTAMPS
+#define CRONSTAMPS "/var/spool/cron/cronstamps"
+#endif
+#ifndef LOG_IDENT
+#define LOG_IDENT "crond"
+#endif
+#ifndef TIMESTAMP_FMT
+#define TIMESTAMP_FMT "%b %e %H:%M:%S"
+#endif
+
+#ifndef LOG_LEVEL
+#define LOG_LEVEL LOG_NOTICE
+#endif
+#ifndef CRONSTAMP_FMT
+#define CRONSTAMP_FMT "%Y-%m-%d %H:%M"
+#endif
+#ifndef CRONUPDATE
+#define CRONUPDATE "cron.update"
+#endif
+#ifndef TMPDIR
+#define TMPDIR "/var/spool/cron"
+#endif
+
+#ifndef SENDMAIL
+#define SENDMAIL "/usr/sbin/sendmail"
+#endif
+#ifndef SENDMAIL_ARGS
+#define SENDMAIL_ARGS "-t", "-oem", "-i"
+#endif
+#ifndef PATH_VI
+#define PATH_VI "/usr/bin/vi" /* location of vi */
+#endif
+
+#ifndef ID_TAG
+#define ID_TAG "ID="
+#endif
+#ifndef WAIT_TAG
+#define WAIT_TAG "AFTER="
+#endif
+#ifndef FREQ_TAG
+#define FREQ_TAG "FREQ="
+#endif
+
+#define HOURLY_FREQ 60 * 60
+#define DAILY_FREQ 24 * HOURLY_FREQ
+#define WEEKLY_FREQ 7 * DAILY_FREQ
+#define MONTHLY_FREQ 30 * DAILY_FREQ
+#define YEARLY_FREQ 365 * DAILY_FREQ
+
+#define LOGHEADER TIMESTAMP_FMT " %%s " LOG_IDENT ": "
+#define LOCALE_LOGHEADER "%c %%s " LOG_IDENT ": "
+
+/* Limits */
+#define MAXOPEN 256 /* close fds < this limit */
+#define MAXLINES 256 /* max lines in non-root crontabs */
+#define SMALL_BUFFER 256
+#define RW_BUFFER 1024
+#define LOG_BUFFER 2048 /* max size of log line */
+
+
+
+
+typedef struct CronFile {
+ struct CronFile *cf_Next;
+ struct CronLine *cf_LineBase;
+ char *cf_DPath; /* Directory path to cronfile */
+ char *cf_FileName; /* Name of cronfile */
+ char *cf_UserName; /* username to execute jobs as */
+ int cf_Ready; /* bool: one or more jobs ready */
+ int cf_Running; /* bool: one or more jobs running */
+ int cf_Deleted; /* marked for deletion, ignore */
+} CronFile;
+
+typedef struct CronLine {
+ struct CronLine *cl_Next;
+ char *cl_Shell; /* shell command */
+ char *cl_Description; /* either "<cl_Shell>" or "job <cl_JobName>" */
+ char *cl_JobName; /* job name, if any */
+ char *cl_Timestamp; /* path to timestamp file, if cl_Freq defined */
+ struct CronWaiter *cl_Waiters;
+ struct CronNotifier *cl_Notifs;
+ int cl_Freq; /* 0 (use arrays), minutes, -1 (noauto), -2 (startup) */
+ int cl_Delay; /* defaults to cl_Freq or hourly */
+ time_t cl_LastRan;
+ time_t cl_NotUntil;
+ int cl_Pid; /* running pid, 0, or armed (-1), or waiting (-2) */
+ int cl_MailFlag; /* running pid is for mail */
+ int cl_MailPos; /* 'empty file' size */
+ char cl_Mins[60]; /* 0-59 */
+ char cl_Hrs[24]; /* 0-23 */
+ char cl_Days[32]; /* 1-31 */
+ char cl_Mons[12]; /* 0-11 */
+ char cl_Dow[7]; /* 0-6, beginning sunday */
+} CronLine;
+
+typedef struct CronWaiter {
+ struct CronWaiter *cw_Next;
+ struct CronNotifier *cw_Notifier;
+ struct CronLine *cw_NotifLine;
+ short cw_Flag;
+ int cw_MaxWait;
+} CronWaiter;
+
+typedef struct CronNotifier {
+ struct CronNotifier *cn_Next;
+ struct CronWaiter *cn_Waiter;
+} CronNotifier;
+
+#include "protos.h"
+