| [1] | 1 | # scripts.mit.edu httpd suexec patch | 
|---|
|  | 2 | # Copyright (C) 2006  Jeff Arnold <jbarnold@mit.edu> | 
|---|
|  | 3 | # | 
|---|
|  | 4 | # This program is free software; you can redistribute it and/or | 
|---|
|  | 5 | # modify it under the terms of the GNU General Public License | 
|---|
|  | 6 | # as published by the Free Software Foundation; either version 2 | 
|---|
|  | 7 | # of the License, or (at your option) any later version. | 
|---|
|  | 8 | # | 
|---|
|  | 9 | # This program is distributed in the hope that it will be useful, | 
|---|
|  | 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
|  | 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|---|
|  | 12 | # GNU General Public License for more details. | 
|---|
|  | 13 | # | 
|---|
|  | 14 | # You should have received a copy of the GNU General Public License | 
|---|
|  | 15 | # along with this program; if not, write to the Free Software | 
|---|
|  | 16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA | 
|---|
|  | 17 | # | 
|---|
|  | 18 | # See /COPYRIGHT in this repository for more information. | 
|---|
|  | 19 | # | 
|---|
|  | 20 | --- httpd-2.2.2/support/suexec.c.old    2006-04-21 21:53:06.000000000 -0400 | 
|---|
|  | 21 | +++ httpd-2.2.2/support/suexec.c        2006-08-25 10:04:22.000000000 -0400 | 
|---|
|  | 22 | @@ -95,6 +95,7 @@ | 
|---|
|  | 23 | { | 
|---|
|  | 24 | /* variable name starts with */ | 
|---|
|  | 25 | "HTTP_", | 
|---|
|  | 26 | +    "HTTPS_", | 
|---|
|  | 27 | "SSL_", | 
|---|
|  | 28 |  | 
|---|
|  | 29 | /* variable name is */ | 
|---|
|  | 30 | @@ -140,6 +141,7 @@ | 
|---|
|  | 31 | "UNIQUE_ID=", | 
|---|
|  | 32 | "USER_NAME=", | 
|---|
|  | 33 | "TZ=", | 
|---|
|  | 34 | +    "PHPRC=", | 
|---|
|  | 35 | NULL | 
|---|
|  | 36 | }; | 
|---|
|  | 37 |  | 
|---|
|  | 38 | @@ -513,6 +515,12 @@ | 
|---|
|  | 39 | exit(113); | 
|---|
|  | 40 | } | 
|---|
|  | 41 | } | 
|---|
|  | 42 | +    char *expected = malloc(strlen(target_homedir)+strlen(AP_USERDIR_SUFFIX)+1); | 
|---|
|  | 43 | +    sprintf(expected, "%s/%s", target_homedir, AP_USERDIR_SUFFIX); | 
|---|
|  | 44 | +    if ((strncmp(cwd, expected, strlen(expected))) != 0) { | 
|---|
|  | 45 | +        log_err("error: file's directory not a subdirectory of user's home directory (%s, %s)\n", cwd, expected); | 
|---|
|  | 46 | +        exit(114); | 
|---|
|  | 47 | +    } | 
|---|
|  | 48 |  | 
|---|
|  | 49 | if ((strncmp(cwd, dwd, strlen(dwd))) != 0) { | 
|---|
|  | 50 | log_err("command not in docroot (%s/%s)\n", cwd, cmd); | 
|---|
|  | 51 | @@ -530,15 +538,17 @@ | 
|---|
|  | 52 | /* | 
|---|
|  | 53 | * Error out if cwd is writable by others. | 
|---|
|  | 54 | */ | 
|---|
|  | 55 | +#if 0 | 
|---|
|  | 56 | if ((dir_info.st_mode & S_IWOTH) || (dir_info.st_mode & S_IWGRP)) { | 
|---|
|  | 57 | log_err("directory is writable by others: (%s)\n", cwd); | 
|---|
|  | 58 | exit(116); | 
|---|
|  | 59 | } | 
|---|
|  | 60 | +#endif | 
|---|
|  | 61 |  | 
|---|
|  | 62 | /* | 
|---|
|  | 63 | * Error out if we cannot stat the program. | 
|---|
|  | 64 | */ | 
|---|
|  | 65 | -    if (((lstat(cmd, &prg_info)) != 0) || (S_ISLNK(prg_info.st_mode))) { | 
|---|
|  | 66 | +    if (((lstat(cmd, &prg_info)) != 0) /*|| (S_ISLNK(prg_info.st_mode))*/) { | 
|---|
|  | 67 | log_err("cannot stat program: (%s)\n", cmd); | 
|---|
|  | 68 | exit(117); | 
|---|
|  | 69 | } | 
|---|
|  | 70 | @@ -546,10 +556,12 @@ | 
|---|
|  | 71 | /* | 
|---|
|  | 72 | * Error out if the program is writable by others. | 
|---|
|  | 73 | */ | 
|---|
|  | 74 | +#if 0 | 
|---|
|  | 75 | if ((prg_info.st_mode & S_IWOTH) || (prg_info.st_mode & S_IWGRP)) { | 
|---|
|  | 76 | log_err("file is writable by others: (%s/%s)\n", cwd, cmd); | 
|---|
|  | 77 | exit(118); | 
|---|
|  | 78 | } | 
|---|
|  | 79 | +#endif | 
|---|
|  | 80 |  | 
|---|
|  | 81 | /* | 
|---|
|  | 82 | * Error out if the file is setuid or setgid. | 
|---|
|  | 83 | @@ -563,6 +575,7 @@ | 
|---|
|  | 84 | * Error out if the target name/group is different from | 
|---|
|  | 85 | * the name/group of the cwd or the program. | 
|---|
|  | 86 | */ | 
|---|
|  | 87 | +#if 0 | 
|---|
|  | 88 | if ((uid != dir_info.st_uid) || | 
|---|
|  | 89 | (gid != dir_info.st_gid) || | 
|---|
|  | 90 | (uid != prg_info.st_uid) || | 
|---|
|  | 91 | @@ -574,6 +587,7 @@ | 
|---|
|  | 92 | prg_info.st_uid, prg_info.st_gid); | 
|---|
|  | 93 | exit(120); | 
|---|
|  | 94 | } | 
|---|
|  | 95 | +#endif | 
|---|
|  | 96 | /* | 
|---|
|  | 97 | * Error out if the program is not executable for the user. | 
|---|
|  | 98 | * Otherwise, she won't find any error in the logs except for | 
|---|