#include "mod_dav.h"
#include "repos.h"
+
struct dav_db {
apr_pool_t *pool;
apr_dbm_t *file;
return dav_dbm_open_direct(p, pathname, ro, pdb);
}
-static void dav_dbm_close(dav_db *db)
+void dav_dbm_close(dav_db *db)
{
apr_dbm_close(db->file);
}
-static dav_error * dav_dbm_fetch(dav_db *db, dav_datum key, dav_datum *pvalue)
+dav_error * dav_dbm_fetch(dav_db *db, apr_datum_t key, apr_datum_t *pvalue)
{
apr_status_t status = apr_dbm_fetch(db->file, key, pvalue);
return dav_fs_dbm_error(db, NULL, status);
}
-static dav_error * dav_dbm_store(dav_db *db, dav_datum key, dav_datum value)
+dav_error * dav_dbm_store(dav_db *db, apr_datum_t key, apr_datum_t value)
{
apr_status_t status = apr_dbm_store(db->file, key, value);
return dav_fs_dbm_error(db, NULL, status);
}
-static dav_error * dav_dbm_delete(dav_db *db, dav_datum key)
+dav_error * dav_dbm_delete(dav_db *db, apr_datum_t key)
{
apr_status_t status = apr_dbm_delete(db->file, key);
return dav_fs_dbm_error(db, NULL, status);
}
-static int dav_dbm_exists(dav_db *db, dav_datum key)
+int dav_dbm_exists(dav_db *db, apr_datum_t key)
{
return apr_dbm_exists(db->file, key);
}
-static dav_error * dav_dbm_firstkey(dav_db *db, dav_datum *pkey)
+static dav_error * dav_dbm_firstkey(dav_db *db, apr_datum_t *pkey)
{
apr_status_t status = apr_dbm_firstkey(db->file, pkey);
return dav_fs_dbm_error(db, NULL, status);
}
-static dav_error * dav_dbm_nextkey(dav_db *db, dav_datum *pkey)
+static dav_error * dav_dbm_nextkey(dav_db *db, apr_datum_t *pkey)
{
apr_status_t status = apr_dbm_nextkey(db->file, pkey);
return dav_fs_dbm_error(db, NULL, status);
}
-static void dav_dbm_freedatum(dav_db *db, dav_datum data)
+void dav_dbm_freedatum(dav_db *db, apr_datum_t data)
{
apr_dbm_freedatum(db->file, data);
}
typedef struct dav_lock_indirect
{
dav_locktoken *locktoken;
- dav_datum key;
+ apr_datum_t key;
struct dav_lock_indirect *next;
time_t timeout;
} dav_lock_indirect;
+ ((a)->auth_user ? strlen((a)->auth_user) : 0) \
+ 2)
-/* Stored indirect lock info - lock token and dav_datum */
+/* Stored indirect lock info - lock token and apr_datum_t */
#define dav_size_indirect(a) (1 + sizeof(apr_uuid_t) \
+ sizeof(time_t) \
+ sizeof(int) + (a)->key.dsize)
*/
struct dav_lock_private
{
- dav_datum key; /* key into the lock database */
+ apr_datum_t key; /* key into the lock database */
};
typedef struct
{
/* internal function for creating locks */
-static dav_lock *dav_fs_alloc_lock(dav_lockdb *lockdb, dav_datum key,
+static dav_lock *dav_fs_alloc_lock(dav_lockdb *lockdb, apr_datum_t key,
const dav_locktoken *locktoken)
{
dav_lock_combined *comb;
static void dav_fs_close_lockdb(dav_lockdb *lockdb)
{
if (lockdb->info->db != NULL)
- (*dav_hooks_db_dbm.close)(lockdb->info->db);
+ dav_dbm_close(lockdb->info->db);
}
/*
**
** Given a pathname, build a DAV_TYPE_FNAME lock database key.
*/
-static dav_datum dav_fs_build_fname_key(apr_pool_t *p, const char *pathname)
+static apr_datum_t dav_fs_build_fname_key(apr_pool_t *p, const char *pathname)
{
- dav_datum key;
+ apr_datum_t key;
/* ### does this allocation have a proper lifetime? need to check */
/* ### can we use a buffer for this? */
}
/*
-** dav_fs_build_key: Given a resource, return a dav_datum key
+** dav_fs_build_key: Given a resource, return a apr_datum_t key
** to look up lock information for this file.
**
** (Win32 or file is lock-null):
-** dav_datum->dvalue = full path
+** apr_datum_t->dvalue = full path
**
** (non-Win32 and file exists ):
-** dav_datum->dvalue = inode, dev_major, dev_minor
+** apr_datum_t->dvalue = inode, dev_major, dev_minor
*/
-static dav_datum dav_fs_build_key(apr_pool_t *p, const dav_resource *resource)
+static apr_datum_t dav_fs_build_key(apr_pool_t *p,
+ const dav_resource *resource)
{
const char *file = dav_fs_pathname(resource);
#ifndef WIN32
- dav_datum key;
+ apr_datum_t key;
apr_finfo_t finfo;
/* ### use lstat() ?? */
** direct and indirect lock lists about path into the lock database.
** If direct and indirect == NULL, the key is removed.
*/
-static dav_error * dav_fs_save_lock_record(dav_lockdb *lockdb, dav_datum key,
+static dav_error * dav_fs_save_lock_record(dav_lockdb *lockdb, apr_datum_t key,
dav_lock_discovery *direct,
dav_lock_indirect *indirect)
{
dav_error *err;
- dav_datum val = { 0 };
+ apr_datum_t val = { 0 };
char *ptr;
dav_lock_discovery *dp = direct;
dav_lock_indirect *ip = indirect;
if (dp == NULL && ip == NULL) {
/* don't fail if the key is not present */
/* ### but what about other errors? */
- (void) (*dav_hooks_db_dbm.remove)(lockdb->info->db, key);
+ (void) dav_dbm_delete(lockdb->info->db, key);
return NULL;
}
ip = ip->next;
}
- if ((err = (*dav_hooks_db_dbm.store)(lockdb->info->db,
- key, val)) != NULL) {
+ if ((err = dav_dbm_store(lockdb->info->db, key, val)) != NULL) {
/* ### more details? add an error_id? */
return dav_push_error(lockdb->info->pool,
HTTP_INTERNAL_SERVER_ERROR,
** Passive lock removal: If lock has timed out, it will not be returned.
** ### How much "logging" does RFC 2518 require?
*/
-static dav_error * dav_fs_load_lock_record(dav_lockdb *lockdb, dav_datum key,
+static dav_error * dav_fs_load_lock_record(dav_lockdb *lockdb, apr_datum_t key,
int add_method,
dav_lock_discovery **direct,
dav_lock_indirect **indirect)
dav_error *err;
apr_size_t offset = 0;
int need_save = DAV_FALSE;
- dav_datum val = { 0 };
+ apr_datum_t val = { 0 };
dav_lock_discovery *dp;
dav_lock_indirect *ip;
dav_buffer buf = { 0 };
if (lockdb->info->db == NULL)
return NULL;
- if ((err = (*dav_hooks_db_dbm.fetch)(lockdb->info->db, key, &val)) != NULL)
+ if ((err = dav_dbm_fetch(lockdb->info->db, key, &val)) != NULL)
return err;
if (!val.dsize)
break;
default:
- (*dav_hooks_db_dbm.freedatum)(lockdb->info->db, val);
+ dav_dbm_freedatum(lockdb->info->db, val);
/* ### should use a computed_desc and insert corrupt token data */
--offset;
}
}
- (*dav_hooks_db_dbm.freedatum)(lockdb->info->db, val);
+ dav_dbm_freedatum(lockdb->info->db, val);
/* Clean up this record if we found expired locks */
/*
{
dav_lock_discovery *ld;
dav_lock_indirect *id;
- dav_datum key;
+ apr_datum_t key;
/*
** Fetch the lock(s) that made the resource lock-null. Remove
const dav_resource *resource,
dav_lock **lock)
{
- dav_datum key;
+ apr_datum_t key;
key = dav_fs_build_key(lockdb->info->pool, resource);
dav_lock **locks)
{
apr_pool_t *p = lockdb->info->pool;
- dav_datum key;
+ apr_datum_t key;
dav_error *err;
dav_lock *lock = NULL;
dav_lock *newlock;
dav_lock **lock)
{
dav_error *err;
- dav_datum key;
+ apr_datum_t key;
dav_lock_discovery *dp;
dav_lock_indirect *ip;
int *locks_present)
{
dav_error *err;
- dav_datum key;
+ apr_datum_t key;
*locks_present = 0;
key = dav_fs_build_key(lockdb->info->pool, resource);
- *locks_present = (*dav_hooks_db_dbm.exists)(lockdb->info->db, key);
+ *locks_present = dav_dbm_exists(lockdb->info->db, key);
return NULL;
}
dav_error *err;
dav_lock_indirect *ip;
dav_lock_discovery *dp;
- dav_datum key;
+ apr_datum_t key;
key = dav_fs_build_key(lockdb->info->pool, resource);
if ((err = dav_fs_load_lock_record(lockdb, key, 0, &dp, &ip)) != NULL) {
dav_buffer buf = { 0 };
dav_lock_discovery *dh = NULL;
dav_lock_indirect *ih = NULL;
- dav_datum key;
+ apr_datum_t key;
key = dav_fs_build_key(lockdb->info->pool, resource);
dav_lock **locks)
{
dav_error *err;
- dav_datum key;
+ apr_datum_t key;
dav_lock_discovery *dp;
dav_lock_discovery *dp_scan;
dav_lock_indirect *ip;