summaryrefslogtreecommitdiff
path: root/httpd-2.4.57-r1912477+.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-05 02:42:43 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-05 02:42:43 +0000
commit03f1098961e7cd0a5a3b7d93ca59f9176b7f63ac (patch)
tree4d0a57939694fecbd2850cf3f43e9aaa1ea60017 /httpd-2.4.57-r1912477+.patch
parent707da8b4b72f9e9ec132f1a285b9ce28b6a2b667 (diff)
automatic import of httpdopeneuler24.03_LTS
Diffstat (limited to 'httpd-2.4.57-r1912477+.patch')
-rw-r--r--httpd-2.4.57-r1912477+.patch381
1 files changed, 381 insertions, 0 deletions
diff --git a/httpd-2.4.57-r1912477+.patch b/httpd-2.4.57-r1912477+.patch
new file mode 100644
index 0000000..6458df8
--- /dev/null
+++ b/httpd-2.4.57-r1912477+.patch
@@ -0,0 +1,381 @@
+# ./pullrev.sh 1912477 1912571 1912718 1913654 1914438
+http://svn.apache.org/viewvc?view=revision&revision=1912477
+http://svn.apache.org/viewvc?view=revision&revision=1912571
+http://svn.apache.org/viewvc?view=revision&revision=1912718
+http://svn.apache.org/viewvc?view=revision&revision=1913654
+http://svn.apache.org/viewvc?view=revision&revision=1914438
+
+--- httpd-2.4.58/modules/dav/fs/config6.m4.r1912477+
++++ httpd-2.4.58/modules/dav/fs/config6.m4
+@@ -20,4 +20,10 @@
+
+ APACHE_MODULE(dav_fs, DAV provider for the filesystem. --enable-dav also enables mod_dav_fs., $dav_fs_objects, , $dav_fs_enable,,dav)
+
++if test "x$enable_dav_fs" = "xshared"; then
++ # The only symbol which needs to be exported is the module
++ # structure, so ask libtool to hide everything else:
++ APR_ADDTO(MOD_DAV_FS_LDADD, [-export-symbols-regex dav_fs_module])
++fi
++
+ APACHE_MODPATH_FINISH
+--- httpd-2.4.58/modules/dav/fs/dbm.c.r1912477+
++++ httpd-2.4.58/modules/dav/fs/dbm.c
+@@ -47,6 +47,10 @@
+ #include "http_log.h"
+ #include "http_main.h" /* for ap_server_conf */
+
++#ifndef DEFAULT_PROPDB_DBM_TYPE
++#define DEFAULT_PROPDB_DBM_TYPE "default"
++#endif
++
+ APLOG_USE_MODULE(dav_fs);
+
+ struct dav_db {
+@@ -100,7 +104,7 @@
+ /* There might not be a <db> if we had problems creating it. */
+ if (db == NULL) {
+ errcode = 1;
+- errstr = "Could not open property database.";
++ errstr = "Could not open database.";
+ if (APR_STATUS_IS_EDSOOPEN(status))
+ ap_log_error(APLOG_MARK, APLOG_CRIT, status, ap_server_conf, APLOGNO(00576)
+ "The DBM driver could not be loaded");
+@@ -129,10 +133,10 @@
+ /* dav_dbm_open_direct: Opens a *dbm database specified by path.
+ * ro = boolean read-only flag.
+ */
+-dav_error * dav_dbm_open_direct(apr_pool_t *p, const char *pathname, int ro,
+- dav_db **pdb)
++dav_error * dav_dbm_open_direct(apr_pool_t *p, const char *pathname,
++ const char *dbmtype, int ro, dav_db **pdb)
+ {
+-#if APU_MAJOR_VERSION > 1 || (APU_MAJOR_VERSION == 1 && APU_MINOR_VERSION >= 7)
++#if APR_MAJOR_VERSION > 1 || (APU_MAJOR_VERSION == 1 && APU_MINOR_VERSION >= 7)
+ const apr_dbm_driver_t *driver;
+ const apu_err_t *err;
+ #endif
+@@ -141,13 +145,13 @@
+
+ *pdb = NULL;
+
+-#if APU_MAJOR_VERSION > 1 || (APU_MAJOR_VERSION == 1 && APU_MINOR_VERSION >= 7)
+- if ((status = apr_dbm_get_driver(&driver, NULL, &err, p)) != APR_SUCCESS) {
++#if APR_MAJOR_VERSION > 1 || (APU_MAJOR_VERSION == 1 && APU_MINOR_VERSION >= 7)
++ if ((status = apr_dbm_get_driver(&driver, dbmtype, &err, p)) != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, status, ap_server_conf, APLOGNO(10289)
+- "mod_dav_fs: The DBM library '%s' could not be loaded: %s",
+- err->reason, err->msg);
++ "mod_dav_fs: The DBM library '%s' for '%s' could not be loaded: %s",
++ err->reason, dbmtype, err->msg);
+ return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 1, status,
+- "Could not load library for property database.");
++ "Could not load library for database.");
+ }
+ if ((status = apr_dbm_open2(&file, driver, pathname,
+ ro ? APR_DBM_READONLY : APR_DBM_RWCREATE,
+@@ -156,7 +160,7 @@
+ return dav_fs_dbm_error(NULL, p, status);
+ }
+ #else
+- if ((status = apr_dbm_open(&file, pathname,
++ if ((status = apr_dbm_open_ex(&file, dbmtype, pathname,
+ ro ? APR_DBM_READONLY : APR_DBM_RWCREATE,
+ APR_OS_DEFAULT, p))
+ != APR_SUCCESS
+@@ -206,7 +210,7 @@
+
+ /* ### do we need to deal with the umask? */
+
+- return dav_dbm_open_direct(p, pathname, ro, pdb);
++ return dav_dbm_open_direct(p, pathname, DEFAULT_PROPDB_DBM_TYPE, ro, pdb);
+ }
+
+ void dav_dbm_close(dav_db *db)
+--- httpd-2.4.58/modules/dav/fs/lock.c.r1912477+
++++ httpd-2.4.58/modules/dav/fs/lock.c
+@@ -181,8 +181,7 @@
+ {
+ request_rec *r; /* for accessing the uuid state */
+ apr_pool_t *pool; /* a pool to use */
+- const char *lockdb_path; /* where is the lock database? */
+-
++ const dav_fs_server_conf *conf; /* lock database config & metadata */
+ int opened; /* we opened the database */
+ dav_db *db; /* if non-NULL, the lock database */
+ };
+@@ -292,6 +291,19 @@
+ return dav_compare_locktoken(lt1, lt2);
+ }
+
++static apr_status_t dav_fs_lockdb_cleanup(void *data)
++{
++ dav_lockdb *lockdb = data;
++
++ apr_global_mutex_unlock(lockdb->info->conf->lockdb_mutex);
++
++ if (lockdb->info->db) {
++ dav_dbm_close(lockdb->info->db);
++ }
++
++ return APR_SUCCESS;
++}
++
+ /*
+ ** dav_fs_really_open_lockdb:
+ **
+@@ -300,15 +312,27 @@
+ static dav_error * dav_fs_really_open_lockdb(dav_lockdb *lockdb)
+ {
+ dav_error *err;
++ apr_status_t rv;
+
+ if (lockdb->info->opened)
+ return NULL;
+
++ rv = apr_global_mutex_lock(lockdb->info->conf->lockdb_mutex);
++ if (rv) {
++ return dav_new_error(lockdb->info->pool,
++ HTTP_INTERNAL_SERVER_ERROR,
++ DAV_ERR_LOCK_OPENDB, rv,
++ "Could not lock mutex for lock database.");
++ }
++
+ err = dav_dbm_open_direct(lockdb->info->pool,
+- lockdb->info->lockdb_path,
++ lockdb->info->conf->lockdb_path,
++ lockdb->info->conf->lockdb_type,
+ lockdb->ro,
+ &lockdb->info->db);
+ if (err != NULL) {
++ apr_global_mutex_unlock(lockdb->info->conf->lockdb_mutex);
++
+ return dav_push_error(lockdb->info->pool,
+ HTTP_INTERNAL_SERVER_ERROR,
+ DAV_ERR_LOCK_OPENDB,
+@@ -316,6 +340,10 @@
+ err);
+ }
+
++ apr_pool_cleanup_register(lockdb->info->pool, lockdb,
++ dav_fs_lockdb_cleanup,
++ dav_fs_lockdb_cleanup);
++
+ /* all right. it is opened now. */
+ lockdb->info->opened = 1;
+
+@@ -341,9 +369,9 @@
+ comb->pub.info = &comb->priv;
+ comb->priv.r = r;
+ comb->priv.pool = r->pool;
+-
+- comb->priv.lockdb_path = dav_get_lockdb_path(r);
+- if (comb->priv.lockdb_path == NULL) {
++ comb->priv.conf = dav_fs_get_server_conf(r);
++
++ if (comb->priv.conf == NULL || comb->priv.conf->lockdb_path == NULL) {
+ return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR,
+ DAV_ERR_LOCK_NO_DB, 0,
+ "A lock database was not specified with the "
+@@ -369,8 +397,8 @@
+ */
+ static void dav_fs_close_lockdb(dav_lockdb *lockdb)
+ {
+- if (lockdb->info->db != NULL)
+- dav_dbm_close(lockdb->info->db);
++ apr_pool_cleanup_run(lockdb->info->pool, lockdb,
++ dav_fs_lockdb_cleanup);
+ }
+
+ /*
+--- httpd-2.4.58/modules/dav/fs/mod_dav_fs.c.r1912477+
++++ httpd-2.4.58/modules/dav/fs/mod_dav_fs.c
+@@ -14,31 +14,35 @@
+ * limitations under the License.
+ */
+
++#if !defined(_MSC_VER) && !defined(NETWARE)
++#include "ap_config_auto.h"
++#endif
++
+ #include "httpd.h"
+ #include "http_config.h"
++#include "http_core.h"
++#include "http_log.h"
+ #include "apr_strings.h"
+
+ #include "mod_dav.h"
+ #include "repos.h"
+
+-/* per-server configuration */
+-typedef struct {
+- const char *lockdb_path;
+-
+-} dav_fs_server_conf;
+-
+ extern module AP_MODULE_DECLARE_DATA dav_fs_module;
+
+ #ifndef DEFAULT_DAV_LOCKDB
+ #define DEFAULT_DAV_LOCKDB "davlockdb"
+ #endif
++#ifndef DEFAULT_DAV_LOCKDB_TYPE
++#define DEFAULT_DAV_LOCKDB_TYPE "default"
++#endif
+
+-const char *dav_get_lockdb_path(const request_rec *r)
+-{
+- dav_fs_server_conf *conf;
++static const char dav_fs_mutexid[] = "dav_fs-lockdb";
+
+- conf = ap_get_module_config(r->server->module_config, &dav_fs_module);
+- return conf->lockdb_path;
++static apr_global_mutex_t *dav_fs_lockdb_mutex;
++
++const dav_fs_server_conf *dav_fs_get_server_conf(const request_rec *r)
++{
++ return ap_get_module_config(r->server->module_config, &dav_fs_module);
+ }
+
+ static void *dav_fs_create_server_config(apr_pool_t *p, server_rec *s)
+@@ -57,15 +61,50 @@
+
+ newconf->lockdb_path =
+ child->lockdb_path ? child->lockdb_path : parent->lockdb_path;
++ newconf->lockdb_type =
++ child->lockdb_type ? child->lockdb_type : parent->lockdb_type;
+
+ return newconf;
+ }
+
++static int dav_fs_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
++{
++ if (ap_mutex_register(pconf, dav_fs_mutexid, NULL, APR_LOCK_DEFAULT, 0))
++ return !OK;
++ return OK;
++}
++
++static void dav_fs_child_init(apr_pool_t *p, server_rec *s)
++{
++ apr_status_t rv;
++
++ rv = apr_global_mutex_child_init(&dav_fs_lockdb_mutex,
++ apr_global_mutex_lockfile(dav_fs_lockdb_mutex),
++ p);
++ if (rv) {
++ ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
++ APLOGNO(10488) "child init failed for mutex");
++ }
++}
++
+ static apr_status_t dav_fs_post_config(apr_pool_t *p, apr_pool_t *plog,
+ apr_pool_t *ptemp, server_rec *base_server)
+ {
+ server_rec *s;
++ apr_status_t rv;
+
++ /* Ignore first pass through the config. */
++ if (ap_state_query(AP_SQ_MAIN_STATE) == AP_SQ_MS_CREATE_PRE_CONFIG)
++ return OK;
++
++ rv = ap_global_mutex_create(&dav_fs_lockdb_mutex, NULL, dav_fs_mutexid, NULL,
++ base_server, p, 0);
++ if (rv) {
++ ap_log_error(APLOG_MARK, APLOG_ERR, rv, base_server,
++ APLOGNO(10489) "could not create lock mutex");
++ return !OK;
++ }
++
+ for (s = base_server; s; s = s->next) {
+ dav_fs_server_conf *conf;
+
+@@ -74,6 +113,13 @@
+ if (!conf->lockdb_path) {
+ conf->lockdb_path = ap_state_dir_relative(p, DEFAULT_DAV_LOCKDB);
+ }
++ if (!conf->lockdb_type) {
++ conf->lockdb_type = DEFAULT_DAV_LOCKDB_TYPE;
++ }
++
++ /* Mutex is common across all vhosts, but could have one per
++ * vhost if required. */
++ conf->lockdb_mutex = dav_fs_lockdb_mutex;
+ }
+
+ return OK;
+@@ -98,19 +144,36 @@
+ return NULL;
+ }
+
++/*
++ * Command handler for the DAVLockDBType directive, which is TAKE1
++ */
++static const char *dav_fs_cmd_davlockdbtype(cmd_parms *cmd, void *config,
++ const char *arg1)
++{
++ dav_fs_server_conf *conf = ap_get_module_config(cmd->server->module_config,
++ &dav_fs_module);
++ conf->lockdb_type = arg1;
++
++ return NULL;
++}
++
+ static const command_rec dav_fs_cmds[] =
+ {
+ /* per server */
+ AP_INIT_TAKE1("DAVLockDB", dav_fs_cmd_davlockdb, NULL, RSRC_CONF,
+ "specify a lock database"),
++ AP_INIT_TAKE1("DAVLockDBType", dav_fs_cmd_davlockdbtype, NULL, RSRC_CONF,
++ "specify a lock database DBM type"),
+
+ { NULL }
+ };
+
+ static void register_hooks(apr_pool_t *p)
+ {
++ ap_hook_pre_config(dav_fs_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
+ ap_hook_post_config(dav_fs_post_config, NULL, NULL, APR_HOOK_MIDDLE);
+-
++ ap_hook_child_init(dav_fs_child_init, NULL, NULL, APR_HOOK_MIDDLE);
++
+ dav_hook_gather_propsets(dav_fs_gather_propsets, NULL, NULL,
+ APR_HOOK_MIDDLE);
+ dav_hook_find_liveprop(dav_fs_find_liveprop, NULL, NULL, APR_HOOK_MIDDLE);
+--- httpd-2.4.58/modules/dav/fs/repos.h.r1912477+
++++ httpd-2.4.58/modules/dav/fs/repos.h
+@@ -25,6 +25,8 @@
+ #ifndef _DAV_FS_REPOS_H_
+ #define _DAV_FS_REPOS_H_
+
++#include "util_mutex.h"
++
+ /* the subdirectory to hold all DAV-related information for a directory */
+ #define DAV_FS_STATE_DIR ".DAV"
+ #define DAV_FS_STATE_FILE_FOR_DIR ".state_for_dir"
+@@ -53,8 +55,8 @@
+ /* DBM functions used by the repository and locking providers */
+ extern const dav_hooks_db dav_hooks_db_dbm;
+
+-dav_error * dav_dbm_open_direct(apr_pool_t *p, const char *pathname, int ro,
+- dav_db **pdb);
++dav_error * dav_dbm_open_direct(apr_pool_t *p, const char *pathname,
++ const char *dbmtype, int ro, dav_db **pdb);
+ void dav_dbm_get_statefiles(apr_pool_t *p, const char *fname,
+ const char **state1, const char **state2);
+ dav_error * dav_dbm_delete(dav_db *db, apr_datum_t key);
+@@ -64,8 +66,15 @@
+ int dav_dbm_exists(dav_db *db, apr_datum_t key);
+ void dav_dbm_close(dav_db *db);
+
+-/* where is the lock database located? */
+-const char *dav_get_lockdb_path(const request_rec *r);
++/* Per-server configuration. */
++typedef struct {
++ const char *lockdb_path;
++ const char *lockdb_type;
++ apr_global_mutex_t *lockdb_mutex;
++} dav_fs_server_conf;
++
++/* Returns server configuration for the request. */
++const dav_fs_server_conf *dav_fs_get_server_conf(const request_rec *r);
+
+ const dav_hooks_locks *dav_fs_get_lock_hooks(request_rec *r);
+ const dav_hooks_propdb *dav_fs_get_propdb_hooks(request_rec *r);