26#define APR_WANT_MEMFUNC
30#if !APR_VERSION_AT_LEAST(2,0,0)
84#define DAV_CREATE_LIST 23
85#define DAV_APPEND_LIST 24
88#define DAV_LOCK_DIRECT 1
89#define DAV_LOCK_INDIRECT 2
91#define DAV_TYPE_FNAME 11
97#define dav_compare_locktoken(plt1, plt2) \
98 memcmp(&(plt1)->uuid, &(plt2)->uuid, sizeof((plt1)->uuid))
149#define dav_size_direct(a) (1 + sizeof(dav_lock_discovery_fixed) \
150 + sizeof(apr_uuid_t) \
151 + ((a)->owner ? strlen((a)->owner) : 0) \
152 + ((a)->auth_user ? strlen((a)->auth_user) : 0) \
156#define dav_size_indirect(a) (1 + sizeof(apr_uuid_t) \
158 + sizeof(int) + (a)->key.dsize)
225 errstr =
"Could not open property database.";
247 if (locktoken ==
NULL) {
252 comb->pub.locktoken = locktoken;
272 "The lock token uses an unknown State-token "
273 "format and could not be parsed.");
280 "The opaquelocktoken has an incorrect format "
281 "and could not be parsed.");
320#if APU_MAJOR_VERSION > 1 || (APU_MAJOR_VERSION == 1 && APU_MINOR_VERSION >= 7)
331#if APU_MAJOR_VERSION > 1 || (APU_MAJOR_VERSION == 1 && APU_MINOR_VERSION >= 7)
336 "mod_dav_lock: The DBM library '%s' could not be loaded: %s",
337 er->reason,
er->msg);
339 status,
"Could not load library for property database.");
357 "Could not open the lock database.",
388 if (
comb->priv.lockdb_path ==
NULL) {
391 "A lock database was not specified with the "
392 "DAVGenericLockDB directive. One must be "
393 "specified to use the locking functionality.");
397 *lockdb = &
comb->pub;
439 if (
key.dptr[
key.dsize - 2] ==
'/')
440 key.dptr[--
key.dsize - 1] =
'\0';
475 "INTERNAL DESIGN ERROR: the lockdb was opened "
476 "readonly, but an attempt to save locks was "
513 ptr +=
sizeof(
dp->f);
514 memcpy(ptr,
dp->locktoken,
sizeof(*
dp->locktoken));
515 ptr +=
sizeof(*
dp->locktoken);
520 memcpy(ptr,
dp->owner, strlen(
dp->owner) + 1);
521 ptr += strlen(
dp->owner) + 1;
523 if (
dp->auth_user ==
NULL) {
527 memcpy(ptr,
dp->auth_user, strlen(
dp->auth_user) + 1);
528 ptr += strlen(
dp->auth_user) + 1;
560 "Could not save lock information.",
694 "The lock database was found to "
695 "be corrupt. offset %"
750 "The lock database was found to be corrupt. "
751 "An indirect lock's direct lock could not "
770 "<D:lockscope><D:exclusive/></D:lockscope>" DEBUG_CR
771 "<D:locktype><D:write/></D:locktype>" DEBUG_CR
774 "<D:lockscope><D:shared/></D:lockscope>" DEBUG_CR
775 "<D:locktype><D:write/></D:locktype>" DEBUG_CR
804 (*lock)->is_locknull = !
resource->exists;
826 "INTERNAL DESIGN ERROR: DAV_GETLOCKS_COMPLETE "
827 "is not yet supported");
910 (*lock)->is_locknull = !
resource->exists;
911 (*lock)->scope =
dp->f.scope;
912 (*lock)->type =
dp->f.type;
913 (*lock)->depth =
dp->f.depth;
914 (*lock)->timeout =
dp->f.timeout;
915 (*lock)->owner =
dp->owner;
916 (*lock)->auth_user =
dp->auth_user;
924 (*lock)->is_locknull = !
resource->exists;
937 (*lock)->scope =
dp->f.scope;
938 (*lock)->type =
dp->f.type;
939 (*lock)->depth =
dp->f.depth;
940 (*lock)->timeout =
dp->f.timeout;
941 (*lock)->owner =
dp->owner;
942 (*lock)->auth_user =
dp->auth_user;
1068 if (locktoken !=
NULL) {
1075 &dh, &ih)) !=
NULL) {
1090 for (ip = ih; ip !=
NULL; ip = ip->
next) {
1182 for (; ip !=
NULL; ip = ip->
next) {
const char apr_size_t len
const ap_regex_t char * errbuf
APR Versioning Interface.
APR Standard Headers Support.
APR-util Versioning Interface.
server_rec * ap_server_conf
const unsigned char * buf
#define APR_UUID_FORMATTED_LENGTH
const char const apr_dbd_driver_t ** driver
const char const char * pathname
#define HTTP_INTERNAL_SERVER_ERROR
#define DAV_ERR_LOCK_NO_DB
#define DAV_ERR_LOCK_PARSE_TOKEN
#define DAV_ERR_LOCK_OPENDB
const char * dav_generic_get_lockdb_path(const request_rec *r)
#define DAV_ERR_LOCK_CORRUPT_DB
#define DAV_ERR_LOCK_SAVE_LOCK
dav_error * dav_push_error(apr_pool_t *p, int status, int error_id, const char *desc, dav_error *prev)
#define DAV_ERR_LOCK_UNK_STATE_TOKEN
#define DAV_TIMEOUT_INFINITE
dav_error * dav_new_error(apr_pool_t *p, int status, int error_id, apr_status_t aprerr, const char *desc)
@ DAV_LOCKREC_INDIRECT_PARTIAL
#define ap_strstr_c(s, c)
apr_seek_where_t apr_off_t * offset
#define apr_pcalloc(p, size)
apr_int32_t apr_int32_t apr_int32_t err
static dav_error * dav_generic_create_lock(dav_lockdb *lockdb, const dav_resource *resource, dav_lock **lock)
static dav_error * dav_generic_find_lock(dav_lockdb *lockdb, const dav_resource *resource, const dav_locktoken *locktoken, int partial_ok, dav_lock **lock)
static dav_error * dav_generic_remove_lock(dav_lockdb *lockdb, const dav_resource *resource, const dav_locktoken *locktoken)
static const char * dav_generic_format_locktoken(apr_pool_t *p, const dav_locktoken *locktoken)
static dav_error * dav_generic_append_locks(dav_lockdb *lockdb, const dav_resource *resource, int make_indirect, const dav_lock *lock)
static int dav_generic_compare_locktoken(const dav_locktoken *lt1, const dav_locktoken *lt2)
static int dav_generic_lock_expired(time_t expires)
static dav_error * dav_generic_get_locks(dav_lockdb *lockdb, const dav_resource *resource, int calltype, dav_lock **locks)
static dav_error * dav_generic_open_lockdb(request_rec *r, int ro, int force, dav_lockdb **lockdb)
static dav_error * dav_generic_refresh_locks(dav_lockdb *lockdb, const dav_resource *resource, const dav_locktoken_list *ltl, time_t new_time, dav_lock **locks)
static dav_error * dav_generic_has_locks(dav_lockdb *lockdb, const dav_resource *resource, int *locks_present)
static dav_error * dav_generic_load_lock_record(dav_lockdb *lockdb, apr_datum_t key, int add_method, dav_lock_discovery **direct, dav_lock_indirect **indirect)
static dav_lock * dav_generic_alloc_lock(dav_lockdb *lockdb, apr_datum_t key, const dav_locktoken *locktoken)
static dav_error * dav_generic_remove_locknull_state(dav_lockdb *lockdb, const dav_resource *resource)
const dav_hooks_locks dav_hooks_locks_generic
static dav_error * dav_generic_resolve(dav_lockdb *lockdb, dav_lock_indirect *indirect, dav_lock_discovery **direct, dav_lock_discovery **ref_dp, dav_lock_indirect **ref_ip)
static dav_error * dav_generic_parse_locktoken(apr_pool_t *p, const char *char_token, dav_locktoken **locktoken_p)
static dav_error * dav_generic_save_lock_record(dav_lockdb *lockdb, apr_datum_t key, dav_lock_discovery *direct, dav_lock_indirect *indirect)
static void dav_generic_close_lockdb(dav_lockdb *lockdb)
#define dav_size_indirect(a)
static const char * dav_generic_get_supportedlock(const dav_resource *resource)
static dav_error * dav_generic_really_open_lockdb(dav_lockdb *lockdb)
#define dav_size_direct(a)
static dav_error * dav_generic_dbm_new_error(apr_dbm_t *db, apr_pool_t *p, apr_status_t status)
#define dav_compare_locktoken(plt1, plt2)
static apr_datum_t dav_generic_build_key(apr_pool_t *p, const dav_resource *resource)
#define DAV_LOCK_INDIRECT
static int dav_generic_do_refresh(dav_lock_discovery *dp, const dav_locktoken_list *ltl, time_t new_time)
Declarations for the generic lock implementation.
DAV extension module for Apache 2.0.*.
#define DAV_GETLOCKS_COMPLETE
#define DAV_GETLOCKS_RESOLVED
struct dav_lock_discovery * next
struct dav_lock_discovery_fixed f
dav_locktoken * locktoken
dav_locktoken * locktoken
struct dav_lock_indirect * next
dav_lockdb_private * info
A structure that represents the current request.