diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-09-24 03:34:55 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:59:07 -0500 |
commit | fe45888e228d1452b8301b3b074794bd443a7fa5 (patch) | |
tree | c59bffe228cff9b125810effdc88383689236202 /source4/lib/socket/socket_ipv4.c | |
parent | 5d4fc1284ea662029f509a88ca49a2a5812f78f1 (diff) | |
download | samba-fe45888e228d1452b8301b3b074794bd443a7fa5.tar.gz samba-fe45888e228d1452b8301b3b074794bd443a7fa5.tar.bz2 samba-fe45888e228d1452b8301b3b074794bd443a7fa5.zip |
r2581: added "hosts allow" and "hosts deny" checking in smbd. I needed this
as my box keeps getting hit by viruses spreading on my companies
internal network, which screws up my debug log badly (sigh).
metze, I'm not sure if you think access.c should go in the socket
library or not. It is closely tied to the socket functions, but you
may prefer it separate.
The access.c code is a port from Samba3, but with some cleanups to
make it (slighly) less ugly.
(This used to be commit 058b2fd99e3957d7d2a9544fd27071f1122eab68)
Diffstat (limited to 'source4/lib/socket/socket_ipv4.c')
-rw-r--r-- | source4/lib/socket/socket_ipv4.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/source4/lib/socket/socket_ipv4.c b/source4/lib/socket/socket_ipv4.c index 9a1e7e43f6..151c49518f 100644 --- a/source4/lib/socket/socket_ipv4.c +++ b/source4/lib/socket/socket_ipv4.c @@ -293,6 +293,26 @@ static NTSTATUS ipv4_tcp_set_option(struct socket_context *sock, const char *opt return NT_STATUS_OK; } +static char *ipv4_tcp_get_peer_name(struct socket_context *sock, TALLOC_CTX *mem_ctx) +{ + struct sockaddr_in peer_addr; + socklen_t len = sizeof(peer_addr); + struct hostent *he; + int ret; + + ret = getpeername(sock->fd, (struct sockaddr *)&peer_addr, &len); + if (ret == -1) { + return NULL; + } + + he = gethostbyaddr((char *)&peer_addr.sin_addr, sizeof(peer_addr.sin_addr), AF_INET); + if (he == NULL) { + return NULL; + } + + return talloc_strdup(mem_ctx, he->h_name); +} + static char *ipv4_tcp_get_peer_addr(struct socket_context *sock, TALLOC_CTX *mem_ctx) { struct sockaddr_in peer_addr; @@ -368,6 +388,7 @@ static const struct socket_ops ipv4_tcp_ops = { .set_option = ipv4_tcp_set_option, + .get_peer_name = ipv4_tcp_get_peer_name, .get_peer_addr = ipv4_tcp_get_peer_addr, .get_peer_port = ipv4_tcp_get_peer_port, .get_my_addr = ipv4_tcp_get_my_addr, |