simplify and fix redirections after regex
This commit is contained in:
parent
e3932483ef
commit
27549119ef
9
main.c
9
main.c
|
@ -58,6 +58,7 @@ main(int argc, char **argv)
|
|||
read_request(request);
|
||||
split_request(request, hostname, path, query);
|
||||
set_path(path, sizeof(path), virtualhost, hostname);
|
||||
|
||||
//get_query(path, query, sizeof(query));
|
||||
|
||||
/* percent decode */
|
||||
|
@ -69,16 +70,20 @@ main(int argc, char **argv)
|
|||
if (do_cgi(chroot_dir, cgi_dir, path, hostname, query) == 0)
|
||||
stop(EXIT_SUCCESS, NULL);
|
||||
|
||||
syslog(LOG_DAEMON, "path:%s", path);
|
||||
/* *** from here, cgi didn't run ***
|
||||
* check if path available
|
||||
*/
|
||||
check_path(path, sizeof(path), hostname, virtualhost);
|
||||
check_path(path, sizeof(path), virtualhost, strlen(hostname));
|
||||
|
||||
/* split dir and filename */
|
||||
split_dir_file(path, dir, sizeof(dir), file, sizeof(file));
|
||||
syslog(LOG_DAEMON, "dir:%s", dir);
|
||||
syslog(LOG_DAEMON, "file:%s", file);
|
||||
|
||||
/* go to dir */
|
||||
echdir(dir);
|
||||
if (*dir)
|
||||
echdir(dir);
|
||||
|
||||
/* regular file to stdout */
|
||||
display_file(file);
|
||||
|
|
24
vger.c
24
vger.c
|
@ -384,6 +384,9 @@ set_path(char *path, size_t pathsiz, int virtualhost, const char *hostname)
|
|||
{
|
||||
char tmp[GEMINI_REQUEST_MAX] = {'\0'};
|
||||
|
||||
if (strlen(path) == 0) /* this is root dir */
|
||||
estrlcpy(path, "./", pathsiz);
|
||||
|
||||
/* path is in a subdir named hostname */
|
||||
if (virtualhost) {
|
||||
estrlcpy(tmp, hostname, sizeof(tmp));
|
||||
|
@ -396,7 +399,7 @@ set_path(char *path, size_t pathsiz, int virtualhost, const char *hostname)
|
|||
}
|
||||
|
||||
void
|
||||
check_path(char *path, size_t pathsiz, const char *hstnm, int virtualhost)
|
||||
check_path(char *path, size_t pathsiz, int virtualhost, size_t hstnm_o)
|
||||
{
|
||||
struct stat sb = {0};
|
||||
char tmp[PATH_MAX] = {'\0'};
|
||||
|
@ -416,17 +419,13 @@ check_path(char *path, size_t pathsiz, const char *hstnm, int virtualhost)
|
|||
/* check if dir path end with "/" */
|
||||
if (path[strlen(path) - 1] != '/') {
|
||||
/* redirect to the dir with appropriate ending '/' */
|
||||
|
||||
/* remove leading '.' for redirection*/
|
||||
if (virtualhost) /* remove ./host.name */
|
||||
memmove(path, path+2+strlen(hstnm),
|
||||
strlen(path + 2) + strlen(hstnm) + 1);
|
||||
estrlcpy(tmp, "/", sizeof(tmp));
|
||||
if (virtualhost) /* skip hostname */
|
||||
estrlcat(tmp, path+hstnm_o+1, sizeof(tmp));
|
||||
else
|
||||
memmove(path, path+1,
|
||||
strlen(path + 1) + 1); /* +1 for \0 */
|
||||
|
||||
estrlcat(path, "/", pathsiz);
|
||||
status(31, "%s", path);
|
||||
estrlcat(tmp, path, sizeof(tmp));
|
||||
estrlcat(tmp, "/", sizeof(tmp));
|
||||
status(31, "%s", tmp);
|
||||
stop(EXIT_SUCCESS, NULL);
|
||||
}
|
||||
/* check if DEFAULT_INDEX exists in directory */
|
||||
|
@ -502,9 +501,6 @@ split_request(const char *request, char *hostname, char *path, char *query)
|
|||
getsubexp(request, match[1], hostname);
|
||||
getsubexp(request, match[2], path);
|
||||
getsubexp(request, match[3], query);
|
||||
syslog(LOG_DAEMON, "hostname:%s", hostname);
|
||||
syslog(LOG_DAEMON, "path:%s", path);
|
||||
syslog(LOG_DAEMON, "query:%s", query);
|
||||
|
||||
regfree(&greg);
|
||||
}
|
||||
|
|
2
vger.h
2
vger.h
|
@ -42,7 +42,7 @@ static char _request[GEMINI_REQUEST_MAX] = {'\0'};
|
|||
ssize_t autoindex(const char *);
|
||||
void cgi(const char *);
|
||||
char * read_request(char *);
|
||||
void check_path(char *, size_t, const char *, int);
|
||||
void check_path(char *, size_t, int, size_t);
|
||||
ssize_t display_file(const char *);
|
||||
int do_cgi(const char *, const char *, const char *, const char *, const char *);
|
||||
void drop_privileges(const char *, const char *, const char *);
|
||||
|
|
Loading…
Reference in New Issue