This directive is currently available only in Red Hat Enterprise Linux
++
++
The ListenFree directive is
++ identical to the Listen directive.
++ The only difference is in the usage of the IP_FREEBIND socket
++ option, which is enabled by default with ListenFree.
++ If IP_FREEBIND is enabled, it allows httpd to bind to an IP
++ address that is nonlocal or does not (yet) exist. This allows httpd to
++ listen on a socket without requiring the underlying network interface
++ or the specified dynamic IP address to be up at the time when httpd
++ is trying to bind to it.
++
Available in Apache HTTP Server 2.4.6 in Red Hat Enterprise Linux 7
++
++
By default, the server merges (or collapses) multiple consecutive slash
++ ('/') characters in the path component of the request URL.
++
++
When mapping URL's to the filesystem, these multiple slashes are not
++ significant. However, URL's handled other ways, such as by CGI or proxy,
++ might prefer to retain the significance of multiple consecutive slashes.
++ In these cases MergeSlashes can be set to
++ OFF to retain the multiple consecutive slashes. In these
++ configurations, regular expressions used in the configuration file that match
++ the path component of the URL (LocationMatch,
++ RewriteRule, ...) need to take into account multiple
++ consecutive slashes.
Determines whether trailers are merged into headers
+--- a/include/http_core.h 2019/03/18 08:49:19 1855736
++++ b/include/http_core.h 2019/03/18 08:49:59 1855737
+@@ -740,7 +740,7 @@
+ #define AP_HTTP_METHODS_LENIENT 1
+ #define AP_HTTP_METHODS_REGISTERED 2
+ char http_methods;
+-
++ unsigned int merge_slashes;
+ } core_server_config;
+
+ /* for AddOutputFiltersByType in core.c */
+diff --git a/include/httpd.h b/include/httpd.h
+index 65392f8..99f7f04 100644
+--- a/include/httpd.h
++++ b/include/httpd.h
+@@ -1697,11 +1697,21 @@ AP_DECLARE(int) ap_unescape_url_keep2f(char *url, int decode_slashes);
+ AP_DECLARE(int) ap_unescape_urlencoded(char *query);
+
+ /**
+- * Convert all double slashes to single slashes
+- * @param name The string to convert
++ * Convert all double slashes to single slashes, except where significant
++ * to the filesystem on the current platform.
++ * @param name The string to convert, assumed to be a filesystem path
+ */
+ AP_DECLARE(void) ap_no2slash(char *name);
+
++/**
++ * Convert all double slashes to single slashes, except where significant
++ * to the filesystem on the current platform.
++ * @param name The string to convert
++ * @param is_fs_path if set to 0, the significance of any double-slashes is
++ * ignored.
++ */
++AP_DECLARE(void) ap_no2slash_ex(char *name, int is_fs_path);
++
+ /**
+ * Remove all ./ and xx/../ substrings from a file name. Also remove
+ * any leading ../ or /../ substrings.
+diff --git a/server/request.c b/server/request.c
+index dbe3e07..d5c558a 100644
+--- a/server/request.c
++++ b/server/request.c
+@@ -167,6 +167,8 @@ AP_DECLARE(int) ap_process_request_internal(request_rec *r)
+ int file_req = (r->main && r->filename);
+ int access_status;
+ core_dir_config *d;
++ core_server_config *sconf =
++ ap_get_core_module_config(r->server->module_config);
+
+ /* Ignore embedded %2F's in path for proxy requests */
+ if (!r->proxyreq && r->parsed_uri.path) {
+@@ -191,6 +193,12 @@ AP_DECLARE(int) ap_process_request_internal(request_rec *r)
+ }
+
+ ap_getparents(r->uri); /* OK --- shrinking transformations... */
++ if (sconf->merge_slashes != AP_CORE_CONFIG_OFF) {
++ ap_no2slash(r->uri);
++ if (r->parsed_uri.path) {
++ ap_no2slash(r->parsed_uri.path);
++ }
++ }
+
+ /* All file subrequests are a huge pain... they cannot bubble through the
+ * next several steps. Only file subrequests are allowed an empty uri,
+@@ -1411,20 +1419,7 @@ AP_DECLARE(int) ap_location_walk(request_rec *r)
+
+ cache = prep_walk_cache(AP_NOTE_LOCATION_WALK, r);
+ cached = (cache->cached != NULL);
+-
+- /* Location and LocationMatch differ on their behaviour w.r.t. multiple
+- * slashes. Location matches multiple slashes with a single slash,
+- * LocationMatch doesn't. An exception, for backwards brokenness is
+- * absoluteURIs... in which case neither match multiple slashes.
+- */
+- if (r->uri[0] != '/') {
+- entry_uri = r->uri;
+- }
+- else {
+- char *uri = apr_pstrdup(r->pool, r->uri);
+- ap_no2slash(uri);
+- entry_uri = uri;
+- }
++ entry_uri = r->uri;
+
+ /* If we have an cache->cached location that matches r->uri,
+ * and the vhost's list of locations hasn't changed, we can skip
+@@ -1491,7 +1486,7 @@ AP_DECLARE(int) ap_location_walk(request_rec *r)
+ pmatch = apr_palloc(rxpool, nmatch*sizeof(ap_regmatch_t));
+ }
+
+- if (ap_regexec(entry_core->r, r->uri, nmatch, pmatch, 0)) {
++ if (ap_regexec(entry_core->r, entry_uri, nmatch, pmatch, 0)) {
+ continue;
+ }
+
+@@ -1501,7 +1496,7 @@ AP_DECLARE(int) ap_location_walk(request_rec *r)
+ apr_table_setn(r->subprocess_env,
+ ((const char **)entry_core->refs->elts)[i],
+ apr_pstrndup(r->pool,
+- r->uri + pmatch[i].rm_so,
++ entry_uri + pmatch[i].rm_so,
+ pmatch[i].rm_eo - pmatch[i].rm_so));
+ }
+ }
+diff --git a/server/util.c b/server/util.c
+index fd7a0a1..e0c558c 100644
+--- a/server/util.c
++++ b/server/util.c
+@@ -561,16 +561,20 @@ AP_DECLARE(void) ap_getparents(char *name)
+ name[l] = '\0';
+ }
+ }
+-
+-AP_DECLARE(void) ap_no2slash(char *name)
++AP_DECLARE(void) ap_no2slash_ex(char *name, int is_fs_path)
+ {
++
+ char *d, *s;
+
++ if (!*name) {
++ return;
++ }
++
+ s = d = name;
+
+ #ifdef HAVE_UNC_PATHS
+ /* Check for UNC names. Leave leading two slashes. */
+- if (s[0] == '/' && s[1] == '/')
++ if (is_fs_path && s[0] == '/' && s[1] == '/')
+ *d++ = *s++;
+ #endif
+
+@@ -587,6 +591,10 @@ AP_DECLARE(void) ap_no2slash(char *name)
+ *d = '\0';
+ }
+
++AP_DECLARE(void) ap_no2slash(char *name)
++{
++ ap_no2slash_ex(name, 1);
++}
+
+ /*
+ * copy at most n leading directories of s into d
+diff --git a/server/core.c b/server/core.c
+index b5ab429..a31f1e4 100644
+--- a/server/core.c
++++ b/server/core.c
+@@ -493,6 +493,7 @@ static void *create_core_server_config(apr_pool_t *a, server_rec *s)
+ */
+
+ conf->trace_enable = AP_TRACE_UNSET;
++ conf->merge_slashes = AP_CORE_CONFIG_UNSET;
+
+ conf->protocols = apr_array_make(a, 5, sizeof(const char *));
+ conf->protocols_honor_order = -1;
+@@ -561,7 +562,9 @@ static void *merge_core_server_configs(apr_pool_t *p, void *basev, void *virtv)
+ conf->protocols_honor_order = ((virt->protocols_honor_order < 0)?
+ base->protocols_honor_order :
+ virt->protocols_honor_order);
+-
++
++ AP_CORE_MERGE_FLAG(merge_slashes, conf, base, virt);
++
+ return conf;
+ }
+
+@@ -1872,6 +1875,13 @@ static const char *set_qualify_redirect_url(cmd_parms *cmd, void *d_, int flag)
+ return NULL;
+ }
+
++static const char *set_core_server_flag(cmd_parms *cmd, void *s_, int flag)
++{
++ core_server_config *conf =
++ ap_get_core_module_config(cmd->server->module_config);
++ return ap_set_flag_slot(cmd, conf, flag);
++}
++
+ static const char *set_override_list(cmd_parms *cmd, void *d_, int argc, char *const argv[])
+ {
+ core_dir_config *d = d_;
+@@ -4598,6 +4608,10 @@ AP_INIT_ITERATE("HttpProtocolOptions", set_http_protocol_options, NULL, RSRC_CON
+ "'Unsafe' or 'Strict' (default). Sets HTTP acceptance rules"),
+ AP_INIT_ITERATE("RegisterHttpMethod", set_http_method, NULL, RSRC_CONF,
+ "Registers non-standard HTTP methods"),
++AP_INIT_FLAG("MergeSlashes", set_core_server_flag,
++ (void *)APR_OFFSETOF(core_server_config, merge_slashes),
++ RSRC_CONF,
++ "Controls whether consecutive slashes in the URI path are merged"),
+ { NULL }
+ };
+
diff --git a/SOURCES/httpd-2.4.37-CVE-2019-10092.patch b/SOURCES/httpd-2.4.37-CVE-2019-10092.patch
new file mode 100644
index 0000000..a06d9c2
--- /dev/null
+++ b/SOURCES/httpd-2.4.37-CVE-2019-10092.patch
@@ -0,0 +1,192 @@
+diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c
+index e419eb6..dcafa9c 100644
+--- a/modules/http/http_protocol.c
++++ b/modules/http/http_protocol.c
+@@ -1132,13 +1132,10 @@ static const char *get_canned_error_string(int status,
+ "\">here.\n",
+ NULL));
+ case HTTP_USE_PROXY:
+- return(apr_pstrcat(p,
+- "
This resource is only accessible "
+- "through the proxy\n",
+- ap_escape_html(r->pool, location),
+- " \nYou will need to configure "
+- "your client to use that proxy.
\n",
+- NULL));
++ return("
This resource is only accessible "
++ "through the proxy\n"
++ " \nYou will need to configure "
++ "your client to use that proxy.
\n");
+ case HTTP_PROXY_AUTHENTICATION_REQUIRED:
+ case HTTP_UNAUTHORIZED:
+ return("
This server could not verify that you\n"
+@@ -1154,34 +1151,20 @@ static const char *get_canned_error_string(int status,
+ "error-notes",
+ "
\n"));
+ case HTTP_FORBIDDEN:
+- s1 = apr_pstrcat(p,
+- "
You don't have permission to access ",
+- ap_escape_html(r->pool, r->uri),
+- "\non this server. \n",
+- NULL);
+- return(add_optional_notes(r, s1, "error-notes", "
\n"));
++ return(add_optional_notes(r, "
You don't have permission to access this resource.", "error-notes", "
\n"));
+ case HTTP_NOT_FOUND:
+- return(apr_pstrcat(p,
+- "
The requested URL ",
+- ap_escape_html(r->pool, r->uri),
+- " was not found on this server.
\n",
+- NULL));
++ return("
The requested URL was not found on this server.
\n");
+ case HTTP_METHOD_NOT_ALLOWED:
+ return(apr_pstrcat(p,
+ "
The requested method ",
+ ap_escape_html(r->pool, r->method),
+- " is not allowed for the URL ",
+- ap_escape_html(r->pool, r->uri),
+- ".
\n",
++ " is not allowed for this URL.\n",
+ NULL));
+ case HTTP_NOT_ACCEPTABLE:
+- s1 = apr_pstrcat(p,
+- "
An appropriate representation of the "
+- "requested resource ",
+- ap_escape_html(r->pool, r->uri),
+- " could not be found on this server.
The precondition on the request "
+- "for the URL ",
+- ap_escape_html(r->pool, r->uri),
+- " evaluated to false.
\n",
+- NULL));
++ return("
The precondition on the request "
++ "for this URL evaluated to false.
\n");
+ case HTTP_NOT_IMPLEMENTED:
+ s1 = apr_pstrcat(p,
+ "
",
+- ap_escape_html(r->pool, r->method), " to ",
+- ap_escape_html(r->pool, r->uri),
+- " not supported. \n",
++ ap_escape_html(r->pool, r->method), " ",
++ " not supported for current URL. \n",
+ NULL);
+ return(add_optional_notes(r, s1, "error-notes", "
\n"));
+ case HTTP_BAD_GATEWAY:
+@@ -1211,29 +1189,19 @@ static const char *get_canned_error_string(int status,
+ "response from an upstream server. " CRLF;
+ return(add_optional_notes(r, s1, "error-notes", "\n"));
+ case HTTP_VARIANT_ALSO_VARIES:
+- return(apr_pstrcat(p,
+- "
A variant for the requested "
+- "resource\n
\n",
+- ap_escape_html(r->pool, r->uri),
+- "\n
\nis itself a negotiable resource. "
+- "This indicates a configuration error.\n",
+- NULL));
++ return("
A variant for the requested "
++ "resource\n
\n"
++ "\n
\nis itself a negotiable resource. "
++ "This indicates a configuration error.\n");
+ case HTTP_REQUEST_TIME_OUT:
+ return("
Server timeout waiting for the HTTP request from the client.
\n");
+ case HTTP_GONE:
+- return(apr_pstrcat(p,
+- "
The requested resource ",
+- ap_escape_html(r->pool, r->uri),
+- " \nis no longer available on this server "
+- "and there is no forwarding address.\n"
+- "Please remove all references to this "
+- "resource.
\n",
+- NULL));
++ return("
The requested resource is no longer available on this server"
++ " and there is no forwarding address.\n"
++ "Please remove all references to this resource.
\n");
+ case HTTP_REQUEST_ENTITY_TOO_LARGE:
+ return(apr_pstrcat(p,
+- "The requested resource ",
+- ap_escape_html(r->pool, r->uri), " \n",
+- "does not allow request data with ",
++ "The requested resource does not allow request data with ",
+ ap_escape_html(r->pool, r->method),
+ " requests, or the amount of data provided in\n"
+ "the request exceeds the capacity limit.\n",
+@@ -1317,11 +1285,9 @@ static const char *get_canned_error_string(int status,
+ "the Server Name Indication (SNI) in use for this\n"
+ "connection.\n");
+ case HTTP_UNAVAILABLE_FOR_LEGAL_REASONS:
+- s1 = apr_pstrcat(p,
+- "
Access to ", ap_escape_html(r->pool, r->uri),
+- "\nhas been denied for legal reasons. \n",
+- NULL);
+- return(add_optional_notes(r, s1, "error-notes", "
\n"));
++ return(add_optional_notes(r,
++ "
Access to this URL has been denied for legal reasons. \n",
++ "error-notes", "
\n"));
+ default: /* HTTP_INTERNAL_SERVER_ERROR */
+ /*
+ * This comparison to expose error-notes could be modified to
+diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c
+index 800ede1..de48735 100644
+--- a/modules/proxy/mod_proxy.c
++++ b/modules/proxy/mod_proxy.c
+@@ -1055,9 +1055,10 @@ static int proxy_handler(request_rec *r)
+ char *end;
+ maxfwd = apr_strtoi64(str, &end, 10);
+ if (maxfwd < 0 || maxfwd == APR_INT64_MAX || *end) {
+- return ap_proxyerror(r, HTTP_BAD_REQUEST,
+- apr_psprintf(r->pool,
+- "Max-Forwards value '%s' could not be parsed", str));
++ ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, APLOGNO()
++ "Max-Forwards value '%s' could not be parsed", str);
++ return ap_proxyerror(r, HTTP_BAD_REQUEST,
++ "Max-Forwards request header could not be parsed");
+ }
+ else if (maxfwd == 0) {
+ switch (r->method_number) {
+diff --git a/modules/proxy/mod_proxy_ftp.c b/modules/proxy/mod_proxy_ftp.c
+index 4a10987..8f6f853 100644
+--- a/modules/proxy/mod_proxy_ftp.c
++++ b/modules/proxy/mod_proxy_ftp.c
+@@ -1024,8 +1024,9 @@ static int proxy_ftp_handler(request_rec *r, proxy_worker *worker,
+ /* We break the URL into host, port, path-search */
+ if (r->parsed_uri.hostname == NULL) {
+ if (APR_SUCCESS != apr_uri_parse(p, url, &uri)) {
+- return ap_proxyerror(r, HTTP_BAD_REQUEST,
+- apr_psprintf(p, "URI cannot be parsed: %s", url));
++ ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, APLOGNO()
++ "URI cannot be parsed: %s", url);
++ return ap_proxyerror(r, HTTP_BAD_REQUEST, "URI cannot be parsed");
+ }
+ connectname = uri.hostname;
+ connectport = uri.port;
+diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c
+index 6501c68..0bbfa59 100644
+--- a/modules/proxy/proxy_util.c
++++ b/modules/proxy/proxy_util.c
+@@ -368,12 +368,9 @@ PROXY_DECLARE(char *)
+
+ PROXY_DECLARE(int) ap_proxyerror(request_rec *r, int statuscode, const char *message)
+ {
+- const char *uri = ap_escape_html(r->pool, r->uri);
+ apr_table_setn(r->notes, "error-notes",
+ apr_pstrcat(r->pool,
+- "The proxy server could not handle the request ", ap_escape_html(r->pool, r->method), " ", uri,
+- ".
\n"
++ "The proxy server could not handle the request
The SessionExpiryUpdateInterval directive allows
++ sessions to avoid the cost associated with writing the session each request
++ when only the expiry time has changed. This can be used to make a website
++ more efficient or reduce load on a database when using
++ mod_session_dbd. The session is always written if the data
++ stored in the session has changed or the expiry has changed by more than the
++ configured interval.
++
++
Setting the interval to zero disables this directive, and the session
++ expiry is refreshed for each request.
++
++
This directive only has an effect when combined with SessionMaxAge to enable session
++ expiry. Sessions without an expiry are only written when the data stored in
++ the session has changed.
++
++
Warning
++
Because the session expiry may not be refreshed with each request, it's
++ possible for sessions to expire up to interval seconds early.
++ Using a small interval usually provides sufficient savings while having a
++ minimal effect on expiry resolution.
++
+
+
+
+diff --git a/modules/session/mod_session.c b/modules/session/mod_session.c
+index d517020..10e6396 100644
+--- a/modules/session/mod_session.c
++++ b/modules/session/mod_session.c
+@@ -177,6 +177,7 @@ static apr_status_t ap_session_save(request_rec * r, session_rec * z)
+ {
+ if (z) {
+ apr_time_t now = apr_time_now();
++ apr_time_t initialExpiry = z->expiry;
+ int rv = 0;
+
+ session_dir_conf *dconf = ap_get_module_config(r->per_dir_config,
+@@ -207,6 +208,17 @@ static apr_status_t ap_session_save(request_rec * r, session_rec * z)
+ z->expiry = now + z->maxage * APR_USEC_PER_SEC;
+ }
+
++ /* don't save if the only change is the expiry by a small amount */
++ if (!z->dirty && dconf->expiry_update_time
++ && (z->expiry - initialExpiry < dconf->expiry_update_time)) {
++ return APR_SUCCESS;
++ }
++
++ /* also don't save sessions that didn't change at all */
++ if (!z->dirty && !z->maxage) {
++ return APR_SUCCESS;
++ }
++
+ /* encode the session */
+ rv = ap_run_session_encode(r, z);
+ if (OK != rv) {
+@@ -553,6 +565,10 @@ static void *merge_session_dir_config(apr_pool_t * p, void *basev, void *addv)
+ new->env_set = add->env_set || base->env_set;
+ new->includes = apr_array_append(p, base->includes, add->includes);
+ new->excludes = apr_array_append(p, base->excludes, add->excludes);
++ new->expiry_update_time = (add->expiry_update_set == 0)
++ ? base->expiry_update_time
++ : add->expiry_update_time;
++ new->expiry_update_set = add->expiry_update_set || base->expiry_update_set;
+
+ return new;
+ }
+@@ -622,6 +638,21 @@ static const char *add_session_exclude(cmd_parms * cmd, void *dconf, const char
+ return NULL;
+ }
+
++static const char *
++ set_session_expiry_update(cmd_parms * parms, void *dconf, const char *arg)
++{
++ session_dir_conf *conf = dconf;
++
++ conf->expiry_update_time = atoi(arg);
++ if (conf->expiry_update_time < 0) {
++ return "SessionExpiryUpdateInterval must be positive or nul";
++ }
++ conf->expiry_update_time = apr_time_from_sec(conf->expiry_update_time);
++ conf->expiry_update_set = 1;
++
++ return NULL;
++}
++
+
+ static const command_rec session_cmds[] =
+ {
+@@ -637,6 +668,9 @@ static const command_rec session_cmds[] =
+ "URL prefixes to include in the session. Defaults to all URLs"),
+ AP_INIT_TAKE1("SessionExclude", add_session_exclude, NULL, RSRC_CONF|OR_AUTHCFG,
+ "URL prefixes to exclude from the session. Defaults to no URLs"),
++ AP_INIT_TAKE1("SessionExpiryUpdateInterval", set_session_expiry_update, NULL, RSRC_CONF|OR_AUTHCFG,
++ "time interval for which a session's expiry time may change "
++ "without having to be rewritten. Zero to disable"),
+ {NULL}
+ };
+
+diff --git a/modules/session/mod_session.h b/modules/session/mod_session.h
+index a6dd5e9..bdeb532 100644
+--- a/modules/session/mod_session.h
++++ b/modules/session/mod_session.h
+@@ -115,6 +115,9 @@ typedef struct {
+ * URLs included if empty */
+ apr_array_header_t *excludes; /* URL prefixes to be excluded. No
+ * URLs excluded if empty */
++ apr_time_t expiry_update_time; /* seconds the session expiry may change and
++ * not have to be rewritten */
++ int expiry_update_set;
+ } session_dir_conf;
+
+ /**
+diff --git a/modules/session/mod_session_cookie.c b/modules/session/mod_session_cookie.c
+index 6a02322..4aa75e4 100644
+--- a/modules/session/mod_session_cookie.c
++++ b/modules/session/mod_session_cookie.c
+@@ -60,9 +60,6 @@ static apr_status_t session_cookie_save(request_rec * r, session_rec * z)
+ session_cookie_dir_conf *conf = ap_get_module_config(r->per_dir_config,
+ &session_cookie_module);
+
+- /* don't cache auth protected pages */
+- apr_table_addn(r->headers_out, "Cache-Control", "no-cache");
+-
+ /* create RFC2109 compliant cookie */
+ if (conf->name_set) {
+ if (z->encoded && z->encoded[0]) {
+@@ -162,6 +159,9 @@ static apr_status_t session_cookie_load(request_rec * r, session_rec ** z)
+ /* put the session in the notes so we don't have to parse it again */
+ apr_table_setn(m->notes, note, (char *)zz);
+
++ /* don't cache auth protected pages */
++ apr_table_addn(r->headers_out, "Cache-Control", "no-cache, private");
++
+ return OK;
+
+ }
+diff --git a/modules/session/mod_session_dbd.c b/modules/session/mod_session_dbd.c
+index 0be7306..f683da2 100644
+--- a/modules/session/mod_session_dbd.c
++++ b/modules/session/mod_session_dbd.c
+@@ -245,6 +245,9 @@ static apr_status_t session_dbd_load(request_rec * r, session_rec ** z)
+ /* put the session in the notes so we don't have to parse it again */
+ apr_table_setn(m->notes, note, (char *)zz);
+
++ /* don't cache pages with a session */
++ apr_table_addn(r->headers_out, "Cache-Control", "no-cache, private");
++
+ return OK;
+
+ }
+@@ -409,9 +412,6 @@ static apr_status_t session_dbd_save(request_rec * r, session_rec * z)
+ if (conf->name_set || conf->name2_set) {
+ char *oldkey = NULL, *newkey = NULL;
+
+- /* don't cache pages with a session */
+- apr_table_addn(r->headers_out, "Cache-Control", "no-cache");
+-
+ /* if the session is new or changed, make a new session ID */
+ if (z->uuid) {
+ oldkey = apr_pcalloc(r->pool, APR_UUID_FORMATTED_LENGTH + 1);
+@@ -458,7 +458,7 @@ static apr_status_t session_dbd_save(request_rec * r, session_rec * z)
+ else if (conf->peruser) {
+
+ /* don't cache pages with a session */
+- apr_table_addn(r->headers_out, "Cache-Control", "no-cache");
++ apr_table_addn(r->headers_out, "Cache-Control", "no-cache, private");
+
+ if (r->user) {
+ ret = dbd_save(r, r->user, r->user, z->encoded, z->expiry);
diff --git a/SOURCES/httpd-2.4.37-sslkeylogfile-support.patch b/SOURCES/httpd-2.4.37-sslkeylogfile-support.patch
new file mode 100644
index 0000000..9d4cc19
--- /dev/null
+++ b/SOURCES/httpd-2.4.37-sslkeylogfile-support.patch
@@ -0,0 +1,123 @@
+diff --git a/modules/ssl/ssl_engine_config.c b/modules/ssl/ssl_engine_config.c
+index 1d201d9..0c4bf1f 100644
+--- a/modules/ssl/ssl_engine_config.c
++++ b/modules/ssl/ssl_engine_config.c
+@@ -75,6 +75,10 @@ SSLModConfigRec *ssl_config_global_create(server_rec *s)
+ mc->stapling_refresh_mutex = NULL;
+ #endif
+
++#ifdef HAVE_OPENSSL_KEYLOG
++ mc->keylog_file = NULL;
++#endif
++
+ apr_pool_userdata_set(mc, SSL_MOD_CONFIG_KEY,
+ apr_pool_cleanup_null,
+ pool);
+diff --git a/modules/ssl/ssl_engine_init.c b/modules/ssl/ssl_engine_init.c
+index ef631c1..b286053 100644
+--- a/modules/ssl/ssl_engine_init.c
++++ b/modules/ssl/ssl_engine_init.c
+@@ -437,6 +437,28 @@ apr_status_t ssl_init_Module(apr_pool_t *p, apr_pool_t *plog,
+ init_bio_methods();
+ #endif
+
++#ifdef HAVE_OPENSSL_KEYLOG
++ {
++ const char *logfn = getenv("SSLKEYLOGFILE");
++
++ if (logfn) {
++ rv = apr_file_open(&mc->keylog_file, logfn,
++ APR_FOPEN_CREATE|APR_FOPEN_WRITE|APR_FOPEN_APPEND|APR_FOPEN_LARGEFILE,
++ APR_FPROT_UREAD|APR_FPROT_UWRITE,
++ mc->pPool);
++ if (rv) {
++ ap_log_error(APLOG_MARK, APLOG_NOTICE, rv, s, APLOGNO(10226)
++ "Could not open log file '%s' configured via SSLKEYLOGFILE",
++ logfn);
++ return rv;
++ }
++
++ ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s, APLOGNO(10227)
++ "Init: Logging SSL private key material to %s", logfn);
++ }
++ }
++#endif
++
+ return OK;
+ }
+
+@@ -796,6 +818,12 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s,
+ * https://github.com/openssl/openssl/issues/7178 */
+ SSL_CTX_clear_mode(ctx, SSL_MODE_AUTO_RETRY);
+ #endif
++
++#ifdef HAVE_OPENSSL_KEYLOG
++ if (mctx->sc->mc->keylog_file) {
++ SSL_CTX_set_keylog_callback(ctx, modssl_callback_keylog);
++ }
++#endif
+
+ return APR_SUCCESS;
+ }
+diff --git a/modules/ssl/ssl_engine_kernel.c b/modules/ssl/ssl_engine_kernel.c
+index 6611610..7058865 100644
+--- a/modules/ssl/ssl_engine_kernel.c
++++ b/modules/ssl/ssl_engine_kernel.c
+@@ -2719,3 +2719,17 @@ int ssl_callback_SRPServerParams(SSL *ssl, int *ad, void *arg)
+ }
+
+ #endif /* HAVE_SRP */
++
++
++#ifdef HAVE_OPENSSL_KEYLOG
++/* Callback used with SSL_CTX_set_keylog_callback. */
++void modssl_callback_keylog(const SSL *ssl, const char *line)
++{
++ conn_rec *conn = SSL_get_app_data(ssl);
++ SSLSrvConfigRec *sc = mySrvConfig(conn->base_server);
++
++ if (sc && sc->mc->keylog_file) {
++ apr_file_printf(sc->mc->keylog_file, "%s\n", line);
++ }
++}
++#endif
+diff --git a/modules/ssl/ssl_private.h b/modules/ssl/ssl_private.h
+index 0fac5d1..2514407 100644
+--- a/modules/ssl/ssl_private.h
++++ b/modules/ssl/ssl_private.h
+@@ -250,6 +250,10 @@ void free_bio_methods(void);
+ #endif
+ #endif
+
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
++#define HAVE_OPENSSL_KEYLOG
++#endif
++
+ /* mod_ssl headers */
+ #include "ssl_util_ssl.h"
+
+@@ -617,6 +621,12 @@ typedef struct {
+ apr_global_mutex_t *stapling_cache_mutex;
+ apr_global_mutex_t *stapling_refresh_mutex;
+ #endif
++
++#ifdef HAVE_OPENSSL_KEYLOG
++ /* Used for logging if SSLKEYLOGFILE is set at startup. */
++ apr_file_t *keylog_file;
++#endif
++
+ } SSLModConfigRec;
+
+ /** Structure representing configured filenames for certs and keys for
+@@ -970,6 +980,11 @@ int ssl_stapling_init_cert(server_rec *, apr_pool_t *, apr_pool_t *,
+ int ssl_callback_SRPServerParams(SSL *, int *, void *);
+ #endif
+
++#ifdef HAVE_OPENSSL_KEYLOG
++/* Callback used with SSL_CTX_set_keylog_callback. */
++void modssl_callback_keylog(const SSL *ssl, const char *line);
++#endif
++
+ /** I/O */
+ void ssl_io_filter_init(conn_rec *, request_rec *r, SSL *);
+ void ssl_io_filter_register(apr_pool_t *);
diff --git a/SOURCES/httpd-2.4.37-sslprotdefault.patch b/SOURCES/httpd-2.4.37-sslprotdefault.patch
new file mode 100644
index 0000000..546fa1f
--- /dev/null
+++ b/SOURCES/httpd-2.4.37-sslprotdefault.patch
@@ -0,0 +1,98 @@
+diff --git a/modules/ssl/ssl_engine_config.c b/modules/ssl/ssl_engine_config.c
+index 55c237e..5467d23 100644
+--- a/modules/ssl/ssl_engine_config.c
++++ b/modules/ssl/ssl_engine_config.c
+@@ -119,7 +119,7 @@ static void modssl_ctx_init(modssl_ctx_t *mctx, apr_pool_t *p)
+ mctx->ticket_key = NULL;
+ #endif
+
+- mctx->protocol = SSL_PROTOCOL_DEFAULT;
++ mctx->protocol = SSL_PROTOCOL_NONE;
+ mctx->protocol_set = 0;
+
+ mctx->pphrase_dialog_type = SSL_PPTYPE_UNSET;
+@@ -262,6 +262,7 @@ static void modssl_ctx_cfg_merge(apr_pool_t *p,
+ {
+ if (add->protocol_set) {
+ mrg->protocol = add->protocol;
++ mrg->protocol_set = 1;
+ }
+ else {
+ mrg->protocol = base->protocol;
+diff --git a/modules/ssl/ssl_engine_init.c b/modules/ssl/ssl_engine_init.c
+index e3f62fe..31fc0e6 100644
+--- a/modules/ssl/ssl_engine_init.c
++++ b/modules/ssl/ssl_engine_init.c
+@@ -568,6 +568,7 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s,
+ MODSSL_SSL_METHOD_CONST SSL_METHOD *method = NULL;
+ char *cp;
+ int protocol = mctx->protocol;
++ int protocol_set = mctx->protocol_set;
+ SSLSrvConfigRec *sc = mySrvConfig(s);
+ #if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ int prot;
+@@ -577,12 +578,18 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s,
+ * Create the new per-server SSL context
+ */
+ if (protocol == SSL_PROTOCOL_NONE) {
+- ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02231)
+- "No SSL protocols available [hint: SSLProtocol]");
+- return ssl_die(s);
+- }
++ if (protocol_set) {
++ ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02231)
++ "No SSL protocols available [hint: SSLProtocol]");
++ return ssl_die(s);
++ }
+
+- cp = apr_pstrcat(p,
++ ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, s,
++ "Using OpenSSL/system default SSL/TLS protocols");
++ cp = "default";
++ }
++ else {
++ cp = apr_pstrcat(p,
+ #ifndef OPENSSL_NO_SSL3
+ (protocol & SSL_PROTOCOL_SSLV3 ? "SSLv3, " : ""),
+ #endif
+@@ -595,7 +602,8 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s,
+ #endif
+ #endif
+ NULL);
+- cp[strlen(cp)-2] = NUL;
++ cp[strlen(cp)-2] = NUL;
++ }
+
+ ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, s,
+ "Creating new SSL context (protocols: %s)", cp);
+@@ -696,13 +704,15 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s,
+ prot = SSL3_VERSION;
+ #endif
+ } else {
+- SSL_CTX_free(ctx);
+- mctx->ssl_ctx = NULL;
+- ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(03378)
+- "No SSL protocols available [hint: SSLProtocol]");
+- return ssl_die(s);
++ if (protocol_set) {
++ SSL_CTX_free(ctx);
++ mctx->ssl_ctx = NULL;
++ ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(03378)
++ "No SSL protocols available [hint: SSLProtocol]");
++ return ssl_die(s);
++ }
+ }
+- SSL_CTX_set_max_proto_version(ctx, prot);
++ if (protocol != SSL_PROTOCOL_NONE) SSL_CTX_set_max_proto_version(ctx, prot);
+
+ /* Next we scan for the minimal protocol version we should provide,
+ * but we do not allow holes between max and min */
+@@ -726,7 +736,7 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s,
+ prot = SSL3_VERSION;
+ }
+ #endif
+- SSL_CTX_set_min_proto_version(ctx, prot);
++ if (protocol != SSL_PROTOCOL_NONE) SSL_CTX_set_min_proto_version(ctx, prot);
+ #endif /* if OPENSSL_VERSION_NUMBER < 0x10100000L */
+
+ #ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
diff --git a/SOURCES/httpd-init.service b/SOURCES/httpd-init.service
new file mode 100644
index 0000000..3074778
--- /dev/null
+++ b/SOURCES/httpd-init.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=One-time temporary TLS key generation for httpd.service
+Documentation=man:httpd-init.service(8)
+
+ConditionPathExists=|!/etc/pki/tls/certs/localhost.crt
+ConditionPathExists=|!/etc/pki/tls/private/localhost.key
+
+[Service]
+Type=oneshot
+RemainAfterExit=no
+
+ExecStart=/usr/libexec/httpd-ssl-gencerts
diff --git a/SOURCES/httpd-ssl-gencerts b/SOURCES/httpd-ssl-gencerts
new file mode 100755
index 0000000..350f5b5
--- /dev/null
+++ b/SOURCES/httpd-ssl-gencerts
@@ -0,0 +1,39 @@
+#!/usr/bin/bash
+
+set -e
+
+FQDN=`hostname`
+ssldotconf=/etc/httpd/conf.d/ssl.conf
+
+if test -f /etc/pki/tls/certs/localhost.crt -a \
+ -f /etc/pki/tls/private/localhost.key; then
+ exit 0
+fi
+
+if test -f /etc/pki/tls/certs/localhost.crt -a \
+ ! -f /etc/pki/tls/private/localhost.key; then
+ echo "Missing certificate key!"
+ exit 1
+fi
+
+if test ! -f /etc/pki/tls/certs/localhost.crt -a \
+ -f /etc/pki/tls/private/localhost.key; then
+ echo "Missing certificate, but key is present!"
+ exit 1
+fi
+
+if ! test -f ${ssldotconf} || \
+ ! grep -q '^SSLCertificateFile /etc/pki/tls/certs/localhost.crt' ${ssldotconf} || \
+ ! grep -q '^SSLCertificateKeyFile /etc/pki/tls/private/localhost.key' ${ssldotconf}; then
+ # Non-default configuration, do nothing.
+ exit 0
+fi
+
+sscg -q \
+ --cert-file /etc/pki/tls/certs/localhost.crt \
+ --cert-key-file /etc/pki/tls/private/localhost.key \
+ --ca-file /etc/pki/tls/certs/localhost.crt \
+ --lifetime 365 \
+ --hostname $FQDN \
+ --email root@$FQDN
+
diff --git a/SOURCES/httpd-ssl-pass-dialog b/SOURCES/httpd-ssl-pass-dialog
new file mode 100755
index 0000000..79318a6
--- /dev/null
+++ b/SOURCES/httpd-ssl-pass-dialog
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exec /bin/systemd-ask-password "Enter TLS private key passphrase for $1 ($2) : "
diff --git a/SOURCES/httpd.conf b/SOURCES/httpd.conf
new file mode 100644
index 0000000..6ab68cb
--- /dev/null
+++ b/SOURCES/httpd.conf
@@ -0,0 +1,356 @@
+#
+# This is the main Apache HTTP server configuration file. It contains the
+# configuration directives that give the server its instructions.
+# See for detailed information.
+# In particular, see
+#
+# for a discussion of each configuration directive.
+#
+# See the httpd.conf(5) man page for more information on this configuration,
+# and httpd.service(8) on using and configuring the httpd service.
+#
+# Do NOT simply read the instructions in here without understanding
+# what they do. They're here only as hints or reminders. If you are unsure
+# consult the online docs. You have been warned.
+#
+# Configuration and logfile names: If the filenames you specify for many
+# of the server's control files begin with "/" (or "drive:/" for Win32), the
+# server will use that explicit path. If the filenames do *not* begin
+# with "/", the value of ServerRoot is prepended -- so 'log/access_log'
+# with ServerRoot set to '/www' will be interpreted by the
+# server as '/www/log/access_log', where as '/log/access_log' will be
+# interpreted as '/log/access_log'.
+
+#
+# ServerRoot: The top of the directory tree under which the server's
+# configuration, error, and log files are kept.
+#
+# Do not add a slash at the end of the directory path. If you point
+# ServerRoot at a non-local disk, be sure to specify a local disk on the
+# Mutex directive, if file-based mutexes are used. If you wish to share the
+# same ServerRoot for multiple httpd daemons, you will need to change at
+# least PidFile.
+#
+ServerRoot "/etc/httpd"
+
+#
+# Listen: Allows you to bind Apache to specific IP addresses and/or
+# ports, instead of the default. See also the
+# directive.
+#
+# Change this to Listen on specific IP addresses as shown below to
+# prevent Apache from glomming onto all bound IP addresses.
+#
+#Listen 12.34.56.78:80
+Listen 80
+
+#
+# Dynamic Shared Object (DSO) Support
+#
+# To be able to use the functionality of a module which was built as a DSO you
+# have to place corresponding `LoadModule' lines at this location so the
+# directives contained in it are actually available _before_ they are used.
+# Statically compiled modules (those listed by `httpd -l') do not need
+# to be loaded here.
+#
+# Example:
+# LoadModule foo_module modules/mod_foo.so
+#
+Include conf.modules.d/*.conf
+
+#
+# If you wish httpd to run as a different user or group, you must run
+# httpd as root initially and it will switch.
+#
+# User/Group: The name (or #number) of the user/group to run httpd as.
+# It is usually good practice to create a dedicated user and group for
+# running httpd, as with most system services.
+#
+User apache
+Group apache
+
+# 'Main' server configuration
+#
+# The directives in this section set up the values used by the 'main'
+# server, which responds to any requests that aren't handled by a
+# definition. These values also provide defaults for
+# any containers you may define later in the file.
+#
+# All of these directives may appear inside containers,
+# in which case these default settings will be overridden for the
+# virtual host being defined.
+#
+
+#
+# ServerAdmin: Your address, where problems with the server should be
+# e-mailed. This address appears on some server-generated pages, such
+# as error documents. e.g. admin@your-domain.com
+#
+ServerAdmin root@localhost
+
+#
+# ServerName gives the name and port that the server uses to identify itself.
+# This can often be determined automatically, but we recommend you specify
+# it explicitly to prevent problems during startup.
+#
+# If your host doesn't have a registered DNS name, enter its IP address here.
+#
+#ServerName www.example.com:80
+
+#
+# Deny access to the entirety of your server's filesystem. You must
+# explicitly permit access to web content directories in other
+# blocks below.
+#
+
+ AllowOverride none
+ Require all denied
+
+
+#
+# Note that from this point forward you must specifically allow
+# particular features to be enabled - so if something's not working as
+# you might expect, make sure that you have specifically enabled it
+# below.
+#
+
+#
+# DocumentRoot: The directory out of which you will serve your
+# documents. By default, all requests are taken from this directory, but
+# symbolic links and aliases may be used to point to other locations.
+#
+DocumentRoot "/var/www/html"
+
+#
+# Relax access to content within /var/www.
+#
+
+ AllowOverride None
+ # Allow open access:
+ Require all granted
+
+
+# Further relax access to the default document root:
+
+ #
+ # Possible values for the Options directive are "None", "All",
+ # or any combination of:
+ # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
+ #
+ # Note that "MultiViews" must be named *explicitly* --- "Options All"
+ # doesn't give it to you.
+ #
+ # The Options directive is both complicated and important. Please see
+ # http://httpd.apache.org/docs/2.4/mod/core.html#options
+ # for more information.
+ #
+ Options Indexes FollowSymLinks
+
+ #
+ # AllowOverride controls what directives may be placed in .htaccess files.
+ # It can be "All", "None", or any combination of the keywords:
+ # Options FileInfo AuthConfig Limit
+ #
+ AllowOverride None
+
+ #
+ # Controls who can get stuff from this server.
+ #
+ Require all granted
+
+
+#
+# DirectoryIndex: sets the file that Apache will serve if a directory
+# is requested.
+#
+
+ DirectoryIndex index.html
+
+
+#
+# The following lines prevent .htaccess and .htpasswd files from being
+# viewed by Web clients.
+#
+
+ Require all denied
+
+
+#
+# ErrorLog: The location of the error log file.
+# If you do not specify an ErrorLog directive within a
+# container, error messages relating to that virtual host will be
+# logged here. If you *do* define an error logfile for a
+# container, that host's errors will be logged there and not here.
+#
+ErrorLog "logs/error_log"
+
+#
+# LogLevel: Control the number of messages logged to the error_log.
+# Possible values include: debug, info, notice, warn, error, crit,
+# alert, emerg.
+#
+LogLevel warn
+
+
+ #
+ # The following directives define some format nicknames for use with
+ # a CustomLog directive (see below).
+ #
+ LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
+ LogFormat "%h %l %u %t \"%r\" %>s %b" common
+
+
+ # You need to enable mod_logio.c to use %I and %O
+ LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
+
+
+ #
+ # The location and format of the access logfile (Common Logfile Format).
+ # If you do not define any access logfiles within a
+ # container, they will be logged here. Contrariwise, if you *do*
+ # define per- access logfiles, transactions will be
+ # logged therein and *not* in this file.
+ #
+ #CustomLog "logs/access_log" common
+
+ #
+ # If you prefer a logfile with access, agent, and referer information
+ # (Combined Logfile Format) you can use the following directive.
+ #
+ CustomLog "logs/access_log" combined
+
+
+
+ #
+ # Redirect: Allows you to tell clients about documents that used to
+ # exist in your server's namespace, but do not anymore. The client
+ # will make a new request for the document at its new location.
+ # Example:
+ # Redirect permanent /foo http://www.example.com/bar
+
+ #
+ # Alias: Maps web paths into filesystem paths and is used to
+ # access content that does not live under the DocumentRoot.
+ # Example:
+ # Alias /webpath /full/filesystem/path
+ #
+ # If you include a trailing / on /webpath then the server will
+ # require it to be present in the URL. You will also likely
+ # need to provide a section to allow access to
+ # the filesystem path.
+
+ #
+ # ScriptAlias: This controls which directories contain server scripts.
+ # ScriptAliases are essentially the same as Aliases, except that
+ # documents in the target directory are treated as applications and
+ # run by the server when requested rather than as documents sent to the
+ # client. The same rules about trailing "/" apply to ScriptAlias
+ # directives as to Alias.
+ #
+ ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
+
+
+
+#
+# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
+# CGI directory exists, if you have that configured.
+#
+
+ AllowOverride None
+ Options None
+ Require all granted
+
+
+
+ #
+ # TypesConfig points to the file containing the list of mappings from
+ # filename extension to MIME-type.
+ #
+ TypesConfig /etc/mime.types
+
+ #
+ # AddType allows you to add to or override the MIME configuration
+ # file specified in TypesConfig for specific file types.
+ #
+ #AddType application/x-gzip .tgz
+ #
+ # AddEncoding allows you to have certain browsers uncompress
+ # information on the fly. Note: Not all browsers support this.
+ #
+ #AddEncoding x-compress .Z
+ #AddEncoding x-gzip .gz .tgz
+ #
+ # If the AddEncoding directives above are commented-out, then you
+ # probably should define those extensions to indicate media types:
+ #
+ AddType application/x-compress .Z
+ AddType application/x-gzip .gz .tgz
+
+ #
+ # AddHandler allows you to map certain file extensions to "handlers":
+ # actions unrelated to filetype. These can be either built into the server
+ # or added with the Action directive (see below)
+ #
+ # To use CGI scripts outside of ScriptAliased directories:
+ # (You will also need to add "ExecCGI" to the "Options" directive.)
+ #
+ #AddHandler cgi-script .cgi
+
+ # For type maps (negotiated resources):
+ #AddHandler type-map var
+
+ #
+ # Filters allow you to process content before it is sent to the client.
+ #
+ # To parse .shtml files for server-side includes (SSI):
+ # (You will also need to add "Includes" to the "Options" directive.)
+ #
+ AddType text/html .shtml
+ AddOutputFilter INCLUDES .shtml
+
+
+#
+# Specify a default charset for all content served; this enables
+# interpretation of all content as UTF-8 by default. To use the
+# default browser choice (ISO-8859-1), or to allow the META tags
+# in HTML content to override this choice, comment out this
+# directive:
+#
+AddDefaultCharset UTF-8
+
+
+ #
+ # The mod_mime_magic module allows the server to use various hints from the
+ # contents of the file itself to determine its type. The MIMEMagicFile
+ # directive tells the module where the hint definitions are located.
+ #
+ MIMEMagicFile conf/magic
+
+
+#
+# Customizable error responses come in three flavors:
+# 1) plain text 2) local redirects 3) external redirects
+#
+# Some examples:
+#ErrorDocument 500 "The server made a boo boo."
+#ErrorDocument 404 /missing.html
+#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
+#ErrorDocument 402 http://www.example.com/subscription_info.html
+#
+
+#
+# EnableMMAP and EnableSendfile: On systems that support it,
+# memory-mapping or the sendfile syscall may be used to deliver
+# files. This usually improves server performance, but must
+# be turned off when serving from networked-mounted
+# filesystems or if support for these functions is otherwise
+# broken on your system.
+# Defaults if commented: EnableMMAP On, EnableSendfile Off
+#
+#EnableMMAP off
+EnableSendfile on
+
+# Supplemental configuration
+#
+# Load config files in the "/etc/httpd/conf.d" directory, if any.
+IncludeOptional conf.d/*.conf
diff --git a/SOURCES/httpd.conf.xml b/SOURCES/httpd.conf.xml
new file mode 100644
index 0000000..705e527
--- /dev/null
+++ b/SOURCES/httpd.conf.xml
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+ httpd.conf
+ httpd
+ AuthorOrtonJoejorton@redhat.com
+
+
+
+ httpd.conf
+ 5
+
+
+
+ httpd.conf
+ Configuration files for httpd
+
+
+
+
+ /etc/httpd/conf/httpd.conf,
+ /etc/httpd/conf.modules.d,
+ /etc/httpd/conf.d
+
+
+
+
+ Description
+
+ The main configuration file for the httpd daemon is
+ /etc/httpd/conf/httpd.conf. The syntax of
+ this file is described at , and
+ the full set of available directives is listed at .
+
+
+
+ Configuration structure
+
+ The main configuration file
+ (httpd.conf) sets up various defaults and
+ includes configuration files from two directories -
+ /etc/httpd/conf.modules.d and
+ /etc/httpd/conf.d. Packages containing
+ loadable modules (like ) place files
+ in the conf.modules.d directory with the
+ appropriate directive so that module
+ is loaded by default.
+
+ Some notable configured defaults are:.
+
+
+
+
+ The default document root from which content
+ is served.
+
+
+
+ The daemon lists on TCP port 80.
+
+
+
+ Error messages are logged to
+ @LOGDIR@/error_log.
+
+
+
+ CGI scripts are served via the URL-path .
+
+
+
+
+ To remove any of the default configuration provided in
+ separate files covered below, replace that file with an empty
+ file rather than removing it from the filesystem, otherwise it
+ may be restored to the original when the package which provides
+ it is upgraded.
+
+
+
+
+ MPM configuration
+
+ The configuration file at
+ /etc/httpd/conf.modules.d/00-mpm.conf is
+ used to select the multi-processing module (MPM), which governs
+ how httpd divides work between processes
+ and/or threads at run-time. Exactly one
+ directive must be uncommented in
+ this file; by default the MPM is enabled.
+ For more information on MPMs, see .
+
+ If using the prefork MPM, the
+ "httpd_graceful_shutdown" SELinux boolean should also be
+ enabled, since with this MPM, httpd needs to establish TCP
+ connections to local ports to successfully complete a graceful
+ restart or shutdown. This boolean can be enabled by running the
+ command: semanage boolean -m --on
+ httpd_graceful_shutdown
+
+
+
+ Module configuration files
+
+ Module configuration files are provided in the
+ /etc/httpd/conf.modules.d/ directory. Filenames
+ in this directory are by convention prefixed with two digit numeric
+ prefix to ensure they are processed in the desired order. Core
+ modules provide with the httpd package are
+ loaded by files with a prefix to ensure
+ these are loaded first. Only filenames with a
+ suffix in this directory will be
+ processed.
+
+ Other provided configuration files are listed below.
+
+
+
+ /etc/httpd/conf.modules.d/00-base.conf
+ The set of core modules included with
+ httpd which are all loaded by
+ default.
+
+
+
+ /etc/httpd/conf.modules.d/00-optional.conf
+ The set of non-core modules included with
+ httpd which are not
+ loaded by default.
+
+
+
+
+ /etc/httpd/conf.modules.d/00-systemd.conf
+ This file loads
+ which is necessary for the correct operation of the
+ httpd.service service, and should not be
+ removed or disabled.
+
+
+
+
+
+
+ Other configuration files
+
+ Default module configuration files and site-specific
+ configuration files are loaded from the
+ /etc/httpd/conf.d/ directory. Only files
+ with a suffix will be loaded. The
+ following files are provided:
+
+
+
+ /etc/httpd/conf.d/userdir.conf
+ This file gives an example configuration for
+ to map URLs such as
+ to
+ /home/jim/public_html/. Userdir mapping
+ is disabled by default.
+
+
+
+ /etc/httpd/conf.d/autoindex.conf
+ This file provides the default configuration
+ for which generates HTML
+ directory listings when enabled. It also makes file icon
+ image files available at the
+ URL-path.
+
+
+
+ /etc/httpd/conf.d/welcome.conf
+ This file enables a "welcome page" at
+ if no content is present
+ in the default documentation root
+ /var/www/html.
+
+
+
+ /etc/httpd/conf.d/ssl.conf (present only if is installed)
+ This file configures a TLS
+ listening on port
+ . If the default configuration is used,
+ the referenced test certificate and private key are
+ generated the first time httpd.service is
+ started; see
+ httpd-init.service8
+ for more information.
+
+
+
+
+
+
+ Instantiated services
+
+ As an alternative to (or in addition to) the
+ httpd.service unit, the instantiated template
+ service httpd@.service unit file can be used,
+ which starts httpd using a different
+ configuration file to the default. For example,
+ systemctl start httpd@foobar.service will
+ start httpd using the configuration file
+ /etc/httpd/conf/foobar.conf. See httpd@.service8 for more information.
+
+
+
+
+ Files
+
+
+ /etc/httpd/conf/httpd.conf,
+ /etc/httpd/conf.d,
+ /etc/httpd/conf.modules.d
+
+
+
+
+ See also
+
+
+ httpd8,
+ httpd.service8,
+ ,
+
+
+
+
+
+
+
diff --git a/SOURCES/httpd.logrotate b/SOURCES/httpd.logrotate
new file mode 100644
index 0000000..28c9730
--- /dev/null
+++ b/SOURCES/httpd.logrotate
@@ -0,0 +1,9 @@
+/var/log/httpd/*log {
+ missingok
+ notifempty
+ sharedscripts
+ delaycompress
+ postrotate
+ /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
+ endscript
+}
diff --git a/SOURCES/httpd.service b/SOURCES/httpd.service
new file mode 100644
index 0000000..6ff4e8b
--- /dev/null
+++ b/SOURCES/httpd.service
@@ -0,0 +1,32 @@
+# See httpd.service(8) for more information on using the httpd service.
+
+# Modifying this file in-place is not recommended, because changes
+# will be overwritten during package upgrades. To customize the
+# behaviour, run "systemctl edit httpd" to create an override unit.
+
+# For example, to pass additional options (such as -D definitions) to
+# the httpd binary at startup, create an override unit (as is done by
+# systemctl edit) and enter the following:
+
+# [Service]
+# Environment=OPTIONS=-DMY_DEFINE
+
+[Unit]
+Description=The Apache HTTP Server
+Wants=httpd-init.service
+After=network.target remote-fs.target nss-lookup.target httpd-init.service
+Documentation=man:httpd.service(8)
+
+[Service]
+Type=notify
+Environment=LANG=C
+
+ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
+ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
+# Send SIGWINCH for graceful stop
+KillSignal=SIGWINCH
+KillMode=mixed
+PrivateTmp=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/SOURCES/httpd.service.xml b/SOURCES/httpd.service.xml
new file mode 100644
index 0000000..b2c72dd
--- /dev/null
+++ b/SOURCES/httpd.service.xml
@@ -0,0 +1,332 @@
+
+
+
+
+
+
+ httpd systemd units
+ httpd
+ AuthorOrtonJoejorton@redhat.com
+
+
+
+ httpd.service
+ 8
+
+
+
+ httpd.service
+ httpd@.service
+ httpd.socket
+ httpd-init.service
+ httpd unit files for systemd
+
+
+
+
+ /usr/lib/systemd/system/httpd.service,
+ /usr/lib/systemd/system/httpd@.service,
+ /usr/lib/systemd/system/httpd-init.service,
+ /usr/lib/systemd/system/httpd.socket
+
+
+
+
+ Description
+
+ This manual page describes the systemd
+ unit files used to integrate the httpd daemon
+ with systemd. Two main unit files are
+ available: httpd.service allows the
+ httpd daemon to be run as a system service, and
+ httpd.socket allows httpd to be started via
+ socket-based activation. Most systems will use
+ httpd.service.
+
+ The apachectl command has been modified
+ to invoke systemctl for most uses, so for
+ example, running apachectl start is equivalent
+ to running systemctl start httpd.service. This
+ ensures that the running httpd daemon is tracked and managed by
+ systemd. In contrast, running
+ httpd directly from a root shell will start the
+ service outside of systemd; in this case,
+ default security restrictions described below (including, but not
+ limited to, SELinux) will not be enforced.
+
+
+ Changing default behaviour
+
+ To change the default behaviour of the httpd service, an
+ over-ride file should be created, rather
+ than changing
+ /usr/lib/systemd/system/httpd.service
+ directly, since such changes would be lost over package
+ upgrades. Running systemctl edit
+ httpd.service or systemctl edit
+ httpd.socket as root will create a drop-in file (in
+ the former case, in
+ /etc/systemd/system/httpd.service.d) which
+ over-rides the system defaults.
+
+ For example, to set the
+ environment variable for the daemon, run systemctl edit
+ httpd.service and enter:
+
+ [Service]
+Environment=LD_LIBRARY_PATH=/opt/vendor/lib
+
+
+
+ Starting the service at boot time
+
+ The httpd.service and httpd.socket units are
+ disabled by default. To start the httpd
+ service at boot time, run: systemctl enable
+ httpd.service. In the default configuration, the
+ httpd daemon will accept connections on port 80 (and, if mod_ssl
+ is installed, TLS connections on port 443) for any configured
+ IPv4 or IPv6 address.
+
+ If httpd is configured to depend on any specific IP
+ address (for example, with a "Listen" directive) which may only
+ become available during start-up, or if httpd depends on other
+ services (such as a database daemon), the service
+ must be configured to ensure correct
+ start-up ordering.
+
+ For example, to ensure httpd is only running after all
+ configured network interfaces are configured, create a drop-in
+ file (as described above) with the following section:
+
+ [Unit]
+After=network-online.target
+Wants=network-online.target
+
+ See
+ for more information on start-up ordering with systemd.
+
+
+
+
+ SSL/TLS certificate generation
+
+ The httpd-init.service unit is provided
+ with the mod_ssl package. This oneshot unit automatically
+ creates a TLS server certificate and key (using a generated
+ self-signed CA certificate and key) for testing purposes before
+ httpd is started. To inhibit certificate generation, use
+ systemctl mask httpd-init.service after
+ installing mod_ssl, and adjust the mod_ssl configuration to use
+ an appropriate certificate and key.
+
+
+
+
+ Reloading and stopping the service
+
+ When running systemctl reload
+ httpd.service, a graceful
+ restart is used, which sends a signal to the httpd parent
+ process to reload the configuration and re-open log files. Any
+ children with open connections at the time of reload will
+ terminate only once they have completed serving requests. This
+ prevents users of the server seeing errors (or potentially
+ losing data) due to the reload, but means some there is some
+ delay before any configuration changes take effect for all
+ users.
+
+ Similarly, a graceful stop is used
+ when systemctl stop httpd.service is run,
+ which terminates the server only once active connections have
+ been processed.
+
+ To "ungracefully" stop the server without waiting for
+ requests to complete, use systemctl kill
+ --kill-who=main httpd; similarly to "ungracefully"
+ reload the configuration, use systemctl kill
+ --kill-who=main --signal=HUP httpd.
+
+
+
+ Automated service restarts
+
+ System packages (including the httpd package itself) may
+ restart the httpd service automatically after packages are
+ upgraded, installed, or removed. This is done using the
+ systemctl reload httpd.service, which
+ produces a graceful restart by default as
+ described above.
+
+ To suppress automatic reloads entirely, create the file
+ /etc/sysconfig/httpd-disable-posttrans.
+
+
+
+ Changing the default MPM (Multi-Processing Module)
+
+ httpd offers a choice of multi-processing modules (MPMs),
+ which can be configured in
+ /etc/httpd/conf.modules.d/00-mpm.conf.
+ See
+ httpd.conf5
+ for more information on changing the MPM.
+
+
+
+ systemd integration and mod_systemd
+
+ The httpd service uses the systemd
+ service type. The mod_systemd module must be
+ loaded (as in the default configuration) for this to work
+ correctly - the service will fail if this module is not
+ loaded. mod_systemd also makes worker and
+ request statistics available when running systemctl status
+ httpd. See
+ systemd.exec5
+ for more information on systemd service types.
+
+
+
+ Security and SELinux
+
+ The default SELinux policy restricts the httpd service in
+ various ways. For example, the default policy limits the ports
+ to which httpd can bind (using the Listen
+ directive), which parts of the filesystem can be accessed, and
+ whether outgoing TCP connections are possible. Many of these
+ restrictions can be relaxed or adjusted by using
+ semanage to change booleans or other
+ types. See
+ httpd_selinux8
+ for more information.
+
+ The httpd service enables PrivateTmp
+ by default. The /tmp and
+ /var/tmp directories available within the
+ httpd process (and CGI scripts, etc) are not shared by other
+ processes. See
+ systemd.exec5
+ for more information.
+
+
+
+
+ Socket activation
+
+ Socket activation (see
+ systemd.socket5
+ for more information) can be used with httpd
+ by enabling the httpd.socket unit. The
+ httpd listener configuration must exactly
+ match the ListenStream options configured for
+ the httpd.socket unit. The default
+ httpd.socket has a
+ ListenStream=80 and, if mod_ssl is installed,
+ ListenStream=443 by a drop-in file. If
+ additional Listen directives are added to the
+ httpd configuration, corresponding
+ ListenStream options should be added via
+ drop-in files, for example via systemctl edit
+ httpd.socket.
+
+ If using socket activation with httpd, only one listener
+ on any given TCP port is supported; a configuration with both
+ "Listen 127.0.0.1:80" and "Listen
+ 192.168.1.2:80" will not work.
+
+
+
+ Instantiated services
+
+ The httpd@.service unit is an
+ instantiated template service. An instance of this unit will be
+ started using the configuration file
+ /etc/httpd/conf/INSTANCE.conf, where
+ INSTANCE is replaced with the instance
+ name. For example, systemctl start
+ httpd@foobar.service will start httpd using the
+ configuration file
+ /etc/httpd/conf/foobar.conf. The
+ environment variable is set to
+ the instance name by the unit and is available for use within
+ the configuration file.
+
+ To allow multiple instances of httpd to run
+ simultaneously, a number of configuration directives must be
+ changed, such as PidFile and
+ DefaultRuntimeDir to pick non-conflicting
+ paths, and Listen to choose different ports.
+ The example configuration file
+ /usr/share/doc/httpd/instance.conf
+ demonstrates how to make such changes using
+ variable.
+
+ It can be useful to configure instances of
+ httpd@.service to reload when
+ httpd.service is reloaded; for example,
+ logrotate will reload only
+ httpd.service when logs are rotated. If this
+ behaviour is required, create a drop-in file for the instance as
+ follows:
+
+ [Unit]
+ReloadPropagatedFrom=httpd.service
+
+ As with normal units, drop-in files for instances can be created
+ using systemctl edit, e.g. systemctl edit
+ httpd@foobar.service.
+
+
+
+
+
+ Files
+
+ /usr/lib/systemd/system/httpd.service,
+ /usr/lib/systemd/system/httpd.socket,
+ /usr/lib/systemd/system/httpd@.service,
+ /etc/systemd/systemd/httpd.service.d
+
+
+
+ See also
+
+
+ httpd8,
+ httpd.conf5,
+ systemd1,
+ systemctl1,
+ systemd.service5,
+ systemd.exec5,
+ systemd.socket5,
+ httpd_selinux8,
+ semanage8
+
+
+
+
+
+
diff --git a/SOURCES/httpd.socket b/SOURCES/httpd.socket
new file mode 100644
index 0000000..074695e
--- /dev/null
+++ b/SOURCES/httpd.socket
@@ -0,0 +1,13 @@
+# See httpd.socket(8) for more information on using the httpd service.
+
+[Unit]
+Description=Apache httpd Server Socket
+Documentation=man:httpd.socket(8)
+
+[Socket]
+ListenStream=80
+NoDelay=true
+DeferAcceptSec=30
+
+[Install]
+WantedBy=sockets.target
diff --git a/SOURCES/httpd.tmpfiles b/SOURCES/httpd.tmpfiles
new file mode 100644
index 0000000..f148886
--- /dev/null
+++ b/SOURCES/httpd.tmpfiles
@@ -0,0 +1,2 @@
+d /run/httpd 710 root apache
+d /run/httpd/htcacheclean 700 apache apache
diff --git a/SOURCES/httpd@.service b/SOURCES/httpd@.service
new file mode 100644
index 0000000..c58ae88
--- /dev/null
+++ b/SOURCES/httpd@.service
@@ -0,0 +1,23 @@
+# This is a template for httpd instances.
+# See httpd@.service(8) for more information.
+
+[Unit]
+Description=The Apache HTTP Server
+After=network.target remote-fs.target nss-lookup.target
+Documentation=man:httpd@.service(8)
+
+[Service]
+Type=notify
+Environment=LANG=C
+Environment=HTTPD_INSTANCE=%i
+ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-%i
+ExecStartPre=/bin/chown root.apache /run/httpd/instance-%i
+ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND -f conf/%i.conf
+ExecReload=/usr/sbin/httpd $OPTIONS -k graceful -f conf/%i.conf
+# Send SIGWINCH for graceful stop
+KillSignal=SIGWINCH
+KillMode=mixed
+PrivateTmp=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/SOURCES/index.html b/SOURCES/index.html
new file mode 100644
index 0000000..06ad3fc
--- /dev/null
+++ b/SOURCES/index.html
@@ -0,0 +1,123 @@
+
+
+
+
+ Test Page for the Apache HTTP Server on Red Hat Enterprise Linux
+
+
+
+
+
+
Red Hat Enterprise Linux Test Page
+
+
+
+
This page is used to test the proper operation of the Apache HTTP server after it has been installed. If you can read this page, it means that the Apache HTTP server installed at this site is working properly.
+
+
+
+
+
+
If you are a member of the general public:
+
+
The fact that you are seeing this page indicates that the website you just visited is either experiencing problems, or is undergoing routine maintenance.
+
+
If you would like to let the administrators of this website know that you've seen this page instead of the page you expected, you should send them e-mail. In general, mail sent to the name "webmaster" and directed to the website's domain should reach the appropriate person.
+
+
For example, if you experienced problems while visiting www.example.com, you should send e-mail to "webmaster@example.com".
You may now add content to the directory /var/www/html/. Note that until you do so, people visiting your website will see this page, and not your content. To prevent this page from ever being used, follow the instructions in the file /etc/httpd/conf.d/welcome.conf.
+
+
You are free to use the image below on web sites powered by the Apache HTTP Server:
+
+
+
+
+
+
+
+
diff --git a/SOURCES/instance.conf b/SOURCES/instance.conf
new file mode 100644
index 0000000..f2b03f7
--- /dev/null
+++ b/SOURCES/instance.conf
@@ -0,0 +1,23 @@
+#
+# This is an example instance-specific configuration file. See the
+# httpd.service(8) man page for detailed information on using the
+# the httpd@.service with instances.
+#
+# To use this example, copy instance.conf to /etc/httpd/conf/foobar.conf
+# This config will then used as the default configuration when
+# running:
+#
+# # systemctl start httpd@foobar.service
+#
+# The changes compared to the default are:
+# - DefaultRuntime and Pidfile renamed to be instance-specific
+# - default logfile names are prefixed with the instance name
+# - /etc/httpd/conf.d is NOT included by default (conf.modules.d still is)
+#
+# Further customisations will be required for an instance to run
+# simultaneously to httpd.service under the default configuration,
+# e.g. changing the port used with Listen.
+#
+
+DefaultRuntimeDir /run/httpd/instance-${HTTPD_INSTANCE}
+PidFile /run/httpd/instance-${HTTPD_INSTANCE}.pid
diff --git a/SOURCES/manual.conf b/SOURCES/manual.conf
new file mode 100644
index 0000000..133652b
--- /dev/null
+++ b/SOURCES/manual.conf
@@ -0,0 +1,13 @@
+#
+# This configuration file allows the manual to be accessed at
+# http://localhost/manual/
+#
+Alias /manual /usr/share/httpd/manual
+
+
+ Options Indexes
+ AllowOverride None
+ Require all granted
+
+ RedirectMatch 301 ^/manual/(?:da|de|en|es|fr|ja|ko|pt-br|ru|tr|zh-cn)(/.*)$ "/manual$1"
+
diff --git a/SOURCES/ssl.conf b/SOURCES/ssl.conf
new file mode 100644
index 0000000..d28adf3
--- /dev/null
+++ b/SOURCES/ssl.conf
@@ -0,0 +1,203 @@
+#
+# When we also provide SSL we have to listen to the
+# standard HTTPS port in addition.
+#
+Listen 443 https
+
+##
+## SSL Global Context
+##
+## All SSL configuration in this context applies both to
+## the main server and all SSL-enabled virtual hosts.
+##
+
+# Pass Phrase Dialog:
+# Configure the pass phrase gathering process.
+# The filtering dialog program (`builtin' is a internal
+# terminal dialog) has to provide the pass phrase on stdout.
+SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
+
+# Inter-Process Session Cache:
+# Configure the SSL Session Cache: First the mechanism
+# to use and second the expiring timeout (in seconds).
+SSLSessionCache shmcb:/run/httpd/sslcache(512000)
+SSLSessionCacheTimeout 300
+
+#
+# Use "SSLCryptoDevice" to enable any supported hardware
+# accelerators. Use "openssl engine -v" to list supported
+# engine names. NOTE: If you enable an accelerator and the
+# server does not start, consult the error logs and ensure
+# your accelerator is functioning properly.
+#
+SSLCryptoDevice builtin
+#SSLCryptoDevice ubsec
+
+##
+## SSL Virtual Host Context
+##
+
+
+
+# General setup for the virtual host, inherited from global configuration
+#DocumentRoot "/var/www/html"
+#ServerName www.example.com:443
+
+# Use separate log files for the SSL virtual host; note that LogLevel
+# is not inherited from httpd.conf.
+ErrorLog logs/ssl_error_log
+TransferLog logs/ssl_access_log
+LogLevel warn
+
+# SSL Engine Switch:
+# Enable/Disable SSL for this virtual host.
+SSLEngine on
+
+# List the protocol versions which clients are allowed to connect with.
+# The OpenSSL system profile is used by default. See
+# update-crypto-policies(8) for more details.
+#SSLProtocol all -SSLv3
+#SSLProxyProtocol all -SSLv3
+
+# User agents such as web browsers are not configured for the user's
+# own preference of either security or performance, therefore this
+# must be the prerogative of the web server administrator who manages
+# cpu load versus confidentiality, so enforce the server's cipher order.
+SSLHonorCipherOrder on
+
+# SSL Cipher Suite:
+# List the ciphers that the client is permitted to negotiate.
+# See the mod_ssl documentation for a complete list.
+# The OpenSSL system profile is configured by default. See
+# update-crypto-policies(8) for more details.
+SSLCipherSuite PROFILE=SYSTEM
+SSLProxyCipherSuite PROFILE=SYSTEM
+
+# Point SSLCertificateFile at a PEM encoded certificate. If
+# the certificate is encrypted, then you will be prompted for a
+# pass phrase. Note that restarting httpd will prompt again. Keep
+# in mind that if you have both an RSA and a DSA certificate you
+# can configure both in parallel (to also allow the use of DSA
+# ciphers, etc.)
+# Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
+# require an ECC certificate which can also be configured in
+# parallel.
+SSLCertificateFile /etc/pki/tls/certs/localhost.crt
+
+# Server Private Key:
+# If the key is not combined with the certificate, use this
+# directive to point at the key file. Keep in mind that if
+# you've both a RSA and a DSA private key you can configure
+# both in parallel (to also allow the use of DSA ciphers, etc.)
+# ECC keys, when in use, can also be configured in parallel
+SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
+
+# Server Certificate Chain:
+# Point SSLCertificateChainFile at a file containing the
+# concatenation of PEM encoded CA certificates which form the
+# certificate chain for the server certificate. Alternatively
+# the referenced file can be the same as SSLCertificateFile
+# when the CA certificates are directly appended to the server
+# certificate for convenience.
+#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
+
+# Certificate Authority (CA):
+# Set the CA certificate verification path where to find CA
+# certificates for client authentication or alternatively one
+# huge file containing all of them (file must be PEM encoded)
+#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
+
+# Client Authentication (Type):
+# Client certificate verification type and depth. Types are
+# none, optional, require and optional_no_ca. Depth is a
+# number which specifies how deeply to verify the certificate
+# issuer chain before deciding the certificate is not valid.
+#SSLVerifyClient require
+#SSLVerifyDepth 10
+
+# Access Control:
+# With SSLRequire you can do per-directory access control based
+# on arbitrary complex boolean expressions containing server
+# variable checks and other lookup directives. The syntax is a
+# mixture between C and Perl. See the mod_ssl documentation
+# for more details.
+#
+#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
+# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
+# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
+# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
+# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
+# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
+#
+
+# SSL Engine Options:
+# Set various options for the SSL engine.
+# o FakeBasicAuth:
+# Translate the client X.509 into a Basic Authorisation. This means that
+# the standard Auth/DBMAuth methods can be used for access control. The
+# user name is the `one line' version of the client's X.509 certificate.
+# Note that no password is obtained from the user. Every entry in the user
+# file needs this password: `xxj31ZMTZzkVA'.
+# o ExportCertData:
+# This exports two additional environment variables: SSL_CLIENT_CERT and
+# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
+# server (always existing) and the client (only existing when client
+# authentication is used). This can be used to import the certificates
+# into CGI scripts.
+# o StdEnvVars:
+# This exports the standard SSL/TLS related `SSL_*' environment variables.
+# Per default this exportation is switched off for performance reasons,
+# because the extraction step is an expensive operation and is usually
+# useless for serving static content. So one usually enables the
+# exportation for CGI and SSI requests only.
+# o StrictRequire:
+# This denies access when "SSLRequireSSL" or "SSLRequire" applied even
+# under a "Satisfy any" situation, i.e. when it applies access is denied
+# and no other module can change it.
+# o OptRenegotiate:
+# This enables optimized SSL connection renegotiation handling when SSL
+# directives are used in per-directory context.
+#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
+
+ SSLOptions +StdEnvVars
+
+
+ SSLOptions +StdEnvVars
+
+
+# SSL Protocol Adjustments:
+# The safe and default but still SSL/TLS standard compliant shutdown
+# approach is that mod_ssl sends the close notify alert but doesn't wait for
+# the close notify alert from client. When you need a different shutdown
+# approach you can use one of the following variables:
+# o ssl-unclean-shutdown:
+# This forces an unclean shutdown when the connection is closed, i.e. no
+# SSL close notify alert is sent or allowed to be received. This violates
+# the SSL/TLS standard but is needed for some brain-dead browsers. Use
+# this when you receive I/O errors because of the standard approach where
+# mod_ssl sends the close notify alert.
+# o ssl-accurate-shutdown:
+# This forces an accurate shutdown when the connection is closed, i.e. a
+# SSL close notify alert is sent and mod_ssl waits for the close notify
+# alert of the client. This is 100% SSL/TLS standard compliant, but in
+# practice often causes hanging connections with brain-dead browsers. Use
+# this only for browsers where you know that their SSL implementation
+# works correctly.
+# Notice: Most problems of broken clients are also related to the HTTP
+# keep-alive facility, so you usually additionally want to disable
+# keep-alive for those clients, too. Use variable "nokeepalive" for this.
+# Similarly, one has to force some clients to use HTTP/1.0 to workaround
+# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
+# "force-response-1.0" for this.
+BrowserMatch "MSIE [2-5]" \
+ nokeepalive ssl-unclean-shutdown \
+ downgrade-1.0 force-response-1.0
+
+# Per-Server Logging:
+# The home of a custom SSL log file. Use this when you want a
+# compact non-error SSL logfile on a virtual host basis.
+CustomLog logs/ssl_request_log \
+ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
+
+
+
diff --git a/SOURCES/userdir.conf b/SOURCES/userdir.conf
new file mode 100644
index 0000000..b5d7a49
--- /dev/null
+++ b/SOURCES/userdir.conf
@@ -0,0 +1,36 @@
+#
+# UserDir: The name of the directory that is appended onto a user's home
+# directory if a ~user request is received.
+#
+# The path to the end user account 'public_html' directory must be
+# accessible to the webserver userid. This usually means that ~userid
+# must have permissions of 711, ~userid/public_html must have permissions
+# of 755, and documents contained therein must be world-readable.
+# Otherwise, the client will only receive a "403 Forbidden" message.
+#
+
+ #
+ # UserDir is disabled by default since it can confirm the presence
+ # of a username on the system (depending on home directory
+ # permissions).
+ #
+ UserDir disabled
+
+ #
+ # To enable requests to /~user/ to serve the user's public_html
+ # directory, remove the "UserDir disabled" line above, and uncomment
+ # the following line instead:
+ #
+ #UserDir public_html
+
+
+#
+# Control access to UserDir directories. The following is an example
+# for a site where these directories are restricted to read-only.
+#
+
+ AllowOverride FileInfo AuthConfig Limit Indexes
+ Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
+ Require method GET POST OPTIONS
+
+
diff --git a/SOURCES/welcome.conf b/SOURCES/welcome.conf
new file mode 100644
index 0000000..5d1e452
--- /dev/null
+++ b/SOURCES/welcome.conf
@@ -0,0 +1,18 @@
+#
+# This configuration file enables the default "Welcome" page if there
+# is no default index page present for the root URL. To disable the
+# Welcome page, comment out all the lines below.
+#
+# NOTE: if this file is removed, it will be restored on upgrades.
+#
+
+ Options -Indexes
+ ErrorDocument 403 /.noindex.html
+
+
+
+ AllowOverride None
+ Require all granted
+
+
+Alias /.noindex.html /usr/share/httpd/noindex/index.html
diff --git a/SPECS/httpd.spec b/SPECS/httpd.spec
new file mode 100644
index 0000000..d07a4b1
--- /dev/null
+++ b/SPECS/httpd.spec
@@ -0,0 +1,1628 @@
+%define contentdir %{_datadir}/httpd
+%define docroot /var/www
+%define suexec_caller apache
+%define mmn 20120211
+%define mmnisa %{mmn}%{__isa_name}%{__isa_bits}
+%define vstring %(source /etc/os-release; echo ${REDHAT_SUPPORT_PRODUCT})
+%if 0%{?fedora} > 26 || 0%{?rhel} > 7
+%global mpm event
+%else
+%global mpm prefork
+%endif
+
+Summary: Apache HTTP Server
+Name: httpd
+Version: 2.4.37
+Release: 30%{?dist}
+URL: https://httpd.apache.org/
+Source0: https://www.apache.org/dist/httpd/httpd-%{version}.tar.bz2
+Source1: index.html
+Source2: httpd.logrotate
+Source3: instance.conf
+Source4: httpd-ssl-pass-dialog
+Source5: httpd.tmpfiles
+Source6: httpd.service
+Source7: action-graceful.sh
+Source8: action-configtest.sh
+Source10: httpd.conf
+Source11: 00-base.conf
+Source12: 00-mpm.conf
+Source13: 00-lua.conf
+Source14: 01-cgi.conf
+Source15: 00-dav.conf
+Source16: 00-proxy.conf
+Source17: 00-ssl.conf
+Source18: 01-ldap.conf
+Source19: 00-proxyhtml.conf
+Source20: userdir.conf
+Source21: ssl.conf
+Source22: welcome.conf
+Source23: manual.conf
+Source24: 00-systemd.conf
+Source25: 01-session.conf
+Source26: 10-listen443.conf
+Source27: httpd.socket
+Source28: 00-optional.conf
+# Documentation
+Source30: README.confd
+Source31: README.confmod
+Source32: httpd.service.xml
+Source33: htcacheclean.service.xml
+Source34: httpd.conf.xml
+Source40: htcacheclean.service
+Source41: htcacheclean.sysconf
+Source42: httpd-init.service
+Source43: httpd-ssl-gencerts
+Source44: httpd@.service
+Source45: config.layout
+
+# build/scripts patches
+# http://bugzilla.redhat.com/show_bug.cgi?id=1231924
+# http://bugzilla.redhat.com/show_bug.cgi?id=842736
+# http://bugzilla.redhat.com/show_bug.cgi?id=1214401
+Patch1: httpd-2.4.35-apachectl.patch
+Patch2: httpd-2.4.28-apxs.patch
+Patch3: httpd-2.4.35-deplibs.patch
+
+# Needed for socket activation and mod_systemd patch
+Patch19: httpd-2.4.35-detect-systemd.patch
+
+# Features/functional changes
+Patch20: httpd-2.4.32-export.patch
+Patch21: httpd-2.4.35-corelimit.patch
+Patch22: httpd-2.4.35-selinux.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1170215
+Patch23: httpd-2.4.28-icons.patch
+Patch24: httpd-2.4.35-systemd.patch
+Patch25: httpd-2.4.35-cachehardmax.patch
+Patch26: httpd-2.4.28-socket-activation.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1109119
+Patch27: httpd-2.4.35-sslciphdefault.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1332242
+Patch28: httpd-2.4.28-statements-comment.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=811714
+Patch29: httpd-2.4.35-full-release.patch
+Patch30: httpd-2.4.35-freebind.patch
+Patch31: httpd-2.4.35-r1830819+.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1638738
+Patch32: httpd-2.4.37-sslprotdefault.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1747898
+Patch33: httpd-2.4.37-mod-md-mod-ssl-hooks.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1725031
+Patch34: httpd-2.4.37-r1861793+.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1704317
+Patch35: httpd-2.4.37-sslkeylogfile-support.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1794728
+Patch36: httpd-2.4.37-session-expiry-updt-int.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1209162
+Patch37: httpd-2.4.37-logjournal.patch
+# Bug fixes
+# https://bugzilla.redhat.com/show_bug.cgi?id=1397243
+Patch61: httpd-2.4.35-r1738878.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1170206
+Patch62: httpd-2.4.35-r1633085.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1448892
+Patch63: httpd-2.4.28-r1811831.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1602548
+Patch65: httpd-2.4.35-r1842888.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1653009
+# https://bugzilla.redhat.com/show_bug.cgi?id=1672977
+# https://bugzilla.redhat.com/show_bug.cgi?id=1673022
+Patch66: httpd-2.4.37-r1842929+.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1630432
+Patch67: httpd-2.4.35-r1825120.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1670716
+Patch68: httpd-2.4.37-fips-segfault.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1669221
+Patch70: httpd-2.4.37-r1840554.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1673022
+Patch71: httpd-2.4.37-mod-md-perms.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1724549
+Patch72: httpd-2.4.37-mod-mime-magic-strdup.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1724034
+Patch73: httpd-2.4.35-ocsp-wrong-ctx.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1633224
+Patch74: httpd-2.4.37-r1828172+.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1775158
+Patch75: httpd-2.4.37-r1870095+.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1771847
+Patch76: httpd-2.4.37-proxy-continue.patch
+Patch77: httpd-2.4.37-balancer-failover.patch
+
+
+# Security fixes
+Patch200: httpd-2.4.37-r1851471.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1694980
+Patch201: httpd-2.4.37-CVE-2019-0211.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1695025
+Patch202: httpd-2.4.37-CVE-2019-0215.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1696141
+Patch203: httpd-2.4.37-CVE-2019-0217.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1696097
+Patch204: httpd-2.4.37-CVE-2019-0220.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1741860
+# https://bugzilla.redhat.com/show_bug.cgi?id=1741864
+# https://bugzilla.redhat.com/show_bug.cgi?id=1741868
+Patch205: httpd-2.4.34-CVE-2019-9511-and-9516-and-9517.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1823259
+# https://bugzilla.redhat.com/show_bug.cgi?id=1747284
+# fixes both CVE-2020-1927 and CVE-2019-10098
+Patch206: httpd-2.4.37-CVE-2019-10098.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1747281
+Patch207: httpd-2.4.37-CVE-2019-10092.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1747291
+Patch208: httpd-2.4.37-CVE-2019-10097.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1820772
+Patch209: httpd-2.4.37-CVE-2020-1934.patch
+
+License: ASL 2.0
+Group: System Environment/Daemons
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
+BuildRequires: autoconf, perl-interpreter, perl-generators, pkgconfig, findutils, xmlto
+BuildRequires: zlib-devel, libselinux-devel, lua-devel, brotli-devel
+BuildRequires: apr-devel >= 1.5.0, apr-util-devel >= 1.5.0, pcre-devel >= 5.0
+BuildRequires: systemd-devel
+Requires: /etc/mime.types, system-logos-httpd
+Obsoletes: httpd-suexec
+Provides: webserver
+Provides: mod_dav = %{version}-%{release}, httpd-suexec = %{version}-%{release}
+Provides: httpd-mmn = %{mmn}, httpd-mmn = %{mmnisa}
+Requires: httpd-tools = %{version}-%{release}
+Requires: httpd-filesystem = %{version}-%{release}
+Requires: mod_http2
+Requires(pre): httpd-filesystem
+Requires(preun): systemd-units
+Requires(postun): systemd-units
+Requires(post): systemd-units
+Conflicts: apr < 1.5.0-1
+
+%description
+The Apache HTTP Server is a powerful, efficient, and extensible
+web server.
+
+%package devel
+Group: Development/Libraries
+Summary: Development interfaces for the Apache HTTP server
+Requires: apr-devel, apr-util-devel, pkgconfig
+Requires: httpd = %{version}-%{release}
+
+%description devel
+The httpd-devel package contains the APXS binary and other files
+that you need to build Dynamic Shared Objects (DSOs) for the
+Apache HTTP Server.
+
+If you are installing the Apache HTTP server and you want to be
+able to compile or develop additional modules for Apache, you need
+to install this package.
+
+%package manual
+Group: Documentation
+Summary: Documentation for the Apache HTTP server
+Requires: httpd = %{version}-%{release}
+Obsoletes: secureweb-manual, apache-manual
+BuildArch: noarch
+
+%description manual
+The httpd-manual package contains the complete manual and
+reference guide for the Apache HTTP server. The information can
+also be found at http://httpd.apache.org/docs/2.2/.
+
+%package filesystem
+Group: System Environment/Daemons
+Summary: The basic directory layout for the Apache HTTP server
+BuildArch: noarch
+Requires(pre): /usr/sbin/useradd
+
+%description filesystem
+The httpd-filesystem package contains the basic directory layout
+for the Apache HTTP server including the correct permissions
+for the directories.
+
+%package tools
+Group: System Environment/Daemons
+Summary: Tools for use with the Apache HTTP Server
+
+%description tools
+The httpd-tools package contains tools which can be used with
+the Apache HTTP Server.
+
+%package -n mod_ssl
+Group: System Environment/Daemons
+Summary: SSL/TLS module for the Apache HTTP Server
+Epoch: 1
+BuildRequires: openssl-devel
+Requires(pre): httpd-filesystem
+Requires: httpd = 0:%{version}-%{release}, httpd-mmn = %{mmnisa}
+Requires: sscg >= 2.2.0
+Obsoletes: stronghold-mod_ssl
+# Require an OpenSSL which supports PROFILE=SYSTEM
+Conflicts: openssl-libs < 1:1.0.1h-4
+
+%description -n mod_ssl
+The mod_ssl module provides strong cryptography for the Apache Web
+server via the Secure Sockets Layer (SSL) and Transport Layer
+Security (TLS) protocols.
+
+%package -n mod_proxy_html
+Group: System Environment/Daemons
+Summary: HTML and XML content filters for the Apache HTTP Server
+Requires: httpd = 0:%{version}-%{release}, httpd-mmn = %{mmnisa}
+BuildRequires: libxml2-devel
+Epoch: 1
+Obsoletes: mod_proxy_html < 1:2.4.1-2
+
+%description -n mod_proxy_html
+The mod_proxy_html and mod_xml2enc modules provide filters which can
+transform and modify HTML and XML content.
+
+%package -n mod_ldap
+Group: System Environment/Daemons
+Summary: LDAP authentication modules for the Apache HTTP Server
+Requires: httpd = 0:%{version}-%{release}, httpd-mmn = %{mmnisa}
+Requires: apr-util-ldap
+
+%description -n mod_ldap
+The mod_ldap and mod_authnz_ldap modules add support for LDAP
+authentication to the Apache HTTP Server.
+
+%package -n mod_session
+Group: System Environment/Daemons
+Summary: Session interface for the Apache HTTP Server
+Requires: httpd = 0:%{version}-%{release}, httpd-mmn = %{mmnisa}
+
+%description -n mod_session
+The mod_session module and associated backends provide an abstract
+interface for storing and accessing per-user session data.
+
+%prep
+%setup -q
+%patch1 -p1 -b .apctl
+%patch2 -p1 -b .apxs
+%patch3 -p1 -b .deplibs
+
+%patch19 -p1 -b .detectsystemd
+%patch20 -p1 -b .export
+%patch21 -p1 -b .corelimit
+%patch22 -p1 -b .selinux
+%patch23 -p1 -b .icons
+%patch24 -p1 -b .systemd
+%patch25 -p1 -b .cachehardmax
+%patch26 -p1 -b .socketactivation
+%patch27 -p1 -b .sslciphdefault
+%patch28 -p1 -b .statementscomment
+%patch29 -p1 -b .fullrelease
+%patch30 -p1 -b .freebind
+%patch31 -p1 -b .r1830819+
+%patch32 -p1 -b .sslprotdefault
+%patch33 -p1 -b .mod-md-mod-ssl-hooks
+%patch34 -p1 -b .r1861793+
+%patch35 -p1 -b .sslkeylogfile-support
+%patch36 -p1 -b .session-expiry
+%patch37 -p1 -b .logjournal
+
+%patch61 -p1 -b .r1738878
+%patch62 -p1 -b .r1633085
+%patch63 -p1 -b .r1811831
+%patch65 -p1 -b .r1842888
+%patch66 -p1 -b .r1842929+
+%patch67 -p1 -b .r1825120
+%patch68 -p1 -b .fipscore
+%patch70 -p1 -b .r1840554
+%patch71 -p1 -b .modmdperms
+%patch72 -p1 -b .mimemagic
+%patch73 -p1 -b .ocspwrongctx
+%patch74 -p1 -b .r1828172+
+%patch75 -p1 -b .r1870095+
+%patch76 -p1 -b .proxy-continue
+%patch77 -p1 -b .balancer-failover
+
+
+%patch200 -p1 -b .r1851471
+%patch201 -p1 -b .CVE-2019-0211
+%patch202 -p1 -b .CVE-2019-0215
+%patch203 -p1 -b .CVE-2019-0217
+%patch204 -p1 -b .CVE-2019-0220
+%patch205 -p1 -b .CVE-2019-9511-and-9516-and-9517
+%patch206 -p1 -b .CVE-2019-10098
+%patch207 -p1 -b .CVE-2019-10092
+%patch208 -p1 -b .CVE-2019-10097
+%patch209 -p1 -b .CVE-2020-1934
+
+# Patch in the vendor string
+sed -i '/^#define PLATFORM/s/Unix/%{vstring}/' os/unix/os.h
+sed -i 's/@RELEASE@/%{release}/' server/core.c
+
+# Prevent use of setcap in "install-suexec-caps" target.
+sed -i '/suexec/s,setcap ,echo Skipping setcap for ,' Makefile.in
+
+# Example conf for instances
+cp $RPM_SOURCE_DIR/instance.conf .
+sed < $RPM_SOURCE_DIR/httpd.conf >> instance.conf '
+0,/^ServerRoot/d;
+/# Supplemental configuration/,$d
+/^ *CustomLog .logs/s,logs/,logs/${HTTPD_INSTANCE}_,
+/^ *ErrorLog .logs/s,logs/,logs/${HTTPD_INSTANCE}_,
+'
+touch -r $RPM_SOURCE_DIR/instance.conf instance.conf
+
+# Safety check: prevent build if defined MMN does not equal upstream MMN.
+vmmn=`echo MODULE_MAGIC_NUMBER_MAJOR | cpp -include include/ap_mmn.h | sed -n '/^2/p'`
+if test "x${vmmn}" != "x%{mmn}"; then
+ : Error: Upstream MMN is now ${vmmn}, packaged MMN is %{mmn}
+ : Update the mmn macro and rebuild.
+ exit 1
+fi
+
+# Provide default layout
+cp $RPM_SOURCE_DIR/config.layout .
+
+sed '
+s,@MPM@,%{mpm},g
+s,@DOCROOT@,%{docroot},g
+s,@LOGDIR@,%{_localstatedir}/log/httpd,g
+' < $RPM_SOURCE_DIR/httpd.conf.xml \
+ > httpd.conf.xml
+
+xmlto man ./httpd.conf.xml
+xmlto man $RPM_SOURCE_DIR/htcacheclean.service.xml
+xmlto man $RPM_SOURCE_DIR/httpd.service.xml
+
+: Building with MMN %{mmn}, MMN-ISA %{mmnisa}
+: Default MPM is %{mpm}, vendor string is '%{vstring}'
+
+%build
+# forcibly prevent use of bundled apr, apr-util, pcre
+rm -rf srclib/{apr,apr-util,pcre}
+
+# regenerate configure scripts
+autoheader && autoconf || exit 1
+
+# Before configure; fix location of build dir in generated apxs
+%{__perl} -pi -e "s:\@exp_installbuilddir\@:%{_libdir}/httpd/build:g" \
+ support/apxs.in
+
+export CFLAGS=$RPM_OPT_FLAGS
+export LDFLAGS="-Wl,-z,relro,-z,now"
+
+# Hard-code path to links to avoid unnecessary builddep
+export LYNX_PATH=/usr/bin/links
+
+# Build the daemon
+./configure \
+ --prefix=%{_sysconfdir}/httpd \
+ --exec-prefix=%{_prefix} \
+ --bindir=%{_bindir} \
+ --sbindir=%{_sbindir} \
+ --mandir=%{_mandir} \
+ --libdir=%{_libdir} \
+ --sysconfdir=%{_sysconfdir}/httpd/conf \
+ --includedir=%{_includedir}/httpd \
+ --libexecdir=%{_libdir}/httpd/modules \
+ --datadir=%{contentdir} \
+ --enable-layout=Fedora \
+ --with-installbuilddir=%{_libdir}/httpd/build \
+ --enable-mpms-shared=all \
+ --with-apr=%{_prefix} --with-apr-util=%{_prefix} \
+ --enable-suexec --with-suexec \
+ --enable-suexec-capabilities \
+ --with-suexec-caller=%{suexec_caller} \
+ --with-suexec-docroot=%{docroot} \
+ --without-suexec-logfile \
+ --with-suexec-syslog \
+ --with-suexec-bin=%{_sbindir}/suexec \
+ --with-suexec-uidmin=1000 --with-suexec-gidmin=1000 \
+ --with-brotli \
+ --enable-pie \
+ --with-pcre \
+ --enable-mods-shared=all \
+ --enable-ssl --with-ssl --disable-distcache \
+ --enable-proxy --enable-proxy-fdpass \
+ --enable-cache \
+ --enable-disk-cache \
+ --enable-ldap --enable-authnz-ldap \
+ --enable-cgid --enable-cgi \
+ --enable-cgid-fdpassing \
+ --enable-authn-anon --enable-authn-alias \
+ --disable-imagemap --disable-file-cache \
+ --disable-http2 \
+ --disable-md \
+ $*
+make %{?_smp_mflags}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+make DESTDIR=$RPM_BUILD_ROOT install
+
+# Install systemd service files
+mkdir -p $RPM_BUILD_ROOT%{_unitdir}
+for s in httpd.service htcacheclean.service httpd.socket \
+ httpd@.service httpd-init.service; do
+ install -p -m 644 $RPM_SOURCE_DIR/${s} \
+ $RPM_BUILD_ROOT%{_unitdir}/${s}
+done
+
+# install conf file/directory
+mkdir $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d \
+ $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d
+install -m 644 $RPM_SOURCE_DIR/README.confd \
+ $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d/README
+install -m 644 $RPM_SOURCE_DIR/README.confmod \
+ $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/README
+for f in 00-base.conf 00-mpm.conf 00-lua.conf 01-cgi.conf 00-dav.conf \
+ 00-proxy.conf 00-ssl.conf 01-ldap.conf 00-proxyhtml.conf \
+ 01-ldap.conf 00-systemd.conf 01-session.conf 00-optional.conf; do
+ install -m 644 -p $RPM_SOURCE_DIR/$f \
+ $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/$f
+done
+
+sed -i '/^#LoadModule mpm_%{mpm}_module /s/^#//' \
+ $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/00-mpm.conf
+touch -r $RPM_SOURCE_DIR/00-mpm.conf \
+ $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/00-mpm.conf
+
+# install systemd override drop directory
+# Web application packages can drop snippets into this location if
+# they need ExecStart[pre|post].
+mkdir $RPM_BUILD_ROOT%{_unitdir}/httpd.service.d
+mkdir $RPM_BUILD_ROOT%{_unitdir}/httpd.socket.d
+
+install -m 644 -p $RPM_SOURCE_DIR/10-listen443.conf \
+ $RPM_BUILD_ROOT%{_unitdir}/httpd.socket.d/10-listen443.conf
+
+for f in welcome.conf ssl.conf manual.conf userdir.conf; do
+ install -m 644 -p $RPM_SOURCE_DIR/$f \
+ $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d/$f
+done
+
+# Split-out extra config shipped as default in conf.d:
+for f in autoindex; do
+ install -m 644 docs/conf/extra/httpd-${f}.conf \
+ $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d/${f}.conf
+done
+
+# Extra config trimmed:
+rm -v docs/conf/extra/httpd-{ssl,userdir}.conf
+
+rm $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf/*.conf
+install -m 644 -p $RPM_SOURCE_DIR/httpd.conf \
+ $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf/httpd.conf
+
+mkdir $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
+install -m 644 -p $RPM_SOURCE_DIR/htcacheclean.sysconf \
+ $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/htcacheclean
+
+# tmpfiles.d configuration
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/tmpfiles.d
+install -m 644 -p $RPM_SOURCE_DIR/httpd.tmpfiles \
+ $RPM_BUILD_ROOT%{_prefix}/lib/tmpfiles.d/httpd.conf
+
+# Other directories
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/dav \
+ $RPM_BUILD_ROOT%{_localstatedir}/lib/httpd \
+ $RPM_BUILD_ROOT/run/httpd/htcacheclean
+
+# Substitute in defaults which are usually done (badly) by "make install"
+sed -i \
+ "s,@@ServerRoot@@/var,%{_localstatedir}/lib/dav,;
+ s,@@ServerRoot@@/user.passwd,/etc/httpd/conf/user.passwd,;
+ s,@@ServerRoot@@/docs,%{docroot},;
+ s,@@ServerRoot@@,%{docroot},;
+ s,@@Port@@,80,;" \
+ docs/conf/extra/*.conf
+
+# Create cache directory
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/cache/httpd \
+ $RPM_BUILD_ROOT%{_localstatedir}/cache/httpd/proxy \
+ $RPM_BUILD_ROOT%{_localstatedir}/cache/httpd/ssl
+
+# Make the MMN accessible to module packages
+echo %{mmnisa} > $RPM_BUILD_ROOT%{_includedir}/httpd/.mmn
+mkdir -p $RPM_BUILD_ROOT%{_rpmconfigdir}/macros.d
+cat > $RPM_BUILD_ROOT%{_rpmconfigdir}/macros.d/macros.httpd < $RPM_BUILD_ROOT%{_mandir}/man8/httpd.8
+
+# Make ap_config_layout.h libdir-agnostic
+sed -i '/.*DEFAULT_..._LIBEXECDIR/d;/DEFAULT_..._INSTALLBUILDDIR/d' \
+ $RPM_BUILD_ROOT%{_includedir}/httpd/ap_config_layout.h
+
+# Fix path to instdso in special.mk
+sed -i '/instdso/s,top_srcdir,top_builddir,' \
+ $RPM_BUILD_ROOT%{_libdir}/httpd/build/special.mk
+
+# Remove unpackaged files
+rm -vf \
+ $RPM_BUILD_ROOT%{_libdir}/*.exp \
+ $RPM_BUILD_ROOT/etc/httpd/conf/mime.types \
+ $RPM_BUILD_ROOT%{_libdir}/httpd/modules/*.exp \
+ $RPM_BUILD_ROOT%{_libdir}/httpd/build/config.nice \
+ $RPM_BUILD_ROOT%{_bindir}/{ap?-config,dbmmanage} \
+ $RPM_BUILD_ROOT%{_sbindir}/{checkgid,envvars*} \
+ $RPM_BUILD_ROOT%{contentdir}/htdocs/* \
+ $RPM_BUILD_ROOT%{_mandir}/man1/dbmmanage.* \
+ $RPM_BUILD_ROOT%{contentdir}/cgi-bin/*
+
+rm -rf $RPM_BUILD_ROOT/etc/httpd/conf/{original,extra}
+
+%pre filesystem
+getent group apache >/dev/null || groupadd -g 48 -r apache
+getent passwd apache >/dev/null || \
+ useradd -r -u 48 -g apache -s /sbin/nologin \
+ -d %{contentdir} -c "Apache" apache
+exit 0
+
+%post
+%systemd_post httpd.service htcacheclean.service httpd.socket
+
+%preun
+%systemd_preun httpd.service htcacheclean.service httpd.socket
+
+%postun
+%systemd_postun httpd.service htcacheclean.service httpd.socket
+
+# Trigger for conversion from SysV, per guidelines at:
+# https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Systemd
+%triggerun -- httpd < 2.2.21-5
+# Save the current service runlevel info
+# User must manually run systemd-sysv-convert --apply httpd
+# to migrate them to systemd targets
+/usr/bin/systemd-sysv-convert --save httpd.service >/dev/null 2>&1 ||:
+
+# Run these because the SysV package being removed won't do them
+/sbin/chkconfig --del httpd >/dev/null 2>&1 || :
+
+%posttrans
+test -f /etc/sysconfig/httpd-disable-posttrans || \
+ /bin/systemctl try-restart --no-block httpd.service htcacheclean.service >/dev/null 2>&1 || :
+
+%check
+# Check the built modules are all PIC
+if readelf -d $RPM_BUILD_ROOT%{_libdir}/httpd/modules/*.so | grep TEXTREL; then
+ : modules contain non-relocatable code
+ exit 1
+fi
+set +x
+rv=0
+# Ensure every mod_* that's built is loaded.
+for f in $RPM_BUILD_ROOT%{_libdir}/httpd/modules/*.so; do
+ m=${f##*/}
+ if ! grep -q $m $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/*.conf; then
+ echo ERROR: Module $m not configured. Disable it, or load it.
+ rv=1
+ fi
+done
+# Ensure every loaded mod_* is actually built
+mods=`grep -h ^LoadModule $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/*.conf | sed 's,.*modules/,,'`
+for m in $mods; do
+ f=$RPM_BUILD_ROOT%{_libdir}/httpd/modules/${m}
+ if ! test -x $f; then
+ echo ERROR: Module $m is configured but not built.
+ rv=1
+ fi
+done
+set -x
+exit $rv
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+
+%doc ABOUT_APACHE README CHANGES LICENSE VERSIONING NOTICE
+%doc docs/conf/extra/*.conf
+%doc instance.conf
+
+%{_sysconfdir}/httpd/modules
+%{_sysconfdir}/httpd/logs
+%{_sysconfdir}/httpd/state
+%{_sysconfdir}/httpd/run
+%dir %{_sysconfdir}/httpd/conf
+%config(noreplace) %{_sysconfdir}/httpd/conf/httpd.conf
+%config(noreplace) %{_sysconfdir}/httpd/conf/magic
+
+%config(noreplace) %{_sysconfdir}/logrotate.d/httpd
+
+%config(noreplace) %{_sysconfdir}/httpd/conf.d/*.conf
+%exclude %{_sysconfdir}/httpd/conf.d/ssl.conf
+%exclude %{_sysconfdir}/httpd/conf.d/manual.conf
+
+%dir %{_sysconfdir}/httpd/conf.modules.d
+%{_sysconfdir}/httpd/conf.modules.d/README
+%config(noreplace) %{_sysconfdir}/httpd/conf.modules.d/*.conf
+%exclude %{_sysconfdir}/httpd/conf.modules.d/00-ssl.conf
+%exclude %{_sysconfdir}/httpd/conf.modules.d/00-proxyhtml.conf
+%exclude %{_sysconfdir}/httpd/conf.modules.d/01-ldap.conf
+%exclude %{_sysconfdir}/httpd/conf.modules.d/01-session.conf
+
+%config(noreplace) %{_sysconfdir}/sysconfig/htcacheclean
+%{_prefix}/lib/tmpfiles.d/httpd.conf
+
+%dir %{_libexecdir}/initscripts/legacy-actions/httpd
+%{_libexecdir}/initscripts/legacy-actions/httpd/*
+
+%{_sbindir}/ht*
+%{_sbindir}/fcgistarter
+%{_sbindir}/apachectl
+%{_sbindir}/rotatelogs
+%caps(cap_setuid,cap_setgid+pe) %attr(510,root,%{suexec_caller}) %{_sbindir}/suexec
+
+%dir %{_libdir}/httpd
+%dir %{_libdir}/httpd/modules
+%{_libdir}/httpd/modules/mod*.so
+%exclude %{_libdir}/httpd/modules/mod_auth_form.so
+%exclude %{_libdir}/httpd/modules/mod_ssl.so
+%exclude %{_libdir}/httpd/modules/mod_*ldap.so
+%exclude %{_libdir}/httpd/modules/mod_proxy_html.so
+%exclude %{_libdir}/httpd/modules/mod_xml2enc.so
+%exclude %{_libdir}/httpd/modules/mod_session*.so
+
+%dir %{contentdir}/error
+%dir %{contentdir}/error/include
+%dir %{contentdir}/noindex
+%{contentdir}/icons/*
+%{contentdir}/error/README
+%{contentdir}/error/*.var
+%{contentdir}/error/include/*.html
+%{contentdir}/noindex/index.html
+
+%attr(0710,root,apache) %dir /run/httpd
+%attr(0700,apache,apache) %dir /run/httpd/htcacheclean
+%attr(0700,root,root) %dir %{_localstatedir}/log/httpd
+%attr(0700,apache,apache) %dir %{_localstatedir}/lib/dav
+%attr(0700,apache,apache) %dir %{_localstatedir}/lib/httpd
+%attr(0700,apache,apache) %dir %{_localstatedir}/cache/httpd
+%attr(0700,apache,apache) %dir %{_localstatedir}/cache/httpd/proxy
+
+%{_mandir}/man8/*
+%{_mandir}/man5/*
+%exclude %{_mandir}/man8/httpd-init.*
+
+%{_unitdir}/httpd.service
+%{_unitdir}/httpd@.service
+%{_unitdir}/htcacheclean.service
+%{_unitdir}/*.socket
+
+%files filesystem
+%dir %{_sysconfdir}/httpd
+%dir %{_sysconfdir}/httpd/conf.d
+%{_sysconfdir}/httpd/conf.d/README
+%dir %{docroot}
+%dir %{docroot}/cgi-bin
+%dir %{docroot}/html
+%dir %{contentdir}
+%dir %{contentdir}/icons
+%attr(755,root,root) %dir %{_unitdir}/httpd.service.d
+%attr(755,root,root) %dir %{_unitdir}/httpd.socket.d
+
+%files tools
+%defattr(-,root,root)
+%{_bindir}/*
+%{_mandir}/man1/*
+%doc LICENSE NOTICE
+%exclude %{_bindir}/apxs
+%exclude %{_mandir}/man1/apxs.1*
+
+%files manual
+%defattr(-,root,root)
+%{contentdir}/manual
+%config(noreplace) %{_sysconfdir}/httpd/conf.d/manual.conf
+
+%files -n mod_ssl
+%defattr(-,root,root)
+%{_libdir}/httpd/modules/mod_ssl.so
+%config(noreplace) %{_sysconfdir}/httpd/conf.modules.d/00-ssl.conf
+%config(noreplace) %{_sysconfdir}/httpd/conf.d/ssl.conf
+%attr(0700,apache,root) %dir %{_localstatedir}/cache/httpd/ssl
+%{_unitdir}/httpd-init.service
+%{_libexecdir}/httpd-ssl-pass-dialog
+%{_libexecdir}/httpd-ssl-gencerts
+%{_unitdir}/httpd.socket.d/10-listen443.conf
+%{_mandir}/man8/httpd-init.*
+
+%files -n mod_proxy_html
+%defattr(-,root,root)
+%{_libdir}/httpd/modules/mod_proxy_html.so
+%{_libdir}/httpd/modules/mod_xml2enc.so
+%config(noreplace) %{_sysconfdir}/httpd/conf.modules.d/00-proxyhtml.conf
+
+%files -n mod_ldap
+%defattr(-,root,root)
+%{_libdir}/httpd/modules/mod_*ldap.so
+%config(noreplace) %{_sysconfdir}/httpd/conf.modules.d/01-ldap.conf
+
+%files -n mod_session
+%defattr(-,root,root)
+%{_libdir}/httpd/modules/mod_session*.so
+%{_libdir}/httpd/modules/mod_auth_form.so
+%config(noreplace) %{_sysconfdir}/httpd/conf.modules.d/01-session.conf
+
+%files devel
+%defattr(-,root,root)
+%{_includedir}/httpd
+%{_bindir}/apxs
+%{_mandir}/man1/apxs.1*
+%dir %{_libdir}/httpd/build
+%{_libdir}/httpd/build/*.mk
+%{_libdir}/httpd/build/*.sh
+%{_rpmconfigdir}/macros.d/macros.httpd
+
+%changelog
+* Mon Jun 15 2020 Joe Orton - 2.4.37-30
+- Resolves: #1209162 - support logging to journald from CustomLog
+
+* Mon Jun 08 2020 Lubos Uhliarik - 2.4.37-29
+- Resolves: #1823263 (CVE-2020-1934) - CVE-2020-1934 httpd: mod_proxy_ftp use of
+ uninitialized value
+
+* Fri May 29 2020 Lubos Uhliarik - 2.4.37-28
+- Related: #1771847 - BalancerMember ping parameter for mod_proxy_http
+ doesn't work
+
+* Tue Apr 14 2020 Lubos Uhliarik - 2.4.37-27
+- Resolves: #1823259 - CVE-2020-1927 httpd:2.4/httpd: mod_rewrite configurations
+ vulnerable to open redirect
+- Resolves: #1747284 - CVE-2019-10098 httpd:2.4/httpd: mod_rewrite potential
+ open redirect
+- Resolves: #1747281 - CVE-2019-10092 httpd:2.4/httpd: limited cross-site
+ scripting in mod_proxy error page
+- Resolves: #1747291 - CVE-2019-10097 httpd:2.4/httpd: null-pointer dereference
+ in mod_remoteip
+- Resolves: #1771847 - BalancerMember ping parameter for mod_proxy_http
+ doesn't work
+- Resolves: #1794728 - Backport of SessionExpiryUpdateInterval directive
+
+* Mon Dec 02 2019 Lubos Uhliarik - 2.4.37-21
+- Resolves: #1775158 - POST request with TLS 1.3 PHA client auth fails:
+ Re-negotiation handshake failed: Client certificate missing
+
+* Sun Dec 01 2019 Lubos Uhliarik - 2.4.37-20
+- Resolves: #1704317 - Add support for SSLKEYLOGFILE
+
+* Thu Nov 28 2019 Joe Orton - 2.4.37-19
+- mod_cgid: enable fd passing (#1633224)
+
+* Mon Nov 18 2019 Lubos Uhliarik - 2.4.37-18
+- Resolves: #1744121 - Unexpected OCSP in proxy SSL connection
+- Resolves: #1725031 - htpasswd: support SHA-x passwords for FIPS compatibility
+- Resolves: #1633224 - mod_cgid logging issues
+
+* Wed Oct 02 2019 Lubos Uhliarik - 2.4.37-17
+- remove bundled mod_md module
+- Related: #1747898 - add mod_md package
+
+* Thu Aug 29 2019 Lubos Uhliarik - 2.4.37-16
+- Resolves: #1744999 - CVE-2019-9511 httpd:2.4/mod_http2: HTTP/2: large amount
+ of data request leads to denial of service
+- Resolves: #1745086 - CVE-2019-9516 httpd:2.4/mod_http2: HTTP/2: 0-length
+ headers leads to denial of service
+- Resolves: #1745154 - CVE-2019-9517 httpd:2.4/mod_http2: HTTP/2: request for
+ large response leads to denial of service
+
+* Tue Jul 16 2019 Lubos Uhliarik - 2.4.37-15
+- Resolves: #1730721 - absolute path used for default state and runtime dir by
+ default
+
+* Thu Jun 27 2019 Lubos Uhliarik - 2.4.37-14
+- Resolves: #1724549 - httpd response contains garbage in Content-Type header
+
+* Wed Jun 12 2019 Lubos Uhliarik - 2.4.37-13
+- Resolves: #1696142 - CVE-2019-0217 httpd:2.4/httpd: mod_auth_digest: access
+ control bypass due to race condition
+- Resolves: #1696097 - CVE-2019-0220 httpd:2.4/httpd: URL normalization
+ inconsistency
+- Resolves: #1669221 - `ExtendedStatus Off` directive when using mod_systemd
+ causes systemctl to hang
+- Resolves: #1673022 - httpd can not be started with mod_md enabled
+
+* Mon Apr 08 2019 Lubos Uhliarik - 2.4.37-11
+- Resolves: #1695432 - CVE-2019-0211 httpd: privilege escalation
+ from modules scripts
+- Resolves: #1696091 - CVE-2019-0215 httpd:2.4/httpd: mod_ssl: access control
+ bypass when using per-location client certification authentication
+
+* Wed Feb 06 2019 Lubos Uhliarik - 2.4.37-10
+- Resolves: #1672977 - state-dir corruption on reload
+
+* Tue Feb 05 2019 Lubos Uhliarik - 2.4.37-9
+- Resolves: #1670716 - Coredump when starting in FIPS mode
+
+* Fri Feb 1 2019 Joe Orton - 2.4.37-8
+- add security fix for CVE-2019-0190 (#1671282)
+
+* Tue Dec 11 2018 Joe Orton - 2.4.37-7
+- add DefaultStateDir/ap_state_dir_relative() (#1653009)
+- mod_dav_fs: use state dir for default DAVLockDB
+- mod_md: use state dir for default MDStoreDir
+
+* Mon Dec 10 2018 Joe Orton - 2.4.37-6
+- add httpd.conf(5) (#1611361)
+
+* Mon Nov 26 2018 Luboš Uhliarik - 2.4.37-5
+- Resolves: #1652966 - Missing RELEASE in http header
+
+* Fri Nov 23 2018 Luboš Uhliarik - 2.4.37-4
+- Resolves: #1641951 - No Documentation= line in htcacheclean.service files
+
+* Fri Nov 23 2018 Luboš Uhliarik - 2.4.37-3
+- Resolves: #1643713 - TLS connection allowed while all protocols are forbidden
+
+* Thu Nov 22 2018 Joe Orton - 2.4.37-2
+- mod_ssl: fix off-by-one causing crashes in CGI children (#1649428)
+
+* Wed Nov 21 2018 Lubos Uhliarik - 2.4.37-1
+- Resolves: #1644625 - httpd rebase to 2.4.37
+
+* Thu Oct 18 2018 Luboš Uhliarik - 2.4.35-10
+- Related: #1493510 - RFE: httpd, add IP_FREEBIND support for Listen
+
+* Tue Oct 16 2018 Lubos Uhliarik - 2.4.35-9
+- mod_ssl: allow sending multiple CA names which differ only in case
+
+* Tue Oct 16 2018 Joe Orton - 2.4.35-7
+- mod_ssl: drop SSLRandomSeed from default config (#1638730)
+- mod_ssl: follow OpenSSL protocol defaults if SSLProtocol
+ is not configured (Rob Crittenden, #1638738)
+
+* Mon Oct 15 2018 Joe Orton - 2.4.35-5
+- mod_ssl: don't require SSLCryptoDevice to be set for PKCS#11 cert
+
+* Mon Oct 15 2018 Lubos Uhliarik - 2.4.35-4
+- Resolves: #1635681 - sync with Fedora 28/29 httpd
+- comment-out SSLProtocol, SSLProxyProtocol from ssl.conf in default
+ configuration; now follow OpenSSL system default (#1468322)
+- dropped NPN support
+- mod_md: change hard-coded default MdStoreDir to state/md (#1563846)
+- don't block on service try-restart in posttrans scriptlet
+- build and load mod_brotli
+- mod_systemd: show bound ports in status and log to journal
+ at startup
+- updated httpd.service.xml man page
+- tweak wording in privkey passphrase prompt
+- drop sslmultiproxy patch
+- apachectl: don't read /etc/sysconfig/httpd
+- drop irrelevant Obsoletes for devel subpackage
+- move instantiated httpd@.service to main httpd package
+
+* Mon Oct 15 2018 Lubos Uhliarik - 2.4.35-3
+- Resolves: #1602548 - various covscan fixes
+
+* Thu Sep 27 2018 Lubos Uhliarik - 2.4.35-2
+- apache httpd can work with TLS 1.3 (#1617997)
+- drop SSLv3 support patch
+
+* Thu Sep 27 2018 Lubos Uhliarik - 2.4.35-1
+- new version 2.4.35 (#1632754)
+
+* Mon Sep 03 2018 Lubos Uhliarik - 2.4.33-4
+- mod_ssl: enable SSLv3 and change behavior of "SSLProtocol All"
+ configuration (#1622630)
+
+* Thu Jul 26 2018 Joe Orton - 2.4.33-3
+- mod_ssl: add PKCS#11 cert/key support (Anderson Sasaki, #1527084)
+
+* Mon Apr 30 2018 Luboš Uhliarik - 2.4.33-2
+- new version 2.4.33
+- add mod_md subpackage; load mod_proxy_uwsgi by default
+
+* Mon Apr 30 2018 Joe Orton - 2.4.28-8
+- remove %%ghosted /etc/sysconfig/httpd (#1572676)
+
+* Wed Mar 07 2018 Luboš Uhliarik - 2.4.28-2
+- Resolves: #1512563 - httpd: update welcome page branding
+- Resolves: #1511123 - RFE: httpd use event MPM by default
+- Resolves: #1493510 - RFE: httpd, add IP_FREEBIND support for Listen
+
+* Fri Oct 06 2017 Luboš Uhliarik - 2.4.28-1
+- new version 2.4.28
+
+* Tue Oct 3 2017 Joe Orton - 2.4.27-14
+- add notes on enabling httpd_graceful_shutdown boolean for prefork
+
+* Fri Sep 22 2017 Joe Orton - 2.4.27-13
+- drop Requires(post) for mod_ssl
+
+* Fri Sep 22 2017 Joe Orton - 2.4.27-12
+- better error handling in httpd-ssl-gencerts (#1494556)
+
+* Thu Sep 21 2017 Stephen Gallagher - 2.4.27-11
+- Require sscg 2.2.0 for creating service and CA certificates together
+
+* Thu Sep 21 2017 Jeroen van Meeuwen - 2.4.27-10
+- Address CVE-2017-9798 by applying patch from upstream (#1490344)
+
+* Thu Sep 21 2017 Joe Orton - 2.4.27-9
+- use sscg defaults; append CA cert to generated cert
+- document httpd-init.service in httpd-init.service(8)
+
+* Thu Sep 21 2017 Jeroen van Meeuwen - 2.4.27-8
+- Address CVE-2017-9798 by applying patch from upstream (#1490344)
+
+* Wed Sep 20 2017 Stephen Gallagher - 2.4.27-8.1
+- Generate SSL certificates on service start, not %%posttrans
+
+* Tue Sep 19 2017 Joe Orton - 2.4.27-8.1
+- move httpd.service.d, httpd.socket.d dirs to -filesystem
+
+* Wed Sep 13 2017 Joe Orton - 2.4.27-7
+- add new content-length filter (upstream PR 61222)
+
+* Wed Aug 02 2017 Fedora Release Engineering - 2.4.27-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering - 2.4.27-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Tue Jul 18 2017 Joe Orton - 2.4.27-4
+- update mod_systemd (r1802251)
+
+* Mon Jul 17 2017 Joe Orton - 2.4.27-3
+- switch to event by default for Fedora 27 and later (#1471708)
+
+* Wed Jul 12 2017 Luboš Uhliarik - 2.4.27-2
+- Resolves: #1469959 - httpd update cleaned out /etc/sysconfig
+
+* Mon Jul 10 2017 Luboš Uhliarik - 2.4.27-1
+- new version 2.4.27
+
+* Fri Jun 30 2017 Joe Orton - 2.4.26-2
+- mod_proxy_fcgi: fix further regressions (PR 61202)
+
+* Mon Jun 19 2017 Luboš Uhliarik - 2.4.26-1
+- new version 2.4.26
+
+* Mon Jun 5 2017 Joe Orton - 2.4.25-10
+- move unit man pages to section 8, add as Documentation= in units
+
+* Fri May 19 2017 Joe Orton - 2.4.25-9
+- add httpd.service(5) and httpd.socket(5) man pages
+
+* Tue May 16 2017 Joe Orton - 2.4.25-8
+- require mod_http2, now packaged separately
+
+* Wed Mar 29 2017 Luboš Uhliarik - 2.4.25-7
+- Resolves: #1397243 - Backport Apache Bug 53098 - mod_proxy_ajp:
+ patch to set worker secret passed to tomcat
+
+* Tue Mar 28 2017 Luboš Uhliarik - 2.4.25-6
+- Resolves: #1434916 - httpd.service: Failed with result timeout
+
+* Fri Mar 24 2017 Joe Orton - 2.4.25-5
+- link only httpd, not support/* against -lselinux -lsystemd
+
+* Fri Feb 10 2017 Fedora Release Engineering - 2.4.25-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Thu Jan 12 2017 Joe Orton - 2.4.25-3
+- mod_watchdog: restrict thread lifetime (#1410883)
+
+* Thu Dec 22 2016 Luboš Uhliarik - 2.4.25-2
+- Resolves: #1358875 - require nghttp2 >= 1.5.0
+
+* Thu Dec 22 2016 Luboš Uhliarik - 2.4.25-1
+- new version 2.4.25
+
+* Mon Dec 05 2016 Luboš Uhliarik - 2.4.23-7
+- Resolves: #1401530 - CVE-2016-8740 httpd: Incomplete handling of
+ LimitRequestFields directive in mod_http2
+
+* Mon Nov 14 2016 Joe Orton - 2.4.23-6
+- fix build with OpenSSL 1.1 (#1392900)
+- fix typos in ssl.conf (josef randinger, #1379407)
+
+* Wed Nov 2 2016 Joe Orton - 2.4.23-5
+- no longer package /etc/sysconfig/httpd
+- synch ssl.conf with upstream
+
+* Mon Jul 18 2016 Joe Orton - 2.4.23-4
+- add security fix for CVE-2016-5387
+
+* Thu Jul 7 2016 Joe Orton - 2.4.23-3
+- load mod_watchdog by default (#1353582)
+
+* Thu Jul 7 2016 Joe Orton - 2.4.23-2
+- restore build of mod_proxy_fdpass (#1325883)
+- improve check tests to catch configured-but-not-built modules
+
+* Thu Jul 7 2016 Joe Orton - 2.4.23-1
+- update to 2.4.23 (#1325883, #1353203)
+- load mod_proxy_hcheck
+- recommend use of "systemctl edit" in httpd.service
+
+* Thu Apr 7 2016 Joe Orton - 2.4.18-6
+- have "apachectl graceful" start httpd if not running, per man page
+
+* Wed Apr 6 2016 Joe Orton - 2.4.18-5
+- use redirects for lang-specific /manual/ URLs
+
+* Fri Mar 18 2016 Joe Orton - 2.4.18-4
+- fix welcome page HTML validity (Ville Skyttä)
+
+* Fri Mar 18 2016 Joe Orton - 2.4.18-3
+- remove httpd pre script (duplicate of httpd-filesystem's)
+- in httpd-filesystem pre script, create group/user iff non-existent
+
+* Wed Feb 03 2016 Fedora Release Engineering - 2.4.18-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Mon Dec 14 2015 Jan Kaluza - 2.4.18-1
+- update to new version 2.4.18
+
+* Wed Dec 9 2015 Joe Orton - 2.4.17-4
+- re-enable mod_asis due to popular demand (#1284315)
+
+* Mon Oct 26 2015 Jan Kaluza - 2.4.17-3
+- fix crash when using -X argument (#1272234)
+
+* Wed Oct 14 2015 Jan Kaluza - 2.4.17-2
+- rebase socket activation patch to 2.4.17
+
+* Tue Oct 13 2015 Joe Orton - 2.4.17-1
+- update to 2.4.17 (#1271224)
+- build, load mod_http2
+- don't build mod_asis, mod_file_cache
+- load mod_cache_socache, mod_proxy_wstunnel by default
+- check every built mod_* is configured
+- synch ssl.conf with upstream; disable SSLv3 by default
+
+* Wed Jul 15 2015 Jan Kaluza - 2.4.12-4
+- update to 2.4.16
+
+* Tue Jul 7 2015 Joe Orton - 2.4.12-3
+- mod_ssl: use "localhost" in the dummy SSL cert if len(FQDN) > 59 chars
+
+* Wed Jun 17 2015 Fedora Release Engineering - 2.4.12-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Fri Mar 27 2015 Jan Kaluza - 2.4.12-1
+- update to 2.4.12
+
+* Tue Mar 24 2015 Jan Kaluza - 2.4.10-17
+- fix compilation with lua-5.3
+
+* Tue Mar 24 2015 Jan Kaluza - 2.4.10-16
+- remove filter for auto-provides of httpd modules, it is not needed since F20
+
+* Wed Dec 17 2014 Jan Kaluza - 2.4.10-15
+- core: fix bypassing of mod_headers rules via chunked requests (CVE-2013-5704)
+- mod_cache: fix NULL pointer dereference on empty Content-Type (CVE-2014-3581)
+- mod_proxy_fcgi: fix a potential crash with long headers (CVE-2014-3583)
+- mod_lua: fix handling of the Require line when a LuaAuthzProvider is used
+ in multiple Require directives with different arguments (CVE-2014-8109)
+
+* Tue Oct 14 2014 Joe Orton - 2.4.10-14
+- require apr-util 1.5.x
+
+* Thu Sep 18 2014 Jan Kaluza - 2.4.10-13
+- use NoDelay and DeferAcceptSec in httpd.socket
+
+* Mon Sep 08 2014 Jan Kaluza - 2.4.10-12
+- increase suexec minimum acceptable uid/gid to 1000 (#1136391)
+
+* Wed Sep 03 2014 Jan Kaluza - 2.4.10-11
+- fix hostname requirement and conflict with openssl-libs
+
+* Mon Sep 01 2014 Jan Kaluza - 2.4.10-10
+- use KillMode=mixed in httpd.service (#1135122)
+
+* Fri Aug 29 2014 Joe Orton - 2.4.10-9
+- set vstring based on /etc/os-release (Pat Riehecky, #1114539)
+
+* Fri Aug 29 2014 Joe Orton - 2.4.10-8
+- pull in httpd-filesystem as Requires(pre) (#1128328)
+- fix cipher selection in default ssl.conf, depend on new OpenSSL (#1134348)
+- require hostname for mod_ssl post script (#1135118)
+
+* Fri Aug 22 2014 Jan Kaluza - 2.4.10-7
+- mod_systemd: updated to the latest version
+- use -lsystemd instead of -lsystemd-daemon (#1125084)
+- fix possible crash in SIGINT handling (#958934)
+
+* Thu Aug 21 2014 Joe Orton - 2.4.10-6
+- mod_ssl: treat "SSLCipherSuite PROFILE=..." as special (#1109119)
+- switch default ssl.conf to use PROFILE=SYSTEM (#1109119)
+
+* Sat Aug 16 2014 Fedora Release Engineering - 2.4.10-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Fri Aug 15 2014 Jan Kaluza - 2.4.10-4
+- add /usr/bin/useradd dependency to -filesystem requires
+
+* Thu Aug 14 2014 Jan Kaluza - 2.4.10-3
+- fix creating apache user in pre script (#1128328)
+
+* Thu Jul 31 2014 Joe Orton - 2.4.10-2
+- enable mod_request by default for mod_auth_form
+- move disabled-by-default modules from 00-base.conf to 00-optional.conf
+
+* Mon Jul 21 2014 Joe Orton - 2.4.10-1
+- update to 2.4.10
+- expand variables in docdir example configs
+
+* Tue Jul 08 2014 Jan Kaluza - 2.4.9-8
+- add support for systemd socket activation (#1111648)
+
+* Mon Jul 07 2014 Jan Kaluza - 2.4.9-7
+- remove conf.modules.d from httpd-filesystem subpackage (#1081453)
+
+* Mon Jul 07 2014 Jan Kaluza - 2.4.9-6
+- add httpd-filesystem subpackage (#1081453)
+
+* Fri Jun 20 2014 Joe Orton - 2.4.9-5
+- mod_ssl: don't use the default OpenSSL cipher suite in ssl.conf (#1109119)
+
+* Sat Jun 07 2014 Fedora Release Engineering - 2.4.9-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Fri Mar 28 2014 Jan Kaluza - 2.4.9-3
+- add support for SetHandler + proxy (#1078970)
+
+* Thu Mar 27 2014 Jan Kaluza - 2.4.9-2
+- move macros from /etc/rpm to macros.d (#1074277)
+- remove unused patches
+
+* Mon Mar 17 2014 Jan Kaluza - 2.4.9-1
+- update to 2.4.9
+
+* Fri Feb 28 2014 Joe Orton - 2.4.7-6
+- use 2048-bit RSA key with SHA-256 signature in dummy certificate
+
+* Fri Feb 28 2014 Stephen Gallagher 2.4.7-5
+- Create drop directory for systemd snippets
+
+* Thu Feb 27 2014 Jan Kaluza - 2.4.7-4
+- remove provides of old MMN, because it contained double-dash (#1068851)
+
+* Thu Feb 20 2014 Jan Kaluza - 2.4.7-3
+- fix graceful restart using legacy actions
+
+* Thu Dec 12 2013 Joe Orton - 2.4.7-2
+- conflict with pre-1.5.0 APR
+- fix sslsninotreq patch
+
+* Wed Nov 27 2013 Joe Orton - 2.4.7-1
+- update to 2.4.7 (#1034071)
+
+* Fri Nov 22 2013 Joe Orton - 2.4.6-10
+- switch to requiring system-logos-httpd (#1031288)
+
+* Tue Nov 12 2013 Joe Orton - 2.4.6-9
+- change mmnisa to drop "-" altogether
+
+* Tue Nov 12 2013 Joe Orton - 2.4.6-8
+- drop ambiguous invalid "-" in RHS of httpd-mmn Provide, keeping old Provide
+ for transition
+
+* Fri Nov 1 2013 Jan Kaluza - 2.4.6-7
+- systemd: use {MAINPID} notation to ensure /bin/kill has always the second arg
+
+* Thu Oct 31 2013 Joe Orton - 2.4.6-6
+- mod_ssl: allow SSLEngine to override Listen-based default (r1537535)
+
+* Thu Oct 24 2013 Jan kaluza - 2.4.6-5
+- systemd: send SIGWINCH signal without httpd -k in ExecStop
+
+* Mon Oct 21 2013 Joe Orton - 2.4.6-4
+- load mod_macro by default (#998452)
+- add README to conf.modules.d
+- mod_proxy_http: add possible fix for threading issues (r1534321)
+- core: add fix for truncated output with CGI scripts (r1530793)
+
+* Thu Oct 10 2013 Jan Kaluza - 2.4.6-3
+- require fedora-logos-httpd (#1009162)
+
+* Wed Jul 31 2013 Jan Kaluza - 2.4.6-2
+- revert fix for dumping vhosts twice
+
+* Mon Jul 22 2013 Joe Orton - 2.4.6-1
+- update to 2.4.6
+- mod_ssl: use revised NPN API (r1487772)
+
+* Thu Jul 11 2013 Jan Kaluza - 2.4.4-12
+- mod_unique_id: replace use of hostname + pid with PRNG output (#976666)
+- apxs: mention -p option in manpage
+
+* Tue Jul 2 2013 Joe Orton - 2.4.4-11
+- add patch for aarch64 (Dennis Gilmore, #925558)
+
+* Mon Jul 1 2013 Joe Orton - 2.4.4-10
+- remove duplicate apxs man page from httpd-tools
+
+* Mon Jun 17 2013 Joe Orton - 2.4.4-9
+- remove zombie dbmmanage script
+
+* Fri May 31 2013 Jan Kaluza - 2.4.4-8
+- return 400 Bad Request on malformed Host header
+
+* Fri May 24 2013 Jan Kaluza - 2.4.4-7
+- ignore /etc/sysconfig/httpd and document systemd way of setting env variables
+ in this file
+
+* Mon May 20 2013 Jan Kaluza - 2.4.4-6
+- htpasswd/htdbm: fix hash generation bug (#956344)
+- do not dump vhosts twice in httpd -S output (#928761)
+- mod_cache: fix potential crash caused by uninitialized variable (#954109)
+
+* Thu Apr 18 2013 Jan Kaluza - 2.4.4-5
+- execute systemctl reload as result of apachectl graceful
+- mod_ssl: ignore SNI hints unless required by config
+- mod_cache: forward-port CacheMaxExpire "hard" option
+- mod_ssl: fall back on another module's proxy hook if mod_ssl proxy
+ is not configured.
+
+* Tue Apr 16 2013 Jan Kaluza - 2.4.4-4
+- fix service file to not send SIGTERM after ExecStop (#906321, #912288)
+
+* Tue Mar 26 2013 Jan Kaluza - 2.4.4-3
+- protect MIMEMagicFile with IfModule (#893949)
+
+* Tue Feb 26 2013 Joe Orton - 2.4.4-2
+- really package mod_auth_form in mod_session (#915438)
+
+* Tue Feb 26 2013 Joe Orton - 2.4.4-1
+- update to 2.4.4
+- fix duplicate ownership of mod_session config (#914901)
+
+* Fri Feb 22 2013 Joe Orton - 2.4.3-17
+- add mod_session subpackage, move mod_auth_form there (#894500)
+
+* Thu Feb 14 2013 Fedora Release Engineering - 2.4.3-16
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Tue Jan 8 2013 Joe Orton - 2.4.3-15
+- add systemd service for htcacheclean
+
+* Tue Nov 13 2012 Joe Orton - 2.4.3-14
+- drop patch for r1344712
+
+* Tue Nov 13 2012 Joe Orton - 2.4.3-13
+- filter mod_*.so auto-provides (thanks to rcollet)
+- pull in syslog logging fix from upstream (r1344712)
+
+* Fri Oct 26 2012 Joe Orton - 2.4.3-12
+- rebuild to pick up new apr-util-ldap
+
+* Tue Oct 23 2012 Joe Orton - 2.4.3-11
+- rebuild
+
+* Wed Oct 3 2012 Joe Orton - 2.4.3-10
+- pull upstream patch r1392850 in addition to r1387633
+
+* Mon Oct 1 2012 Joe Orton - 2.4.3-9
+- define PLATFORM in os.h using vendor string
+
+* Mon Oct 1 2012 Joe Orton - 2.4.3-8
+- use systemd script unconditionally (#850149)
+
+* Mon Oct 1 2012 Joe Orton - 2.4.3-7
+- use systemd scriptlets if available (#850149)
+- don't run posttrans restart if /etc/sysconfig/httpd-disable-posttrans exists
+
+* Mon Oct 01 2012 Jan Kaluza - 2.4.3-6
+- use systemctl from apachectl (#842736)
+
+* Wed Sep 19 2012 Joe Orton - 2.4.3-5
+- fix some error log spam with graceful-stop (r1387633)
+- minor mod_systemd tweaks
+
+* Thu Sep 13 2012 Joe Orton - 2.4.3-4
+- use IncludeOptional for conf.d/*.conf inclusion
+
+* Fri Sep 07 2012 Jan Kaluza - 2.4.3-3
+- adding mod_systemd to integrate with systemd better
+
+* Tue Aug 21 2012 Joe Orton - 2.4.3-2
+- mod_ssl: add check for proxy keypair match (upstream r1374214)
+
+* Tue Aug 21 2012 Joe Orton - 2.4.3-1
+- update to 2.4.3 (#849883)
+- own the docroot (#848121)
+
+* Mon Aug 6 2012 Joe Orton - 2.4.2-23
+- add mod_proxy fixes from upstream (r1366693, r1365604)
+
+* Thu Jul 19 2012 Fedora Release Engineering - 2.4.2-22
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Fri Jul 6 2012 Joe Orton - 2.4.2-21
+- drop explicit version requirement on initscripts
+
+* Thu Jul 5 2012 Joe Orton - 2.4.2-20
+- mod_ext_filter: fix error_log warnings
+
+* Mon Jul 2 2012 Joe Orton - 2.4.2-19
+- support "configtest" and "graceful" as initscripts "legacy actions"
+
+* Fri Jun 8 2012 Joe Orton - 2.4.2-18
+- avoid use of "core" GIF for a "core" directory (#168776)
+- drop use of "syslog.target" in systemd unit file
+
+* Thu Jun 7 2012 Joe Orton - 2.4.2-17
+- use _unitdir for systemd unit file
+- use /run in unit file, ssl.conf
+
+* Thu Jun 7 2012 Joe Orton - 2.4.2-16
+- mod_ssl: fix NPN patch merge
+
+* Wed Jun 6 2012 Joe Orton - 2.4.2-15
+- move tmpfiles.d fragment into /usr/lib per new guidelines
+- package /run/httpd not /var/run/httpd
+- set runtimedir to /run/httpd likewise
+
+* Wed Jun 6 2012 Joe Orton - 2.4.2-14
+- fix htdbm/htpasswd crash on crypt() failure (#818684)
+
+* Wed Jun 6 2012 Joe Orton - 2.4.2-13
+- pull fix for NPN patch from upstream (r1345599)
+
+* Thu May 31 2012 Joe Orton - 2.4.2-12
+- update suexec patch to use LOG_AUTHPRIV facility
+
+* Thu May 24 2012 Joe Orton - 2.4.2-11
+- really fix autoindex.conf (thanks to remi@)
+
+* Thu May 24 2012 Joe Orton - 2.4.2-10
+- fix autoindex.conf to allow symlink to poweredby.png
+
+* Wed May 23 2012 Joe Orton - 2.4.2-9
+- suexec: use upstream version of patch for capability bit support
+
+* Wed May 23 2012 Joe Orton - 2.4.2-8
+- suexec: use syslog rather than suexec.log, drop dac_override capability
+
+* Tue May 1 2012 Joe Orton - 2.4.2-7
+- mod_ssl: add TLS NPN support (r1332643, #809599)
+
+* Tue May 1 2012 Joe Orton - 2.4.2-6
+- add BR on APR >= 1.4.0
+
+* Fri Apr 27 2012 Joe Orton - 2.4.2-5
+- use systemctl from logrotate (#221073)
+
+* Fri Apr 27 2012 Joe Orton - 2.4.2-4
+- pull from upstream:
+ * use TLS close_notify alert for dummy_connection (r1326980+)
+ * cleanup symbol exports (r1327036+)
+
+* Fri Apr 20 2012 Joe Orton - 2.4.2-3
+- really fix restart
+
+* Fri Apr 20 2012 Joe Orton - 2.4.2-2
+- tweak default ssl.conf
+- fix restart handling (#814645)
+- use graceful restart by default
+
+* Wed Apr 18 2012 Jan Kaluza - 2.4.2-1
+- update to 2.4.2
+
+* Fri Mar 23 2012 Joe Orton - 2.4.1-6
+- fix macros
+
+* Fri Mar 23 2012 Joe Orton - 2.4.1-5
+- add _httpd_moddir to macros
+
+* Tue Mar 13 2012 Joe Orton - 2.4.1-4
+- fix symlink for poweredby.png
+- fix manual.conf
+
+* Tue Mar 13 2012 Joe Orton - 2.4.1-3
+- add mod_proxy_html subpackage (w/mod_proxy_html + mod_xml2enc)
+- move mod_ldap, mod_authnz_ldap to mod_ldap subpackage
+
+* Tue Mar 13 2012 Joe Orton - 2.4.1-2
+- clean docroot better
+- ship proxy, ssl directories within /var/cache/httpd
+- default config:
+ * unrestricted access to (only) /var/www
+ * remove (commented) Mutex, MaxRanges, ScriptSock
+ * split autoindex config to conf.d/autoindex.conf
+- ship additional example configs in docdir
+
+* Tue Mar 6 2012 Joe Orton - 2.4.1-1
+- update to 2.4.1
+- adopt upstream default httpd.conf (almost verbatim)
+- split all LoadModules to conf.modules.d/*.conf
+- include conf.d/*.conf at end of httpd.conf
+- trim %%changelog
+
+* Mon Feb 13 2012 Joe Orton - 2.2.22-2
+- fix build against PCRE 8.30
+
+* Mon Feb 13 2012 Joe Orton - 2.2.22-1
+- update to 2.2.22
+
+* Fri Feb 10 2012 Petr Pisar - 2.2.21-8
+- Rebuild against PCRE 8.30
+
+* Mon Jan 23 2012 Jan Kaluza - 2.2.21-7
+- fix #783629 - start httpd after named
+
+* Mon Jan 16 2012 Joe Orton - 2.2.21-6
+- complete conversion to systemd, drop init script (#770311)
+- fix comments in /etc/sysconfig/httpd (#771024)
+- enable PrivateTmp in service file (#781440)
+- set LANG=C in /etc/sysconfig/httpd
+
+* Fri Jan 13 2012 Fedora Release Engineering - 2.2.21-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Tue Dec 06 2011 Jan Kaluza - 2.2.21-4
+- fix #751591 - start httpd after remote-fs
+
+* Mon Oct 24 2011 Jan Kaluza - 2.2.21-3
+- allow change state of BalancerMember in mod_proxy_balancer web interface
+
+* Thu Sep 22 2011 Ville Skyttä - 2.2.21-2
+- Make mmn available as %%{_httpd_mmn}.
+- Add .svgz to AddEncoding x-gzip example in httpd.conf.
+
+* Tue Sep 13 2011 Joe Orton - 2.2.21-1
+- update to 2.2.21
+
+* Mon Sep 5 2011 Joe Orton - 2.2.20-1
+- update to 2.2.20
+- fix MPM stub man page generation
+
+* Wed Aug 10 2011 Jan Kaluza - 2.2.19-5
+- fix #707917 - add httpd-ssl-pass-dialog to ask for SSL password using systemd
+
+* Fri Jul 22 2011 Iain Arnell 1:2.2.19-4
+- rebuild while rpm-4.9.1 is untagged to remove trailing slash in provided
+ directory names
+
+* Wed Jul 20 2011 Jan Kaluza - 2.2.19-3
+- fix #716621 - suexec now works without setuid bit
+
+* Thu Jul 14 2011 Jan Kaluza - 2.2.19-2
+- fix #689091 - backported patch from 2.3 branch to support IPv6 in logresolve
+
+* Fri Jul 1 2011 Joe Orton - 2.2.19-1
+- update to 2.2.19
+- enable dbd, authn_dbd in default config
+
+* Thu Apr 14 2011 Joe Orton - 2.2.17-13
+- fix path expansion in service files
+
+* Tue Apr 12 2011 Joe Orton - 2.2.17-12
+- add systemd service files (#684175, thanks to Jóhann B. Guðmundsson)
+
+* Wed Mar 23 2011 Joe Orton - 2.2.17-11
+- minor updates to httpd.conf
+- drop old patches
+
+* Wed Mar 2 2011 Joe Orton - 2.2.17-10
+- rebuild
+
+* Wed Feb 23 2011 Joe Orton - 2.2.17-9
+- use arch-specific mmn
+
+* Wed Feb 09 2011 Fedora Release Engineering - 2.2.17-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Mon Jan 31 2011 Joe Orton - 2.2.17-7
+- generate dummy mod_ssl cert with CA:FALSE constraint (#667841)
+- add man page stubs for httpd.event, httpd.worker
+- drop distcache support
+- add STOP_TIMEOUT support to init script
+
+* Sat Jan 8 2011 Joe Orton - 2.2.17-6
+- update default SSLCipherSuite per upstream trunk
+
+* Wed Jan 5 2011 Joe Orton - 2.2.17-5
+- fix requires (#667397)
+
+* Wed Jan 5 2011 Joe Orton - 2.2.17-4
+- de-ghost /var/run/httpd
+
+* Tue Jan 4 2011 Joe Orton - 2.2.17-3
+- add tmpfiles.d configuration, ghost /var/run/httpd (#656600)
+
+* Sat Nov 20 2010 Joe Orton - 2.2.17-2
+- drop setuid bit, use capabilities for suexec binary
+
+* Wed Oct 27 2010 Joe Orton - 2.2.17-1
+- update to 2.2.17
+
+* Fri Sep 10 2010 Joe Orton - 2.2.16-2
+- link everything using -z relro and -z now
+
+* Mon Jul 26 2010 Joe Orton - 2.2.16-1
+- update to 2.2.16
+
+* Fri Jul 9 2010 Joe Orton