reads ok benno@ Jeremie Courreges-Anglas([email protected]) on 2016.08.02 13:48:11 +0200: > Nima GHOTBI <[email protected]> writes: > > > please try the attachments > > > > On Sun, Jul 31, 2016 at 7:27 PM, Jeremie Courreges-Anglas <[email protected]> > > wrote: > > > >> Nima GHOTBI <[email protected]> writes: > >> > >> > Hi everyone > >> > > >> > In one of our projects we had to run multiple instances of ripd on > >> > different rdomains so I made a patch to add "-s" argument to ripd and > >> > ripctl to let the user change control socket path from /var/run/ripd.sock > > Here's an updated diff that fixes whitespace and tries to match ospfd > a bit more closely. > > Comments / oks? > > > Index: usr.sbin/ripd/control.c > =================================================================== > RCS file: /cvs/src/usr.sbin/ripd/control.c,v > retrieving revision 1.22 > diff -u -p -r1.22 control.c > --- usr.sbin/ripd/control.c 5 Dec 2015 13:13:47 -0000 1.22 > +++ usr.sbin/ripd/control.c 2 Aug 2016 11:35:57 -0000 > @@ -39,7 +39,7 @@ struct ctl_conn *control_connbypid(pid_t > void control_close(int); > > int > -control_init(void) > +control_init(char *path) > { > struct sockaddr_un sun; > int fd; > @@ -53,28 +53,28 @@ control_init(void) > > bzero(&sun, sizeof(sun)); > sun.sun_family = AF_UNIX; > - strlcpy(sun.sun_path, RIPD_SOCKET, sizeof(sun.sun_path)); > + strlcpy(sun.sun_path, path, sizeof(sun.sun_path)); > > - if (unlink(RIPD_SOCKET) == -1) > + if (unlink(path) == -1) > if (errno != ENOENT) { > - log_warn("control_init: unlink %s", RIPD_SOCKET); > + log_warn("control_init: unlink %s", path); > close(fd); > return (-1); > } > > old_umask = umask(S_IXUSR|S_IXGRP|S_IWOTH|S_IROTH|S_IXOTH); > if (bind(fd, (struct sockaddr *)&sun, sizeof(sun)) == -1) { > - log_warn("control_init: bind: %s", RIPD_SOCKET); > + log_warn("control_init: bind: %s", path); > close(fd); > umask(old_umask); > return (-1); > } > umask(old_umask); > > - if (chmod(RIPD_SOCKET, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) == -1) { > + if (chmod(path, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) == -1) { > log_warn("control_init: chmod"); > close(fd); > - (void)unlink(RIPD_SOCKET); > + (void)unlink(path); > return (-1); > } > > @@ -101,11 +101,11 @@ control_listen(void) > } > > void > -control_cleanup(void) > +control_cleanup(char *path) > { > event_del(&control_state.ev); > event_del(&control_state.evt); > - unlink(RIPD_SOCKET); > + unlink(path); > } > > /* ARGSUSED */ > Index: usr.sbin/ripd/control.h > =================================================================== > RCS file: /cvs/src/usr.sbin/ripd/control.h,v > retrieving revision 1.4 > diff -u -p -r1.4 control.h > --- usr.sbin/ripd/control.h 9 Feb 2015 12:13:42 -0000 1.4 > +++ usr.sbin/ripd/control.h 2 Aug 2016 11:34:44 -0000 > @@ -34,11 +34,11 @@ struct ctl_conn { > struct imsgev iev; > }; > > -int control_init(void); > +int control_init(char *); > int control_listen(void); > void control_accept(int, short, void *); > void control_dispatch_imsg(int, short, void *); > int control_imsg_relay(struct imsg *); > -void control_cleanup(void); > +void control_cleanup(char *); > > #endif /* _CONTROL_H_ */ > Index: usr.sbin/ripd/ripd.c > =================================================================== > RCS file: /cvs/src/usr.sbin/ripd/ripd.c,v > retrieving revision 1.27 > diff -u -p -r1.27 ripd.c > --- usr.sbin/ripd/ripd.c 2 Feb 2016 17:51:11 -0000 1.27 > +++ usr.sbin/ripd/ripd.c 2 Aug 2016 11:44:24 -0000 > @@ -70,7 +70,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); > } > @@ -122,15 +123,17 @@ main(int argc, char *argv[]) > int ch; > int opts = 0; > char *conffile; > + char *sockname; > size_t len; > > conffile = CONF_FILE; > ripd_process = PROC_MAIN; > + sockname = RIPD_SOCKET; > > log_init(1); /* log to stderr until daemonized */ > log_verbose(1); > > - while ((ch = getopt(argc, argv, "cdD:f:nv")) != -1) { > + while ((ch = getopt(argc, argv, "cdD:f:ns:v")) != -1) { > switch (ch) { > case 'c': > opts |= RIPD_OPT_FORCE_DEMOTE; > @@ -149,6 +152,9 @@ main(int argc, char *argv[]) > case 'n': > opts |= RIPD_OPT_NOACTION; > break; > + case 's': > + sockname = optarg; > + break; > case 'v': > if (opts & RIPD_OPT_VERBOSE) > opts |= RIPD_OPT_VERBOSE2; > @@ -182,6 +188,7 @@ main(int argc, char *argv[]) > /* parse config file */ > if ((conf = parse_config(conffile, opts)) == NULL ) > exit(1); > + conf->csock = sockname; > > if (conf->opts & RIPD_OPT_NOACTION) { > if (conf->opts & RIPD_OPT_VERBOSE) > @@ -287,7 +294,7 @@ ripd_shutdown(void) > if_del(i); > } > > - control_cleanup(); > + control_cleanup(conf->csock); > kr_shutdown(); > > do { > Index: usr.sbin/ripd/ripd.h > =================================================================== > RCS file: /cvs/src/usr.sbin/ripd/ripd.h,v > retrieving revision 1.22 > diff -u -p -r1.22 ripd.h > --- usr.sbin/ripd/ripd.h 27 Sep 2015 17:32:36 -0000 1.22 > +++ usr.sbin/ripd/ripd.h 2 Aug 2016 10:14:46 -0000 > @@ -239,6 +239,7 @@ struct ripd_conf { > int rip_socket; > int redistribute; > u_int rdomain; > + char *csock; > }; > > /* kroute */ > Index: usr.sbin/ripd/ripe.c > =================================================================== > RCS file: /cvs/src/usr.sbin/ripd/ripe.c,v > retrieving revision 1.19 > diff -u -p -r1.19 ripe.c > --- usr.sbin/ripd/ripe.c 5 Dec 2015 13:13:47 -0000 1.19 > +++ usr.sbin/ripd/ripe.c 2 Aug 2016 10:14:46 -0000 > @@ -85,7 +85,7 @@ ripe(struct ripd_conf *xconf, int pipe_p > } > > /* create ripd control socket outside chroot */ > - if (control_init() == -1) > + if (control_init(xconf->csock) == -1) > fatalx("control socket setup failed"); > > addr.sin_family = AF_INET; > Index: usr.sbin/ripctl/ripctl.c > =================================================================== > RCS file: /cvs/src/usr.sbin/ripctl/ripctl.c,v > retrieving revision 1.16 > diff -u -p -r1.16 ripctl.c > --- usr.sbin/ripctl/ripctl.c 5 Dec 2015 13:13:47 -0000 1.16 > +++ usr.sbin/ripctl/ripctl.c 2 Aug 2016 11:37:40 -0000 > @@ -59,7 +59,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); > } > > @@ -73,9 +74,25 @@ main(int argc, char *argv[]) > int ctl_sock; > int done = 0, verbose = 0; > int n; > + int ch; > + char *sockname = RIPD_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 ripd control socket */ > @@ -84,9 +101,9 @@ main(int argc, char *argv[]) > > bzero(&sun, sizeof(sun)); > sun.sun_family = AF_UNIX; > - strlcpy(sun.sun_path, RIPD_SOCKET, sizeof(sun.sun_path)); > + strlcpy(sun.sun_path, sockname, sizeof(sun.sun_path)); > if (connect(ctl_sock, (struct sockaddr *)&sun, sizeof(sun)) == -1) > - err(1, "connect: %s", RIPD_SOCKET); > + err(1, "connect: %s", sockname); > > if (pledge("stdio", NULL) == -1) > err(1, "pledge"); > > > -- > jca | PGP: 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE >
--
