From 3c6b153c69f9cf5e1582a44e8ff79c9476a18e5b Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Sun, 3 Nov 2019 15:55:23 -0500 Subject: Append bindHost to bindPath if it is a directory --- bounce.c | 17 +++++++++++++---- pounce.1 | 10 +++++++++- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/bounce.c b/bounce.c index 01612e8..26bbeb8 100644 --- a/bounce.c +++ b/bounce.c @@ -172,7 +172,7 @@ static void signalHandler(int signal) { int main(int argc, char *argv[]) { const char *bindHost = "localhost"; const char *bindPort = "6697"; - const char *bindUnix = NULL; + char bindPath[PATH_MAX] = ""; char certPath[PATH_MAX] = ""; char privPath[PATH_MAX] = ""; const char *save = NULL; @@ -227,7 +227,7 @@ int main(int argc, char *argv[]) { break; case 'N': stateJoinNames = true; break; case 'P': bindPort = optarg; break; case 'Q': quit = optarg; - break; case 'U': bindUnix = optarg; + break; case 'U': strlcpy(bindPath, optarg, sizeof(bindPath)); break; case 'W': clientPass = optarg; break; case 'a': auth = optarg; break; case 'f': save = optarg; @@ -248,6 +248,15 @@ int main(int argc, char *argv[]) { } } + if (bindPath[0]) { + struct stat st; + int error = stat(bindPath, &st); + if (error && errno != ENOENT) err(EX_CANTCREAT, "%s", bindPath); + if (S_ISDIR(st.st_mode)) { + strlcat(bindPath, "/", sizeof(bindPath)); + strlcat(bindPath, bindHost, sizeof(bindPath)); + } + } if (!certPath[0]) { snprintf(certPath, sizeof(certPath), DEFAULT_CERT_PATH, bindHost); } @@ -274,8 +283,8 @@ int main(int argc, char *argv[]) { fclose(priv); int bind[8]; - size_t binds = bindUnix - ? listenUnix(bind, ARRAY_LEN(bind), bindUnix) + size_t binds = bindPath[0] + ? listenUnix(bind, ARRAY_LEN(bind), bindPath) : listenBind(bind, ARRAY_LEN(bind), bindHost, bindPort); int server = serverConnect(insecure, host, port); diff --git a/pounce.1 b/pounce.1 index 2a72854..cbe62b3 100644 --- a/pounce.1 +++ b/pounce.1 @@ -1,4 +1,4 @@ -.Dd November 2, 2019 +.Dd November 3, 2019 .Dt POUNCE 1 .Os . @@ -107,6 +107,14 @@ Bind to a UNIX-domain socket at .Ar path . Clients are accepted as sent by .Xr calico 1 . +If +.Ar path +is a directory, +the +.Ar host +set by +.Fl H +is appended to it. This option takes precedence over .Fl H and -- cgit 1.4.1