Commit Diff


commit - 77718c121f89b39bd0095f10e2dbd2ff9df65281
commit + 97b306cbee6d105885a761e04274f661a0ec3757
blob - 4c71d8fa29d684f5d3e1e2e87ad6a972232e6875
blob + 2d1dc86cd84eeabfdb308272bb45fb5b97b0f597
--- fcgi.c
+++ fcgi.c
@@ -344,6 +344,7 @@ void
 fcgi_req(struct client *c)
 {
 	char		 addr[NI_MAXHOST], buf[22];
+	char		*qs;
 	int		 e;
 	time_t		 tim;
 	struct tm	 tminfo;
@@ -368,6 +369,14 @@ fcgi_req(struct client *c)
 	fcgi_send_param(c->cgibev, "SERVER_PROTOCOL", "GEMINI");
 	fcgi_send_param(c->cgibev, "SERVER_SOFTWARE", GMID_VERSION);
 
+	if (*c->iri.query != '\0' &&
+	    strchr(c->iri.query, '=') == NULL &&
+	    (qs = strdup(c->iri.query)) != NULL) {
+		pct_decode_str(qs);
+		fcgi_send_param(c->cgibev, "GEMINI_SEARCH_STRING", qs);
+		free(qs);
+	}
+
 	TAILQ_FOREACH(p, &c->host->params, envs) {
 		fcgi_send_param(c->cgibev, p->name, p->value);
 	}
blob - 93406f757dac3ea0be62c34740ce89331bd5e07f
blob + 13717a313549f8f0a804027bbe31d1a76ef30f54
--- gmid.conf.5
+++ gmid.conf.5
@@ -286,6 +286,12 @@ Full path to the FastCGI script being executed.
 The full IRI of the request.
 .It Ev GEMINI_URL_PATH
 The path of the request.
+.It Ev GEMINI_SEARCH_STRING
+The decoded
+.Ev QUERY_STRING
+if defined in the request and if it doesn't contain any unencoded
+.Sq =
+characters, otherwise unset.
 .It Ev PATH_INFO
 The portion of the requested path that is derived from the the IRI
 path hierarchy following the part that identifies the script itself.
blob - c1f97814e86bd458862e6cd96d5557f1f8b4bd2d
blob + d62eef5caa531ee4e2131d28f9345c765c910e32
--- iri.c
+++ iri.c
@@ -488,7 +488,9 @@ pct_decode_str(char *s)
 	char *t;
 
 	for (t = s; *t; ++t) {
-		if (*t == '%' && valid_pct_enc_string(t))
+		if (*t == '+')
+			*t = ' ';
+		else if (*t == '%' && valid_pct_enc_string(t))
 			pct_decode(t);
 	}