diff options
author | José Bollo <jose.bollo@iot.bzh> | 2016-04-07 13:56:04 +0200 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2016-04-07 13:56:04 +0200 |
commit | 8d036c20b1e6e6134817bfc4cb152e4e2469dba5 (patch) | |
tree | 963e61f3e9491bd08ed54ad4bad685343f622b47 | |
parent | ff24b370ba3f32959068b0cf3b2492e81cf58dda (diff) |
improves index.html handling
Change-Id: I5209fafe92dcf77a2ae8e2a2431ab01c5d8f5df9
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r-- | src/afb-hreq.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/afb-hreq.c b/src/afb-hreq.c index 8928266e..badddd1e 100644 --- a/src/afb-hreq.c +++ b/src/afb-hreq.c @@ -312,15 +312,24 @@ int afb_hreq_reply_file_if_exist(struct afb_hreq *hreq, int dirfd, const char *f /* serve directory */ if (S_ISDIR(st.st_mode)) { - if (hreq->url[hreq->lenurl - 1] != '/') { - /* the redirect is needed for reliability of relative path */ - char *tourl = alloca(hreq->lenurl + 2); - memcpy(tourl, hreq->url, hreq->lenurl); - tourl[hreq->lenurl] = '/'; - tourl[hreq->lenurl + 1] = 0; - rc = afb_hreq_redirect_to(hreq, tourl); - } else { - rc = afb_hreq_reply_file_if_exist(hreq, fd, "index.html"); + static const char *indexes[] = { "index.html", NULL }; + int i = 0; + rc = 0; + while (indexes[i] != NULL) { + if (faccessat(fd, indexes[i], R_OK, 0) == 0) { + if (hreq->url[hreq->lenurl - 1] != '/') { + /* the redirect is needed for reliability of relative path */ + char *tourl = alloca(hreq->lenurl + 2); + memcpy(tourl, hreq->url, hreq->lenurl); + tourl[hreq->lenurl] = '/'; + tourl[hreq->lenurl + 1] = 0; + rc = afb_hreq_redirect_to(hreq, tourl); + } else { + rc = afb_hreq_reply_file_if_exist(hreq, fd, indexes[i]); + } + break; + } + i++; } close(fd); return rc; |