Module Name: src
Committed By: kefren
Date: Mon Feb 4 20:28:24 UTC 2013
Modified Files:
src/usr.sbin/ldpd: ldp_peer.c socketops.c
Log Message:
move code around a little bit in order to call get_ldp_peer correctly
check also for transport_address in get_ldp_peer
To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/usr.sbin/ldpd/ldp_peer.c
cvs rdiff -u -r1.25 -r1.26 src/usr.sbin/ldpd/socketops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/ldpd/ldp_peer.c
diff -u src/usr.sbin/ldpd/ldp_peer.c:1.10 src/usr.sbin/ldpd/ldp_peer.c:1.11
--- src/usr.sbin/ldpd/ldp_peer.c:1.10 Mon Feb 4 17:14:31 2013
+++ src/usr.sbin/ldpd/ldp_peer.c Mon Feb 4 20:28:24 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: ldp_peer.c,v 1.10 2013/02/04 17:14:31 kefren Exp $ */
+/* $NetBSD: ldp_peer.c,v 1.11 2013/02/04 20:28:24 kefren Exp $ */
/*
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -66,7 +66,8 @@ ldp_peer_init(void)
int
sockaddr_cmp(const struct sockaddr *a, const struct sockaddr *b)
{
- if (a->sa_len != b->sa_len || a->sa_family != b->sa_family)
+ if (a == NULL || b == NULL || a->sa_len != b->sa_len ||
+ a->sa_family != b->sa_family)
return -1;
return memcmp(a, b, a->sa_len);
}
@@ -226,9 +227,9 @@ get_ldp_peer(const struct sockaddr * a)
(const void *) &p->ldp_id,
sizeof(struct in_addr)) == 0)
return p;
- if (sockaddr_cmp(a, p->address) == 0)
- return p;
- if (a->sa_family == AF_INET && check_ifaddr(p,a))
+ if (sockaddr_cmp(a, p->address) == 0 ||
+ sockaddr_cmp(a, p->transport_address) == 0 ||
+ check_ifaddr(p, a))
return p;
}
return NULL;
Index: src/usr.sbin/ldpd/socketops.c
diff -u src/usr.sbin/ldpd/socketops.c:1.25 src/usr.sbin/ldpd/socketops.c:1.26
--- src/usr.sbin/ldpd/socketops.c:1.25 Mon Feb 4 17:14:31 2013
+++ src/usr.sbin/ldpd/socketops.c Mon Feb 4 20:28:24 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: socketops.c,v 1.25 2013/02/04 17:14:31 kefren Exp $ */
+/* $NetBSD: socketops.c,v 1.26 2013/02/04 20:28:24 kefren Exp $ */
/*
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -953,19 +953,13 @@ new_peer_connection()
return;
}
- if (get_ldp_peer(&peer_address.sa) != NULL) {
- close(s);
- return;
- }
-
- warnp("Accepted a connection from %s\n", satos(&peer_address.sa));
-
if (getsockname(s, &my_address.sa,
& (socklen_t) { sizeof(union sockunion) } )) {
fatalp("new_peer_connection(): cannot getsockname\n");
close(s);
return;
}
+
if (peer_address.sa.sa_family == AF_INET)
peer_address.sin.sin_port = 0;
else if (peer_address.sa.sa_family == AF_INET6)
@@ -976,6 +970,14 @@ new_peer_connection()
return;
}
+ /* Already peered or in holddown ? */
+ if (get_ldp_peer(&peer_address.sa) != NULL) {
+ close(s);
+ return;
+ }
+
+ warnp("Accepted a connection from %s\n", satos(&peer_address.sa));
+
/* Verify if it should connect - XXX: no check for INET6 */
if (peer_address.sa.sa_family == AF_INET &&
ntohl(peer_address.sin.sin_addr.s_addr) <