diff options
Diffstat (limited to 'meta-webserver/recipes-httpd/apache2/apache2-2.4.2/httpd-2.4.2-r1337344+.patch')
| -rw-r--r-- | meta-webserver/recipes-httpd/apache2/apache2-2.4.2/httpd-2.4.2-r1337344+.patch | 350 |
1 files changed, 350 insertions, 0 deletions
diff --git a/meta-webserver/recipes-httpd/apache2/apache2-2.4.2/httpd-2.4.2-r1337344+.patch b/meta-webserver/recipes-httpd/apache2/apache2-2.4.2/httpd-2.4.2-r1337344+.patch new file mode 100644 index 0000000000..646976a0fd --- /dev/null +++ b/meta-webserver/recipes-httpd/apache2/apache2-2.4.2/httpd-2.4.2-r1337344+.patch | |||
| @@ -0,0 +1,350 @@ | |||
| 1 | |||
| 2 | * support/suexec.c: Add gcc format-string attributes to logging | ||
| 3 | functions. | ||
| 4 | (main): Always print uid/gid as unsigned long, and cast to avoid | ||
| 5 | warnings (which somewhat defeats the point of the format string | ||
| 6 | attrs, but is necessary since the size of gid/uid varies). | ||
| 7 | http://svn.apache.org/viewvc?view=revision&revision=1337344 | ||
| 8 | |||
| 9 | |||
| 10 | |||
| 11 | suexec: Add support for logging to syslog as an alternative to a | ||
| 12 | logfile. | ||
| 13 | |||
| 14 | * support/suexec.c (err_output) [AP_LOG_SYSLOG]: Log to syslog. | ||
| 15 | (main): Close syslog fd if open, before execv. Add -V output | ||
| 16 | for AP_LOG_SYSLOG. | ||
| 17 | |||
| 18 | * configure.in: Add --with-suexec-syslog argument; allow | ||
| 19 | --without-suexec-logfile to omit definition of AP_LOG_EXEC. | ||
| 20 | |||
| 21 | http://svn.apache.org/viewvc?view=revision&revision=1341905 | ||
| 22 | |||
| 23 | |||
| 24 | |||
| 25 | suexec: Support use of setgid/setuid capability bits on Linux, a | ||
| 26 | weaker set of privileges than the full setuid/setgid root binary. | ||
| 27 | |||
| 28 | * configure.in: Add --enable-suexec-capabilites flag. | ||
| 29 | |||
| 30 | * Makefile.in: If configured, use setcap instead of chmod 7555 on | ||
| 31 | installed suexec binary. | ||
| 32 | |||
| 33 | * modules/arch/unix/mod_unixd.c (unixd_pre_config): Drop test for | ||
| 34 | setuid bit if capability bits are used. | ||
| 35 | |||
| 36 | * docs/manual/: Add docs. | ||
| 37 | |||
| 38 | http://svn.apache.org/viewvc?view=revision&revision=1342065 | ||
| 39 | |||
| 40 | |||
| 41 | |||
| 42 | * docs/manual/suexec.html.en: Update for syslog logging. | ||
| 43 | |||
| 44 | http://svn.apache.org/viewvc?view=revision&revision=1341930 | ||
| 45 | |||
| 46 | |||
| 47 | |||
| 48 | Upstream-Status: Backport | ||
| 49 | |||
| 50 | --- httpd-2.4.2/configure.in.r1337344+ | ||
| 51 | +++ httpd-2.4.2/configure.in | ||
| 52 | @@ -700,7 +700,24 @@ APACHE_HELP_STRING(--with-suexec-gidmin, | ||
| 53 | |||
| 54 | AC_ARG_WITH(suexec-logfile, | ||
| 55 | APACHE_HELP_STRING(--with-suexec-logfile,Set the logfile),[ | ||
| 56 | - AC_DEFINE_UNQUOTED(AP_LOG_EXEC, "$withval", [SuExec log file] ) ] ) | ||
| 57 | + if test "x$withval" = "xyes"; then | ||
| 58 | + AC_DEFINE_UNQUOTED(AP_LOG_EXEC, "$withval", [SuExec log file]) | ||
| 59 | + fi | ||
| 60 | +]) | ||
| 61 | + | ||
| 62 | +AC_ARG_WITH(suexec-syslog, | ||
| 63 | +APACHE_HELP_STRING(--with-suexec-syslog,Set the logfile),[ | ||
| 64 | + if test $withval = "yes"; then | ||
| 65 | + if test "x${with_suexec_logfile}" != "xno"; then | ||
| 66 | + AC_MSG_NOTICE([hint: use "--without-suexec-logfile --with-suexec-syslog"]) | ||
| 67 | + AC_MSG_ERROR([suexec does not support both logging to file and syslog]) | ||
| 68 | + fi | ||
| 69 | + AC_CHECK_FUNCS([vsyslog], [], [ | ||
| 70 | + AC_MSG_ERROR([cannot support syslog from suexec without vsyslog()])]) | ||
| 71 | + AC_DEFINE(AP_LOG_SYSLOG, 1, [SuExec log to syslog]) | ||
| 72 | + fi | ||
| 73 | +]) | ||
| 74 | + | ||
| 75 | |||
| 76 | AC_ARG_WITH(suexec-safepath, | ||
| 77 | APACHE_HELP_STRING(--with-suexec-safepath,Set the safepath),[ | ||
| 78 | @@ -710,6 +727,15 @@ AC_ARG_WITH(suexec-umask, | ||
| 79 | APACHE_HELP_STRING(--with-suexec-umask,umask for suexec'd process),[ | ||
| 80 | AC_DEFINE_UNQUOTED(AP_SUEXEC_UMASK, 0$withval, [umask for suexec'd process] ) ] ) | ||
| 81 | |||
| 82 | +INSTALL_SUEXEC=setuid | ||
| 83 | +AC_ARG_ENABLE([suexec-capabilities], | ||
| 84 | +APACHE_HELP_STRING(--enable-suexec-capabilities,Use Linux capability bits not setuid root suexec), [ | ||
| 85 | +INSTALL_SUEXEC=caps | ||
| 86 | +AC_DEFINE(AP_SUEXEC_CAPABILITIES, 1, | ||
| 87 | + [Enable if suexec is installed with Linux capabilities, not setuid]) | ||
| 88 | +]) | ||
| 89 | +APACHE_SUBST(INSTALL_SUEXEC) | ||
| 90 | + | ||
| 91 | dnl APR should go after the other libs, so the right symbols can be picked up | ||
| 92 | if test x${apu_found} != xobsolete; then | ||
| 93 | AP_LIBS="$AP_LIBS `$apu_config --avoid-ldap --link-libtool`" | ||
| 94 | --- httpd-2.4.2/docs/manual/suexec.html.en.r1337344+ | ||
| 95 | +++ httpd-2.4.2/docs/manual/suexec.html.en | ||
| 96 | @@ -369,6 +369,21 @@ | ||
| 97 | together with the <code>--enable-suexec</code> option to let | ||
| 98 | APACI accept your request for using the suEXEC feature.</dd> | ||
| 99 | |||
| 100 | + <dt><code>--enable-suexec-capabilities</code></dt> | ||
| 101 | + | ||
| 102 | + <dd><strong>Linux specific:</strong> Normally, | ||
| 103 | + the <code>suexec</code> binary is installed "setuid/setgid | ||
| 104 | + root", which allows it to run with the full privileges of the | ||
| 105 | + root user. If this option is used, the <code>suexec</code> | ||
| 106 | + binary will instead be installed with only the setuid/setgid | ||
| 107 | + "capability" bits set, which is the subset of full root | ||
| 108 | + priviliges required for suexec operation. Note that | ||
| 109 | + the <code>suexec</code> binary may not be able to write to a log | ||
| 110 | + file in this mode; it is recommended that the | ||
| 111 | + <code>--with-suexec-syslog --without-suexec-logfile</code> | ||
| 112 | + options are used in conjunction with this mode, so that syslog | ||
| 113 | + logging is used instead.</dd> | ||
| 114 | + | ||
| 115 | <dt><code>--with-suexec-bin=<em>PATH</em></code></dt> | ||
| 116 | |||
| 117 | <dd>The path to the <code>suexec</code> binary must be hard-coded | ||
| 118 | @@ -430,6 +445,12 @@ | ||
| 119 | "<code>suexec_log</code>" and located in your standard logfile | ||
| 120 | directory (<code>--logfiledir</code>).</dd> | ||
| 121 | |||
| 122 | + <dt><code>--with-suexec-syslog</code></dt> | ||
| 123 | + | ||
| 124 | + <dd>If defined, suexec will log notices and errors to syslog | ||
| 125 | + instead of a logfile. This option must be combined | ||
| 126 | + with <code>--without-suexec-logfile</code>.</dd> | ||
| 127 | + | ||
| 128 | <dt><code>--with-suexec-safepath=<em>PATH</em></code></dt> | ||
| 129 | |||
| 130 | <dd>Define a safe PATH environment to pass to CGI | ||
| 131 | @@ -546,9 +567,12 @@ | ||
| 132 | |||
| 133 | <p>The suEXEC wrapper will write log information | ||
| 134 | to the file defined with the <code>--with-suexec-logfile</code> | ||
| 135 | - option as indicated above. If you feel you have configured and | ||
| 136 | - installed the wrapper properly, have a look at this log and the | ||
| 137 | - error_log for the server to see where you may have gone astray.</p> | ||
| 138 | + option as indicated above, or to syslog if <code>--with-suexec-syslog</code> | ||
| 139 | + is used. If you feel you have configured and | ||
| 140 | + installed the wrapper properly, have a look at the log and the | ||
| 141 | + error_log for the server to see where you may have gone astray. | ||
| 142 | + The output of <code>"suexec -V"</code> will show the options | ||
| 143 | + used to compile suexec, if using a binary distribution.</p> | ||
| 144 | |||
| 145 | </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> | ||
| 146 | <div class="section"> | ||
| 147 | @@ -615,4 +639,4 @@ | ||
| 148 | </div><div id="footer"> | ||
| 149 | <p class="apache">Copyright 2012 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> | ||
| 150 | <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div> | ||
| 151 | -</body></html> | ||
| 152 | \ No newline at end of file | ||
| 153 | +</body></html> | ||
| 154 | --- httpd-2.4.2/Makefile.in.r1337344+ | ||
| 155 | +++ httpd-2.4.2/Makefile.in | ||
| 156 | @@ -236,11 +236,22 @@ install-man: | ||
| 157 | cd $(DESTDIR)$(manualdir) && find . -name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \ | ||
| 158 | fi | ||
| 159 | |||
| 160 | -install-suexec: | ||
| 161 | +install-suexec: install-suexec-binary install-suexec-$(INSTALL_SUEXEC) | ||
| 162 | + | ||
| 163 | +install-suexec-binary: | ||
| 164 | @if test -f $(builddir)/support/suexec; then \ | ||
| 165 | test -d $(DESTDIR)$(sbindir) || $(MKINSTALLDIRS) $(DESTDIR)$(sbindir); \ | ||
| 166 | $(INSTALL_PROGRAM) $(top_builddir)/support/suexec $(DESTDIR)$(sbindir); \ | ||
| 167 | - chmod 4755 $(DESTDIR)$(sbindir)/suexec; \ | ||
| 168 | + fi | ||
| 169 | + | ||
| 170 | +install-suexec-setuid: | ||
| 171 | + @if test -f $(builddir)/support/suexec; then \ | ||
| 172 | + chmod 4755 $(DESTDIR)$(sbindir)/suexec; \ | ||
| 173 | + fi | ||
| 174 | + | ||
| 175 | +install-suexec-caps: | ||
| 176 | + @if test -f $(builddir)/support/suexec; then \ | ||
| 177 | + setcap 'cap_setuid,cap_setgid+pe' $(DESTDIR)$(sbindir)/suexec; \ | ||
| 178 | fi | ||
| 179 | |||
| 180 | suexec: | ||
| 181 | --- httpd-2.4.2/modules/arch/unix/mod_unixd.c.r1337344+ | ||
| 182 | +++ httpd-2.4.2/modules/arch/unix/mod_unixd.c | ||
| 183 | @@ -284,6 +284,13 @@ unixd_set_suexec(cmd_parms *cmd, void *d | ||
| 184 | return NULL; | ||
| 185 | } | ||
| 186 | |||
| 187 | +#ifdef AP_SUEXEC_CAPABILITIES | ||
| 188 | +/* If suexec is using capabilities, don't test for the setuid bit. */ | ||
| 189 | +#define SETUID_TEST(finfo) (1) | ||
| 190 | +#else | ||
| 191 | +#define SETUID_TEST(finfo) (finfo.protection & APR_USETID) | ||
| 192 | +#endif | ||
| 193 | + | ||
| 194 | static int | ||
| 195 | unixd_pre_config(apr_pool_t *pconf, apr_pool_t *plog, | ||
| 196 | apr_pool_t *ptemp) | ||
| 197 | @@ -300,7 +307,7 @@ unixd_pre_config(apr_pool_t *pconf, apr_ | ||
| 198 | ap_unixd_config.suexec_enabled = 0; | ||
| 199 | if ((apr_stat(&wrapper, SUEXEC_BIN, APR_FINFO_NORM, ptemp)) | ||
| 200 | == APR_SUCCESS) { | ||
| 201 | - if ((wrapper.protection & APR_USETID) && wrapper.user == 0 | ||
| 202 | + if (SETUID_TEST(wrapper) && wrapper.user == 0 | ||
| 203 | && (access(SUEXEC_BIN, R_OK|X_OK) == 0)) { | ||
| 204 | ap_unixd_config.suexec_enabled = 1; | ||
| 205 | ap_unixd_config.suexec_disabled_reason = ""; | ||
| 206 | --- httpd-2.4.2/support/suexec.c.r1337344+ | ||
| 207 | +++ httpd-2.4.2/support/suexec.c | ||
| 208 | @@ -58,6 +58,10 @@ | ||
| 209 | #include <grp.h> | ||
| 210 | #endif | ||
| 211 | |||
| 212 | +#ifdef AP_LOG_SYSLOG | ||
| 213 | +#include <syslog.h> | ||
| 214 | +#endif | ||
| 215 | + | ||
| 216 | #if defined(PATH_MAX) | ||
| 217 | #define AP_MAXPATH PATH_MAX | ||
| 218 | #elif defined(MAXPATHLEN) | ||
| 219 | @@ -69,7 +73,12 @@ | ||
| 220 | #define AP_ENVBUF 256 | ||
| 221 | |||
| 222 | extern char **environ; | ||
| 223 | + | ||
| 224 | +#ifdef AP_LOG_SYSLOG | ||
| 225 | +static int log_open; | ||
| 226 | +#else | ||
| 227 | static FILE *log = NULL; | ||
| 228 | +#endif | ||
| 229 | |||
| 230 | static const char *const safe_env_lst[] = | ||
| 231 | { | ||
| 232 | @@ -128,10 +137,23 @@ static const char *const safe_env_lst[] | ||
| 233 | NULL | ||
| 234 | }; | ||
| 235 | |||
| 236 | +static void log_err(const char *fmt,...) | ||
| 237 | + __attribute__((format(printf,1,2))); | ||
| 238 | +static void log_no_err(const char *fmt,...) | ||
| 239 | + __attribute__((format(printf,1,2))); | ||
| 240 | +static void err_output(int is_error, const char *fmt, va_list ap) | ||
| 241 | + __attribute__((format(printf,2,0))); | ||
| 242 | |||
| 243 | static void err_output(int is_error, const char *fmt, va_list ap) | ||
| 244 | { | ||
| 245 | -#ifdef AP_LOG_EXEC | ||
| 246 | +#if defined(AP_LOG_SYSLOG) | ||
| 247 | + if (!log_open) { | ||
| 248 | + openlog("suexec", LOG_PID, LOG_DAEMON); | ||
| 249 | + log_open = 1; | ||
| 250 | + } | ||
| 251 | + | ||
| 252 | + vsyslog(is_error ? LOG_ERR : LOG_INFO, fmt, ap); | ||
| 253 | +#elif defined(AP_LOG_EXEC) | ||
| 254 | time_t timevar; | ||
| 255 | struct tm *lt; | ||
| 256 | |||
| 257 | @@ -263,7 +285,7 @@ int main(int argc, char *argv[]) | ||
| 258 | */ | ||
| 259 | uid = getuid(); | ||
| 260 | if ((pw = getpwuid(uid)) == NULL) { | ||
| 261 | - log_err("crit: invalid uid: (%ld)\n", uid); | ||
| 262 | + log_err("crit: invalid uid: (%lu)\n", (unsigned long)uid); | ||
| 263 | exit(102); | ||
| 264 | } | ||
| 265 | /* | ||
| 266 | @@ -289,7 +311,9 @@ int main(int argc, char *argv[]) | ||
| 267 | #ifdef AP_HTTPD_USER | ||
| 268 | fprintf(stderr, " -D AP_HTTPD_USER=\"%s\"\n", AP_HTTPD_USER); | ||
| 269 | #endif | ||
| 270 | -#ifdef AP_LOG_EXEC | ||
| 271 | +#if defined(AP_LOG_SYSLOG) | ||
| 272 | + fprintf(stderr, " -D AP_LOG_SYSLOG\n"); | ||
| 273 | +#elif defined(AP_LOG_EXEC) | ||
| 274 | fprintf(stderr, " -D AP_LOG_EXEC=\"%s\"\n", AP_LOG_EXEC); | ||
| 275 | #endif | ||
| 276 | #ifdef AP_SAFE_PATH | ||
| 277 | @@ -440,7 +464,7 @@ int main(int argc, char *argv[]) | ||
| 278 | * a UID less than AP_UID_MIN. Tsk tsk. | ||
| 279 | */ | ||
| 280 | if ((uid == 0) || (uid < AP_UID_MIN)) { | ||
| 281 | - log_err("cannot run as forbidden uid (%d/%s)\n", uid, cmd); | ||
| 282 | + log_err("cannot run as forbidden uid (%lu/%s)\n", (unsigned long)uid, cmd); | ||
| 283 | exit(107); | ||
| 284 | } | ||
| 285 | |||
| 286 | @@ -449,7 +473,7 @@ int main(int argc, char *argv[]) | ||
| 287 | * or as a GID less than AP_GID_MIN. Tsk tsk. | ||
| 288 | */ | ||
| 289 | if ((gid == 0) || (gid < AP_GID_MIN)) { | ||
| 290 | - log_err("cannot run as forbidden gid (%d/%s)\n", gid, cmd); | ||
| 291 | + log_err("cannot run as forbidden gid (%lu/%s)\n", (unsigned long)gid, cmd); | ||
| 292 | exit(108); | ||
| 293 | } | ||
| 294 | |||
| 295 | @@ -460,7 +484,7 @@ int main(int argc, char *argv[]) | ||
| 296 | * and setgid() to the target group. If unsuccessful, error out. | ||
| 297 | */ | ||
| 298 | if (((setgid(gid)) != 0) || (initgroups(actual_uname, gid) != 0)) { | ||
| 299 | - log_err("failed to setgid (%ld: %s)\n", gid, cmd); | ||
| 300 | + log_err("failed to setgid (%lu: %s)\n", (unsigned long)gid, cmd); | ||
| 301 | exit(109); | ||
| 302 | } | ||
| 303 | |||
| 304 | @@ -468,7 +492,7 @@ int main(int argc, char *argv[]) | ||
| 305 | * setuid() to the target user. Error out on fail. | ||
| 306 | */ | ||
| 307 | if ((setuid(uid)) != 0) { | ||
| 308 | - log_err("failed to setuid (%ld: %s)\n", uid, cmd); | ||
| 309 | + log_err("failed to setuid (%lu: %s)\n", (unsigned long)uid, cmd); | ||
| 310 | exit(110); | ||
| 311 | } | ||
| 312 | |||
| 313 | @@ -556,11 +580,11 @@ int main(int argc, char *argv[]) | ||
| 314 | (gid != dir_info.st_gid) || | ||
| 315 | (uid != prg_info.st_uid) || | ||
| 316 | (gid != prg_info.st_gid)) { | ||
| 317 | - log_err("target uid/gid (%ld/%ld) mismatch " | ||
| 318 | - "with directory (%ld/%ld) or program (%ld/%ld)\n", | ||
| 319 | - uid, gid, | ||
| 320 | - dir_info.st_uid, dir_info.st_gid, | ||
| 321 | - prg_info.st_uid, prg_info.st_gid); | ||
| 322 | + log_err("target uid/gid (%lu/%lu) mismatch " | ||
| 323 | + "with directory (%lu/%lu) or program (%lu/%lu)\n", | ||
| 324 | + (unsigned long)uid, (unsigned long)gid, | ||
| 325 | + (unsigned long)dir_info.st_uid, (unsigned long)dir_info.st_gid, | ||
| 326 | + (unsigned long)prg_info.st_uid, (unsigned long)prg_info.st_gid); | ||
| 327 | exit(120); | ||
| 328 | } | ||
| 329 | /* | ||
| 330 | @@ -585,6 +609,12 @@ int main(int argc, char *argv[]) | ||
| 331 | #endif /* AP_SUEXEC_UMASK */ | ||
| 332 | |||
| 333 | /* Be sure to close the log file so the CGI can't mess with it. */ | ||
| 334 | +#ifdef AP_LOG_SYSLOG | ||
| 335 | + if (log_open) { | ||
| 336 | + closelog(); | ||
| 337 | + log_open = 0; | ||
| 338 | + } | ||
| 339 | +#else | ||
| 340 | if (log != NULL) { | ||
| 341 | #if APR_HAVE_FCNTL_H | ||
| 342 | /* | ||
| 343 | @@ -606,6 +636,7 @@ int main(int argc, char *argv[]) | ||
| 344 | log = NULL; | ||
| 345 | #endif | ||
| 346 | } | ||
| 347 | +#endif | ||
| 348 | |||
| 349 | /* | ||
| 350 | * Execute the command, replacing our image with its own. | ||
