You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by jo...@apache.org on 2018/10/05 15:25:05 UTC

svn commit: r1842929 - in /httpd/httpd/trunk: Makefile.in acinclude.m4 config.layout configure.in include/ap_config_layout.h.in include/ap_mmn.h include/http_config.h server/core.c

Author: jorton
Date: Fri Oct  5 15:25:04 2018
New Revision: 1842929

URL: http://svn.apache.org/viewvc?rev=1842929&view=rev
Log:
Define "state directory" for storing persistent child-writable state,
with default from config.layout, configurable via DefaultStateDir.

* server/core.c (set_state_dir, ap_state_dir_relative):
  New functions.
  
* config.layout, acinclude.m4, Makefile.in, configure.in: Define
  statedir variables, drop davlockdb.

* include/ap_config_layout.h.in: Define DEFAULT_REL_STATEDIR,
  DEFAULT_EXP_STATEDIR in place of _DAVLOCKDB.

* include/ap_mmn.h: Bump MMN minor.

Modified:
    httpd/httpd/trunk/Makefile.in
    httpd/httpd/trunk/acinclude.m4
    httpd/httpd/trunk/config.layout
    httpd/httpd/trunk/configure.in
    httpd/httpd/trunk/include/ap_config_layout.h.in
    httpd/httpd/trunk/include/ap_mmn.h
    httpd/httpd/trunk/include/http_config.h
    httpd/httpd/trunk/server/core.c

Modified: httpd/httpd/trunk/Makefile.in
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/Makefile.in?rev=1842929&r1=1842928&r2=1842929&view=diff
==============================================================================
--- httpd/httpd/trunk/Makefile.in (original)
+++ httpd/httpd/trunk/Makefile.in Fri Oct  5 15:25:04 2018
@@ -218,6 +218,7 @@ install-cgi:
 install-other:
 	@test -d $(DESTDIR)$(logfiledir) || $(MKINSTALLDIRS) $(DESTDIR)$(logfiledir)
 	@test -d $(DESTDIR)$(runtimedir) || $(MKINSTALLDIRS) $(DESTDIR)$(runtimedir)
+	@test -d $(DESTDIR)$(statedir) || $(MKINSTALLDIRS) $(DESTDIR)$(statedir)
 	@for ext in dll x; do \
 		file=apachecore.$$ext; \
 		if test -f $$file; then \

