59 lines
2.7 KiB
Diff
59 lines
2.7 KiB
Diff
|
--- slpd/slpd_outgoing.c.orig 2009-12-22 15:23:09.000000000 +0000
|
||
|
+++ slpd/slpd_outgoing.c 2009-12-22 15:47:35.000000000 +0000
|
||
|
@@ -420,6 +420,24 @@ SLPDSocket* SLPDOutgoingConnect(struct i
|
||
|
}
|
||
|
|
||
|
/*=========================================================================*/
|
||
|
+int SLPDHaveOutgoingConnectedSocket(struct in_addr* addr)
|
||
|
+/* Check if there is an outgoing socket for the specified address */
|
||
|
+/* */
|
||
|
+/* addr (IN) the address of the peer to check */
|
||
|
+/*=========================================================================*/
|
||
|
+{
|
||
|
+ SLPDSocket* sock = (SLPDSocket*)G_OutgoingSocketList.head;
|
||
|
+ while ( sock )
|
||
|
+ {
|
||
|
+ if (sock->state >= STREAM_CONNECT_IDLE &&
|
||
|
+ sock->peeraddr.sin_addr.s_addr == addr->s_addr)
|
||
|
+ return 1;
|
||
|
+ sock = (SLPDSocket*)sock->listitem.next;
|
||
|
+ }
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
+/*=========================================================================*/
|
||
|
void SLPDOutgoingDatagramWrite(SLPDSocket* sock)
|
||
|
/* Add a ready to write outgoing datagram socket to the outgoing list. */
|
||
|
/* The datagram will be written then sit in the list until it ages out */
|
||
|
--- slpd/slpd_outgoing.h.orig 2009-12-22 15:43:52.000000000 +0000
|
||
|
+++ slpd/slpd_outgoing.h 2009-12-22 15:45:26.000000000 +0000
|
||
|
@@ -107,6 +107,13 @@ SLPDSocket* SLPDOutgoingConnect(struct i
|
||
|
/* returns: pointer to socket or null on error */
|
||
|
/*=========================================================================*/
|
||
|
|
||
|
+/*=========================================================================*/
|
||
|
+int SLPDHaveOutgoingConnectedSocket(struct in_addr* addr);
|
||
|
+/* Check if there is an outgoing socket for the specified address */
|
||
|
+/* */
|
||
|
+/* addr (IN) the address of the peer to check */
|
||
|
+/*=========================================================================*/
|
||
|
+
|
||
|
|
||
|
/*=========================================================================*/
|
||
|
int SLPDOutgoingInit();
|
||
|
--- slpd/slpd_process.c.orig 2009-12-22 15:01:43.000000000 +0000
|
||
|
+++ slpd/slpd_process.c 2009-12-22 15:43:20.000000000 +0000
|
||
|
@@ -1120,7 +1120,11 @@ int ProcessDAAdvert(SLPMessage message,
|
||
|
if(G_SlpdProperty.DAActiveDiscoveryInterval == 0 &&
|
||
|
message->header.xid != 0)
|
||
|
{
|
||
|
- goto RESPOND;
|
||
|
+ /* do not ignore replys of our DiscoveryRequests made for
|
||
|
+ * static and dhcp configured DAs. For now we check this by
|
||
|
+ * testing if the sockaddr is on the outgoing socket list */
|
||
|
+ if (!SLPDHaveOutgoingConnectedSocket(&message->peer.sin_addr))
|
||
|
+ goto RESPOND;
|
||
|
}
|
||
|
|
||
|
/*-------------------------------*/
|