Page MenuHomeFreeBSD

D48596.id.diff
No OneTemporary

D48596.id.diff

diff --git a/usr.sbin/ctld/ctld.c b/usr.sbin/ctld/ctld.c
--- a/usr.sbin/ctld/ctld.c
+++ b/usr.sbin/ctld/ctld.c
@@ -1806,6 +1806,98 @@
return (0);
}
+static bool
+portal_init_socket(struct portal *p)
+{
+ struct portal_group *pg = p->p_portal_group;
+ int error, sockbuf;
+ int one = 1;
+
+ log_debugx("listening on %s, portal-group \"%s\"",
+ p->p_listen, pg->pg_name);
+ p->p_socket = socket(p->p_ai->ai_family, p->p_ai->ai_socktype,
+ p->p_ai->ai_protocol);
+ if (p->p_socket < 0) {
+ log_warn("socket(2) failed for %s",
+ p->p_listen);
+ return (false);
+ }
+
+ sockbuf = SOCKBUF_SIZE;
+ if (setsockopt(p->p_socket, SOL_SOCKET, SO_RCVBUF, &sockbuf,
+ sizeof(sockbuf)) == -1)
+ log_warn("setsockopt(SO_RCVBUF) failed for %s",
+ p->p_listen);
+ sockbuf = SOCKBUF_SIZE;
+ if (setsockopt(p->p_socket, SOL_SOCKET, SO_SNDBUF, &sockbuf,
+ sizeof(sockbuf)) == -1)
+ log_warn("setsockopt(SO_SNDBUF) failed for %s", p->p_listen);
+ if (setsockopt(p->p_socket, SOL_SOCKET, SO_NO_DDP, &one,
+ sizeof(one)) == -1)
+ log_warn("setsockopt(SO_NO_DDP) failed for %s", p->p_listen);
+ error = setsockopt(p->p_socket, SOL_SOCKET, SO_REUSEADDR, &one,
+ sizeof(one));
+ if (error != 0) {
+ log_warn("setsockopt(SO_REUSEADDR) failed for %s", p->p_listen);
+ close(p->p_socket);
+ p->p_socket = 0;
+ return (false);
+ }
+
+ if (pg->pg_dscp != -1) {
+ /* Only allow the 6-bit DSCP field to be modified */
+ int tos = pg->pg_dscp << 2;
+ switch (p->p_ai->ai_family) {
+ case AF_INET:
+ if (setsockopt(p->p_socket, IPPROTO_IP, IP_TOS,
+ &tos, sizeof(tos)) == -1)
+ log_warn("setsockopt(IP_TOS) failed for %s",
+ p->p_listen);
+ break;
+ case AF_INET6:
+ if (setsockopt(p->p_socket, IPPROTO_IPV6, IPV6_TCLASS,
+ &tos, sizeof(tos)) == -1)
+ log_warn("setsockopt(IPV6_TCLASS) failed for %s",
+ p->p_listen);
+ break;
+ }
+ }
+ if (pg->pg_pcp != -1) {
+ int pcp = pg->pg_pcp;
+ switch (p->p_ai->ai_family) {
+ case AF_INET:
+ if (setsockopt(p->p_socket, IPPROTO_IP, IP_VLAN_PCP,
+ &pcp, sizeof(pcp)) == -1)
+ log_warn("setsockopt(IP_VLAN_PCP) failed for %s",
+ p->p_listen);
+ break;
+ case AF_INET6:
+ if (setsockopt(p->p_socket, IPPROTO_IPV6, IPV6_VLAN_PCP,
+ &pcp, sizeof(pcp)) == -1)
+ log_warn("setsockopt(IPV6_VLAN_PCP) failed for %s",
+ p->p_listen);
+ break;
+ }
+ }
+
+ error = bind(p->p_socket, p->p_ai->ai_addr,
+ p->p_ai->ai_addrlen);
+ if (error != 0) {
+ log_warn("bind(2) failed for %s", p->p_listen);
+ close(p->p_socket);
+ p->p_socket = 0;
+ return (false);
+ }
+ error = listen(p->p_socket, -1);
+ if (error != 0) {
+ log_warn("listen(2) failed for %s", p->p_listen);
+ close(p->p_socket);
+ p->p_socket = 0;
+ return (false);
+ }
+ return (true);
+}
+
static int
conf_apply(struct conf *oldconf, struct conf *newconf)
{
@@ -1814,8 +1906,7 @@
struct portal *oldp, *newp;
struct port *oldport, *newport, *tmpport;
struct isns *oldns, *newns;
- int changed, cumulated_error = 0, error, sockbuf;
- int one = 1;
+ int changed, cumulated_error = 0, error;
if (oldconf->conf_debug != newconf->conf_debug) {
log_debugx("changing debug level to %d", newconf->conf_debug);
@@ -2082,109 +2173,7 @@
assert(proxy_mode == false);
assert(newp->p_iser == false);
- log_debugx("listening on %s, portal-group \"%s\"",
- newp->p_listen, newpg->pg_name);
- newp->p_socket = socket(newp->p_ai->ai_family,
- newp->p_ai->ai_socktype,
- newp->p_ai->ai_protocol);
- if (newp->p_socket < 0) {
- log_warn("socket(2) failed for %s",
- newp->p_listen);
- cumulated_error++;
- continue;
- }
- sockbuf = SOCKBUF_SIZE;
- if (setsockopt(newp->p_socket, SOL_SOCKET, SO_RCVBUF,
- &sockbuf, sizeof(sockbuf)) == -1)
- log_warn("setsockopt(SO_RCVBUF) failed "
- "for %s", newp->p_listen);
- sockbuf = SOCKBUF_SIZE;
- if (setsockopt(newp->p_socket, SOL_SOCKET, SO_SNDBUF,
- &sockbuf, sizeof(sockbuf)) == -1)
- log_warn("setsockopt(SO_SNDBUF) failed "
- "for %s", newp->p_listen);
- if (setsockopt(newp->p_socket, SOL_SOCKET, SO_NO_DDP,
- &one, sizeof(one)) == -1)
- log_warn("setsockopt(SO_NO_DDP) failed "
- "for %s", newp->p_listen);
- error = setsockopt(newp->p_socket, SOL_SOCKET,
- SO_REUSEADDR, &one, sizeof(one));
- if (error != 0) {
- log_warn("setsockopt(SO_REUSEADDR) failed "
- "for %s", newp->p_listen);
- close(newp->p_socket);
- newp->p_socket = 0;
- cumulated_error++;
- continue;
- }
- if (newpg->pg_dscp != -1) {
- struct sockaddr sa;
- int len = sizeof(sa);
- getsockname(newp->p_socket, &sa, &len);
- /*
- * Only allow the 6-bit DSCP
- * field to be modified
- */
- int tos = newpg->pg_dscp << 2;
- if (sa.sa_family == AF_INET) {
- if (setsockopt(newp->p_socket,
- IPPROTO_IP, IP_TOS,
- &tos, sizeof(tos)) == -1)
- log_warn("setsockopt(IP_TOS) "
- "failed for %s",
- newp->p_listen);
- } else
- if (sa.sa_family == AF_INET6) {
- if (setsockopt(newp->p_socket,
- IPPROTO_IPV6, IPV6_TCLASS,
- &tos, sizeof(tos)) == -1)
- log_warn("setsockopt(IPV6_TCLASS) "
- "failed for %s",
- newp->p_listen);
- }
- }
- if (newpg->pg_pcp != -1) {
- struct sockaddr sa;
- int len = sizeof(sa);
- getsockname(newp->p_socket, &sa, &len);
- /*
- * Only allow the 6-bit DSCP
- * field to be modified
- */
- int pcp = newpg->pg_pcp;
- if (sa.sa_family == AF_INET) {
- if (setsockopt(newp->p_socket,
- IPPROTO_IP, IP_VLAN_PCP,
- &pcp, sizeof(pcp)) == -1)
- log_warn("setsockopt(IP_VLAN_PCP) "
- "failed for %s",
- newp->p_listen);
- } else
- if (sa.sa_family == AF_INET6) {
- if (setsockopt(newp->p_socket,
- IPPROTO_IPV6, IPV6_VLAN_PCP,
- &pcp, sizeof(pcp)) == -1)
- log_warn("setsockopt(IPV6_VLAN_PCP) "
- "failed for %s",
- newp->p_listen);
- }
- }
- error = bind(newp->p_socket, newp->p_ai->ai_addr,
- newp->p_ai->ai_addrlen);
- if (error != 0) {
- log_warn("bind(2) failed for %s",
- newp->p_listen);
- close(newp->p_socket);
- newp->p_socket = 0;
- cumulated_error++;
- continue;
- }
- error = listen(newp->p_socket, -1);
- if (error != 0) {
- log_warn("listen(2) failed for %s",
- newp->p_listen);
- close(newp->p_socket);
- newp->p_socket = 0;
+ if (!portal_init_socket(newp)) {
cumulated_error++;
continue;
}

File Metadata

Mime Type
text/plain
Expires
Wed, Feb 5, 2:18 AM (20 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16148730
Default Alt Text
D48596.id.diff (6 KB)

Event Timeline