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 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'bounce.c') 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); -- cgit 1.4.1