From e2567fcf01954cd4dc2ed5555e3b5f7d8782115a Mon Sep 17 00:00:00 2001 From: prx Date: Thu, 18 Aug 2022 11:05:21 +0200 Subject: [PATCH] modify function to set path according to virtualhost --- main.c | 2 +- vger.c | 18 ++++++------------ vger.h | 2 +- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/main.c b/main.c index e050577..d0d75c4 100644 --- a/main.c +++ b/main.c @@ -58,7 +58,7 @@ main(int argc, char **argv) read_request(request); split_request(request, hostname, path, query); //get_hostname(request, hostname, sizeof(hostname)); - //get_path(request, path, sizeof(path), virtualhost, hostname); + set_path(request, path, sizeof(path), virtualhost, hostname); //get_query(path, query, sizeof(query)); /* percent decode */ diff --git a/vger.c b/vger.c index ff1b68b..db90f71 100644 --- a/vger.c +++ b/vger.c @@ -399,24 +399,18 @@ get_hostname(const char *request, char *hstnm, size_t hstnmsiz) } char * -get_path(const char *request, char *path, size_t pathsiz, int virtualhost, const char *hostname) +set_path(const char *request, char *path, size_t pathsiz, int virtualhost, const char *hostname) { - char *pos = NULL; - - /* path must be relative to chroot */ - estrlcpy(path, "./", pathsiz); + char tmp[GEMINI_REQUEST_MAX] = {'\0'}; /* path is in a subdir named hostname */ if (virtualhost) { - estrlcat(path, hostname, pathsiz); - estrlcat(path, "/", pathsiz); + estrlcpy(tmp, hostname, sizeof(tmp)); + estrlcat(tmp, "/", sizeof(tmp)); + estrlcat(tmp, path, sizeof(tmp)); + estrlcpy(path, tmp, pathsiz); } - /* path is after hostname/ */ - pos = strchr(request, '/'); - if (pos != NULL) /* append the path. pos +1 to remove leading '/' */ - estrlcat(path, pos+1, pathsiz); - return path; } diff --git a/vger.h b/vger.h index 0586268..97823e4 100644 --- a/vger.h +++ b/vger.h @@ -48,7 +48,7 @@ int do_cgi(const char *, const char *, const char *, const char *, const char * void drop_privileges(const char *, const char *, const char *); void split_dir_file(char *, char *, size_t, char *, size_t); char * get_hostname(const char *, char *, size_t); -char * get_path(const char *, char *, size_t, int, const char *); +char * set_path(const char *, char *, size_t, int, const char *); char * get_query(char *, char *, size_t); void status(const int, const char *, ...); void strip_trailing_slash(char *);