--- mod_include-2.0.47.c	Tue Sep  9 02:33:42 2003
+++ mod_include.c	Tue Sep  9 02:32:44 2003
@@ -2968,6 +2968,80 @@
     return 0;
 }
 
+static int 
+handle_parseqs(include_ctx_t * ctx, apr_bucket_brigade ** bb,
+	       request_rec * r, ap_filter_t * f,
+	       apr_bucket * head_ptr, apr_bucket ** inserted_head)
+{
+
+    char *tag = NULL;
+    char *tag_val = NULL;
+    char qsa[1024];
+
+    apr_bucket *tmp_buck;
+
+    if (ctx->flags & FLAG_PRINTING) {
+	ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 1);
+	if ((tag == NULL) && (tag_val == NULL)) {
+
+	    strncpy(qsa, apr_table_get(r->subprocess_env, "QUERY_STRING"), sizeof(qsa));
+
+	    char *qsa_ptr = qsa;
+	    int i = 0;
+
+	    /*
+	     * Loop over the query string chars. If we encounter & or \0, set
+	     * that char to \0 and work on the sub-string. Else keep going.
+	     * When we get to the end of the string, strlen will be false.
+	     */
+	    while (strlen(qsa_ptr)) {
+		if ((qsa_ptr[i] == '&') || (qsa_ptr[i] == '\0')) {
+		    qsa_ptr[i] = '\0';
+
+		    /*
+		     * Loop over the sub-string to split it into name=value
+		     * pairs
+		     */
+		    int j;
+		    char *val_ptr;
+		    for (j = 0; j <= strlen(qsa_ptr); j++) {
+			if (qsa_ptr[j] == '=') {
+			    qsa_ptr[j] = '\0';
+			    val_ptr = (qsa_ptr + ++j);
+			    j = strlen(qsa_ptr);
+			}
+		    }
+
+		    apr_table_setn(r->subprocess_env,
+				   apr_pstrdup(r->pool, qsa_ptr),
+				   apr_pstrdup(r->pool, val_ptr));
+
+		    val_ptr = "";
+		    qsa_ptr += ++i;
+		    i = 0;
+		}
+		else {
+		    i++;
+		}
+	    }
+
+
+	}
+	else {
+	    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+			  "parseqs directive does not take tags in %s",
+			  r->filename);
+	    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
+	    return -1;
+	}
+    }
+    return 0;
+}
+
+
+
+
+
 /* -------------------------- The main function --------------------------- */
 
 static apr_status_t 
@@ -3542,6 +3616,9 @@
 	ssi_pfn_register("include", handle_include);
 	ssi_pfn_register("flastmod", handle_flastmod);
 	ssi_pfn_register("printenv", handle_printenv);
+	/* MF */
+	ssi_pfn_register("parseqs", handle_parseqs);
+
     }
     return OK;
 }
