189 lines
8.2 KiB
Diff
189 lines
8.2 KiB
Diff
--- ./slpd/slpd_incoming.c.orig 2006-11-14 16:25:18.000000000 +0000
|
|
+++ ./slpd/slpd_incoming.c 2006-11-15 18:20:10.000000000 +0000
|
|
@@ -79,6 +79,7 @@ void IncomingDatagramRead(SLPList* sockl
|
|
int bytestowrite;
|
|
int byteswritten;
|
|
int peeraddrlen = sizeof(struct sockaddr_in);
|
|
+ int truncate;
|
|
|
|
bytesread = recvfrom(sock->fd,
|
|
sock->recvbuf->start,
|
|
@@ -90,9 +91,13 @@ void IncomingDatagramRead(SLPList* sockl
|
|
{
|
|
sock->recvbuf->end = sock->recvbuf->start + bytesread;
|
|
|
|
+ truncate = SLP_MAX_DATAGRAM_SIZE;
|
|
+ if (G_SlpdProperty.oversizedUDP)
|
|
+ truncate = 0;
|
|
switch (SLPDProcessMessage(&sock->peeraddr,
|
|
sock->recvbuf,
|
|
- &(sock->sendbuf)))
|
|
+ &(sock->sendbuf),
|
|
+ truncate))
|
|
{
|
|
case SLP_ERROR_PARSE_ERROR:
|
|
case SLP_ERROR_VER_NOT_SUPPORTED:
|
|
@@ -238,7 +243,7 @@ void IncomingStreamRead(SLPList* socklis
|
|
{
|
|
switch (SLPDProcessMessage(&sock->peeraddr,
|
|
sock->recvbuf,
|
|
- &(sock->sendbuf)))
|
|
+ &(sock->sendbuf), 0))
|
|
{
|
|
case SLP_ERROR_PARSE_ERROR:
|
|
case SLP_ERROR_VER_NOT_SUPPORTED:
|
|
--- ./slpd/slpd_outgoing.c.orig 2006-11-14 16:26:13.000000000 +0000
|
|
+++ ./slpd/slpd_outgoing.c 2006-11-15 18:29:31.000000000 +0000
|
|
@@ -89,7 +89,7 @@ void OutgoingDatagramRead(SLPList* sockl
|
|
|
|
SLPDProcessMessage(&(sock->peeraddr),
|
|
sock->recvbuf,
|
|
- &(sock->sendbuf));
|
|
+ &(sock->sendbuf), 0);
|
|
|
|
/* Completely ignore the message */
|
|
}
|
|
@@ -264,7 +264,7 @@ void OutgoingStreamRead(SLPList* socklis
|
|
{
|
|
switch ( SLPDProcessMessage(&(sock->peeraddr),
|
|
sock->recvbuf,
|
|
- &(sock->sendbuf)) )
|
|
+ &(sock->sendbuf), 0) )
|
|
{
|
|
case SLP_ERROR_DA_BUSY_NOW:
|
|
sock->state = STREAM_WRITE_WAIT;
|
|
--- ./slpd/slpd_process.c.orig 2006-11-14 16:18:24.000000000 +0000
|
|
+++ ./slpd/slpd_process.c 2006-11-15 15:22:05.000000000 +0000
|
|
@@ -301,7 +301,8 @@ int ProcessDASrvRqst(SLPMessage message,
|
|
/*-------------------------------------------------------------------------*/
|
|
int ProcessSrvRqst(SLPMessage message,
|
|
SLPBuffer* sendbuf,
|
|
- int errorcode)
|
|
+ int errorcode,
|
|
+ int truncate)
|
|
/*-------------------------------------------------------------------------*/
|
|
{
|
|
int i;
|
|
@@ -310,12 +311,6 @@ int ProcessSrvRqst(SLPMessage message,
|
|
int size = 0;
|
|
SLPBuffer result = *sendbuf;
|
|
|
|
-#ifdef ENABLE_SLPv2_SECURITY
|
|
- SLPAuthBlock* authblock = 0;
|
|
- int j;
|
|
-#endif
|
|
-
|
|
-
|
|
/*--------------------------------------------------------------*/
|
|
/* If errorcode is set, we can not be sure that message is good */
|
|
/* Go directly to send response code */
|
|
@@ -445,33 +440,24 @@ int ProcessSrvRqst(SLPMessage message,
|
|
{
|
|
for (i=0;i<db->urlcount;i++)
|
|
{
|
|
+ /* check size limitation */
|
|
+ if (truncate && size > truncate)
|
|
+ break;
|
|
+
|
|
/* urlentry is the url from the db result */
|
|
urlentry = db->urlarray[i];
|
|
|
|
- size += urlentry->urllen + 6; /* 1 byte for reserved */
|
|
- /* 2 bytes for lifetime */
|
|
- /* 2 bytes for urllen */
|
|
- /* 1 byte for authcount */
|
|
-#ifdef ENABLE_SLPv2_SECURITY
|
|
-
|
|
- /* make room to include the authblock that was asked for */
|
|
- if (G_SlpdProperty.securityEnabled &&
|
|
- message->body.srvrqst.spistrlen )
|
|
+ if (urlentry->opaque == 0)
|
|
{
|
|
- for (j=0; j<urlentry->authcount;j++)
|
|
- {
|
|
- if (SLPCompareString(urlentry->autharray[j].spistrlen,
|
|
- urlentry->autharray[j].spistr,
|
|
- message->body.srvrqst.spistrlen,
|
|
- message->body.srvrqst.spistr) == 0)
|
|
- {
|
|
- authblock = &(urlentry->autharray[j]);
|
|
- size += authblock->length;
|
|
- break;
|
|
- }
|
|
- }
|
|
+ size += urlentry->urllen + 6; /* 1 byte for reserved */
|
|
+ /* 2 bytes for lifetime */
|
|
+ /* 2 bytes for urllen */
|
|
+ /* 1 byte for authcount */
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ size += urlentry->opaquelen;
|
|
}
|
|
-#endif
|
|
}
|
|
}
|
|
|
|
@@ -523,6 +509,10 @@ int ProcessSrvRqst(SLPMessage message,
|
|
|
|
for (i=0;i<db->urlcount;i++)
|
|
{
|
|
+ /* check size limitation */
|
|
+ if (truncate && result->curpos - result->start > truncate)
|
|
+ break;
|
|
+
|
|
/* urlentry is the url from the db result */
|
|
urlentry = db->urlarray[i];
|
|
|
|
@@ -1312,7 +1302,8 @@ int ProcessSAAdvert(SLPMessage message,
|
|
/*=========================================================================*/
|
|
int SLPDProcessMessage(struct sockaddr_in* peerinfo,
|
|
SLPBuffer recvbuf,
|
|
- SLPBuffer* sendbuf)
|
|
+ SLPBuffer* sendbuf,
|
|
+ int truncate)
|
|
/* Processes the recvbuf and places the results in sendbuf */
|
|
/* */
|
|
/* peerinfo - the socket the message was received on */
|
|
@@ -1390,7 +1381,7 @@ int SLPDProcessMessage(struct sockaddr_i
|
|
switch (message->header.functionid)
|
|
{
|
|
case SLP_FUNCT_SRVRQST:
|
|
- errorcode = ProcessSrvRqst(message,sendbuf,errorcode);
|
|
+ errorcode = ProcessSrvRqst(message,sendbuf,errorcode,truncate);
|
|
break;
|
|
|
|
case SLP_FUNCT_SRVREG:
|
|
--- ./slpd/slpd_process.h.orig 2006-11-14 16:23:21.000000000 +0000
|
|
+++ ./slpd/slpd_process.h 2006-11-14 16:23:38.000000000 +0000
|
|
@@ -60,7 +60,8 @@
|
|
/*=========================================================================*/
|
|
int SLPDProcessMessage(struct sockaddr_in* peerinfo,
|
|
SLPBuffer recvbuf,
|
|
- SLPBuffer* sendbuf) ;
|
|
+ SLPBuffer* sendbuf,
|
|
+ int truncate) ;
|
|
/* Processes the recvbuf and places the results in sendbuf */
|
|
/* */
|
|
/* peerinfo - the socket the message was received on */
|
|
--- ./slpd/slpd_property.c.orig 2006-11-15 18:14:47.000000000 +0000
|
|
+++ ./slpd/slpd_property.c 2006-11-15 18:16:28.000000000 +0000
|
|
@@ -131,6 +131,7 @@ int SLPDPropertyInit(const char* conffil
|
|
G_SlpdProperty.securityEnabled = SLPPropertyAsBoolean(SLPPropertyGet("net.slp.securityEnabled"));
|
|
G_SlpdProperty.checkSourceAddr = SLPPropertyAsBoolean(SLPPropertyGet("net.slp.checkSourceAddr"));
|
|
G_SlpdProperty.DAHeartBeat = SLPPropertyAsInteger(SLPPropertyGet("net.slp.DAHeartBeat"));
|
|
+ G_SlpdProperty.oversizedUDP = SLPPropertyAsBoolean(SLPPropertyGet("net.slp.oversizedUDP"));
|
|
|
|
|
|
/*-------------------------------------*/
|
|
--- ./slpd/slpd_property.h.orig 2006-11-15 18:14:05.000000000 +0000
|
|
+++ ./slpd/slpd_property.h 2006-11-15 18:15:28.000000000 +0000
|
|
@@ -94,6 +94,7 @@ typedef struct _SLPDProperty
|
|
int securityEnabled;
|
|
int checkSourceAddr;
|
|
int DAHeartBeat;
|
|
+ int oversizedUDP;
|
|
}SLPDProperty;
|
|
|
|
|