commit aa0fe0cf240e0add51d5b60a83dd554fd0575b28 from: Omar Polo date: Fri Nov 06 14:04:16 2020 UTC extract query parameters from the URL commit - 3c19febb014ddc7d9afa1b517c108da4b3fda5dc commit + aa0fe0cf240e0add51d5b60a83dd554fd0575b28 blob - c8348a0fa50bb6a6a3c9f05881989b5b30c17cf5 blob + a057e17c4114ec7ef7f6088adf27405a4273d1ea --- gmid.c +++ gmid.c @@ -113,7 +113,7 @@ int cgi; char *url_after_proto(char*); char *url_start_of_request(char*); int url_trim(struct client*, char*); -void adjust_path(char*); +char *adjust_path(char*); int path_isdir(char*); ssize_t filesize(int); @@ -190,11 +190,16 @@ url_trim(struct client *c, char *url) return 1; } -void +char * adjust_path(char *path) { - char *s; + char *s, *query; size_t len; + + if ((query = strchr(path, '?')) != NULL) { + *query = '\0'; + query++; + } /* /.. -> / */ len = strlen(path); @@ -207,13 +212,13 @@ adjust_path(char *path) /* if the path is only `..` trim out and exit */ if (!strcmp(path, "..")) { path[0] = '\0'; - return; + return query; } /* remove every ../ in the path */ while (1) { if ((s = strstr(path, "../")) == NULL) - return; + return query; memmove(s, s+3, strlen(s)+1); /* copy also the \0 */ } } @@ -540,6 +545,7 @@ handle(struct pollfd *fds, struct client *client) { char buf[GEMINI_URL_LEN]; char *path; + char *query; switch (client->state) { case S_OPEN: @@ -573,8 +579,10 @@ handle(struct pollfd *fds, struct client *client) return; } - adjust_path(path); - LOG(client, "get %s", path); + query = adjust_path(path); + LOG(client, "get %s%s%s", path, + query ? "?" : "", + query ? query : ""); if (path_isdir(path)) send_dir(path, fds, client);