Hi, On June I've posted a patch about using alternative control socket for relayd and relayctl. There was a comment from David Gwynne which was evaluated.
Is it OK to get this is in order to be able to control multiple relayd daemons on different rdomains? thanks Giannis Index: config.c =================================================================== RCS file: /cvs/src/usr.sbin/relayd/config.c,v retrieving revision 1.35 diff -u -p -r1.35 config.c --- config.c 27 Nov 2017 23:21:16 -0000 1.35 +++ config.c 28 Nov 2017 10:43:37 -0000 @@ -44,6 +44,7 @@ config_init(struct relayd *env) env->sc_conf.interval.tv_usec = 0; env->sc_conf.prefork_relay = RELAY_NUMPROC; env->sc_conf.statinterval.tv_sec = RELAY_STATINTERVAL; + env->sc_ps->ps_csock.cs_name = RELAYD_SOCKET; } ps->ps_what[PROC_PARENT] = CONFIG_ALL; Index: parse.y =================================================================== RCS file: /cvs/src/usr.sbin/relayd/parse.y,v retrieving revision 1.220 diff -u -p -r1.220 parse.y --- parse.y 27 Nov 2017 23:21:16 -0000 1.220 +++ parse.y 28 Nov 2017 10:43:38 -0000 @@ -418,6 +418,9 @@ main : INTERVAL NUMBER { AGENTX_SOCKET, sizeof(conf->sc_conf.snmp_path)); } + | SOCKET STRING { + conf->sc_ps->ps_csock.cs_name = $2; + } ; trap : /* nothing */ { $$ = 0; } Index: relayd.c =================================================================== RCS file: /cvs/src/usr.sbin/relayd/relayd.c,v retrieving revision 1.170 diff -u -p -r1.170 relayd.c --- relayd.c 27 Nov 2017 21:06:26 -0000 1.170 +++ relayd.c 28 Nov 2017 10:43:38 -0000 @@ -199,9 +199,6 @@ main(int argc, char *argv[]) if ((ps->ps_pw = getpwnam(RELAYD_USER)) == NULL) errx(1, "unknown user %s", RELAYD_USER); - /* Configure the control socket */ - ps->ps_csock.cs_name = RELAYD_SOCKET; - log_init(debug, LOG_DAEMON); log_setverbose(verbose); Index: relayd.conf.5 =================================================================== RCS file: /cvs/src/usr.sbin/relayd/relayd.conf.5,v retrieving revision 1.180 diff -u -p -r1.180 relayd.conf.5 --- relayd.conf.5 27 Nov 2017 23:21:16 -0000 1.180 +++ relayd.conf.5 28 Nov 2017 10:43:38 -0000 @@ -163,6 +163,12 @@ will be used. See .Xr snmpd.conf 5 for more information about SNMP configuration. +.It Ic socket Qo Ar path Qc +Create a control socket at +.Ar path . +By default +.Pa /var/run/relayd.sock +is created and no other sockets are created. .It Ic timeout Ar number Set the global timeout in milliseconds for checks. This can be overridden by the timeout value in the table definitions. Index: relayctl.8 =================================================================== RCS file: /cvs/src/usr.sbin/relayctl/relayctl.8,v retrieving revision 1.32 diff -u -p -r1.32 relayctl.8 --- relayctl.8 28 Nov 2015 01:22:44 -0000 1.32 +++ relayctl.8 28 Nov 2017 10:43:22 -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,17 @@ The program controls the .Xr relayd 8 daemon. +.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 -r1.57 relayctl.c --- relayctl.c 3 Sep 2016 14:44:21 -0000 1.57 +++ relayctl.c 28 Nov 2017 10:43:22 -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; + const 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,9 @@ 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)); + if (strlcpy(sun.sun_path, sockname, sizeof(sun.sun_path)) >= + sizeof(sun.sun_path)) + errx(1, "socket `%s' too long", sockname); reconnect: if (connect(ctl_sock, (struct sockaddr *)&sun, sizeof(sun)) == -1) { /* Keep retrying if running in monitor mode */ @@ -121,7 +140,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)