From 8d75b0f46a367318c634f71a5a964cdbb9578977 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Wed, 24 Mar 2021 18:21:34 +0000 Subject: vsockclient: allow null application I found myself running vsockclient 2 1024 true in a situation where it just mattered that a connection was made, and no data needed to be exchanged of it. That I found myself doing this is quite a strong indicator that the program to exec into should be optional. UCSPI-1996[1] doesn't specify what should happen if no application is provided, so I think this is a reasonable interpretation. I'm not sure if I feel the same for vsockserver(d), so I haven't made the corresponding change there. I'll wait to see if there's ever a need for it. [1]: https://cr.yp.to/proto/ucspi.txt Message-Id: <20210324182433.19110-1-hi@alyssa.is> Reviewed-by: Cole Helbling --- vsockclient.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/vsockclient.c b/vsockclient.c index 934cfa0..456810d 100644 --- a/vsockclient.c +++ b/vsockclient.c @@ -41,11 +41,9 @@ int main(int argc, char *argv[]) } } - // Check there are enough positional arguments (two for the - // address and at least one to exec into). - if (optind > argc - 3) + // Find the address (cid and port) to connect to. + if (optind > argc - 2) ex_usage(); - if (getu32(argv[optind++], 0, UINT32_MAX, &rcid)) ex_usage(); if (getu32(argv[optind++], 0, UINT32_MAX, &rport)) @@ -69,6 +67,11 @@ int main(int argc, char *argv[]) "connect to %" PRIu32 ":%" PRIu32 " failed", rcid, rport); ilog("connected to %" PRIu32 ":%" PRIu32 "!", rcid, rport); + // If we have nothing to exec into, we're done. (Sometimes + // just connecting on its own is enough.) + if (optind == argc) + return 0; + // Set up the file descriptors to the well-known UCSPI numbers. if (dup2(fd, 6) == -1) diee(EX_OSERR, "dup2"); -- cgit 1.4.1