diff options
author | Ronnie Sahlberg <sahlberg@ronnie> | 2007-07-02 14:10:20 +1000 |
---|---|---|
committer | Ronnie Sahlberg <sahlberg@ronnie> | 2007-07-02 14:10:20 +1000 |
commit | 3a71dcf505e90af4a78ccf02b91b593b4b51e5e8 (patch) | |
tree | fcf68ffc83d14cc150500cf097a5a2ad0352e26c | |
parent | 71eba6895e8d2fb132d3a817603f1de8ef210d80 (diff) | |
download | samba-3a71dcf505e90af4a78ccf02b91b593b4b51e5e8.tar.gz samba-3a71dcf505e90af4a78ccf02b91b593b4b51e5e8.tar.xz samba-3a71dcf505e90af4a78ccf02b91b593b4b51e5e8.zip |
when accepting an incoming connection, verify that the source address is
from one of the configured nodes and reject the connection othervise
(This used to be ctdb commit ef290a6340eb1a1c0ae60c74b38c93396e388f73)
-rw-r--r-- | ctdb/tcp/tcp_connect.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/ctdb/tcp/tcp_connect.c b/ctdb/tcp/tcp_connect.c index 79717845f5..991623a512 100644 --- a/ctdb/tcp/tcp_connect.c +++ b/ctdb/tcp/tcp_connect.c @@ -190,15 +190,29 @@ static void ctdb_listen_event(struct event_context *ev, struct fd_event *fde, struct ctdb_tcp *ctcp = talloc_get_type(ctdb->private_data, struct ctdb_tcp); struct sockaddr_in addr; socklen_t len; - int fd; + int fd, nodeid; struct ctdb_incoming *in; int one = 1; + const char *incoming_node; memset(&addr, 0, sizeof(addr)); len = sizeof(addr); fd = accept(ctcp->listen_fd, (struct sockaddr *)&addr, &len); if (fd == -1) return; + incoming_node = inet_ntoa(addr.sin_addr); + for (nodeid=0;nodeid<ctdb->num_nodes;nodeid++) { + if (!strcmp(incoming_node, ctdb->nodes[nodeid]->address.address)) { + DEBUG(0, ("Incoming connection from node:%d %s\n",nodeid,incoming_node)); + break; + } + } + if (nodeid>=ctdb->num_nodes) { + DEBUG(0, ("Refused connection from unknown node %s\n", incoming_node)); + close(fd); + return; + } + in = talloc_zero(ctcp, struct ctdb_incoming); in->fd = fd; in->ctdb = ctdb; |