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 : "");