summaryrefslogtreecommitdiff
path: root/source4/lib/socket/socket_ipv4.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-09-24 03:34:55 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:59:07 -0500
commitfe45888e228d1452b8301b3b074794bd443a7fa5 (patch)
treec59bffe228cff9b125810effdc88383689236202 /source4/lib/socket/socket_ipv4.c
parent5d4fc1284ea662029f509a88ca49a2a5812f78f1 (diff)
downloadsamba-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.c21
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,