static dav_error * dav_generic_has_locks(dav_lockdb *lockdb, const dav_resource *resource, int *locks_present) { dav_error *err; apr_datum_t key; *locks_present = 0; if ((err = dav_generic_really_open_lockdb(lockdb)) != NULL) { /* ### insert a higher-level error description */ return err; } /* * If we opened readonly and the db wasn't there, then there are no * locks for this resource. Just exit. */ if (lockdb->info->db == NULL) return NULL; key = dav_generic_build_key(lockdb->info->pool, resource); *locks_present = apr_dbm_exists(lockdb->info->db, key); return NULL; }
static apr_status_t htdbm_del(htdbm_t *htdbm) { apr_datum_t key; key.dptr = htdbm->username; key.dsize = strlen(htdbm->username); if (!apr_dbm_exists(htdbm->dbm, key)) return APR_ENOENT; return apr_dbm_delete(htdbm->dbm, key); }
static ftpd_chroot_status_t ftpd_dbm_map_chroot(const request_rec *r, const char **chroot, const char **initroot) { apr_status_t res; apr_dbm_t *file; ftpd_chroot_status_t ret = FTPD_CHROOT_USER_NOT_FOUND; apr_datum_t key,val = { 0 }; char *value, *tok, *tok_ses; ftpd_user_rec *ur __attribute__ ((unused))= ftpd_get_user_rec(r); ftpd_dbm_server_conf *pConfig = ap_get_module_config(r->server->module_config, &ftpd_dbm_module); if ((res = apr_dbm_open_ex(&file, pConfig->dbtype, pConfig->chrootdb_path, APR_DBM_READONLY, APR_OS_DEFAULT, r->pool)) != APR_SUCCESS) { ap_log_rerror(APLOG_MARK, APLOG_ERR, res, r, "Error opening DBM file: %s",pConfig->chrootdb_path); ret = FTPD_CHROOT_FAIL; } else { if (file != NULL) { /* search the DB */ key.dptr = r->user; key.dsize = strlen(key.dptr); if (apr_dbm_exists(file, key)) { if (apr_dbm_fetch(file, key, &val) == APR_SUCCESS) { value = apr_pstrndup(r->pool, val.dptr, val.dsize); tok = apr_strtok(value, ":", &tok_ses); if (tok != NULL) { *chroot = apr_pstrdup(r->pool, tok); tok = apr_strtok(NULL, ":", &tok_ses); if (tok != NULL) { *initroot = apr_pstrdup(r->pool, tok); } ret = FTPD_CHROOT_USER_FOUND; } else { ret = FTPD_CHROOT_FAIL; } } } apr_dbm_close(file); } else { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "File open failed: %s",pConfig->chrootdb_path); ret = FTPD_CHROOT_FAIL; } } return ret; }
static apr_status_t htdbm_verify(htdbm_t *htdbm) { apr_datum_t key, val; char *pwd; char *rec, *cmnt; key.dptr = htdbm->username; key.dsize = strlen(htdbm->username); if (!apr_dbm_exists(htdbm->dbm, key)) return APR_ENOENT; if (apr_dbm_fetch(htdbm->dbm, key, &val) != APR_SUCCESS) return APR_ENOENT; rec = apr_pstrndup(htdbm->ctx.pool, val.dptr, val.dsize); cmnt = strchr(rec, ':'); if (cmnt) pwd = apr_pstrndup(htdbm->ctx.pool, rec, cmnt - rec); else pwd = apr_pstrdup(htdbm->ctx.pool, rec); return apr_password_validate(htdbm->ctx.passwd, pwd); }
static apr_status_t htdbm_save(htdbm_t *htdbm, int *changed) { apr_datum_t key, val; if (!htdbm->username) return APR_SUCCESS; key.dptr = htdbm->username; key.dsize = strlen(htdbm->username); if (apr_dbm_exists(htdbm->dbm, key)) *changed = 1; val.dsize = strlen(htdbm->ctx.passwd); if (!htdbm->comment) val.dptr = htdbm->ctx.passwd; else { val.dptr = apr_pstrcat(htdbm->ctx.pool, htdbm->ctx.passwd, ":", htdbm->comment, NULL); val.dsize += (strlen(htdbm->comment) + 1); } return apr_dbm_store(htdbm->dbm, key, val); }
int dav_dbm_exists(dav_db *db, apr_datum_t key) { return apr_dbm_exists(db->file, key); }