update code
This commit is contained in:
parent
e741d421bb
commit
62fdd7ce90
@ -1,38 +0,0 @@
|
||||
From b0d067cfba64956893fc095bb37f8c767f5a910e Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Mon, 6 Aug 2018 17:13:31 +0200
|
||||
Subject: [PATCH] logrotate.8: document the --version option
|
||||
|
||||
reason: In order to improve usability of packages, project Man
|
||||
Page Scan was created and its task is to provide consistency
|
||||
of man pages (and documentation in general)
|
||||
|
||||
The man page now covers all the options that are listed
|
||||
by `logrotate --help`.
|
||||
|
||||
Bug: https://bugzilla.redhat.com/1611498
|
||||
|
||||
Upstream-commit: 4088ef987df2ec48cc3d968eb87ad27c840fa2d8
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
logrotate.8.in | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/logrotate.8.in b/logrotate.8.in
|
||||
index 004229e..5ef09c5 100644
|
||||
--- a/logrotate.8.in
|
||||
+++ b/logrotate.8.in
|
||||
@@ -87,6 +87,10 @@ Prints a short usage message.
|
||||
\fB\-v\fR, \fB\-\-verbose\fR
|
||||
Turns on verbose mode, for example to display messages during rotation.
|
||||
|
||||
+.TP
|
||||
+\fB\-\-version\fR
|
||||
+Display version information.
|
||||
+
|
||||
.SH CONFIGURATION FILE
|
||||
|
||||
\fBlogrotate\fR reads everything about the log files it should be handling
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@ -1,642 +0,0 @@
|
||||
From a4ac21e9a8cfe8a73471a195308a742e07d7fe8d Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Wed, 1 Aug 2018 15:32:38 +0200
|
||||
Subject: [PATCH 1/3] readConfigFile: assign and check 'key' separately
|
||||
|
||||
reason: assign and check 'key' separately
|
||||
|
||||
https://github.com/logrotate/logrotate/commit/db33a0dd8b9b22deee7a6ff2e33fe037ec62c5a1
|
||||
|
||||
... to make the code readable. No changes in behavior intended
|
||||
by this commit.
|
||||
---
|
||||
config.c | 312 +++++++++++++++++++++++++++----------------------------
|
||||
1 file changed, 152 insertions(+), 160 deletions(-)
|
||||
|
||||
diff --git a/config.c b/config.c
|
||||
index 84db36f..d2fba10 100644
|
||||
--- a/config.c
|
||||
+++ b/config.c
|
||||
@@ -1037,7 +1037,8 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
}
|
||||
|
||||
if (isalpha((unsigned char)*start)) {
|
||||
- if ((key = isolateWord(&start, &buf, length)) == NULL)
|
||||
+ key = isolateWord(&start, &buf, length);
|
||||
+ if (key == NULL)
|
||||
continue;
|
||||
if (!strcmp(key, "compress")) {
|
||||
newlog->flags |= LOG_FLAG_COMPRESS;
|
||||
@@ -1191,16 +1192,16 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
}
|
||||
} else if (!strcmp(key, "shredcycles")) {
|
||||
free(key);
|
||||
- if ((key = isolateValue(configFile, lineNum, "shred cycles",
|
||||
- &start, &buf, length)) != NULL) {
|
||||
- newlog->shred_cycles = strtoul(key, &chptr, 0);
|
||||
- if (*chptr || newlog->shred_cycles < 0) {
|
||||
- message(MESS_ERROR, "%s:%d bad shred cycles '%s'\n",
|
||||
- configFile, lineNum, key);
|
||||
- goto error;
|
||||
- }
|
||||
+ key = isolateValue(configFile, lineNum, "shred cycles",
|
||||
+ &start, &buf, length);
|
||||
+ if (key == NULL)
|
||||
+ continue;
|
||||
+ newlog->shred_cycles = strtoul(key, &chptr, 0);
|
||||
+ if (*chptr || newlog->shred_cycles < 0) {
|
||||
+ message(MESS_ERROR, "%s:%d bad shred cycles '%s'\n",
|
||||
+ configFile, lineNum, key);
|
||||
+ goto error;
|
||||
}
|
||||
- else continue;
|
||||
} else if (!strcmp(key, "hourly")) {
|
||||
newlog->criterium = ROT_HOURLY;
|
||||
} else if (!strcmp(key, "daily")) {
|
||||
@@ -1232,59 +1233,53 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
newlog->criterium = ROT_YEARLY;
|
||||
} else if (!strcmp(key, "rotate")) {
|
||||
free(key);
|
||||
- if ((key = isolateValue
|
||||
- (configFile, lineNum, "rotate count", &start,
|
||||
- &buf, length)) != NULL) {
|
||||
-
|
||||
- newlog->rotateCount = strtoul(key, &chptr, 0);
|
||||
- if (*chptr || newlog->rotateCount < 0) {
|
||||
- message(MESS_ERROR,
|
||||
- "%s:%d bad rotation count '%s'\n",
|
||||
- configFile, lineNum, key);
|
||||
- RAISE_ERROR();
|
||||
- }
|
||||
+ key = isolateValue(configFile, lineNum, "rotate count", &start,
|
||||
+ &buf, length);
|
||||
+ if (key == NULL)
|
||||
+ continue;
|
||||
+ newlog->rotateCount = strtoul(key, &chptr, 0);
|
||||
+ if (*chptr || newlog->rotateCount < 0) {
|
||||
+ message(MESS_ERROR,
|
||||
+ "%s:%d bad rotation count '%s'\n",
|
||||
+ configFile, lineNum, key);
|
||||
+ RAISE_ERROR();
|
||||
}
|
||||
- else continue;
|
||||
} else if (!strcmp(key, "start")) {
|
||||
free(key);
|
||||
- if ((key = isolateValue
|
||||
- (configFile, lineNum, "start count", &start,
|
||||
- &buf, length)) != NULL) {
|
||||
-
|
||||
- newlog->logStart = strtoul(key, &chptr, 0);
|
||||
- if (*chptr || newlog->logStart < 0) {
|
||||
- message(MESS_ERROR, "%s:%d bad start count '%s'\n",
|
||||
- configFile, lineNum, key);
|
||||
- RAISE_ERROR();
|
||||
- }
|
||||
+ key = isolateValue(configFile, lineNum, "start count", &start,
|
||||
+ &buf, length);
|
||||
+ if (key == NULL)
|
||||
+ continue;
|
||||
+ newlog->logStart = strtoul(key, &chptr, 0);
|
||||
+ if (*chptr || newlog->logStart < 0) {
|
||||
+ message(MESS_ERROR, "%s:%d bad start count '%s'\n",
|
||||
+ configFile, lineNum, key);
|
||||
+ RAISE_ERROR();
|
||||
}
|
||||
- else continue;
|
||||
} else if (!strcmp(key, "minage")) {
|
||||
free(key);
|
||||
- if ((key = isolateValue
|
||||
- (configFile, lineNum, "minage count", &start,
|
||||
- &buf, length)) != NULL) {
|
||||
- newlog->rotateMinAge = strtoul(key, &chptr, 0);
|
||||
- if (*chptr || newlog->rotateMinAge < 0) {
|
||||
- message(MESS_ERROR, "%s:%d bad minimum age '%s'\n",
|
||||
- configFile, lineNum, start);
|
||||
- RAISE_ERROR();
|
||||
- }
|
||||
+ key = isolateValue(configFile, lineNum, "minage count", &start,
|
||||
+ &buf, length);
|
||||
+ if (key == NULL)
|
||||
+ continue;
|
||||
+ newlog->rotateMinAge = strtoul(key, &chptr, 0);
|
||||
+ if (*chptr || newlog->rotateMinAge < 0) {
|
||||
+ message(MESS_ERROR, "%s:%d bad minimum age '%s'\n",
|
||||
+ configFile, lineNum, start);
|
||||
+ RAISE_ERROR();
|
||||
}
|
||||
- else continue;
|
||||
} else if (!strcmp(key, "maxage")) {
|
||||
free(key);
|
||||
- if ((key = isolateValue
|
||||
- (configFile, lineNum, "maxage count", &start,
|
||||
- &buf, length)) != NULL) {
|
||||
- newlog->rotateAge = strtoul(key, &chptr, 0);
|
||||
- if (*chptr || newlog->rotateAge < 0) {
|
||||
- message(MESS_ERROR, "%s:%d bad maximum age '%s'\n",
|
||||
- configFile, lineNum, start);
|
||||
- RAISE_ERROR();
|
||||
- }
|
||||
+ key = isolateValue(configFile, lineNum, "maxage count", &start,
|
||||
+ &buf, length);
|
||||
+ if (key == NULL)
|
||||
+ continue;
|
||||
+ newlog->rotateAge = strtoul(key, &chptr, 0);
|
||||
+ if (*chptr || newlog->rotateAge < 0) {
|
||||
+ message(MESS_ERROR, "%s:%d bad maximum age '%s'\n",
|
||||
+ configFile, lineNum, start);
|
||||
+ RAISE_ERROR();
|
||||
}
|
||||
- else continue;
|
||||
} else if (!strcmp(key, "errors")) {
|
||||
message(MESS_DEBUG,
|
||||
"%s: %d: the errors directive is deprecated and no longer used.\n",
|
||||
@@ -1337,48 +1332,48 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
continue;
|
||||
}
|
||||
free(key);
|
||||
- if ((key = isolateValue(configFile, lineNum, "tabooext", &start,
|
||||
- &buf, length)) != NULL) {
|
||||
- endtag = key;
|
||||
- if (*endtag == '+') {
|
||||
+ key = isolateValue(configFile, lineNum, "tabooext", &start,
|
||||
+ &buf, length);
|
||||
+ if (key == NULL)
|
||||
+ continue;
|
||||
+ endtag = key;
|
||||
+ if (*endtag == '+') {
|
||||
+ endtag++;
|
||||
+ while (isspace((unsigned char)*endtag) && *endtag)
|
||||
endtag++;
|
||||
- while (isspace((unsigned char)*endtag) && *endtag)
|
||||
- endtag++;
|
||||
- } else {
|
||||
- free_2d_array(tabooPatterns, tabooCount);
|
||||
- tabooCount = 0;
|
||||
- /* realloc of NULL is safe by definition */
|
||||
- tabooPatterns = NULL;
|
||||
- }
|
||||
-
|
||||
- while (*endtag) {
|
||||
- int bytes;
|
||||
- char *pattern = NULL;
|
||||
+ } else {
|
||||
+ free_2d_array(tabooPatterns, tabooCount);
|
||||
+ tabooCount = 0;
|
||||
+ /* realloc of NULL is safe by definition */
|
||||
+ tabooPatterns = NULL;
|
||||
+ }
|
||||
|
||||
- chptr = endtag;
|
||||
- while (!isspace((unsigned char)*chptr) && *chptr != ',' && *chptr)
|
||||
- chptr++;
|
||||
+ while (*endtag) {
|
||||
+ int bytes;
|
||||
+ char *pattern = NULL;
|
||||
|
||||
- /* accept only non-empty patterns to avoid exclusion of everything */
|
||||
- if (endtag < chptr) {
|
||||
- tabooPatterns = realloc(tabooPatterns, sizeof(*tabooPatterns) *
|
||||
- (tabooCount + 1));
|
||||
- bytes = asprintf(&pattern, "*%.*s", (int)(chptr - endtag), endtag);
|
||||
+ chptr = endtag;
|
||||
+ while (!isspace((unsigned char)*chptr) && *chptr != ',' && *chptr)
|
||||
+ chptr++;
|
||||
|
||||
- /* should test for malloc() failure */
|
||||
- assert(bytes != -1);
|
||||
- tabooPatterns[tabooCount] = pattern;
|
||||
- tabooCount++;
|
||||
- }
|
||||
+ /* accept only non-empty patterns to avoid exclusion of everything */
|
||||
+ if (endtag < chptr) {
|
||||
+ tabooPatterns = realloc(tabooPatterns, sizeof(*tabooPatterns) *
|
||||
+ (tabooCount + 1));
|
||||
+ bytes = asprintf(&pattern, "*%.*s", (int)(chptr - endtag), endtag);
|
||||
|
||||
- endtag = chptr;
|
||||
- if (*endtag == ',')
|
||||
- endtag++;
|
||||
- while (*endtag && isspace((unsigned char)*endtag))
|
||||
- endtag++;
|
||||
+ /* should test for malloc() failure */
|
||||
+ assert(bytes != -1);
|
||||
+ tabooPatterns[tabooCount] = pattern;
|
||||
+ tabooCount++;
|
||||
}
|
||||
+
|
||||
+ endtag = chptr;
|
||||
+ if (*endtag == ',')
|
||||
+ endtag++;
|
||||
+ while (*endtag && isspace((unsigned char)*endtag))
|
||||
+ endtag++;
|
||||
}
|
||||
- else continue;
|
||||
} else if (!strcmp(key, "taboopat")) {
|
||||
if (newlog != defConfig) {
|
||||
message(MESS_ERROR,
|
||||
@@ -1389,68 +1384,68 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
continue;
|
||||
}
|
||||
free(key);
|
||||
- if ((key = isolateValue(configFile, lineNum, "taboopat", &start,
|
||||
- &buf, length)) != NULL) {
|
||||
- endtag = key;
|
||||
- if (*endtag == '+') {
|
||||
+ key = isolateValue(configFile, lineNum, "taboopat", &start,
|
||||
+ &buf, length);
|
||||
+ if (key == NULL)
|
||||
+ continue;
|
||||
+
|
||||
+ endtag = key;
|
||||
+ if (*endtag == '+') {
|
||||
+ endtag++;
|
||||
+ while (isspace((unsigned char)*endtag) && *endtag)
|
||||
endtag++;
|
||||
- while (isspace((unsigned char)*endtag) && *endtag)
|
||||
- endtag++;
|
||||
- } else {
|
||||
- free_2d_array(tabooPatterns, tabooCount);
|
||||
- tabooCount = 0;
|
||||
- /* realloc of NULL is safe by definition */
|
||||
- tabooPatterns = NULL;
|
||||
- }
|
||||
+ } else {
|
||||
+ free_2d_array(tabooPatterns, tabooCount);
|
||||
+ tabooCount = 0;
|
||||
+ /* realloc of NULL is safe by definition */
|
||||
+ tabooPatterns = NULL;
|
||||
+ }
|
||||
|
||||
- while (*endtag) {
|
||||
- int bytes;
|
||||
- char *pattern = NULL;
|
||||
+ while (*endtag) {
|
||||
+ int bytes;
|
||||
+ char *pattern = NULL;
|
||||
|
||||
- chptr = endtag;
|
||||
- while (!isspace((unsigned char)*chptr) && *chptr != ',' && *chptr)
|
||||
- chptr++;
|
||||
+ chptr = endtag;
|
||||
+ while (!isspace((unsigned char)*chptr) && *chptr != ',' && *chptr)
|
||||
+ chptr++;
|
||||
|
||||
- tabooPatterns = realloc(tabooPatterns, sizeof(*tabooPatterns) *
|
||||
- (tabooCount + 1));
|
||||
- bytes = asprintf(&pattern, "%.*s", (int)(chptr - endtag), endtag);
|
||||
+ tabooPatterns = realloc(tabooPatterns, sizeof(*tabooPatterns) *
|
||||
+ (tabooCount + 1));
|
||||
+ bytes = asprintf(&pattern, "%.*s", (int)(chptr - endtag), endtag);
|
||||
|
||||
- /* should test for malloc() failure */
|
||||
- assert(bytes != -1);
|
||||
- tabooPatterns[tabooCount] = pattern;
|
||||
- tabooCount++;
|
||||
+ /* should test for malloc() failure */
|
||||
+ assert(bytes != -1);
|
||||
+ tabooPatterns[tabooCount] = pattern;
|
||||
+ tabooCount++;
|
||||
|
||||
- endtag = chptr;
|
||||
- if (*endtag == ',')
|
||||
- endtag++;
|
||||
- while (*endtag && isspace((unsigned char)*endtag))
|
||||
- endtag++;
|
||||
- }
|
||||
+ endtag = chptr;
|
||||
+ if (*endtag == ',')
|
||||
+ endtag++;
|
||||
+ while (*endtag && isspace((unsigned char)*endtag))
|
||||
+ endtag++;
|
||||
}
|
||||
- else continue;
|
||||
} else if (!strcmp(key, "include")) {
|
||||
free(key);
|
||||
- if ((key = isolateValue(configFile, lineNum, "include", &start,
|
||||
- &buf, length)) != NULL) {
|
||||
-
|
||||
- message(MESS_DEBUG, "including %s\n", key);
|
||||
- if (recursion_depth >= MAX_NESTING) {
|
||||
- message(MESS_ERROR, "%s:%d include nesting too deep\n",
|
||||
- configFile, lineNum);
|
||||
- logerror = 1;
|
||||
- continue;
|
||||
- }
|
||||
+ key = isolateValue(configFile, lineNum, "include", &start,
|
||||
+ &buf, length);
|
||||
+ if (key == NULL)
|
||||
+ continue;
|
||||
+ message(MESS_DEBUG, "including %s\n", key);
|
||||
+ if (recursion_depth >= MAX_NESTING) {
|
||||
+ message(MESS_ERROR, "%s:%d include nesting too deep\n",
|
||||
+ configFile, lineNum);
|
||||
+ logerror = 1;
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
- ++recursion_depth;
|
||||
- rv = readConfigPath(key, newlog);
|
||||
- --recursion_depth;
|
||||
+ ++recursion_depth;
|
||||
+ rv = readConfigPath(key, newlog);
|
||||
+ --recursion_depth;
|
||||
|
||||
- if (rv) {
|
||||
- logerror = 1;
|
||||
- continue;
|
||||
- }
|
||||
+ if (rv) {
|
||||
+ logerror = 1;
|
||||
+ continue;
|
||||
}
|
||||
- else continue;
|
||||
} else if (!strcmp(key, "olddir")) {
|
||||
freeLogItem (oldDir);
|
||||
|
||||
@@ -1460,28 +1455,23 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
}
|
||||
message(MESS_DEBUG, "olddir is now %s\n", newlog->oldDir);
|
||||
} else if (!strcmp(key, "extension")) {
|
||||
- if ((key = isolateValue
|
||||
- (configFile, lineNum, "extension name", &start,
|
||||
- &buf, length)) != NULL) {
|
||||
- freeLogItem (extension);
|
||||
- newlog->extension = key;
|
||||
- key = NULL;
|
||||
- }
|
||||
- else continue;
|
||||
-
|
||||
- message(MESS_DEBUG, "extension is now %s\n",
|
||||
- newlog->extension);
|
||||
+ key = isolateValue(configFile, lineNum, "extension name", &start,
|
||||
+ &buf, length);
|
||||
+ if (key == NULL)
|
||||
+ continue;
|
||||
+ freeLogItem (extension);
|
||||
+ newlog->extension = key;
|
||||
+ key = NULL;
|
||||
+ message(MESS_DEBUG, "extension is now %s\n", newlog->extension);
|
||||
|
||||
} else if (!strcmp(key, "addextension")) {
|
||||
- if ((key = isolateValue
|
||||
- (configFile, lineNum, "addextension name", &start,
|
||||
- &buf, length)) != NULL) {
|
||||
- freeLogItem (addextension);
|
||||
- newlog->addextension = key;
|
||||
- key = NULL;
|
||||
- }
|
||||
- else continue;
|
||||
-
|
||||
+ key = isolateValue(configFile, lineNum, "addextension name", &start,
|
||||
+ &buf, length);
|
||||
+ if (key == NULL)
|
||||
+ continue;
|
||||
+ freeLogItem (addextension);
|
||||
+ newlog->addextension = key;
|
||||
+ key = NULL;
|
||||
message(MESS_DEBUG, "addextension is now %s\n",
|
||||
newlog->addextension);
|
||||
|
||||
@@ -1827,7 +1817,8 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
break;
|
||||
case STATE_LOAD_SCRIPT:
|
||||
case STATE_LOAD_SCRIPT | STATE_SKIP_CONFIG:
|
||||
- if ((key = isolateWord(&start, &buf, length)) == NULL)
|
||||
+ key = isolateWord(&start, &buf, length);
|
||||
+ if (key == NULL)
|
||||
continue;
|
||||
|
||||
if (strcmp(key, "endscript") == 0) {
|
||||
@@ -1862,7 +1853,8 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
newlog = defConfig;
|
||||
}
|
||||
else {
|
||||
- if ((key = isolateWord(&start, &buf, length)) == NULL)
|
||||
+ key = isolateWord(&start, &buf, length);
|
||||
+ if (key == NULL)
|
||||
continue;
|
||||
if (
|
||||
(strcmp(key, "postrotate") == 0) ||
|
||||
--
|
||||
2.17.1
|
||||
|
||||
|
||||
From a3a955494999bd4861f14b846c345cbc96715262 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Wed, 1 Aug 2018 15:09:40 +0200
|
||||
Subject: [PATCH 2/3] readConfigFile: assign and free 'key' consistently
|
||||
|
||||
reason: assign and free 'key' consistently
|
||||
|
||||
https://github.com/logrotate/logrotate/commit/7c1d87441c79cf550f0a50bf216b517f75d10411
|
||||
|
||||
This commit fixes the following memory leaks (detected by Coverity):
|
||||
|
||||
Error: RESOURCE_LEAK:
|
||||
config.c:1466: overwrite_var: Overwriting "key" in "key = isolateValue(configFile, lineNum, "extension name", &start, &buf, length)" leaks the storage that "key" points to.
|
||||
|
||||
Error: RESOURCE_LEAK:
|
||||
config.c:1479: overwrite_var: Overwriting "key" in "key = isolateValue(configFile, lineNum, "addextension name", &start, &buf, length)" leaks the storage that "key" points to.
|
||||
|
||||
Error: RESOURCE_LEAK:
|
||||
config.c:1043: alloc_fn: Storage is returned from allocation function "isolateWord".
|
||||
config.c:219:2: alloc_fn: Storage is returned from allocation function "strndup".
|
||||
config.c:219:2: assign: Assigning: "key" = "strndup(start, endtag - start)".
|
||||
config.c:221:2: return_alloc: Returning allocated memory "key".
|
||||
config.c:1043: var_assign: Assigning: "key" = storage returned from "isolateWord(&start, &buf, length)".
|
||||
config.c:1928: leaked_storage: Variable "key" going out of scope leaks the storage it points to.
|
||||
|
||||
Error: RESOURCE_LEAK:
|
||||
config.c:1153: alloc_fn: Storage is returned from allocation function "isolateValue".
|
||||
config.c:204:2: alloc_fn: Storage is returned from allocation function "isolateLine".
|
||||
config.c:178:2: alloc_fn: Storage is returned from allocation function "strndup".
|
||||
config.c:178:2: assign: Assigning: "key" = "strndup(start, endtag - start + 1L)".
|
||||
config.c:180:2: return_alloc: Returning allocated memory "key".
|
||||
config.c:204:2: return_alloc_fn: Directly returning storage allocated by "isolateLine".
|
||||
config.c:1153: var_assign: Assigning: "key" = storage returned from "isolateValue(configFile, lineNum, opt, &start, &buf, length)".
|
||||
config.c:1928: leaked_storage: Variable "key" going out of scope leaks the storage it points to.
|
||||
|
||||
Error: RESOURCE_LEAK:
|
||||
config.c:1219: alloc_fn: Storage is returned from allocation function "isolateLine".
|
||||
config.c:178:2: alloc_fn: Storage is returned from allocation function "strndup".
|
||||
config.c:178:2: assign: Assigning: "key" = "strndup(start, endtag - start + 1L)".
|
||||
config.c:180:2: return_alloc: Returning allocated memory "key".
|
||||
config.c:1219: var_assign: Assigning: "key" = storage returned from "isolateLine(&start, &buf, length)".
|
||||
config.c:1928: leaked_storage: Variable "key" going out of scope leaks the storage it points to.
|
||||
|
||||
Closes #208
|
||||
---
|
||||
config.c | 19 +++++++------------
|
||||
1 file changed, 7 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/config.c b/config.c
|
||||
index d2fba10..39c9bc7 100644
|
||||
--- a/config.c
|
||||
+++ b/config.c
|
||||
@@ -1022,10 +1022,6 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
|
||||
start = buf;
|
||||
for (start = buf; start - buf < length; start++) {
|
||||
- if (key) {
|
||||
- free(key);
|
||||
- key = NULL;
|
||||
- }
|
||||
switch (state) {
|
||||
case STATE_DEFAULT:
|
||||
if (isblank((unsigned char)*start))
|
||||
@@ -1037,6 +1033,7 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
}
|
||||
|
||||
if (isalpha((unsigned char)*start)) {
|
||||
+ free(key);
|
||||
key = isolateWord(&start, &buf, length);
|
||||
if (key == NULL)
|
||||
continue;
|
||||
@@ -1455,6 +1452,7 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
}
|
||||
message(MESS_DEBUG, "olddir is now %s\n", newlog->oldDir);
|
||||
} else if (!strcmp(key, "extension")) {
|
||||
+ free(key);
|
||||
key = isolateValue(configFile, lineNum, "extension name", &start,
|
||||
&buf, length);
|
||||
if (key == NULL)
|
||||
@@ -1465,6 +1463,7 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
message(MESS_DEBUG, "extension is now %s\n", newlog->extension);
|
||||
|
||||
} else if (!strcmp(key, "addextension")) {
|
||||
+ free(key);
|
||||
key = isolateValue(configFile, lineNum, "addextension name", &start,
|
||||
&buf, length);
|
||||
if (key == NULL)
|
||||
@@ -1557,8 +1556,6 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
if (*start != '\n')
|
||||
state = STATE_SKIP_LINE;
|
||||
}
|
||||
- free(key);
|
||||
- key = NULL;
|
||||
} else if (*start == '/' || *start == '"' || *start == '\''
|
||||
#ifdef GLOB_TILDE
|
||||
|| *start == '~'
|
||||
@@ -1817,6 +1814,7 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
break;
|
||||
case STATE_LOAD_SCRIPT:
|
||||
case STATE_LOAD_SCRIPT | STATE_SKIP_CONFIG:
|
||||
+ free(key);
|
||||
key = isolateWord(&start, &buf, length);
|
||||
if (key == NULL)
|
||||
continue;
|
||||
@@ -1853,6 +1851,7 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
newlog = defConfig;
|
||||
}
|
||||
else {
|
||||
+ free(key);
|
||||
key = isolateWord(&start, &buf, length);
|
||||
if (key == NULL)
|
||||
continue;
|
||||
@@ -1884,8 +1883,6 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
state = STATE_SKIP_LINE | STATE_SKIP_CONFIG;
|
||||
}
|
||||
}
|
||||
- free(key);
|
||||
- key = NULL;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -1893,10 +1890,6 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
"%s: %d: readConfigFile() unknown state\n",
|
||||
configFile, lineNum);
|
||||
}
|
||||
- if (key) {
|
||||
- free(key);
|
||||
- key = NULL;
|
||||
- }
|
||||
if (*start == '\n') {
|
||||
lineNum++;
|
||||
}
|
||||
@@ -1910,6 +1903,8 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
|
||||
goto error;
|
||||
}
|
||||
|
||||
+ free(key);
|
||||
+
|
||||
munmap(buf, (size_t) length);
|
||||
close(fd);
|
||||
return logerror;
|
||||
--
|
||||
2.17.1
|
||||
|
||||
|
||||
From 771af94fd6c6299a7cb3d20c8b247591775653d3 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Wed, 1 Aug 2018 16:06:27 +0200
|
||||
Subject: [PATCH 3/3] readConfigFile: simplify code of prerotateSingleLog()
|
||||
|
||||
reason: simplify code of prerotateSingleLog()
|
||||
|
||||
https://github.com/logrotate/logrotate/commit/311023530d90ba6cf8535b80ea20b4abc7cfe9a3
|
||||
|
||||
... to eliminate a use-after-free false positive reported by Coverity:
|
||||
|
||||
Error: USE_AFTER_FREE:
|
||||
logrotate.c:1800: freed_arg: "free" frees "oldName".
|
||||
logrotate.c:1779: use_after_free: Using freed pointer "oldName".
|
||||
|
||||
Closes #209
|
||||
---
|
||||
logrotate.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/logrotate.c b/logrotate.c
|
||||
index 02d45e9..95fd70b 100644
|
||||
--- a/logrotate.c
|
||||
+++ b/logrotate.c
|
||||
@@ -1353,7 +1353,7 @@ static int prerotateSingleLog(struct logInfo *log, int logNum,
|
||||
struct logState *state, struct logNames *rotNames)
|
||||
{
|
||||
struct tm now = *localtime(&nowSecs);
|
||||
- char *oldName, *newName = NULL;
|
||||
+ char *oldName = NULL;
|
||||
const char *compext = "";
|
||||
const char *fileext = "";
|
||||
int hasErrors = 0;
|
||||
@@ -1670,6 +1670,7 @@ static int prerotateSingleLog(struct logInfo *log, int logNum,
|
||||
free(glob_pattern);
|
||||
} else {
|
||||
int i;
|
||||
+ char *newName = NULL;
|
||||
if (log->rotateAge) {
|
||||
struct stat fst_buf;
|
||||
for (i = 1; i <= rotateCount + 1; i++) {
|
||||
@@ -1697,7 +1698,6 @@ static int prerotateSingleLog(struct logInfo *log, int logNum,
|
||||
compext) < 0) {
|
||||
message(MESS_FATAL, "could not allocate disposeName memory\n");
|
||||
}
|
||||
- newName = strdup(oldName);
|
||||
|
||||
rotNames->disposeName = strdup(oldName);
|
||||
|
||||
@@ -1711,6 +1711,8 @@ static int prerotateSingleLog(struct logInfo *log, int logNum,
|
||||
if (asprintf(&oldName, "%s/%s.%d%s%s", rotNames->dirName,
|
||||
rotNames->baseName, i, fileext, compext) < 0) {
|
||||
message(MESS_FATAL, "could not allocate oldName memory\n");
|
||||
+ oldName = NULL;
|
||||
+ break;
|
||||
}
|
||||
|
||||
message(MESS_DEBUG,
|
||||
@@ -1727,11 +1729,9 @@ static int prerotateSingleLog(struct logInfo *log, int logNum,
|
||||
hasErrors = 1;
|
||||
}
|
||||
}
|
||||
- if (hasErrors || i - 1 < 0)
|
||||
- free(oldName);
|
||||
-
|
||||
}
|
||||
free(newName);
|
||||
+ free(oldName);
|
||||
} /* !LOG_FLAG_DATEEXT */
|
||||
|
||||
if (log->flags & LOG_FLAG_DATEEXT) {
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@ -1,34 +0,0 @@
|
||||
From 2c3aa286f7eb25edf25b22b7c32b966543aeda2c Mon Sep 17 00:00:00 2001
|
||||
From: Sami Kerola <kerolasa@iki.fi>
|
||||
Date: Mon, 25 Feb 2019 20:10:32 +0000
|
||||
Subject: [PATCH] config: add variable initialization
|
||||
[-Wconditional-uninitialized]
|
||||
|
||||
reason:add variable initialization
|
||||
|
||||
https://github.com/logrotate/logrotate/pull/240/commits
|
||||
|
||||
config.c:314:17: warning: variable 'm' may be uninitialized when used here
|
||||
config.c:287:19: note: initialize the variable 'm' to silence this warning
|
||||
|
||||
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
|
||||
---
|
||||
config.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/config.c b/config.c
|
||||
index 239c943..07bd374 100644
|
||||
--- a/config.c
|
||||
+++ b/config.c
|
||||
@@ -304,7 +304,7 @@ static int readModeUidGid(const char *configFile, int lineNum, char *key,
|
||||
gid_t *pGid)
|
||||
{
|
||||
char u[200], g[200];
|
||||
- unsigned int m;
|
||||
+ unsigned int m = 0;
|
||||
char tmp;
|
||||
int rc;
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
@ -1,99 +0,0 @@
|
||||
From 99ff59b39eafecb20063a06704caf17e767c34ab Mon Sep 17 00:00:00 2001
|
||||
From: Sami Kerola <kerolasa@iki.fi>
|
||||
Date: Thu, 17 May 2018 21:03:31 +0100
|
||||
Subject: [PATCH 15/39] config / logrotate: fix couple printf format specifiers
|
||||
|
||||
reason: fix couple printf format specifiers
|
||||
|
||||
https://github.com/logrotate/logrotate/pull/200
|
||||
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
All of these are are warnings similar to one below.
|
||||
|
||||
config.c:369:59: warning: format ‘%d’ expects argument of type ‘int’, but
|
||||
argument 4 has type ‘uid_t’ {aka ‘unsigned int’} [-Wformat=]
|
||||
|
||||
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
|
||||
|
||||
Closes #200
|
||||
---
|
||||
config.c | 2 +-
|
||||
logrotate.c | 14 +++++++-------
|
||||
2 files changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/config.c b/config.c
|
||||
index 4162cca..53b7416 100644
|
||||
--- a/config.c
|
||||
+++ b/config.c
|
||||
@@ -360,7 +360,7 @@ static int do_mkdir(const char *path, mode_t mode, uid_t uid, gid_t gid) {
|
||||
if (mkdir(path, mode) == 0) {
|
||||
/* newly created directory, set the owner and permissions */
|
||||
if (chown(path, uid, gid) != 0) {
|
||||
- message(MESS_ERROR, "error setting owner of %s to uid %d and gid %d: %s\n",
|
||||
+ message(MESS_ERROR, "error setting owner of %s to uid %u and gid %u: %s\n",
|
||||
path, uid, gid, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
diff --git a/logrotate.c b/logrotate.c
|
||||
index 01836cf..4fd546f 100644
|
||||
--- a/logrotate.c
|
||||
+++ b/logrotate.c
|
||||
@@ -156,10 +156,10 @@ int switch_user(uid_t user, gid_t group) {
|
||||
save_euid = geteuid();
|
||||
if (save_euid == user && save_egid == group)
|
||||
return 0;
|
||||
- message(MESS_DEBUG, "switching euid to %d and egid to %d\n",
|
||||
+ message(MESS_DEBUG, "switching euid to %u and egid to %u\n",
|
||||
user, group);
|
||||
if (setegid(group) || seteuid(user)) {
|
||||
- message(MESS_ERROR, "error switching euid to %d and egid to %d: %s\n",
|
||||
+ message(MESS_ERROR, "error switching euid to %u and egid to %u: %s\n",
|
||||
user, group, strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
@@ -179,10 +179,10 @@ static int switch_user_permanently(const struct logInfo *log) {
|
||||
message(MESS_ERROR, "error getting rid of euid != uid\n");
|
||||
return 1;
|
||||
}
|
||||
- message(MESS_DEBUG, "switching uid to %d and gid to %d\n",
|
||||
+ message(MESS_DEBUG, "switching uid to %u and gid to %u\n",
|
||||
user, group);
|
||||
if (setgid(group) || setuid(user)) {
|
||||
- message(MESS_ERROR, "error switching euid to %d and egid to %d: %s\n",
|
||||
+ message(MESS_ERROR, "error switching euid to %u and egid to %u: %s\n",
|
||||
user, group, strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
@@ -239,7 +239,7 @@ static int allocateHash(unsigned int hs)
|
||||
if (hs < HASH_SIZE_MIN)
|
||||
hs = HASH_SIZE_MIN;
|
||||
|
||||
- message(MESS_DEBUG, "Allocating hash table for state file, size %d entries\n",
|
||||
+ message(MESS_DEBUG, "Allocating hash table for state file, size %u entries\n",
|
||||
hs);
|
||||
|
||||
states = calloc(hs, sizeof(struct logStateList *));
|
||||
@@ -540,7 +540,7 @@ static int createOutputFile(char *fileName, int flags, struct stat *sb,
|
||||
|
||||
if ((sb_create.st_uid != sb->st_uid || sb_create.st_gid != sb->st_gid) &&
|
||||
fchown(fd, sb->st_uid, sb->st_gid)) {
|
||||
- message(MESS_ERROR, "error setting owner of %s to uid %d and gid %d: %s\n",
|
||||
+ message(MESS_ERROR, "error setting owner of %s to uid %u and gid %u: %s\n",
|
||||
fileName, sb->st_uid, sb->st_gid, strerror(errno));
|
||||
close(fd);
|
||||
return -1;
|
||||
@@ -1993,7 +1993,7 @@ static int rotateLogSet(struct logInfo *log, int force)
|
||||
message(MESS_DEBUG, "%jd bytes ", (intmax_t)log->threshold);
|
||||
break;
|
||||
default:
|
||||
- message(MESS_DEBUG, "rotateLogSet() does not have case for: %d ", log->criterium);
|
||||
+ message(MESS_DEBUG, "rotateLogSet() does not have case for: %u ", log->criterium);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
@ -1,87 +0,0 @@
|
||||
From 22892fb94b7da0018802363637928d21b7f00687 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Mon, 30 Apr 2018 18:46:13 +0200
|
||||
Subject: [PATCH 14/39] do_mkdir: fix time-of-check/time-of-use race condition
|
||||
|
||||
reason: fix time-of-check/time-of-use race condition
|
||||
|
||||
https://github.com/logrotate/logrotate/pull/196
|
||||
|
||||
... detected by Coverity Analysis
|
||||
|
||||
Error: TOCTOU:
|
||||
config.c:362: fs_check_call: Calling function "stat" to perform check on "path".
|
||||
config.c:363: toctou: Calling function "mkdir" that uses "path" after a check function. This can cause a time-of-check, time-of-use race condition.
|
||||
|
||||
Closes #196
|
||||
---
|
||||
config.c | 49 ++++++++++++++++++++++++++-----------------------
|
||||
1 file changed, 26 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/config.c b/config.c
|
||||
index 9cc66ac..4162cca 100644
|
||||
--- a/config.c
|
||||
+++ b/config.c
|
||||
@@ -357,33 +357,36 @@ static char *readAddress(const char *configFile, int lineNum, const char *key,
|
||||
}
|
||||
|
||||
static int do_mkdir(const char *path, mode_t mode, uid_t uid, gid_t gid) {
|
||||
- struct stat sb;
|
||||
-
|
||||
- if (stat(path, &sb) != 0) {
|
||||
- if (mkdir(path, mode) != 0 && errno != EEXIST) {
|
||||
- message(MESS_ERROR, "error creating %s: %s\n",
|
||||
- path, strerror(errno));
|
||||
- return -1;
|
||||
- }
|
||||
- if (chown(path, uid, gid) != 0) {
|
||||
- message(MESS_ERROR, "error setting owner of %s to uid %d and gid %d: %s\n",
|
||||
- path, uid, gid, strerror(errno));
|
||||
- return -1;
|
||||
- }
|
||||
- if (chmod(path, mode) != 0) {
|
||||
- message(MESS_ERROR, "error setting permissions of %s to 0%o: %s\n",
|
||||
- path, mode, strerror(errno));
|
||||
- return -1;
|
||||
- }
|
||||
+ if (mkdir(path, mode) == 0) {
|
||||
+ /* newly created directory, set the owner and permissions */
|
||||
+ if (chown(path, uid, gid) != 0) {
|
||||
+ message(MESS_ERROR, "error setting owner of %s to uid %d and gid %d: %s\n",
|
||||
+ path, uid, gid, strerror(errno));
|
||||
+ return -1;
|
||||
}
|
||||
- else if (!S_ISDIR(sb.st_mode)) {
|
||||
- message(MESS_ERROR, "path %s already exists, but it is not a directory\n",
|
||||
- path);
|
||||
- errno = ENOTDIR;
|
||||
- return -1;
|
||||
+
|
||||
+ if (chmod(path, mode) != 0) {
|
||||
+ message(MESS_ERROR, "error setting permissions of %s to 0%o: %s\n",
|
||||
+ path, mode, strerror(errno));
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (errno == EEXIST) {
|
||||
+ /* path already exists, check whether it is a directory or not */
|
||||
+ struct stat sb;
|
||||
+ if ((stat(path, &sb) == 0) && S_ISDIR(sb.st_mode))
|
||||
+ return 0;
|
||||
+
|
||||
+ message(MESS_ERROR, "path %s already exists, but it is not a directory\n", path);
|
||||
+ errno = ENOTDIR;
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ message(MESS_ERROR, "error creating %s: %s\n", path, strerror(errno));
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
static int mkpath(const char *path, mode_t mode, uid_t uid, gid_t gid) {
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
@ -1,84 +0,0 @@
|
||||
From 6563e6551657b63898c7387fd56bb2f3ee115fa1 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Wed, 1 Aug 2018 11:42:08 +0200
|
||||
Subject: [PATCH 16/39] logrotate: explicitly cast uid_t and gid_t to unsigned int
|
||||
|
||||
reason: explicitly cast uid_t and gid_t to unsigned int
|
||||
|
||||
https://github.com/logrotate/logrotate/commit/6563e6551657b63898c7387fd56bb2f3ee115fa1
|
||||
|
||||
... before passing them to the %u conversion in printf() invocation.
|
||||
The uid_t and gid_t types do not need to be the same as unsigned int
|
||||
on all supported platforms.
|
||||
|
||||
Closes #200
|
||||
---
|
||||
config.c | 2 +-
|
||||
logrotate.c | 13 +++++++------
|
||||
2 files changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/config.c b/config.c
|
||||
index 53b7416..960ee9b 100644
|
||||
--- a/config.c
|
||||
+++ b/config.c
|
||||
@@ -361,7 +361,7 @@ static int do_mkdir(const char *path, mode_t mode, uid_t uid, gid_t gid) {
|
||||
/* newly created directory, set the owner and permissions */
|
||||
if (chown(path, uid, gid) != 0) {
|
||||
message(MESS_ERROR, "error setting owner of %s to uid %u and gid %u: %s\n",
|
||||
- path, uid, gid, strerror(errno));
|
||||
+ path, (unsigned) uid, (unsigned) gid, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
diff --git a/logrotate.c b/logrotate.c
|
||||
index 4fd546f..46f10a2 100644
|
||||
--- a/logrotate.c
|
||||
+++ b/logrotate.c
|
||||
@@ -157,10 +157,10 @@ int switch_user(uid_t user, gid_t group) {
|
||||
if (save_euid == user && save_egid == group)
|
||||
return 0;
|
||||
message(MESS_DEBUG, "switching euid to %u and egid to %u\n",
|
||||
- user, group);
|
||||
+ (unsigned) user, (unsigned) group);
|
||||
if (setegid(group) || seteuid(user)) {
|
||||
message(MESS_ERROR, "error switching euid to %u and egid to %u: %s\n",
|
||||
- user, group, strerror(errno));
|
||||
+ (unsigned) user, (unsigned) group, strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
@@ -180,10 +180,10 @@ static int switch_user_permanently(const struct logInfo *log) {
|
||||
return 1;
|
||||
}
|
||||
message(MESS_DEBUG, "switching uid to %u and gid to %u\n",
|
||||
- user, group);
|
||||
+ (unsigned) user, (unsigned) group);
|
||||
if (setgid(group) || setuid(user)) {
|
||||
message(MESS_ERROR, "error switching euid to %u and egid to %u: %s\n",
|
||||
- user, group, strerror(errno));
|
||||
+ (unsigned) user, (unsigned) group, strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
@@ -541,7 +541,7 @@ static int createOutputFile(char *fileName, int flags, struct stat *sb,
|
||||
if ((sb_create.st_uid != sb->st_uid || sb_create.st_gid != sb->st_gid) &&
|
||||
fchown(fd, sb->st_uid, sb->st_gid)) {
|
||||
message(MESS_ERROR, "error setting owner of %s to uid %u and gid %u: %s\n",
|
||||
- fileName, sb->st_uid, sb->st_gid, strerror(errno));
|
||||
+ fileName, (unsigned) sb->st_uid, (unsigned) sb->st_gid, strerror(errno));
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
@@ -1993,7 +1993,8 @@ static int rotateLogSet(struct logInfo *log, int force)
|
||||
message(MESS_DEBUG, "%jd bytes ", (intmax_t)log->threshold);
|
||||
break;
|
||||
default:
|
||||
- message(MESS_DEBUG, "rotateLogSet() does not have case for: %u ", log->criterium);
|
||||
+ message(MESS_DEBUG, "rotateLogSet() does not have case for: %u ",
|
||||
+ (unsigned) log->criterium);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
Binary file not shown.
BIN
logrotate-3.15.1.tar.xz
Normal file
BIN
logrotate-3.15.1.tar.xz
Normal file
Binary file not shown.
@ -1,27 +1,16 @@
|
||||
%global _configure ../configure
|
||||
|
||||
Name: logrotate
|
||||
Version: 3.14.0
|
||||
Release: 6
|
||||
Version: 3.15.1
|
||||
Release: 1
|
||||
Summary: simplify the administration of log files
|
||||
License: GPLv2+
|
||||
Url: https://github.com/logrotate/logrotate
|
||||
Source0: https://github.com/logrotate/logrotate/releases/download/%{version}/logrotate-%{version}.tar.xz
|
||||
Source1: rwtab
|
||||
BuildRequires: acl gcc automake git libacl-devel libselinux-devel popt-devel
|
||||
BuildRequires: acl gcc automake libacl-devel libselinux-devel popt-devel
|
||||
Requires: coreutils
|
||||
|
||||
# display version information(#1611498)
|
||||
Patch1: 0001-logrotate-3.14.0-man-version.patch
|
||||
|
||||
# fix Coverity Analysis issue
|
||||
Patch2: 0002-logrotate-3.14.0-coverity.patch
|
||||
|
||||
Patch6001: do_mkdir-fix-time-of-check-time-of-use-race-conditio.patch
|
||||
Patch6002: config-logrotate-fix-couple-printf-format-specifiers.patch
|
||||
Patch6003: explicitly-cast-uid_t-and-gid_t-to-unsigned-int.patch
|
||||
Patch6004: config-add-variable-initialization-Wconditional-unin.patch
|
||||
|
||||
%description
|
||||
The logrotate utility is designed to simplify the administration of
|
||||
log files on a system which generates a lot of log files. Logrotate
|
||||
@ -46,7 +35,7 @@ mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d
|
||||
mkdir -p %{buildroot}%{_sysconfdir}/cron.daily
|
||||
mkdir -p %{buildroot}%{_localstatedir}/lib/logrotate
|
||||
|
||||
install -p -m 644 examples/logrotate-default %{buildroot}%{_sysconfdir}/logrotate.conf
|
||||
install -p -m 644 examples/logrotate.conf %{buildroot}%{_sysconfdir}/logrotate.conf
|
||||
install -p -m 644 examples/*tmp %{buildroot}%{_sysconfdir}/logrotate.d/
|
||||
install -p -m 755 examples/logrotate.cron %{buildroot}%{_sysconfdir}/cron.daily/logrotate
|
||||
|
||||
@ -90,29 +79,5 @@ fi
|
||||
%{_mandir}/man5/logrotate.conf.5*
|
||||
|
||||
%changelog
|
||||
* Fri Sep 27 2019 openEuler Buildteam <buildteam@openeuler.org> - 3.14.0-6
|
||||
- del unnecessary statement
|
||||
|
||||
* Mon Sep 16 2019 openEuler Buildteam <buildteam@openeuler.org> - 3.14.0-5
|
||||
- modify spec
|
||||
|
||||
* Tue Sep 10 2019 openEuler Buildteam <buildteam@openeuler.org> - 3.14.0-4
|
||||
- rewrite spec
|
||||
|
||||
* Tue Aug 20 2019 Shouping Wang<wangshouping@huawei.com> - 3.14.0-3
|
||||
- Type:enhancement
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:format patches for openeuler
|
||||
|
||||
* Mon Aug 19 2019 Shouping Wang<wangshouping@huawei.com> - 3.14.0-2
|
||||
- Type:enhancement
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:format patches
|
||||
|
||||
* Thu Feb 28 2019 Xiaoqi Guo<guoxiaoqi2@huawei.com> - 3.14.0-1
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:backport patch from https://github.com/logrotate/logrotate/
|
||||
* Sat Oct 12 2019 openEuler Buildteam <buildteam@openeuler.org> - 3.15.1-1
|
||||
- update version to 3.15.1
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user