Hi,

Here is a patch for using alternative control socket for relayd and relayctl.
It's based on ospfd. I would like for this to get in order to be able to 
control multiple relayd daemons on different rdomains.

regards,

Giannis

Index: relayd.8
===================================================================
RCS file: /cvs/src/usr.sbin/relayd/relayd.8,v
retrieving revision 1.25
diff -u -p -u -r1.25 relayd.8
--- relayd.8    27 Jul 2015 14:50:58 -0000      1.25
+++ relayd.8    22 Jun 2017 15:08:26 -0000
@@ -25,6 +25,7 @@
 .Op Fl dnv
 .Op Fl D Ar macro Ns = Ns Ar value
 .Op Fl f Ar file
+.Op Fl s Ar socket
 .Sh DESCRIPTION
 .Nm
 is a daemon to relay and dynamically redirect incoming connections to
@@ -118,6 +119,8 @@ The default is
 .It Fl n
 Configtest mode.
 Only check the configuration file for validity.
+.It Fl s Ar socket
+Use an alternate location for the default control socket.
 .It Fl v
 Produce more verbose output.
 .El
Index: relayd.c
===================================================================
RCS file: /cvs/src/usr.sbin/relayd/relayd.c,v
retrieving revision 1.169
diff -u -p -u -r1.169 relayd.c
--- relayd.c    31 May 2017 04:14:34 -0000      1.169
+++ relayd.c    22 Jun 2017 15:08:26 -0000
@@ -107,7 +107,8 @@ usage(void)
 {
        extern char     *__progname;
 
-       fprintf(stderr, "usage: %s [-dnv] [-D macro=value] [-f file]\n",
+       fprintf(stderr, "usage: %s [-dnv] [-D macro=value] [-f file]"
+           " [-s socket]\n",
            __progname);
        exit(1);
 }
@@ -121,12 +122,13 @@ main(int argc, char *argv[])
        struct relayd           *env;
        struct privsep          *ps;
        const char              *conffile = CONF_FILE;
+       const char              *sockname = RELAYD_SOCKET;
        enum privsep_procid      proc_id = PROC_PARENT;
        int                      proc_instance = 0;
        const char              *errp, *title = NULL;
        int                      argc0 = argc;
 
-       while ((c = getopt(argc, argv, "dD:nI:P:f:v")) != -1) {
+       while ((c = getopt(argc, argv, "dD:nI:P:f:s:v")) != -1) {
                switch (c) {
                case 'd':
                        debug = 2;
@@ -143,6 +145,9 @@ main(int argc, char *argv[])
                case 'f':
                        conffile = optarg;
                        break;
+               case 's':
+                       sockname = optarg;
+                       break;
                case 'v':
                        verbose++;
                        opts |= RELAYD_OPT_VERBOSE;
@@ -200,7 +205,7 @@ main(int argc, char *argv[])
                errx(1, "unknown user %s", RELAYD_USER);
 
        /* Configure the control socket */
-       ps->ps_csock.cs_name = RELAYD_SOCKET;
+       ps->ps_csock.cs_name = sockname;
 
        log_init(debug, LOG_DAEMON);
        log_setverbose(verbose);

Index: relayctl.8
===================================================================
RCS file: /cvs/src/usr.sbin/relayctl/relayctl.8,v
retrieving revision 1.32
diff -u -p -u -r1.32 relayctl.8
--- relayctl.8  28 Nov 2015 01:22:44 -0000      1.32
+++ relayctl.8  22 Jun 2017 15:08:37 -0000
@@ -23,6 +23,7 @@
 .Nd control the relay daemon
 .Sh SYNOPSIS
 .Nm
+.Op Fl s Ar socket
 .Ar command
 .Op Ar argument ...
 .Sh DESCRIPTION
@@ -31,6 +32,21 @@ The
 program controls the
 .Xr relayd 8
 daemon.
+Commands may be abbreviated to the minimum unambiguous prefix; for example,
+.Cm sh su
+for
+.Cm show summary .
+.Pp
+The following options are available:
+.Bl -tag -width Ds
+.It Fl s Ar socket
+Use
+.Ar socket
+instead of the default
+.Pa /var/run/relayd.sock
+to communicate with
+.Xr relayd 8 .
+.El
 .Pp
 The following commands are available:
 .Bl -tag -width Ds
Index: relayctl.c
===================================================================
RCS file: /cvs/src/usr.sbin/relayctl/relayctl.c,v
retrieving revision 1.57
diff -u -p -u -r1.57 relayctl.c
--- relayctl.c  3 Sep 2016 14:44:21 -0000       1.57
+++ relayctl.c  22 Jun 2017 15:08:37 -0000
@@ -88,7 +88,8 @@ usage(void)
 {
        extern char *__progname;
 
-       fprintf(stderr, "usage: %s command [argument ...]\n", __progname);
+       fprintf(stderr, "usage: %s [-s socket] command [argument ...]\n",
+           __progname);
        exit(1);
 }
 
@@ -101,9 +102,25 @@ main(int argc, char *argv[])
        int                      ctl_sock;
        int                      done = 0;
        int                      n, verbose = 0;
+       int                      ch;
+       char                    *sockname;
+
+       sockname = RELAYD_SOCKET;
+       while ((ch = getopt(argc, argv, "s:")) != -1) {
+               switch (ch) {
+               case 's':
+                       sockname = optarg;
+                       break;
+               default:
+                       usage();
+                       /* NOTREACHED */
+               }
+       }
+       argc -= optind;
+       argv += optind;
 
        /* parse options */
-       if ((res = parse(argc - 1, argv + 1)) == NULL)
+       if ((res = parse(argc, argv)) == NULL)
                exit(1);
 
        /* connect to relayd control socket */
@@ -112,7 +129,7 @@ main(int argc, char *argv[])
 
        bzero(&sun, sizeof(sun));
        sun.sun_family = AF_UNIX;
-       (void)strlcpy(sun.sun_path, RELAYD_SOCKET, sizeof(sun.sun_path));
+       (void)strlcpy(sun.sun_path, sockname, sizeof(sun.sun_path));
  reconnect:
        if (connect(ctl_sock, (struct sockaddr *)&sun, sizeof(sun)) == -1) {
                /* Keep retrying if running in monitor mode */
@@ -121,7 +138,7 @@ main(int argc, char *argv[])
                        usleep(100);
                        goto reconnect;
                }
-               err(1, "connect: %s", RELAYD_SOCKET);
+               err(1, "connect: %s", sockname);
        }
 
        if (pledge("stdio", NULL) == -1)

Reply via email to