diff options
-rw-r--r-- | ex.c | 10 | ||||
-rwxr-xr-x | regress/env | 1 | ||||
-rw-r--r-- | regress/tests.sh | 12 |
3 files changed, 22 insertions, 1 deletions
@@ -147,7 +147,7 @@ launch_cgi(struct iri *iri, struct cgireq *req, struct vhost *vhost, return -1; case 0: { /* child */ - char *ex, *pwd; + char *ex, *pwd, *qs; char iribuf[GEMINI_URL_LEN]; char path[PATH_MAX]; struct envlist *e; @@ -185,6 +185,14 @@ launch_cgi(struct iri *iri, struct cgireq *req, struct vhost *vhost, safe_setenv("PATH_TRANSLATED", path); } + if (iri->query != NULL && + strchr(iri->query, '=') == NULL && + (qs = strdup(iri->query)) != NULL) { + pct_decode_str(qs); + safe_setenv("GEMINI_SEARCH_STRING", qs); + free(qs); + } + safe_setenv("QUERY_STRING", iri->query); safe_setenv("REMOTE_ADDR", req->addr); safe_setenv("REMOTE_HOST", req->addr); diff --git a/regress/env b/regress/env index d7e2e12..772c7e3 100755 --- a/regress/env +++ b/regress/env @@ -30,6 +30,7 @@ echo PWD=$PWD echo PATH_INFO=${PATH_INFO:-"<unspec>"} echo PATH_TRANSLATED=${PATH_TRANSLATED:-"<unspec>"} echo QUERY_STRING=$QUERY_STRING +echo GEMINI_SEARCH_STRING=${GEMINI_SEARCH_STRING:-"<unspec>"} echo REMOTE_ADDR=$REMOTE_ADDR echo REMOTE_HOST=$REMOTE_HOST echo REQUEST_METHOD=$REQUEST_METHOD diff --git a/regress/tests.sh b/regress/tests.sh index 6a30334..ac9e9a1 100644 --- a/regress/tests.sh +++ b/regress/tests.sh @@ -145,6 +145,18 @@ test_cgi_split_query() { return 1 fi done + + if ! n="$(get "/env?foo+bar%3d5" | grep GEMINI_SEARCH_STRING)"; then + echo "failed to get /env" + return 1 + fi + + if [ "$n" != "GEMINI_SEARCH_STRING=foo bar=5" ]; then + echo "wrong value for GEMINI_SEARCH_STRING" + echo "want : foo bar=5" + echo "got : $n" + return 1 + fi } test_custom_index() { |