Add selinux_getenforce() calls to work when not in enforcing mode
- use security_getenforce() instead of selinux_getenforcemode
From RedHat patches.

Index: logrotate-3.7.1/logrotate.c
===================================================================
--- logrotate-3.7.1.orig/logrotate.c	2006-04-08 20:42:37.114533654 +0100
+++ logrotate-3.7.1/logrotate.c	2006-04-08 20:44:17.311634566 +0100
@@ -17,6 +17,7 @@
 #include <selinux/selinux.h>
 static security_context_t prev_context=NULL;
 int selinux_enabled=0;
+int selinux_enforce=0;
 #endif
 
 #include "basenames.h"
@@ -293,38 +294,43 @@
 	    return 1;
 	}
 #ifdef WITH_SELINUX
-	if ((selinux_enabled=(is_selinux_enabled()>0)))
-	  {
-	    security_context_t oldContext;
-	    if (fgetfilecon(fdcurr, &oldContext) >=0) {
-	      if (getfscreatecon(&prev_context) < 0) {
-		message(MESS_ERROR, "error getting default context: %s\n", 
-			strerror(errno));
-		freecon(oldContext);
-		return 1;
-	      }
-	      if (setfscreatecon(oldContext) < 0) {
-		message(MESS_ERROR, "error setting file context %s to %s: %s\n", 
-			saveLog, oldContext,strerror(errno));
-		freecon(oldContext);
-		return 1;
-	      }
-	      freecon(oldContext);
-	    } else {
-	      message(MESS_ERROR, "error getting file context %s: %s\n", currLog,
-		      strerror(errno));
-	      return 1;
-	    }
-	  }
+	if (selinux_enabled) {
+		security_context_t oldContext;
+		if (fgetfilecon(fdcurr, &oldContext) >=0) {
+			if (getfscreatecon(&prev_context) < 0) {
+				message(MESS_ERROR, "error getting default context: %s\n", 
+					strerror(errno));
+				if (selinux_enforce) {
+					freecon(oldContext);
+					return 1;
+				}
+			}
+			if (setfscreatecon(oldContext) < 0) {
+				message(MESS_ERROR, "error setting file context %s to %s: %s\n", 
+					saveLog, oldContext,strerror(errno));
+				if (selinux_enforce) {
+					freecon(oldContext);
+					return 1;
+				}
+			}
+			freecon(oldContext);
+		} else {
+			message(MESS_ERROR, "error getting file context %s: %s\n", currLog,
+				strerror(errno));
+			if (selinux_enforce) {
+				return 1;
+			}
+		}
+	}
 #endif
 	fdsave = open(saveLog, O_WRONLY | O_CREAT | O_TRUNC,sb->st_mode);
 #ifdef WITH_SELINUX
 	if (selinux_enabled) {
-	  setfscreatecon(prev_context);
-	  if (prev_context!= NULL) {
-	    freecon(prev_context);
-	    prev_context=NULL;
-	  }
+		setfscreatecon(prev_context);
+		if (prev_context!= NULL) {
+			freecon(prev_context);
+			prev_context=NULL;
+		}
 	}
 #endif
 	if (fdsave < 0) {
@@ -672,28 +678,34 @@
 	    (log->flags & LOG_FLAG_DELAYCOMPRESS) ? "" : compext);
     
 #ifdef WITH_SELINUX
-    if ((selinux_enabled=(is_selinux_enabled()>0))) {
-      security_context_t oldContext=NULL;
-      if (getfilecon(log->files[logNum], &oldContext)>0) {
-	if (getfscreatecon(&prev_context) < 0) {
-	  message(MESS_ERROR, "error getting default context: %s\n", 
-		  strerror(errno));
-	  freecon(oldContext);
-	  return 1;
-	}
-	if (setfscreatecon(oldContext) < 0) {
-	  message(MESS_ERROR, "error setting file context %s to %s: %s\n", 
-		  log->files[logNum], oldContext,strerror(errno));
-	  freecon(oldContext);
-	  return 1;
-	}
-	freecon(oldContext);
-      } else {
-	message(MESS_ERROR, "error getting file context %s: %s\n", 
-		log->files[logNum], 
-		strerror(errno));
-	return 1;
-      }
+    if (selinux_enabled) {
+	    security_context_t oldContext=NULL;
+	    if (getfilecon(log->files[logNum], &oldContext)>0) {
+		    if (getfscreatecon(&prev_context) < 0) {
+			    message(MESS_ERROR, "error getting default context: %s\n", 
+				    strerror(errno));
+			    if (selinux_enforce) {
+				    freecon(oldContext);
+				    return 1;
+			    }
+		    }
+		    if (setfscreatecon(oldContext) < 0) {
+			    message(MESS_ERROR, "error setting file context %s to %s: %s\n", 
+				    log->files[logNum], oldContext,strerror(errno));
+			    if (selinux_enforce) {
+				    freecon(oldContext);
+				    return 1;
+			    }
+		    }
+		    freecon(oldContext);
+	    } else {
+		    message(MESS_ERROR, "error getting file context %s: %s\n", 
+			    log->files[logNum], 
+			    strerror(errno));
+		    if (selinux_enforce) {
+			    return 1;
+		    }
+	    }
     }
 #endif
     for (i = rotateCount + logStart - 1; (i >= 0) && !hasErrors; i--) {
@@ -883,11 +895,11 @@
     
 #ifdef WITH_SELINUX
 	if (selinux_enabled) {
-	  setfscreatecon(prev_context);
-	  if (prev_context!= NULL) {
-	    freecon(prev_context);
-	    prev_context=NULL;
-	  }
+		setfscreatecon(prev_context);
+		if (prev_context!= NULL) {
+			freecon(prev_context);
+			prev_context=NULL;
+		}
 	}
 #endif
     free(dirName);
@@ -1249,6 +1261,10 @@
 	exit(1);
     }
 
+#ifdef WITH_SELINUX
+    selinux_enabled=(is_selinux_enabled()>0);
+    selinux_enforce=security_getenforce();
+#endif
     for (file = files; *file; file++) {
 	if (readConfigPath(*file, &defConfig, &logs, &numLogs)) {
 	    exit(1);


syntax highlighted by Code2HTML, v. 0.9.1