rpms/logrotate/devel logrotate-3.7.2-cleanUp2.patch, NONE, 1.1 logrotate.spec, 1.35, 1.36
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Tue Oct 25 12:07:20 UTC 2005
Author: pvrabec
Update of /cvs/dist/rpms/logrotate/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv5612
Modified Files:
logrotate.spec
Added Files:
logrotate-3.7.2-cleanUp2.patch
Log Message:
some more clean up (#171587)
logrotate-3.7.2-cleanUp2.patch:
config.c | 44 +++++++++++++-
logrotate.c | 183 ++++++++++++++++++++----------------------------------------
logrotate.h | 8 +-
3 files changed, 110 insertions(+), 125 deletions(-)
--- NEW FILE logrotate-3.7.2-cleanUp2.patch ---
diff -ur logrotate-3.7.2-orig/config.c logrotate-3.7.2/config.c
--- logrotate-3.7.2-orig/config.c 2005-10-24 10:20:55.000000000 -0200
+++ logrotate-3.7.2/config.c 2005-10-24 10:21:24.000000000 -0200
@@ -266,6 +266,7 @@
if ( (dirp = opendir(path)) == NULL) {
message(MESS_ERROR, "cannot open directory %s: %s\n", path,
strerror(errno));
+ close(here);
return 1;
}
files_count = 0;
@@ -280,6 +281,8 @@
memset(namelist + files_count, '\0', REALLOC_STEP * sizeof(char *));
} else {
free_2d_array(namelist, files_count);
+ closedir( dirp );
+ close(here);
message(MESS_ERROR, "cannot realloc: %s\n", strerror(errno));
return 1;
}
@@ -290,6 +293,8 @@
files_count++;
} else {
free_2d_array(namelist, files_count);
+ closedir( dirp );
+ close(here);
message(MESS_ERROR, "cannot realloc: %s\n", strerror(errno));
return 1;
}
@@ -300,6 +305,7 @@
if (files_count > 0) {
qsort(namelist, files_count, sizeof(char *), compar);
} else {
+ close(here);
return 0;
}
@@ -333,10 +339,25 @@
return 0;
}
-int readAllConfigPaths(const char ** paths, logInfo * defConfig,
- logInfo ** logsPtr, int * numLogsPtr) {
+int readAllConfigPaths(const char ** paths, logInfo ** logsPtr,
+ int * numLogsPtr) {
int i;
const char ** file;
+ logInfo defConfig = { NULL, NULL, 0, NULL, ROT_SIZE,
+ /* threshHold */ 1024 * 1024,
+ /* rotateCount */ 0,
+ /* rotateAge */ 0,
+ /* log start */ -1,
+ /* pre, post */ NULL, NULL,
+ /* first, last */ NULL, NULL,
+ /* logAddress */ NULL,
+ /* extension */ NULL,
+ /* compression command */ NULL,
+ /* uncompression command */ NULL,
+ /* compression extension */ NULL,
+ /* rotate pattern */ NULL,
+ /* flags */ LOG_FLAG_IFEMPTY,
+ /* createMode */ NO_MODE, NO_UID, NO_GID };
tabooExts = malloc(sizeof(*tabooExts) * defTabooCount);
for (i = 0; i < defTabooCount; i++) {
@@ -351,7 +372,7 @@
}
for (file = paths; *file; file++) {
- if (readConfigPath(*file, defConfig, logsPtr, numLogsPtr)) {
+ if (readConfigPath(*file, &defConfig, logsPtr, numLogsPtr)) {
free_2d_array(tabooExts, tabooCount);
return 1;
}
@@ -854,6 +875,7 @@
message(MESS_ERROR, "%s:%d error verifying olddir "
"path %s: %s\n", configFile, lineNum,
newlog->oldDir, strerror(errno));
+ free(newlog->oldDir);
return 1;
}
@@ -861,6 +883,7 @@
message(MESS_ERROR, "%s:%d olddir path %s is not a "
"directory\n", configFile, lineNum,
newlog->oldDir);
+ free(newlog->oldDir);
return 1;
}
#endif
@@ -889,6 +912,7 @@
if (access(newlog->compress_prog, X_OK)) {
message(MESS_ERROR, "%s:%d compression program %s is not an executable file\n", configFile, lineNum,
newlog->compress_prog);
+ free(newlog->compress_prog);
return 1;
}
@@ -903,6 +927,7 @@
if (access(newlog->uncompress_prog, X_OK)) {
message(MESS_ERROR, "%s:%d uncompression program %s is not an executable file\n", configFile, lineNum,
newlog->uncompress_prog);
+ free(newlog->uncompress_prog);
return 1;
}
@@ -921,10 +946,12 @@
&newlog->compress_options_list)) {
message(MESS_ERROR, "%s:%d invalid compression options\n",
configFile, lineNum);
+ free(options);
return 1;
}
message(MESS_DEBUG, "compress_options is now %s\n", options);
+ free(options);
} else if (!strcmp(start, "compressext")) {
*endtag = oldchar, start = endtag;
if (!(newlog->compress_ext = readPath(configFile, lineNum, "compress-ext", &start))) {
@@ -956,6 +983,16 @@
return 1;
}
+ /* If no compression options were not found in config file,
+ * set default values using allocated strings, that can be
+ * free()ed by free_logInfo() */
+ if (!newlog->compress_prog)
+ newlog->compress_prog = strdup(COMPRESS_COMMAND);
+ if (!newlog->uncompress_prog)
+ newlog->uncompress_prog = strdup(UNCOMPRESS_COMMAND);
+ if (!newlog->compress_ext)
+ newlog->compress_ext = strdup(COMPRESS_EXT);
+
(*numLogsPtr)++;
*logsPtr = realloc(*logsPtr, sizeof(**logsPtr) * *numLogsPtr);
newlog = *logsPtr + *numLogsPtr - 1;
@@ -1009,6 +1046,7 @@
"%s:%d duplicate log entry for %s\n",
configFile, lineNum,
globResult.gl_pathv[i]);
+ globfree(&globResult);
return 1;
}
}
diff -ur logrotate-3.7.2-orig/logrotate.c logrotate-3.7.2/logrotate.c
--- logrotate-3.7.2-orig/logrotate.c 2005-10-24 10:20:55.000000000 -0200
+++ logrotate-3.7.2/logrotate.c 2005-10-24 10:21:24.000000000 -0200
@@ -48,10 +48,6 @@
int numStates;
};
-#define NO_MODE ((mode_t) -1)
-#define NO_UID ((uid_t) -1)
-#define NO_GID ((gid_t) -1)
-
int debug = 0;
char * mailCommand = DEFAULT_MAIL_COMMAND;
time_t nowSecs = 0;
@@ -92,6 +88,9 @@
freeLogItem(last);
freeLogItem(logAddress);
freeLogItem(extension);
+ freeLogItem(compress_prog);
+ freeLogItem(uncompress_prog);
+ freeLogItem(compress_ext);
freeLogItem(rotatePattern);
for (j = 0; j < log->numFiles; j++)
@@ -103,6 +102,7 @@
free(log->compress_options_list);
}
free(*logsPtr);
+ *numLogsPtr = 0;
}
static logState * findState(const char * fn, struct stateSet * sip) {
@@ -155,6 +155,37 @@
return rc;
}
+int createOutputFile(char * fileName, int flags, struct stat *sb)
+{
+ int fd;
+
+ fd = open(fileName, flags, sb->st_mode);
+ if (fd < 0) {
+ message(MESS_ERROR, "error creating output file %s: %s\n",
+ fileName, strerror(errno));
+ return -1;
+ }
+ if (fchmod(fd, (S_IRUSR | S_IWUSR) & sb->st_mode)) {
+ message(MESS_ERROR, "error setting mode of %s: %s\n",
+ fileName, strerror(errno));
+ close(fd);
+ return -1;
+ }
+ if (fchown(fd, sb->st_uid, sb->st_gid)) {
+ message(MESS_ERROR, "error setting owner of %s: %s\n",
+ fileName, strerror(errno));
+ close(fd);
+ return -1;
+ }
+ if (fchmod(fd, sb->st_mode)) {
+ message(MESS_ERROR, "error setting mode of %s: %s\n",
+ fileName, strerror(errno));
+ close(fd);
+ return -1;
+ }
+ return fd;
+}
+
static int removeLogFile(char * name) {
message(MESS_DEBUG, "removing old log %s\n", name);
@@ -194,34 +225,11 @@
return 1;
}
- if ((outFile = open(compressedName, O_RDWR | O_CREAT | O_TRUNC, sb->st_mode)) < 0) {
- message(MESS_ERROR, "unable to open %s for compressed output\n",
- compressedName);
+ outFile = createOutputFile(compressedName, O_RDWR | O_CREAT | O_TRUNC, sb);
+ if (outFile < 0) {
close(inFile);
return 1;
}
- if (fchmod(outFile, (S_IRUSR | S_IWUSR) & sb->st_mode)) {
- message(MESS_ERROR, "error setting mode of %s: %s\n",
- compressedName, strerror(errno));
- close(outFile);
- close(inFile);
- return 1;
- }
- if (fchown(outFile, sb->st_uid, sb->st_gid)) {
- message(MESS_ERROR, "error setting owner of %s: %s\n",
- compressedName, strerror(errno));
- close(outFile);
- close(inFile);
- return 1;
- }
- if (fchmod(outFile, sb->st_mode)) {
- message(MESS_ERROR, "error setting mode of %s: %s\n",
- compressedName, strerror(errno));
- close(outFile);
- close(inFile);
- return 1;
- }
-
if (!fork()) {
dup2(inFile, 0);
@@ -375,7 +383,7 @@
}
}
#endif
- fdsave = open(saveLog, O_WRONLY | O_CREAT | O_TRUNC,sb->st_mode);
+ fdsave = createOutputFile(saveLog, O_WRONLY | O_CREAT | O_TRUNC, sb);
#ifdef WITH_SELINUX
if (selinux_enabled) {
setfscreatecon(prev_context);
@@ -386,32 +394,9 @@
}
#endif
if (fdsave < 0) {
- message(MESS_ERROR, "error creating %s: %s\n", saveLog,
- strerror(errno));
close(fdcurr);
return 1;
}
- if (fchmod(fdsave, (S_IRUSR | S_IWUSR) & sb->st_mode)) {
- message(MESS_ERROR, "error setting mode of %s: %s\n",
- saveLog, strerror(errno));
- close(fdcurr);
- close(fdsave);
- return 1;
- }
- if (fchown(fdsave, sb->st_uid, sb->st_gid)) {
- message(MESS_ERROR, "error setting owner of %s: %s\n",
- saveLog, strerror(errno));
- close(fdcurr);
- close(fdsave);
- return 1;
- }
- if (fchmod(fdsave, sb->st_mode)) {
- message(MESS_ERROR, "error setting mode of %s: %s\n",
- saveLog, strerror(errno));
- close(fdcurr);
- close(fdsave);
- return 1;
- }
while ((cnt = read(fdcurr, buf, sizeof(buf))) > 0) {
if (write(fdsave, buf, cnt) != cnt) {
message(MESS_ERROR, "error writing to %s: %s\n",
@@ -433,24 +418,19 @@
if (flags & LOG_FLAG_COPYTRUNCATE) {
message(MESS_DEBUG, "truncating %s\n", currLog);
- if (!debug) {
+ if (!debug)
if (ftruncate(fdcurr, 0)) {
message(MESS_ERROR, "error truncating %s: %s\n", currLog,
strerror(errno));
close(fdcurr);
close(fdsave);
return 1;
- } else {
- close(fdcurr);
- close(fdsave);
}
- }
- } else {
+ } else
message(MESS_DEBUG, "Not truncating %s\n", currLog);
- close(fdcurr);
- close(fdsave);
- }
+ close(fdcurr);
+ close(fdsave);
return 0;
}
@@ -781,7 +761,6 @@
} /* !LOG_FLAG_DATEEXT */
rotNames->finalName = malloc(alloc_size);
- strcpy(rotNames->finalName, oldName);
if(log->flags & LOG_FLAG_DATEEXT) {
char * destFile = alloca(strlen(rotNames->dirName) + strlen(rotNames->baseName) +
@@ -815,9 +794,7 @@
int rotateSingleLog(logInfo * log, int logNum, logState * state, logNames * rotNames) {
int hasErrors = 0;
- uid_t createUid;
- gid_t createGid;
- mode_t createMode;
+ struct stat sb;
int fd;
if (!state->doRotate) return 0;
@@ -846,51 +823,27 @@
if (!hasErrors && log->flags & LOG_FLAG_CREATE &&
!(log->flags & (LOG_FLAG_COPYTRUNCATE|LOG_FLAG_COPY))) {
if (log->createUid == NO_UID)
- createUid = state->sb.st_uid;
+ sb.st_uid = state->sb.st_uid;
else
- createUid = log->createUid;
+ sb.st_uid = log->createUid;
if (log->createGid == NO_GID)
- createGid = state->sb.st_gid;
+ sb.st_gid = state->sb.st_gid;
else
- createGid = log->createGid;
+ sb.st_gid = log->createGid;
if (log->createMode == NO_MODE)
- createMode = state->sb.st_mode & 0777;
+ sb.st_mode = state->sb.st_mode & 0777;
else
- createMode = log->createMode;
+ sb.st_mode = log->createMode;
message(MESS_DEBUG, "creating new log mode = 0%o uid = %d "
- "gid = %d\n", (unsigned int)createMode, (int)createUid, (int)createGid);
+ "gid = %d\n", (unsigned int)sb.st_mode, (int)sb.st_uid, (int)sb.st_gid);
if (!debug) {
- fd = open(log->files[logNum], O_CREAT | O_RDWR, createMode);
- if (fd < 0) {
- message(MESS_ERROR, "error creating %s: %s\n",
- log->files[logNum], strerror(errno));
+ fd = createOutputFile(log->files[logNum], O_CREAT | O_RDWR, &sb);
+ if (fd < 0)
hasErrors = 1;
- } else {
- if (fchmod(fd, (S_IRUSR | S_IWUSR) & createMode)) {
- message(MESS_ERROR, "error setting mode of "
- "%s: %s\n", log->files[logNum],
- strerror(errno));
- hasErrors = 1;
- }
- if (fchown(fd, createUid, createGid)) {
- message(MESS_ERROR, "error setting owner of "
- "%s: %s\n", log->files[logNum],
- strerror(errno));
- hasErrors = 1;
- }
- if (fchmod(fd, createMode)) {
- message(MESS_ERROR, "error setting mode of "
- "%s: %s\n", log->files[logNum],
- strerror(errno));
- hasErrors = 1;
- }
-
- close(fd);
- }
}
}
@@ -992,7 +945,6 @@
}
for (i = 0; i < log->numFiles; i++) {
- logHasErrors[i] = 0;
logHasErrors[i] = findNeedRotating(log, i, sip);
hasErrors |= logHasErrors[i];
@@ -1204,8 +1156,8 @@
line++;
i = strlen(buf);
if (buf[i - 1] != '\n') {
- message(MESS_ERROR, "line too long in state file %s\n",
- stateFilename);
+ message(MESS_ERROR, "line %d too long in state file %s\n",
+ line, stateFilename);
fclose(f);
return 1;
}
@@ -1218,6 +1170,8 @@
(sscanf(argv[1], "%d-%d-%d", &year, &month, &day) != 3)) {
message(MESS_ERROR, "bad line %d in state file %s\n",
line, stateFilename);
+ if (argv)
+ free(argv);
fclose(f);
return 1;
}
@@ -1226,6 +1180,7 @@
if ((year != 1900) && (year < 1996 || year > 2100)) {
message(MESS_ERROR, "bad year %d for file %s in state file %s\n",
year, argv[0], stateFilename);
+ free(argv);
fclose(f);
return 1;
}
@@ -1233,6 +1188,7 @@
if (month < 1 || month > 12) {
message(MESS_ERROR, "bad month %d for file %s in state file %s\n",
month, argv[0], stateFilename);
+ free(argv);
fclose(f);
return 1;
}
@@ -1241,6 +1197,7 @@
if (day < 0 || day > 31) {
message(MESS_ERROR, "bad day %d for file %s in state file %s\n",
day, argv[0], stateFilename);
+ free(argv);
fclose(f);
return 1;
}
@@ -1267,20 +1224,6 @@
}
int main(int argc, const char ** argv) {
- logInfo defConfig = { NULL, NULL, 0, NULL, ROT_SIZE,
- /* threshHold */ 1024 * 1024,
- /* rotateCount */ 0,
- /* rotateAge */ 0,
- /* log start */ -1,
- /* pre, post */ NULL, NULL,
- /* first, last */ NULL, NULL,
- /* logAddress */ NULL,
- /* extension */ NULL,
- /* compression */ COMPRESS_COMMAND,
- UNCOMPRESS_COMMAND, COMPRESS_EXT,
- /* rotate pattern */ NULL,
- /* flags */ LOG_FLAG_IFEMPTY,
- /* createMode */ NO_MODE, NO_UID, NO_GID };
int numLogs = 0;
int force = 0;
logInfo * logs = NULL;
@@ -1346,8 +1289,9 @@
selinux_enforce=security_getenforce();
#endif
- if (readAllConfigPaths(files, &defConfig, &logs, &numLogs)) {
+ if (readAllConfigPaths(files, &logs, &numLogs)) {
poptFreeContext(optCon);
+ free_logInfo(&logs, &numLogs);
exit(1);
}
@@ -1364,9 +1308,8 @@
rc |= rotateLogSet(logs + i, &si, force);
}
- if (!debug && writeState(stateFile, si)) {
- exit(1);
- }
+ if (!debug)
+ rc |= writeState(stateFile, si);
for (i = 0; i < si.numStates; i++) {
free(si.states[i].fn);
diff -ur logrotate-3.7.2-orig/logrotate.h logrotate-3.7.2/logrotate.h
--- logrotate-3.7.2-orig/logrotate.h 2005-10-24 10:20:55.000000000 -0200
+++ logrotate-3.7.2/logrotate.h 2005-10-24 10:21:24.000000000 -0200
@@ -17,6 +17,10 @@
#define LOG_FLAG_COPY (1 << 8)
#define LOG_FLAG_DATEEXT (1 << 9)
+#define NO_MODE ((mode_t) -1)
+#define NO_UID ((uid_t) -1)
+#define NO_GID ((gid_t) -1)
+
#define NO_FORCE_ROTATE 0
#define FORCE_ROTATE 1
@@ -53,8 +57,8 @@
int compress_options_count;
} logInfo;
-int readAllConfigPaths(const char ** paths, logInfo * defConfig,
- logInfo ** logsPtr, int * numLogsPtr);
+int readAllConfigPaths(const char ** paths, logInfo ** logsPtr,
+ int * numLogsPtr);
extern int debug;
Index: logrotate.spec
===================================================================
RCS file: /cvs/dist/rpms/logrotate/devel/logrotate.spec,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- logrotate.spec 21 Oct 2005 08:18:24 -0000 1.35
+++ logrotate.spec 25 Oct 2005 12:07:16 -0000 1.36
@@ -5,7 +5,7 @@
Summary: Rotates, compresses, removes and mails system log files.
Name: logrotate
Version: 3.7.2
-Release: 9
+Release: 10
License: GPL
Group: System Environment/Base
Source: logrotate-%{PACKAGE_VERSION}.tar.gz
@@ -18,6 +18,7 @@
Patch6: logrotate-3.7.2-fix_free_segfaults.patch
Patch7: logrotate-3.7.2-fixLeaks_tabooExts.patch
Patch8: logrotate-3.7.2-fix_free_segfaults2.patch
+Patch9: logrotate-3.7.2-cleanUp2.patch
%description
The logrotate utility is designed to simplify the administration of
@@ -40,7 +41,7 @@
%patch6 -p1 -b .fix_free_segfaults
%patch7 -p1 -b .fixLeaks_tabooExts
%patch8 -p1 -b .fix_free_segfaults2
-
+%patch9 -p1 -b .cleanUp2
%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS -g" \
@@ -73,6 +74,9 @@
%attr(0644, root, root) %verify(not size md5 mtime) %config(noreplace) /var/lib/logrotate.status
%changelog
+* Tue Oct 25 2005 Peter Vrabec <pvrabec at redhat.com> 3.7.2-10
+- some more clean up (#171587)
+
* Thu Oct 20 2005 Peter Vrabec <pvrabec at redhat.com> 3.7.2-9
- fix_free_segfaults (#171093)
More information about the fedora-cvs-commits
mailing list