When submitting a command in bgplg(8), argument is not kept in its entirety
(split on space) which can be annoying ie. when querying extended community.

Fix this by printing request before splitting.

Index: bgplg.c
===================================================================
RCS file: /cvs/src/usr.bin/bgplg/bgplg.c,v
retrieving revision 1.19
diff -u -p -r1.19 bgplg.c
--- bgplg.c     5 Mar 2018 10:53:37 -0000       1.19
+++ bgplg.c     27 Oct 2018 15:52:34 -0000
@@ -245,7 +245,7 @@ lg_incl(const char *file)
 int
 main(void)
 {
-       char *query, *myname, *self, *cmd = NULL, *req;
+       char *query, *myname, *self, *cmd = NULL, *req = NULL;
        char **argv = NULL;
        int ret = 1, argc = 0, query_length = 0;
        struct stat st;
@@ -282,8 +282,11 @@ main(void)
                printf("fatal error: invalid request\n");
                goto err;
        }
-       if ((query = lg_getenv("QUERY_STRING", &query_length)) != NULL)
+       if ((query = lg_getenv("QUERY_STRING", &query_length)) != NULL) {
                cmd = lg_getarg("cmd=", query, query_length);
+               req = lg_getarg("req=", query, query_length);
+       }
+       
        printf(
            "<form action='%s'>\n"
            "<div class=\"command\">\n"
@@ -302,11 +305,6 @@ main(void)
                            cmds[i].name, cmds[i].name);
        }
 
-       if ((req = lg_getarg("req=", query, query_length)) != NULL) {
-               /* Could be NULL */
-               argv = lg_arg2argv(req, &argc);
-       }
-
        printf("</select>\n"
            "<input type='text' value='%s' name='req'/>\n"
            "<input type='submit' value='submit'/>\n"
@@ -343,6 +341,10 @@ main(void)
                printf("invalid command: %s\n", cmd);
                goto err;
        }
+
+       if (req != NULL)
+               argv = lg_arg2argv(req, &argc);
+
        if (argc > cmdp->maxargs) {
                printf("superfluous argument(s): %s %s\n",
                    cmd, cmdp->args ? cmdp->args : "");

Reply via email to