Use __progname in cron/crontab/at instead of the homegrown ProgramName. Also get rid of MAIN_PROGRAM and XTRN which are not needed in modern C.
- todd Index: usr.bin/at/at.c =================================================================== RCS file: /cvs/src/usr.bin/at/at.c,v retrieving revision 1.68 diff -u -p -u -r1.68 at.c --- usr.bin/at/at.c 4 Nov 2015 20:28:17 -0000 1.68 +++ usr.bin/at/at.c 6 Nov 2015 22:01:34 -0000 @@ -31,8 +31,6 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#define MAIN_PROGRAM - #include <sys/types.h> #include <sys/stat.h> @@ -100,7 +98,7 @@ time_t parsetime(int, char **); static __dead void panic(const char *a) { - (void)fprintf(stderr, "%s: %s\n", ProgramName, a); + (void)fprintf(stderr, "%s: %s\n", __progname, a); if (fcreated) unlink(atfile); @@ -113,7 +111,7 @@ panic(const char *a) static __dead void panic2(const char *a, const char *b) { - (void)fprintf(stderr, "%s: %s%s\n", ProgramName, a, b); + (void)fprintf(stderr, "%s: %s%s\n", __progname, a, b); if (fcreated) unlink(atfile); @@ -498,7 +496,7 @@ list_jobs(int argc, char **argv, int cou } else uids = NULL; - shortformat = strcmp(ProgramName, "at") == 0; + shortformat = strcmp(__progname, "at") == 0; if (chdir(AT_DIR) != 0) perr2("Cannot change to ", AT_DIR); @@ -660,7 +658,7 @@ process_jobs(int argc, char **argv, int if (user_uid != pw->pw_uid && user_uid != 0) { fprintf(stderr, "%s: Only the superuser" " may %s other users' jobs\n", - ProgramName, what == ATRM + __progname, what == ATRM ? "remove" : "view"); exit(EXIT_FAILURE); } @@ -745,7 +743,7 @@ process_jobs(int argc, char **argv, int if (jobs[i] != NULL) { if (!force) fprintf(stderr, "%s: %s: no such job\n", - ProgramName, jobs[i]); + __progname, jobs[i]); error++; } } @@ -908,23 +906,18 @@ main(int argc, char **argv) if (argc < 1) usage(); - if ((ProgramName = strrchr(argv[0], '/')) != NULL) - ProgramName++; - else - ProgramName = argv[0]; - user_uid = getuid(); user_gid = getgid(); spool_gid = getegid(); /* find out what this program is supposed to do */ - if (strcmp(ProgramName, "atq") == 0) { + if (strcmp(__progname, "atq") == 0) { program = ATQ; options = "cnvq:"; - } else if (strcmp(ProgramName, "atrm") == 0) { + } else if (strcmp(__progname, "atrm") == 0) { program = ATRM; options = "afi"; - } else if (strcmp(ProgramName, "batch") == 0) { + } else if (strcmp(__progname, "batch") == 0) { program = BATCH; options = "f:q:mv"; } Index: usr.bin/at/parsetime.c =================================================================== RCS file: /cvs/src/usr.bin/at/parsetime.c,v retrieving revision 1.23 diff -u -p -u -r1.23 parsetime.c --- usr.bin/at/parsetime.c 20 Aug 2015 22:32:41 -0000 1.23 +++ usr.bin/at/parsetime.c 6 Nov 2015 21:59:37 -0000 @@ -182,7 +182,7 @@ init_scanner(int argc, char **argv) if ((sc_token = malloc(sc_len)) == NULL) { fprintf(stderr, "%s: Insufficient virtual memory\n", - ProgramName); + __progname); return (-1); } return (0); @@ -264,7 +264,7 @@ token(void) static void plonk(int tok) { - fprintf(stderr, "%s: %s time\n", ProgramName, + fprintf(stderr, "%s: %s time\n", __progname, (tok == EOF) ? "incomplete" : "garbled"); } @@ -368,7 +368,7 @@ plus(struct tm *tm) case MINUTES: if (expectplur != sc_tokplur) fprintf(stderr, "%s: pluralization is wrong\n", - ProgramName); + __progname); dateadd(increment, tm); return (0); } @@ -446,7 +446,7 @@ tod(struct tm *tm) } return (0); bad: - fprintf(stderr, "%s: garbled time\n", ProgramName); + fprintf(stderr, "%s: garbled time\n", __progname); return (-1); } @@ -607,7 +607,7 @@ month(struct tm *tm) } return (0); bad: - fprintf(stderr, "%s: garbled time\n", ProgramName); + fprintf(stderr, "%s: garbled time\n", __progname); return (-1); } @@ -700,13 +700,13 @@ parsetime(int argc, char **argv) } if (runtimer < 0) { - fprintf(stderr, "%s: garbled time\n", ProgramName); + fprintf(stderr, "%s: garbled time\n", __progname); return (-1); } if (nowtimer > runtimer) { fprintf(stderr, "%s: cannot schedule jobs in the past\n", - ProgramName); + __progname); return (-1); } Index: usr.sbin/cron/client.c =================================================================== RCS file: /cvs/src/usr.sbin/cron/client.c,v retrieving revision 1.3 diff -u -p -u -r1.3 client.c --- usr.sbin/cron/client.c 4 Nov 2015 20:28:17 -0000 1.3 +++ usr.sbin/cron/client.c 6 Nov 2015 21:58:49 -0000 @@ -101,7 +101,7 @@ poke_daemon(const char *spool_dir, unsig if (snprintf(s_un.sun_path, sizeof s_un.sun_path, "%s/%s", SPOOL_DIR, CRONSOCK) >= sizeof(s_un.sun_path)) { fprintf(stderr, "%s: %s/%s: path too long\n", - ProgramName, SPOOL_DIR, CRONSOCK); + __progname, SPOOL_DIR, CRONSOCK); return; } s_un.sun_family = AF_UNIX; @@ -110,7 +110,7 @@ poke_daemon(const char *spool_dir, unsig send(sock, &cookie, 1, MSG_NOSIGNAL); else fprintf(stderr, "%s: warning, cron does not appear to be " - "running.\n", ProgramName); + "running.\n", __progname); if (sock >= 0) close(sock); } Index: usr.sbin/cron/cron.c =================================================================== RCS file: /cvs/src/usr.sbin/cron/cron.c,v retrieving revision 1.62 diff -u -p -u -r1.62 cron.c --- usr.sbin/cron/cron.c 4 Nov 2015 20:28:17 -0000 1.62 +++ usr.sbin/cron/cron.c 6 Nov 2015 22:01:37 -0000 @@ -17,8 +17,6 @@ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define MAIN_PROGRAM - #include <sys/types.h> #include <sys/socket.h> #include <sys/stat.h> @@ -71,7 +69,7 @@ static void usage(void) { - fprintf(stderr, "usage: %s [-n] [-l load_avg]\n", ProgramName); + fprintf(stderr, "usage: %s [-n] [-l load_avg]\n", __progname); exit(EXIT_FAILURE); } @@ -81,8 +79,6 @@ main(int argc, char *argv[]) struct sigaction sact; sigset_t blocked, omask; - ProgramName = argv[0]; - setlocale(LC_ALL, ""); setvbuf(stdout, NULL, _IOLBF, 0); @@ -434,7 +430,7 @@ open_socket(void) sock = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); if (sock == -1) { fprintf(stderr, "%s: can't create socket: %s\n", - ProgramName, strerror(errno)); + __progname, strerror(errno)); log_it("CRON", getpid(), "DEATH", "can't create socket"); exit(EXIT_FAILURE); } @@ -448,7 +444,7 @@ open_socket(void) s_un.sun_family = AF_UNIX; if (connect(sock, (struct sockaddr *)&s_un, sizeof(s_un)) == 0) { - fprintf(stderr, "%s: already running\n", ProgramName); + fprintf(stderr, "%s: already running\n", __progname); log_it("CRON", getpid(), "DEATH", "already running"); exit(EXIT_FAILURE); } @@ -460,13 +456,13 @@ open_socket(void) umask(omask); if (rc != 0) { fprintf(stderr, "%s: can't bind socket: %s\n", - ProgramName, strerror(errno)); + __progname, strerror(errno)); log_it("CRON", getpid(), "DEATH", "can't bind socket"); exit(EXIT_FAILURE); } if (listen(sock, SOMAXCONN)) { fprintf(stderr, "%s: can't listen on socket: %s\n", - ProgramName, strerror(errno)); + __progname, strerror(errno)); log_it("CRON", getpid(), "DEATH", "can't listen on socket"); exit(EXIT_FAILURE); } Index: usr.sbin/cron/crontab.c =================================================================== RCS file: /cvs/src/usr.sbin/cron/crontab.c,v retrieving revision 1.82 diff -u -p -u -r1.82 crontab.c --- usr.sbin/cron/crontab.c 4 Nov 2015 20:28:17 -0000 1.82 +++ usr.sbin/cron/crontab.c 6 Nov 2015 22:01:41 -0000 @@ -17,8 +17,6 @@ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define MAIN_PROGRAM - #include <sys/types.h> #include <sys/stat.h> #include <sys/wait.h> @@ -67,9 +65,9 @@ static int replace_cmd(void); static void usage(const char *msg) { - fprintf(stderr, "%s: usage error: %s\n", ProgramName, msg); - fprintf(stderr, "usage: %s [-u user] file\n", ProgramName); - fprintf(stderr, " %s [-e | -l | -r] [-u user]\n", ProgramName); + fprintf(stderr, "%s: usage error: %s\n", __progname, msg); + fprintf(stderr, "usage: %s [-u user] file\n", __progname); + fprintf(stderr, " %s [-e | -l | -r] [-u user]\n", __progname); fprintf(stderr, "\t\t(default operation is replace, per 1003.2)\n" "\t-e\t(edit user's crontab)\n" @@ -86,7 +84,6 @@ main(int argc, char *argv[]) Pid = getpid(); user_gid = getgid(); crontab_gid = getegid(); - ProgramName = argv[0]; if (pledge("stdio rpath wpath cpath fattr getpw unix flock id proc exec", NULL) == -1) { @@ -102,7 +99,7 @@ main(int argc, char *argv[]) if (!allowed(RealUser, CRON_ALLOW, CRON_DENY)) { fprintf(stderr, "You (%s) are not allowed to use this program (%s)\n", - User, ProgramName); + User, __progname); fprintf(stderr, "See crontab(1) for more information\n"); log_it(RealUser, Pid, "AUTH", "crontab command not allowed"); exit(EXIT_FAILURE); @@ -137,7 +134,7 @@ parse_args(int argc, char *argv[]) if (!(pw = getpwuid(getuid()))) { fprintf(stderr, "%s: your UID isn't in the passwd file.\n", - ProgramName); + __progname); fprintf(stderr, "bailing out.\n"); exit(EXIT_FAILURE); } @@ -159,7 +156,7 @@ parse_args(int argc, char *argv[]) } if (!(pw = getpwnam(optarg))) { fprintf(stderr, "%s: user `%s' unknown\n", - ProgramName, optarg); + __progname, optarg); exit(EXIT_FAILURE); } if (strlcpy(User, optarg, sizeof User) >= sizeof User) @@ -353,7 +350,7 @@ edit_cmd(void) rewind(NewCrontab); if (ferror(NewCrontab)) { fprintf(stderr, "%s: error while writing new crontab to %s\n", - ProgramName, Filename); + __progname, Filename); fatal: unlink(Filename); exit(EXIT_FAILURE); @@ -379,13 +376,13 @@ edit_cmd(void) if (lstat(Filename, &xstatbuf) == 0 && statbuf.st_ino != xstatbuf.st_ino) { fprintf(stderr, "%s: crontab temp file moved, editor " - "may create backup files improperly\n", ProgramName); + "may create backup files improperly\n", __progname); } fprintf(stderr, "%s: no changes made to crontab\n", - ProgramName); + __progname); goto remove; } - fprintf(stderr, "%s: installing new crontab\n", ProgramName); + fprintf(stderr, "%s: installing new crontab\n", __progname); switch (replace_cmd()) { case 0: break; @@ -413,11 +410,11 @@ edit_cmd(void) case -2: abandon: fprintf(stderr, "%s: edits left in %s\n", - ProgramName, Filename); + __progname, Filename); goto done; default: fprintf(stderr, "%s: panic: bad switch() in replace_cmd()\n", - ProgramName); + __progname); goto fatal; } remove: @@ -442,7 +439,7 @@ replace_cmd(void) char **envp = env_init(); if (envp == NULL) { - fprintf(stderr, "%s: Cannot allocate memory.\n", ProgramName); + fprintf(stderr, "%s: Cannot allocate memory.\n", __progname); return (-2); } if (snprintf(TempFilename, sizeof TempFilename, "%s/tmp.XXXXXXXXX", @@ -484,7 +481,7 @@ replace_cmd(void) if (ferror(tmp)) { fprintf(stderr, "%s: error while writing new crontab to %s\n", - ProgramName, TempFilename); + __progname, TempFilename); fclose(tmp); error = -2; goto done; @@ -546,7 +543,7 @@ replace_cmd(void) } if (rename(TempFilename, n)) { fprintf(stderr, "%s: error renaming %s to %s\n", - ProgramName, TempFilename, n); + __progname, TempFilename, n); perror("rename"); error = -2; goto done; Index: usr.sbin/cron/globals.h =================================================================== RCS file: /cvs/src/usr.sbin/cron/globals.h,v retrieving revision 1.12 diff -u -p -u -r1.12 globals.h --- usr.sbin/cron/globals.h 4 Nov 2015 12:53:05 -0000 1.12 +++ usr.sbin/cron/globals.h 6 Nov 2015 21:57:58 -0000 @@ -17,13 +17,5 @@ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifdef MAIN_PROGRAM -# define XTRN -# define INIT(x) = x -#else -# define XTRN extern -# define INIT(x) -#endif - -XTRN char *ProgramName INIT("amnesia"); -XTRN int LineNumber INIT(0); +extern int LineNumber; +extern char *__progname; Index: usr.sbin/cron/misc.c =================================================================== RCS file: /cvs/src/usr.sbin/cron/misc.c,v retrieving revision 1.68 diff -u -p -u -r1.68 misc.c --- usr.sbin/cron/misc.c 4 Nov 2015 20:28:17 -0000 1.68 +++ usr.sbin/cron/misc.c 6 Nov 2015 21:58:56 -0000 @@ -33,6 +33,7 @@ #include "globals.h" static int syslog_open = FALSE; +int LineNumber; /* get_char(file) : like getc() but increment LineNumber on newlines */ @@ -126,7 +127,7 @@ log_it(const char *username, pid_t xpid, "END EDIT", "LIST", "MAIL", "RELOAD", "REPLACE", "STARTUP", NULL }; if (!syslog_open) { - openlog(ProgramName, LOG_PID, LOG_CRON); + openlog(__progname, LOG_PID, LOG_CRON); syslog_open = TRUE; /* assume openlog success */ } @@ -140,8 +141,10 @@ log_it(const char *username, pid_t xpid, void log_close(void) { - closelog(); - syslog_open = FALSE; + if (syslog_open) { + closelog(); + syslog_open = FALSE; + } } /* char *first_word(char *s, char *t)