]> TLD Linux GIT Repositories - packages/apache.git/blobdiff - apache-suexec_fcgi.patch
- Up to 2.4.52
[packages/apache.git] / apache-suexec_fcgi.patch
index 06fcfef46a80e7770f31b15df9c30da801591b08..ae5578c7f1e0b4997ace3b1ea07c5c3ab7dcc420 100644 (file)
@@ -1,6 +1,7 @@
---- httpd-2.4.4/support/suexec.c.orig  2012-12-03 17:33:42.000000000 +0100
-+++ httpd-2.4.4/support/suexec.c       2013-03-07 23:13:29.312581994 +0100
-@@ -240,6 +240,21 @@
+diff -urNp httpd-2.4.4.orig/support/suexec.c httpd-2.4.4/support/suexec.c
+--- httpd-2.4.4.orig/support/suexec.c  2012-12-03 16:33:42.000000000 +0000
++++ httpd-2.4.4/support/suexec.c       2013-07-11 11:49:54.250178570 +0000
+@@ -240,6 +240,21 @@ static void clean_env(void)
      environ = cleanenv;
  }
  
@@ -22,7 +23,7 @@
  int main(int argc, char *argv[])
  {
      int userdir = 0;        /* ~userdir flag             */
-@@ -255,6 +270,7 @@
+@@ -255,6 +270,7 @@ int main(int argc, char *argv[])
      char dwd[AP_MAXPATH];   /* docroot working directory */
      struct passwd *pw;      /* password entry holder     */
      struct group *gr;       /* group entry holder        */
@@ -30,7 +31,7 @@
      struct stat dir_info;   /* directory info holder     */
      struct stat prg_info;   /* program info holder       */
  
-@@ -375,8 +391,23 @@
+@@ -375,8 +391,23 @@ int main(int argc, char *argv[])
      }
      else {
          if ((pw = getpwuid(atoi(target_uname))) == NULL) {
          }
      }
  
-@@ -558,6 +589,7 @@
-      * Error out if the target name/group is different from
-      * the name/group of the cwd or the program.
-      */
+@@ -555,20 +586,24 @@ int main(int argc, char *argv[])
+     }
+     /*
+-     * Error out if the target name/group is different from
+-     * the name/group of the cwd or the program.
+-     */
+-    if ((uid != dir_info.st_uid) ||
+-        (gid != dir_info.st_gid) ||
+-        (uid != prg_info.st_uid) ||
+-        (gid != prg_info.st_gid)) {
+-        log_err("target uid/gid (%lu/%lu) mismatch "
+-                "with directory (%lu/%lu) or program (%lu/%lu)\n",
+-                (unsigned long)uid, (unsigned long)gid,
+-                (unsigned long)dir_info.st_uid, (unsigned long)dir_info.st_gid,
+-                (unsigned long)prg_info.st_uid, (unsigned long)prg_info.st_gid);
+-        exit(120);
++     * If not called as suexec.fcgi error out if the target
++     * name/group is different from the name/group of the cwd
++     * or the program.
++     */
 +    if(strcmp(base_pathname(argv[0]),"suexec.fcgi")) {
-     if ((uid != dir_info.st_uid) ||
-         (gid != dir_info.st_gid) ||
-         (uid != prg_info.st_uid) ||
-@@ -569,6 +601,7 @@
-                 (unsigned long)prg_info.st_uid, (unsigned long)prg_info.st_gid);
-         exit(120);
++        if ((uid != dir_info.st_uid) ||
++            (gid != dir_info.st_gid) ||
++            (uid != prg_info.st_uid) ||
++            (gid != prg_info.st_gid)) {
++            log_err("target uid/gid (%lu/%lu) mismatch "
++                    "with directory (%lu/%lu) or program (%lu/%lu)\n",
++                    (unsigned long)uid, (unsigned long)gid,
++                    (unsigned long)dir_info.st_uid, (unsigned long)dir_info.st_gid,
++                    (unsigned long)prg_info.st_uid, (unsigned long)prg_info.st_gid);
++            exit(120);
++        }
      }
-+    }
++
      /*
       * Error out if the program is not executable for the user.
       * Otherwise, she won't find any error in the logs except for