cronie/cronie-nheader_lines.diff
Danilo Spinella 90832a935f Accepting request 1125172 from home:amanzini:branches:Base:System
- Update to 1.7.0:
  * anacron: Add support for NO_MAIL_OUTPUT environment variable
  * anacron: Support enabling anacron jobs on battery power
  * crond: Support -n crontab entry option to disable mailing the output
  * crontab: Make a backup of the crontab file on edition and deletion

OBS-URL: https://build.opensuse.org/request/show/1125172
OBS-URL: https://build.opensuse.org/package/show/Base:System/cronie?expand=0&rev=212
2023-11-17 10:51:38 +00:00

102 lines
2.8 KiB
Diff

Index: src/crontab.c
===================================================================
--- src/crontab.c.orig
+++ src/crontab.c
@@ -64,7 +64,7 @@
#include "pathnames.h"
#include "structs.h"
-#define NHEADER_LINES 0
+#define NHEADER_LINES 3
#define COMMENT_COLOR "\x1B[34;1m"
#define ERROR_COLOR "\x1B[31;1m"
@@ -418,7 +418,7 @@ static void parse_args(int argc, char *a
static void list_cmd(void) {
char n[MAX_FNAME];
FILE *f;
- int ch;
+ int ch, x;
const int colorize = isatty(STDOUT) && getenv("NO_COLOR") == NULL;
int new_line = 1;
int in_comment = 0;
@@ -439,6 +439,22 @@ static void list_cmd(void) {
/* file is open. copy to stdout, close.
*/
Set_LineNum(1);
+ /* ignore the top few comments since we probably put them there.
+ */
+ x = 0;
+ while (EOF != (ch = get_char(f))) {
+ if ('#' != ch) {
+ putchar(ch);
+ break;
+ }
+ while (EOF != (ch = get_char(f)))
+ if (ch == '\n')
+ break;
+ if (++x >= NHEADER_LINES)
+ break;
+ }
+ /* copy the rest of the crontab (if any) to the stdout.
+ */
while (EOF != (ch = get_char(f))) {
if (colorize) {
if (!in_comment && new_line && ch == '#') {
@@ -646,7 +662,7 @@ static void edit_cmd(void) {
char n[MAX_FNAME], q[MAX_TEMPSTR];
const char *editor;
FILE *f;
- int ch = '\0', t;
+ int ch = '\0', t, x;
struct stat statbuf;
struct utimbuf utimebuf;
WAIT_T waiter;
@@ -698,10 +714,20 @@ static void edit_cmd(void) {
}
Set_LineNum(1);
- /*
- * NHEADER_LINES processing removed for clarity
- * (NHEADER_LINES == 0 in all Red Hat crontabs)
+ /* ignore the top few comments since we probably put them there.
*/
+ x = 0;
+ while (EOF != (ch = get_char(f))) {
+ if ('#' != ch) {
+ putc(ch, NewCrontab);
+ break;
+ }
+ while (EOF != (ch = get_char(f)))
+ if (ch == '\n')
+ break;
+ if (++x >= NHEADER_LINES)
+ break;
+ }
/* copy the rest of the crontab (if any) to the temp file.
*/
if (EOF != ch)
@@ -925,6 +951,7 @@ static int replace_cmd(void) {
int ch, fd;
int error = 0;
uid_t file_owner;
+ time_t now = time(NULL);
char *safename;
safename = host_specific_filename("#tmp", "XXXXXXXXXX");
@@ -952,10 +979,10 @@ static int replace_cmd(void) {
*
* VERY IMPORTANT: make sure NHEADER_LINES agrees with this code.
*/
- /*fprintf(tmp, "# DO NOT EDIT THIS FILE - edit the master and reinstall.\n");
- *fprintf(tmp, "# (%s installed on %-24.24s)\n", Filename, ctime(&now));
- *fprintf(tmp, "# (Cron version %s)\n", CRON_VERSION);
- */
+ fprintf(tmp, "# DO NOT EDIT THIS FILE - edit the master and reinstall.\n");
+ fprintf(tmp, "# (%s installed on %-24.24s)\n", Filename, ctime(&now));
+ fprintf(tmp, "# (Cronie version %s)\n", CRON_VERSION);
+
#ifdef WITH_SELINUX
if (selinux_context)
fprintf(tmp, "SELINUX_ROLE_TYPE=%s\n", selinux_context);