summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--bounce.c17
-rw-r--r--pounce.110
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