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 /ctdb | |
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)
Diffstat (limited to 'ctdb')
-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; |