summaryrefslogtreecommitdiffstats
path: root/usr.sbin/iscsid
diff options
context:
space:
mode:
authorclaudio <claudio@openbsd.org>2014-04-07 19:55:46 +0000
committerclaudio <claudio@openbsd.org>2014-04-07 19:55:46 +0000
commit77822a855e26787f0bf82f023a8864f99a9a50fa (patch)
tree59ce5cc015533bb8b5224a2ebe2d3734ee465fbe /usr.sbin/iscsid
parentIn udp_output() also use the correct source address in case of an unbound socket. (diff)
downloadwireguard-openbsd-77822a855e26787f0bf82f023a8864f99a9a50fa.tar.xz
wireguard-openbsd-77822a855e26787f0bf82f023a8864f99a9a50fa.zip
To win the startup race on the control socket we need to listen to it as
well only then the connect() call from iscsictl will not fail. Move listen() into the init function and rename control_listen() to control_event_init() since it is now only doing that.
Diffstat (limited to 'usr.sbin/iscsid')
-rw-r--r--usr.sbin/iscsid/control.c20
-rw-r--r--usr.sbin/iscsid/iscsid.c6
-rw-r--r--usr.sbin/iscsid/iscsid.h4
3 files changed, 14 insertions, 16 deletions
diff --git a/usr.sbin/iscsid/control.c b/usr.sbin/iscsid/control.c
index ba75afa31e3..9bb08e04c65 100644
--- a/usr.sbin/iscsid/control.c
+++ b/usr.sbin/iscsid/control.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: control.c,v 1.4 2013/03/11 17:40:11 deraadt Exp $ */
+/* $OpenBSD: control.c,v 1.5 2014/04/07 19:55:46 claudio Exp $ */
/*
* Copyright (c) 2010 Claudio Jeker <claudio@openbsd.org>
@@ -99,6 +99,13 @@ control_init(char *path)
return (-1);
}
+ if (listen(fd, CONTROL_BACKLOG) == -1) {
+ log_warn("control_init: listen");
+ close(fd);
+ (void)unlink(path);
+ return (-1);
+ }
+
socket_setblockmode(fd, 1);
control_state->fd = fd;
TAILQ_INIT(&controls);
@@ -124,20 +131,13 @@ control_cleanup(char *path)
free(control_state);
}
-int
-control_listen(void)
+void
+control_event_init(void)
{
- if (listen(control_state->fd, CONTROL_BACKLOG) == -1) {
- log_warn("control_listen: listen");
- return (-1);
- }
-
event_set(&control_state->ev, control_state->fd, EV_READ,
control_accept, NULL);
event_add(&control_state->ev, NULL);
evtimer_set(&control_state->evt, control_accept, NULL);
-
- return (0);
}
/* ARGSUSED */
diff --git a/usr.sbin/iscsid/iscsid.c b/usr.sbin/iscsid/iscsid.c
index 446b37a8bcd..a73bd85846c 100644
--- a/usr.sbin/iscsid/iscsid.c
+++ b/usr.sbin/iscsid/iscsid.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: iscsid.c,v 1.9 2014/02/17 18:59:50 claudio Exp $ */
+/* $OpenBSD: iscsid.c,v 1.10 2014/04/07 19:55:46 claudio Exp $ */
/*
* Copyright (c) 2009 Claudio Jeker <claudio@openbsd.org>
@@ -138,9 +138,7 @@ main(int argc, char *argv[])
signal_add(&ev_sighup, NULL);
signal(SIGPIPE, SIG_IGN);
- if (control_listen() == -1)
- fatalx("control socket listen failed");
-
+ control_event_init();
initiator = initiator_init();
event_dispatch();
diff --git a/usr.sbin/iscsid/iscsid.h b/usr.sbin/iscsid/iscsid.h
index 469adbef1bf..6dd9d4ce66e 100644
--- a/usr.sbin/iscsid/iscsid.h
+++ b/usr.sbin/iscsid/iscsid.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: iscsid.h,v 1.9 2011/05/04 21:00:04 claudio Exp $ */
+/* $OpenBSD: iscsid.h,v 1.10 2014/04/07 19:55:46 claudio Exp $ */
/*
* Copyright (c) 2009 Claudio Jeker <claudio@openbsd.org>
@@ -295,7 +295,7 @@ char *default_initiator_name(void);
int control_init(char *);
void control_cleanup(char *);
-int control_listen(void);
+void control_event_init(void);
int control_queue(void *, struct pdu *);
int control_compose(void *, u_int16_t, void *, size_t);