diff -r 0cb4eda146c4 -r 7608af69739f src/server/safs/nametrans.c --- 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);