src/server/safs/pathcheck.c

changeset 405
162f122b96a1
parent 404
e0e0754efd46
child 415
d938228c382e
equal deleted inserted replaced
404:e0e0754efd46 405:162f122b96a1
182 } 182 }
183 183
184 int dir_redirect(pblock *pb, Session *sn, Request *rq) { 184 int dir_redirect(pblock *pb, Session *sn, Request *rq) {
185 char *path = pblock_findkeyval(pb_key_path, rq->vars); 185 char *path = pblock_findkeyval(pb_key_path, rq->vars);
186 186
187 // TODO: VFS support 187 VFSContext *vfs = vfs_request_context(sn, rq);
188 188
189 struct stat s; 189 struct stat s;
190 if(stat(path, &s) != 0) { 190 if(vfs_stat(vfs, path, &s) != 0) {
191 return REQ_NOACTION; 191 return REQ_NOACTION;
192 } 192 }
193 193
194 // TODO: remove code duplication (service.c) 194 // TODO: remove code duplication (service.c)
195 // TODO: make response code configurable
195 if(S_ISDIR(s.st_mode) && path[strlen(path)-1] != '/') { 196 if(S_ISDIR(s.st_mode) && path[strlen(path)-1] != '/') {
196 pblock_nvinsert("content-length", "0", rq->srvhdrs); 197 pblock_nvinsert("content-length", "0", rq->srvhdrs);
197 pblock_removekey(pb_key_content_type, rq->srvhdrs); 198 pblock_removekey(pb_key_content_type, rq->srvhdrs);
198 char *uri = pblock_findkeyval(pb_key_uri, rq->reqpb); 199 char *uri = pblock_findkeyval(pb_key_uri, rq->reqpb);
199 size_t urilen = strlen(uri); 200 size_t urilen = strlen(uri);

mercurial