Modified: httpd/httpd/trunk/acinclude.m4
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/acinclude.m4?rev=1842929&r1=1842928&r2=1842929&view=diff
==============================================================================
--- httpd/httpd/trunk/acinclude.m4 (original)
+++ httpd/httpd/trunk/acinclude.m4 Fri Oct  5 15:25:04 2018
@@ -45,7 +45,7 @@ AC_DEFUN([APACHE_GEN_CONFIG_VARS],[
   APACHE_SUBST(installbuilddir)
   APACHE_SUBST(runtimedir)
   APACHE_SUBST(proxycachedir)
-  APACHE_SUBST(davlockdb)
+  APACHE_SUBST(statedir)
   APACHE_SUBST(other_targets)
   APACHE_SUBST(progname)
   APACHE_SUBST(prefix)
@@ -876,7 +876,7 @@ AC_DEFUN([APACHE_EXPORT_ARGUMENTS],[
   APACHE_SUBST_EXPANDED_ARG(runtimedir)
   APACHE_SUBST_EXPANDED_ARG(logfiledir)
   APACHE_SUBST_EXPANDED_ARG(proxycachedir)
-  APACHE_SUBST_EXPANDED_ARG(davlockdb)
+  APACHE_SUBST_EXPANDED_ARG(statedir)
 ])
 
 dnl 

Modified: httpd/httpd/trunk/config.layout
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/config.layout?rev=1842929&r1=1842928&r2=1842929&view=diff
==============================================================================
--- httpd/httpd/trunk/config.layout (original)
+++ httpd/httpd/trunk/config.layout Fri Oct  5 15:25:04 2018
@@ -29,6 +29,7 @@
     includedir:    ${prefix}/include
     localstatedir: ${prefix}
     runtimedir:    ${localstatedir}/logs
+    statedir:      ${localstatedir}/state
     logfiledir:    ${localstatedir}/logs
     proxycachedir: ${localstatedir}/proxy
 </Layout>
@@ -54,6 +55,7 @@
     includedir:    ${prefix}/include+
     localstatedir: ${prefix}/var+
     runtimedir:    ${localstatedir}/run
+    statedir:      ${localstatedir}/state
     logfiledir:    ${localstatedir}/log
     proxycachedir: ${localstatedir}/proxy
 </Layout>
@@ -78,6 +80,7 @@
     includedir:    /System/Library/Frameworks/Apache.framework/Versions/2.0/Headers
     localstatedir: /var
     runtimedir:    ${prefix}/Logs
+    statedir:      ${prefix}/State
     logfiledir:    ${prefix}/Logs
     proxycachedir: ${prefix}/ProxyCache
 </Layout>
@@ -102,6 +105,7 @@
     includedir:    ${prefix}/include+
     localstatedir: /var
     runtimedir:    ${localstatedir}/run
+    statedir:      ${localstatedir}/state
     logfiledir:    ${localstatedir}/log+
     proxycachedir: ${runtimedir}/proxy
 </Layout>
@@ -126,6 +130,7 @@
     includedir:    ${prefix}/include/apache
     localstatedir: /var
     runtimedir:    ${localstatedir}/run
+    statedir:      ${localstatedir}/lib/httpd
     logfiledir:    ${localstatedir}/log/httpd
     proxycachedir: ${localstatedir}/cache/httpd
 </Layout>     
@@ -151,6 +156,7 @@
     includedir:    ${prefix}/include/httpd
     runtimedir:    /run/httpd
     logfiledir:    ${localstatedir}/log/httpd
+    statedir:      ${localstatedir}/lib/httpd
     proxycachedir: ${localstatedir}/cache/httpd/proxy
 </Layout>     
 
@@ -175,6 +181,7 @@
     localstatedir: /var${prefix}
     runtimedir:    ${localstatedir}/run
     logfiledir:    ${localstatedir}/logs
+    statedir:      ${localstatedir}/state
     proxycachedir: ${localstatedir}/proxy
 </Layout>
 
@@ -197,6 +204,7 @@
     cgidir:        ${datadir}/cgi-bin
     includedir:    ${prefix}/include/apache
     localstatedir: /var/lib/httpd
+    statedir:      ${localstatedir}
     runtimedir:    /var/run
     logfiledir:    /var/log/httpd
     proxycachedir: /var/cache/httpd
@@ -223,6 +231,7 @@
     localstatedir: /var
     runtimedir:    ${localstatedir}/run
     logfiledir:    ${localstatedir}/log/httpd
+    statedir:      ${prefix}/state
     proxycachedir: ${localstatedir}/proxy
 </Layout>
 
@@ -246,6 +255,7 @@
     includedir:    ${exec_prefix}/include
     localstatedir: ${prefix}
     runtimedir:    /var/run
+    statedir:      ${datadir}/state
     logfiledir:    ${datadir}/logs
     proxycachedir: ${datadir}/proxy
 </Layout>
@@ -271,6 +281,7 @@
     localstatedir: ${prefix}
     runtimedir:    ${prefix}/logs
     logfiledir:    ${prefix}/logs
+    statedir:      ${prefix}/state
     proxycachedir: ${prefix}/proxy
 </Layout>
 
@@ -315,6 +326,7 @@
     cgidir:        ${prefix}/usr/lib/cgi-bin
     includedir:    ${exec_prefix}/include/apache2
     localstatedir: ${prefix}/var/lock/apache2
+    statedir:      ${prefix}/var/lib/apache2
     runtimedir:    ${prefix}/var/run/apache2
     logfiledir:    ${prefix}/var/log/apache2
     proxycachedir: ${prefix}/var/cache/apache2/proxy
@@ -343,6 +355,7 @@
     manualdir:     ${datadir}/manual
     cgidir:        ${datadir}/cgi-bin
     runtimedir:    ${localstatedir}/run
+    runtimedir:    ${localstatedir}/lib/httpd
     logfiledir:    ${localstatedir}/log/httpd
     proxycachedir: ${localstatedir}/cache/httpd/cache-root
 </Layout>
@@ -366,6 +379,7 @@
     manualdir:     ${prefix}/manual
     includedir:    ${prefix}/include
     localstatedir: /var/httpd
+    statedir:      ${localstatedir}/state
     runtimedir:    ${localstatedir}/run
     logfiledir:    ${localstatedir}/logs
     proxycachedir: ${localstatedir}/proxy
@@ -391,6 +405,7 @@
     includedir:      ${prefix}/include/httpd
     localstatedir:   /var
     runtimedir:      ${localstatedir}/run/httpd
+    statedir:        ${localstatedir}/lib/httpd
     logfiledir:      ${localstatedir}/log/httpd
     proxycachedir:   ${localstatedir}/cache/httpd
 </Layout>

Modified: httpd/httpd/trunk/configure.in
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/configure.in?rev=1842929&r1=1842928&r2=1842929&view=diff
==============================================================================
--- httpd/httpd/trunk/configure.in (original)
+++ httpd/httpd/trunk/configure.in Fri Oct  5 15:25:04 2018
@@ -41,7 +41,7 @@ dnl Something seems broken here.
 AC_PREFIX_DEFAULT(/usr/local/apache2)
 
 dnl Get the layout here, so we can pass the required variables to apr
-APR_ENABLE_LAYOUT(Apache, [errordir iconsdir htdocsdir cgidir])
+APR_ENABLE_LAYOUT(Apache, [errordir iconsdir htdocsdir cgidir statedir])
 
 dnl reparse the configure arguments.
 APR_PARSE_ARGUMENTS

Modified: httpd/httpd/trunk/include/ap_config_layout.h.in
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/include/ap_config_layout.h.in?rev=1842929&r1=1842928&r2=1842929&view=diff
==============================================================================
--- httpd/httpd/trunk/include/ap_config_layout.h.in (original)
+++ httpd/httpd/trunk/include/ap_config_layout.h.in Fri Oct  5 15:25:04 2018
@@ -60,7 +60,7 @@
 #define DEFAULT_REL_LOGFILEDIR "@rel_logfiledir@"
 #define DEFAULT_EXP_PROXYCACHEDIR "@exp_proxycachedir@"
 #define DEFAULT_REL_PROXYCACHEDIR "@rel_proxycachedir@"
-#define DEFAULT_EXP_DAVLOCKDB "@exp_davlockdb@"
-#define DEFAULT_REL_DAVLOCKDB "@rel_davlockdb@"
+#define DEFAULT_EXP_STATEDIR "@exp_statedir@"
+#define DEFAULT_REL_STATEDIR "@rel_statedir@"
 
 #endif /* AP_CONFIG_LAYOUT_H */

Modified: httpd/httpd/trunk/include/ap_mmn.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/include/ap_mmn.h?rev=1842929&r1=1842928&r2=1842929&view=diff
==============================================================================
--- httpd/httpd/trunk/include/ap_mmn.h (original)
+++ httpd/httpd/trunk/include/ap_mmn.h Fri Oct  5 15:25:04 2018
@@ -607,6 +607,7 @@
  *                         in ap_filter_t replace pending/bb/deferred_pool
  *                         fields by struct ap_filter_private *priv
  * 20180906.1 (2.5.1-dev)  Don't export ap_filter_recycle() anymore
+ * 20180906.2 (2.5.1-dev)  Add ap_state_dir_relative()
  */
 
 #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
@@ -614,7 +615,7 @@
 #ifndef MODULE_MAGIC_NUMBER_MAJOR
 #define MODULE_MAGIC_NUMBER_MAJOR 20180906
 #endif
-#define MODULE_MAGIC_NUMBER_MINOR 1                 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 2                 /* 0...n */
 
 /**
  * Determine if the server's current MODULE_MAGIC_NUMBER is at least a

Modified: httpd/httpd/trunk/include/http_config.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/include/http_config.h?rev=1842929&r1=1842928&r2=1842929&view=diff
==============================================================================
--- httpd/httpd/trunk/include/http_config.h (original)
+++ httpd/httpd/trunk/include/http_config.h Fri Oct  5 15:25:04 2018
@@ -760,6 +760,14 @@ AP_DECLARE(char *) ap_server_root_relati
  */
 AP_DECLARE(char *) ap_runtime_dir_relative(apr_pool_t *p, const char *fname);
 
+/**
+ * Compute the name of a persistent state file (e.g. a database or
+ * long-lived cache) relative to the appropriate state directory.
+ * Absolute paths are returned as-is.  The state directory is
+ * configured via the DefaultStateDir directive or at build time.
+ */
+AP_DECLARE(char *) ap_state_dir_relative(apr_pool_t *p, const char *fname);
+
 /* Finally, the hook for dynamically loading modules in... */
 
 /**

Modified: httpd/httpd/trunk/server/core.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/core.c?rev=1842929&r1=1842928&r2=1842929&view=diff
==============================================================================
--- httpd/httpd/trunk/server/core.c (original)
+++ httpd/httpd/trunk/server/core.c Fri Oct  5 15:25:04 2018
@@ -148,6 +148,8 @@ AP_DECLARE_DATA int ap_main_state = AP_S
 AP_DECLARE_DATA int ap_run_mode = AP_SQ_RM_UNKNOWN;
 AP_DECLARE_DATA int ap_config_generation = 0;
 
+static const char *core_state_dir;
+
 typedef struct {
     apr_ipsubnet_t *subnet;
     struct ap_logconf log;
@@ -3275,6 +3277,24 @@ static const char *set_runtime_dir(cmd_p
     return NULL;
 }
 
+static const char *set_state_dir(cmd_parms *cmd, void *dummy, const char *arg)
+{
+    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+
+    if (err != NULL) {
+        return err;
+    }
+
+    if ((apr_filepath_merge((char**)&core_state_dir, NULL,
+                            ap_server_root_relative(cmd->temp_pool, arg),
+                            APR_FILEPATH_TRUENAME, cmd->pool) != APR_SUCCESS)
+        || !ap_is_directory(cmd->temp_pool, core_state_dir)) {
+        return "DefaultStateDir must be a valid directory, absolute or relative to ServerRoot";
+    }
+
+    return NULL;
+}
+
 static const char *set_timeout(cmd_parms *cmd, void *dummy, const char *arg)
 {
     const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_CONTEXT);
@@ -4724,6 +4744,8 @@ AP_INIT_TAKE1("ServerRoot", set_server_r
   "Common directory of server-related files (logs, confs, etc.)"),
 AP_INIT_TAKE1("DefaultRuntimeDir", set_runtime_dir, NULL, RSRC_CONF | EXEC_ON_READ,
   "Common directory for run-time files (shared memory, locks, etc.)"),
+AP_INIT_TAKE1("DefaultStateDir", set_state_dir, NULL, RSRC_CONF | EXEC_ON_READ,
+  "Common directory for persistent state (databases, long-lived caches, etc.)"),
 AP_INIT_TAKE12("ErrorLog", set_errorlog,
   (void *)APR_OFFSETOF(server_rec, error_fname), RSRC_CONF,
   "The filename of the error log"),
@@ -5557,6 +5579,28 @@ AP_DECLARE(int) ap_state_query(int query
     }
 }
 
+AP_DECLARE(char *) ap_state_dir_relative(apr_pool_t *p, const char *file)
+{
+    char *newpath = NULL;
+    apr_status_t rv;
+    const char *state_dir;
+
+    state_dir = core_state_dir
+        ? core_state_dir
+        : ap_server_root_relative(p, DEFAULT_REL_STATEDIR);
+
+    rv = apr_filepath_merge(&newpath, state_dir, file, APR_FILEPATH_TRUENAME, p);
+    if (newpath && (rv == APR_SUCCESS || APR_STATUS_IS_EPATHWILD(rv)
+                                      || APR_STATUS_IS_ENOENT(rv)
+                                      || APR_STATUS_IS_ENOTDIR(rv))) {
+        return newpath;
+    }
+    else {
+        return NULL;
+    }
+}
+
+
 #if !USE_APR_CRYPTO_PRNG
 static apr_random_t *rng = NULL;
 #if APR_HAS_THREADS