Author: glen                         Date: Mon Apr 14 10:37:19 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- update selinux from fc8

---- Files affected:
SOURCES:
   logrotate-selinux.patch (1.2 -> 1.3)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/logrotate-selinux.patch
diff -u /dev/null SOURCES/logrotate-selinux.patch:1.3
--- /dev/null   Mon Apr 14 12:37:19 2008
+++ SOURCES/logrotate-selinux.patch     Mon Apr 14 12:37:14 2008
@@ -0,0 +1,128 @@
+diff -up logrotate-3.7.6/logrotate.c.selinux logrotate-3.7.6/logrotate.c
+--- logrotate-3.7.6/logrotate.c.selinux        2007-08-07 09:14:35.000000000 
+0200
++++ logrotate-3.7.6/logrotate.c        2008-01-21 09:32:56.000000000 +0100
+@@ -409,15 +409,17 @@ static int copyTruncate(char *currLog, c
+       }
+ #ifdef WITH_SELINUX
+       if (selinux_enabled) {
+-          security_context_t oldContext;
++          security_context_t oldContext = NULL;
+           if (fgetfilecon_raw(fdcurr, &oldContext) >= 0) {
+               if (getfscreatecon_raw(&prev_context) < 0) {
+                   message(MESS_ERROR,
+                           "getting default context: %s\n",
+                           strerror(errno));
+                   if (selinux_enforce) {
+-                      freecon(oldContext);
+-                      return 1;
++                              if (oldContext != NULL) {
++                                      freecon(oldContext);
++                              }
++                              return 1;
+                   }
+               }
+               if (setfscreatecon_raw(oldContext) < 0) {
+@@ -425,11 +427,15 @@ static int copyTruncate(char *currLog, c
+                           "setting file context %s to %s: %s\n",
+                           saveLog, oldContext, strerror(errno));
+                   if (selinux_enforce) {
+-                      freecon(oldContext);
+-                      return 1;
++                              if (oldContext != NULL) {
++                                      freecon(oldContext);
++                              }
++                              return 1;
+                   }
+               }
+-              freecon(oldContext);
++              if (oldContext != NULL) {
++                      freecon(oldContext);
++              }
+           } else {
+                   if (errno != ENOTSUP) {
+                           message(MESS_ERROR, "getting file context %s: %s\n",
+@@ -899,6 +905,9 @@ int rotateSingleLog(logInfo * log, int l
+     int hasErrors = 0;
+     struct stat sb;
+     int fd;
++#ifdef WITH_SELINUX
++      security_context_t savedContext = NULL;
++#endif
+ 
+     if (!state->doRotate)
+       return 0;
+@@ -906,7 +915,57 @@ int rotateSingleLog(logInfo * log, int l
+     if (!hasErrors) {
+ 
+       if (!(log->flags & (LOG_FLAG_COPYTRUNCATE | LOG_FLAG_COPY))) {
+-          message(MESS_DEBUG, "renaming %s to %s\n", log->files[logNum],
++#ifdef WITH_SELINUX
++              if (selinux_enabled) {
++                      security_context_t oldContext = NULL;
++                      int fdcurr = -1;
++
++                      if ((fdcurr = open(log->files[logNum], O_RDWR)) < 0) {
++                              message(MESS_ERROR, "error opening %s: %s\n",
++                                              log->files[logNum],
++                                      strerror(errno));
++                              return 1;
++                      }
++                      if (fgetfilecon_raw(fdcurr, &oldContext) >= 0) {
++                              if (getfscreatecon_raw(&savedContext) < 0) {
++                                      message(MESS_ERROR,
++                                              "getting default context: %s\n",
++                                              strerror(errno));
++                                      if (selinux_enforce) {
++                                              if (oldContext != NULL) {
++                                                      freecon(oldContext);
++                                              }
++                                              return 1;
++                                      }
++                              }
++                              if (setfscreatecon_raw(oldContext) < 0) {
++                                      message(MESS_ERROR,
++                                              "setting file context %s to %s: 
%s\n",
++                                              log->files[logNum], oldContext, 
strerror(errno));
++                                      if (selinux_enforce) {
++                                              if (oldContext != NULL) {
++                                                      freecon(oldContext);
++                                              }
++                                              return 1;
++                                      }
++                              }
++                              message(MESS_DEBUG, "fscreate context set to 
%s\n",
++                                              oldContext);
++                              if (oldContext != NULL) {
++                                      freecon(oldContext);
++                              }
++                      } else {
++                              if (errno != ENOTSUP) {
++                                      message(MESS_ERROR, "getting file 
context %s: %s\n",
++                                              log->files[logNum], 
strerror(errno));
++                                      if (selinux_enforce) {
++                                              return 1;
++                                      }
++                              }
++                      }
++              }
++#endif
++              message(MESS_DEBUG, "renaming %s to %s\n", log->files[logNum],
+                   rotNames->finalName);
+ 
+           if (!debug && !hasErrors &&
+@@ -961,6 +1020,15 @@ int rotateSingleLog(logInfo * log, int l
+                     close(fd);
+           }
+       }
++#ifdef WITH_SELINUX
++      if (selinux_enabled) {
++          setfscreatecon_raw(savedContext);
++          if (savedContext != NULL) {
++                      freecon(savedContext);
++                      savedContext = NULL;
++          }
++      }
++#endif
+ 
+       if (!hasErrors
+           && log->flags & (LOG_FLAG_COPYTRUNCATE | LOG_FLAG_COPY))
================================================================
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to