--- a/src/server/plugins/postgresql/webdav.c Tue Apr 19 19:15:23 2022 +0200 +++ b/src/server/plugins/postgresql/webdav.c Tue Apr 19 20:32:45 2022 +0200 @@ -39,9 +39,53 @@ NULL, // opt_delete NULL, // opt_delete_finish 0, + NULL, NULL }; +WebdavBackend* pg_webdav_create(Session *sn, Request *rq, pblock *pb) { + // resourcepool is required + char *resource_pool = pblock_findval("resourcepool", pb); + if(!resource_pool) { + log_ereport(LOG_MISCONFIG, "pg_webdav_create: missing resourcepool parameter"); + return NULL; + } + + // get the resource first (should only fail in case of misconfig) + ResourceData *resdata = resourcepool_lookup(sn, rq, resource_pool, 0); + if(!resdata) { + log_ereport(LOG_MISCONFIG, "postgresql webdav: resource pool %s not found", resource_pool); + return NULL; + } + + return pg_webdav_create_from_resdata(sn, rq, resdata); +} + +WebdavBackend* pg_webdav_create_from_resdata(Session *sn, Request *rq, ResourceData *resdata) { + WebdavBackend *webdav = pool_malloc(sn->pool, sizeof(WebdavBackend)); + if(!webdav) { + return NULL; + } + *webdav = pg_webdav_backend; + + PgWebdavBackend *instance = pool_malloc(sn->pool, sizeof(PgWebdavBackend)); + if(instance) { + pool_free(sn->pool, webdav); + return NULL; + } + webdav->instance = instance; + + instance->pg_resource = resdata; + instance->connection = resdata->data; + + return webdav; +} + +WebdavBackend* pg_webdav_prop_create(Session *sn, Request *rq, pblock *pb) { + return NULL; +} + + int pg_dav_propfind_init( WebdavPropfindRequest *rq, const char *path,