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