src/server/safs/nametrans.c

branch
webdav
changeset 277
7608af69739f
parent 137
ca0cf1016a8b
child 325
2d14055c3543
--- a/src/server/safs/nametrans.c	Fri Jan 28 15:44:30 2022 +0100
+++ b/src/server/safs/nametrans.c	Fri Jan 28 16:01:05 2022 +0100
@@ -33,6 +33,20 @@
 #include "../util/pblock.h"
 #include "../util/util.h"
 
+#include "../public/vfs.h"
+
+static int nametrans_set_vfs(pblock *pb, Session *sn, Request *rq) {
+    char *vfsclass = pblock_findkeyval(pb_key_vfsclass, pb);
+    if(!vfsclass) return 0;
+    
+    VFS *vfs = vfs_create(sn, rq, vfsclass, pb);
+    if(!vfs) {
+        return 1;
+    }
+    rq->vfs = vfs;
+    return 0;
+}
+
 /*
  * assign_name
  *
@@ -66,6 +80,11 @@
             i++;
         }
     }
+    
+    if(nametrans_set_vfs(pb, sn, rq)) {
+        log_ereport(LOG_FAILURE, "assign-name: cannot create VFS: name=%s from=%s", name, from);
+        return REQ_ABORTED;
+    }
 
     // add object to rq->vars
     pblock_kvinsert(pb_key_name, name, strlen(name), rq->vars);
@@ -89,6 +108,11 @@
         return REQ_ABORTED;
     }
     
+    if(nametrans_set_vfs(pb, sn, rq)) {
+        log_ereport(LOG_FAILURE, "document-root: cannot create VFS");
+        return REQ_ABORTED;
+    }
+    
     sstr_t root_str = sstr(root);
     sstr_t uri_str = sstr(pblock_findkeyval(pb_key_uri, rq->reqpb));  
     
@@ -147,6 +171,11 @@
         uri++;
     }
     
+    if(nametrans_set_vfs(pb, sn, rq)) {
+        log_ereport(LOG_FAILURE, "pfx2dir: cannot create VFS: from=%s dir=%s name=%s", from, dir, name);
+        return REQ_ABORTED;
+    }
+    
     request_set_path(sstr(dir), sstr(uri), rq->vars);
     
     if(name) {
@@ -192,6 +221,11 @@
         return REQ_ABORTED;
     }
     
+    if(nametrans_set_vfs(pb, sn, rq)) {
+        log_ereport(LOG_FAILURE, "simple-rewrite: cannot create VFS: from=%s root=%s path=%s name=%s", from, root, path, name);
+        return REQ_ABORTED;
+    }
+    
     char *uri = pblock_findkeyval(pb_key_uri, rq->reqpb);
     sstr_t u = sstr(uri);
     sstr_t f = sstr(from);

mercurial