This commit is contained in:
commit
a9e01b3bd6
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
## Default LFS
|
||||||
|
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zst filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.osc
|
55
README.SuSE
Normal file
55
README.SuSE
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#
|
||||||
|
# Service Location Protocol on SuSE
|
||||||
|
#
|
||||||
|
|
||||||
|
The Service Location Protcol (SLP) is part of the zerconf concept to provide
|
||||||
|
service informations inside a local network.
|
||||||
|
|
||||||
|
#
|
||||||
|
# The client side
|
||||||
|
#
|
||||||
|
|
||||||
|
Your client can search for avaible services using the slp library or via
|
||||||
|
using the slptool binary (for scripting).
|
||||||
|
|
||||||
|
WARNING: Have in mind that you can usually NOT trust the results.
|
||||||
|
It is up to the service client to validate the server.
|
||||||
|
Do NOT authentificate to an untrusted server or it might be
|
||||||
|
possible it gets your password.
|
||||||
|
|
||||||
|
#
|
||||||
|
# The server side
|
||||||
|
#
|
||||||
|
|
||||||
|
Every system which provides a service which should get announced with SLP
|
||||||
|
in the network needs also to run the slpd. There are several possible ways
|
||||||
|
to announce the service:
|
||||||
|
|
||||||
|
1) The authors of any service daemon should directly use libslp to
|
||||||
|
register the service on the server. Documentation for this can be
|
||||||
|
found in /usr/share/doc/packages/openslp/html/ProgrammersGuide/
|
||||||
|
|
||||||
|
2) Packages without direct SLP support should provide a registration
|
||||||
|
file in the /etc/slp.reg.d/ directory. See below for a template.
|
||||||
|
You can use the pseudo attributes watch-port-tcp and watch-port-udp
|
||||||
|
to make slpd check if the service is listening on the specified port.
|
||||||
|
This way a not-running service won't get announced by slpd.
|
||||||
|
|
||||||
|
3) Administrators can add service lines in the /etc/slp.reg file.
|
||||||
|
|
||||||
|
4) The slptool can be used to register a service in any script.
|
||||||
|
|
||||||
|
|
||||||
|
Example of a registration file.
|
||||||
|
This could be used to announce the sane daemon running on port 6566
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
## Register a saned service on this system
|
||||||
|
## en means english language
|
||||||
|
## 65535 disables the timeout, so the service registration does
|
||||||
|
## not need refreshs
|
||||||
|
service:scanner.sane://$HOSTNAME:6566,en,65535
|
||||||
|
# only announce the service if a daemon is listening on tcp port 6566
|
||||||
|
watch-port-tcp=6566
|
||||||
|
description=SANE scanner daemon
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
4044
extensions.diff
Normal file
4044
extensions.diff
Normal file
File diff suppressed because it is too large
Load Diff
11
hppa.diff
Normal file
11
hppa.diff
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- configure.in 2004/06/13 12:17:00 1.1
|
||||||
|
+++ configure.in 2004/06/13 12:17:19
|
||||||
|
@@ -125,7 +125,7 @@
|
||||||
|
CFLAGS="$CFLAGS -Werror"
|
||||||
|
fi
|
||||||
|
if test X"$debug" = X"no"; then
|
||||||
|
- OPTFLAGS="-O3"
|
||||||
|
+ OPTFLAGS="-O2"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif $CC -V 2>&1 | grep "WorkShop Compilers"; then
|
3
openslp-1.2.0.tar.bz2
Normal file
3
openslp-1.2.0.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:bf2bbe9102405cdfee8f53d6893073ce7e6ccf0be803ca2399180ac0f6f7a178
|
||||||
|
size 417994
|
4
openslp-devel.desktop
Normal file
4
openslp-devel.desktop
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=Open SLP Developer Guide
|
||||||
|
DocPath=/usr/share/doc/packages/openslp/html/ProgrammersGuide/index.html
|
||||||
|
X-DOC-SearchMethod=htdig
|
540
openslp.audit.diff
Normal file
540
openslp.audit.diff
Normal file
@ -0,0 +1,540 @@
|
|||||||
|
--- ./common/slp_dhcp.c.orig 2005-02-15 18:28:19.332759386 +0000
|
||||||
|
+++ ./common/slp_dhcp.c 2005-02-15 18:30:52.797854324 +0000
|
||||||
|
@@ -598,6 +598,7 @@
|
||||||
|
cpysz = optdatasz < sizeof(ctxp->scopelist)?
|
||||||
|
optdatasz: sizeof(ctxp->scopelist);
|
||||||
|
strncpy(ctxp->scopelist, (char*)p, cpysz);
|
||||||
|
+ ctxp->scopelist[sizeof(ctxp->scopelist) - 1] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@@ -622,6 +623,7 @@
|
||||||
|
cpysz = optdatasz < sizeof(ctxp->scopelist)?
|
||||||
|
optdatasz: sizeof(ctxp->scopelist);
|
||||||
|
strncpy(ctxp->scopelist, (char*)p, cpysz);
|
||||||
|
+ ctxp->scopelist[sizeof(ctxp->scopelist) - 1] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
--- ./common/slp_message.c.orig 2005-02-15 16:48:20.243994238 +0000
|
||||||
|
+++ ./common/slp_message.c 2005-02-15 18:17:16.217402037 +0000
|
||||||
|
@@ -68,6 +68,10 @@
|
||||||
|
/* header (IN/OUT) pointer to the header structure to fill out */
|
||||||
|
/*=========================================================================*/
|
||||||
|
{
|
||||||
|
+ if (buffer->end - buffer->start < 2)
|
||||||
|
+ {
|
||||||
|
+ return SLP_ERROR_PARSE_ERROR;
|
||||||
|
+ }
|
||||||
|
header->version = *(buffer->curpos);
|
||||||
|
header->functionid = *(buffer->curpos + 1);
|
||||||
|
|
||||||
|
@@ -75,6 +79,11 @@
|
||||||
|
{
|
||||||
|
return SLP_ERROR_VER_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
+ /* check for invalid length 18 bytes is the smallest v2 message*/
|
||||||
|
+ if (buffer->end - buffer->start < 18)
|
||||||
|
+ {
|
||||||
|
+ return SLP_ERROR_PARSE_ERROR;
|
||||||
|
+ }
|
||||||
|
header->length = AsUINT24(buffer->curpos + 2);
|
||||||
|
header->flags = AsUINT16(buffer->curpos + 5);
|
||||||
|
header->encoding = 0; /* not used for SLPv2 */
|
||||||
|
@@ -89,9 +98,7 @@
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* check for invalid length 18 bytes is the smallest v2 message*/
|
||||||
|
- if(header->length != buffer->end - buffer->start ||
|
||||||
|
- header->length < 18)
|
||||||
|
+ if(header->length != buffer->end - buffer->start)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -187,7 +194,7 @@
|
||||||
|
/* parse out url */
|
||||||
|
urlentry->urllen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(urlentry->urllen > buffer->end - buffer->curpos)
|
||||||
|
+ if(urlentry->urllen + 1 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -235,7 +242,7 @@
|
||||||
|
/* parse the prlist */
|
||||||
|
srvrqst->prlistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(srvrqst->prlistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(srvrqst->prlistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -246,7 +253,7 @@
|
||||||
|
/* parse the service type */
|
||||||
|
srvrqst->srvtypelen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(srvrqst->srvtypelen > buffer->end - buffer->curpos)
|
||||||
|
+ if(srvrqst->srvtypelen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -257,7 +264,7 @@
|
||||||
|
/* parse the scope list */
|
||||||
|
srvrqst->scopelistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(srvrqst->scopelistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(srvrqst->scopelistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -269,7 +276,7 @@
|
||||||
|
srvrqst->predicatever = 2; /* SLPv2 predicate (LDAPv3) */
|
||||||
|
srvrqst->predicatelen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(srvrqst->predicatelen > buffer->end - buffer->curpos)
|
||||||
|
+ if(srvrqst->predicatelen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -358,10 +365,14 @@
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if(buffer->end - buffer->curpos < 2)
|
||||||
|
+ {
|
||||||
|
+ return SLP_ERROR_PARSE_ERROR;
|
||||||
|
+ }
|
||||||
|
/* parse the service type */
|
||||||
|
srvreg->srvtypelen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(srvreg->srvtypelen > buffer->end - buffer->curpos)
|
||||||
|
+ if(srvreg->srvtypelen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -372,7 +383,7 @@
|
||||||
|
/* parse the scope list */
|
||||||
|
srvreg->scopelistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(srvreg->scopelistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(srvreg->scopelistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -383,7 +394,7 @@
|
||||||
|
/* parse the attribute list*/
|
||||||
|
srvreg->attrlistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(srvreg->attrlistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(srvreg->attrlistlen + 1 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -447,6 +458,10 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
/* parse the tag list */
|
||||||
|
+ if(buffer->end - buffer->curpos < 2)
|
||||||
|
+ {
|
||||||
|
+ return SLP_ERROR_PARSE_ERROR;
|
||||||
|
+ }
|
||||||
|
srvdereg->taglistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
if(srvdereg->taglistlen > buffer->end - buffer->curpos)
|
||||||
|
@@ -482,7 +497,7 @@
|
||||||
|
/* parse the prlist */
|
||||||
|
attrrqst->prlistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(attrrqst->prlistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(attrrqst->prlistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -492,7 +507,7 @@
|
||||||
|
/* parse the url */
|
||||||
|
attrrqst->urllen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(attrrqst->urllen > buffer->end - buffer->curpos)
|
||||||
|
+ if(attrrqst->urllen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -503,7 +518,7 @@
|
||||||
|
/* parse the scope list */
|
||||||
|
attrrqst->scopelistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(attrrqst->scopelistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(attrrqst->scopelistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -514,7 +529,7 @@
|
||||||
|
/* parse the taglist string */
|
||||||
|
attrrqst->taglistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(attrrqst->taglistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(attrrqst->taglistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -563,7 +578,7 @@
|
||||||
|
/* parse out the attrlist */
|
||||||
|
attrrply->attrlistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(attrrply->attrlistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(attrrply->attrlistlen + 1 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -619,13 +634,17 @@
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
|
||||||
|
/* parse out the bootstamp */
|
||||||
|
+ if(buffer->end - buffer->curpos < 6)
|
||||||
|
+ {
|
||||||
|
+ return SLP_ERROR_PARSE_ERROR;
|
||||||
|
+ }
|
||||||
|
daadvert->bootstamp = AsUINT32(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 4;
|
||||||
|
|
||||||
|
/* parse out the url */
|
||||||
|
daadvert->urllen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(daadvert->urllen > buffer->end - buffer->curpos)
|
||||||
|
+ if(daadvert->urllen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -635,7 +654,7 @@
|
||||||
|
/* parse the scope list */
|
||||||
|
daadvert->scopelistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(daadvert->scopelistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(daadvert->scopelistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -645,7 +664,7 @@
|
||||||
|
/* parse the attr list */
|
||||||
|
daadvert->attrlistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(daadvert->attrlistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(daadvert->attrlistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -655,7 +674,7 @@
|
||||||
|
/* parse the SPI list */
|
||||||
|
daadvert->spilistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(daadvert->spilistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(daadvert->spilistlen + 1 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -704,7 +723,7 @@
|
||||||
|
/* parse out the url */
|
||||||
|
saadvert->urllen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(saadvert->urllen > buffer->end - buffer->curpos)
|
||||||
|
+ if(saadvert->urllen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -714,7 +733,7 @@
|
||||||
|
/* parse the scope list */
|
||||||
|
saadvert->scopelistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(saadvert->scopelistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(saadvert->scopelistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -724,7 +743,7 @@
|
||||||
|
/* parse the attr list */
|
||||||
|
saadvert->attrlistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(saadvert->attrlistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(saadvert->attrlistlen + 1 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -769,7 +788,7 @@
|
||||||
|
/* parse the prlist */
|
||||||
|
srvtyperqst->prlistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos += 2;
|
||||||
|
- if(srvtyperqst->prlistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(srvtyperqst->prlistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -794,6 +813,10 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
/* parse the scope list */
|
||||||
|
+ if(buffer->end - buffer->curpos < 2)
|
||||||
|
+ {
|
||||||
|
+ return SLP_ERROR_PARSE_ERROR;
|
||||||
|
+ }
|
||||||
|
srvtyperqst->scopelistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos += 2;
|
||||||
|
if(srvtyperqst->scopelistlen > buffer->end - buffer->curpos)
|
||||||
|
--- ./common/slp_network.c.orig 2005-02-15 17:48:00.831814261 +0000
|
||||||
|
+++ ./common/slp_network.c 2005-02-15 17:51:29.856000181 +0000
|
||||||
|
@@ -300,7 +300,7 @@
|
||||||
|
/* EINVAL parse error */
|
||||||
|
/*=========================================================================*/
|
||||||
|
{
|
||||||
|
- int xferbytes;
|
||||||
|
+ int xferbytes, recvlen;
|
||||||
|
fd_set readfds;
|
||||||
|
char peek[16];
|
||||||
|
int peeraddrlen = sizeof(struct sockaddr_in);
|
||||||
|
@@ -359,10 +359,14 @@
|
||||||
|
/* Read the rest of the message */
|
||||||
|
/*------------------------------*/
|
||||||
|
/* check the version */
|
||||||
|
- if(*peek == 2)
|
||||||
|
+ if(xferbytes >= 5 && *peek == 2)
|
||||||
|
{
|
||||||
|
/* allocate the recvmsg big enough for the whole message */
|
||||||
|
- *buf = SLPBufferRealloc(*buf, AsUINT24(peek + 2));
|
||||||
|
+ recvlen = AsUINT24(peek + 2);
|
||||||
|
+ /* one byte is minimum */
|
||||||
|
+ if (recvlen <= 0)
|
||||||
|
+ recvlen = 1;
|
||||||
|
+ *buf = SLPBufferRealloc(*buf, recvlen);
|
||||||
|
if(*buf)
|
||||||
|
{
|
||||||
|
while((*buf)->curpos < (*buf)->end)
|
||||||
|
--- ./common/slp_v1message.c.orig 2005-02-15 16:52:12.613798586 +0000
|
||||||
|
+++ ./common/slp_v1message.c 2005-02-15 18:26:47.632848004 +0000
|
||||||
|
@@ -60,6 +60,11 @@
|
||||||
|
/* SLP_ERROR_PARSE_ERROR. */
|
||||||
|
/*=========================================================================*/
|
||||||
|
{
|
||||||
|
+ if (buffer->end - buffer->start < 12)
|
||||||
|
+ {
|
||||||
|
+ /* invalid length 12 bytes is the smallest v1 message*/
|
||||||
|
+ return SLP_ERROR_PARSE_ERROR;
|
||||||
|
+ }
|
||||||
|
header->version = *(buffer->curpos);
|
||||||
|
header->functionid = *(buffer->curpos + 1);
|
||||||
|
|
||||||
|
@@ -85,10 +90,8 @@
|
||||||
|
return SLP_ERROR_CHARSET_NOT_UNDERSTOOD;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if(header->length != buffer->end - buffer->start ||
|
||||||
|
- header->length < 12)
|
||||||
|
+ if(header->length != buffer->end - buffer->start)
|
||||||
|
{
|
||||||
|
- /* invalid length 12 bytes is the smallest v1 message*/
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -114,7 +117,7 @@
|
||||||
|
int result;
|
||||||
|
|
||||||
|
/* make sure that min size is met */
|
||||||
|
- if(buffer->end - buffer->curpos < 6)
|
||||||
|
+ if(buffer->end - buffer->curpos < 4)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -160,7 +163,7 @@
|
||||||
|
int result;
|
||||||
|
|
||||||
|
/* make sure that min size is met */
|
||||||
|
- if(buffer->end - buffer->curpos < 10)
|
||||||
|
+ if(buffer->end - buffer->curpos < 4)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -168,7 +171,7 @@
|
||||||
|
/* parse the prlist */
|
||||||
|
srvrqst->prlistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(srvrqst->prlistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(srvrqst->prlistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -272,6 +275,10 @@
|
||||||
|
srvreg->srvtypelen = tmp - srvreg->srvtype;
|
||||||
|
|
||||||
|
/* parse the attribute list */
|
||||||
|
+ if(buffer->end - buffer->curpos < 2)
|
||||||
|
+ {
|
||||||
|
+ return SLP_ERROR_PARSE_ERROR;
|
||||||
|
+ }
|
||||||
|
srvreg->attrlistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
if(srvreg->attrlistlen > buffer->end - buffer->curpos)
|
||||||
|
@@ -335,7 +342,7 @@
|
||||||
|
srvdereg->urlentry.lifetime = 0; /* not present in SLPv1 */
|
||||||
|
srvdereg->urlentry.urllen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos += 2;
|
||||||
|
- if(srvdereg->urlentry.urllen > buffer->end - buffer->curpos)
|
||||||
|
+ if(srvdereg->urlentry.urllen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -381,7 +388,7 @@
|
||||||
|
/* parse the prlist */
|
||||||
|
attrrqst->prlistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(attrrqst->prlistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(attrrqst->prlistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -396,7 +403,7 @@
|
||||||
|
/* parse the url */
|
||||||
|
attrrqst->urllen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(attrrqst->urllen > buffer->end - buffer->curpos)
|
||||||
|
+ if(attrrqst->urllen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -411,7 +418,7 @@
|
||||||
|
/* parse the scope list */
|
||||||
|
attrrqst->scopelistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos = buffer->curpos + 2;
|
||||||
|
- if(attrrqst->scopelistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(attrrqst->scopelistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -469,7 +476,7 @@
|
||||||
|
/* parse the prlist */
|
||||||
|
srvtyperqst->prlistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos += 2;
|
||||||
|
- if(srvtyperqst->prlistlen > buffer->end - buffer->curpos)
|
||||||
|
+ if(srvtyperqst->prlistlen + 2 > buffer->end - buffer->curpos)
|
||||||
|
{
|
||||||
|
return SLP_ERROR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
@@ -504,6 +511,10 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
/* parse the scope list */
|
||||||
|
+ if(buffer->end - buffer->curpos < 2)
|
||||||
|
+ {
|
||||||
|
+ return SLP_ERROR_PARSE_ERROR;
|
||||||
|
+ }
|
||||||
|
srvtyperqst->scopelistlen = AsUINT16(buffer->curpos);
|
||||||
|
buffer->curpos += 2;
|
||||||
|
if(srvtyperqst->scopelistlen > buffer->end - buffer->curpos)
|
||||||
|
--- ./libslp/libslp_parse.c.orig 2005-02-15 18:39:01.505072256 +0000
|
||||||
|
+++ ./libslp/libslp_parse.c 2005-02-15 18:41:21.510075488 +0000
|
||||||
|
@@ -168,7 +168,10 @@
|
||||||
|
if((isTag) && strchr(ATTRIBUTE_BAD_TAG, *current_inbuf))
|
||||||
|
return(SLP_PARSE_ERROR);
|
||||||
|
|
||||||
|
- if(strchr(ATTRIBUTE_RESERVE_STRING, *current_inbuf))
|
||||||
|
+ if((strchr(ATTRIBUTE_RESERVE_STRING, *current_inbuf)) ||
|
||||||
|
+ ((*current_inbuf >= 0x00) && (*current_inbuf <= 0x1F)) ||
|
||||||
|
+ (*current_inbuf == 0x7F)
|
||||||
|
+ )
|
||||||
|
amount_of_escape_characters++;
|
||||||
|
|
||||||
|
current_inbuf++;
|
||||||
|
--- ./slpd/slpd_incoming.c.orig 2005-02-15 17:01:07.456383345 +0000
|
||||||
|
+++ ./slpd/slpd_incoming.c 2005-02-15 17:47:18.244888341 +0000
|
||||||
|
@@ -189,13 +189,16 @@
|
||||||
|
MSG_PEEK,
|
||||||
|
(struct sockaddr *)&(sock->peeraddr),
|
||||||
|
&peeraddrlen);
|
||||||
|
- if (bytesread > 0)
|
||||||
|
+ if (bytesread > 0 && bytesread >= (*peek == 2 ? 5 : 4))
|
||||||
|
{
|
||||||
|
|
||||||
|
if (*peek == 2)
|
||||||
|
recvlen = AsUINT24(peek + 2);
|
||||||
|
else if (*peek == 1) /* SLPv1 packet */
|
||||||
|
recvlen = AsUINT16(peek + 2);
|
||||||
|
+ /* one byte is minimum */
|
||||||
|
+ if (recvlen <= 0)
|
||||||
|
+ recvlen = 1;
|
||||||
|
/* allocate the recvbuf big enough for the whole message */
|
||||||
|
sock->recvbuf = SLPBufferRealloc(sock->recvbuf,recvlen);
|
||||||
|
if (sock->recvbuf)
|
||||||
|
@@ -249,7 +252,7 @@
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- /* error in recv() */
|
||||||
|
+ /* error in recv() or eof */
|
||||||
|
sock->state = SOCKET_CLOSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--- ./slpd/slpd_outgoing.c.orig 2005-02-15 17:29:22.366303963 +0000
|
||||||
|
+++ ./slpd/slpd_outgoing.c 2005-02-15 17:46:47.727240947 +0000
|
||||||
|
@@ -190,7 +190,7 @@
|
||||||
|
void OutgoingStreamRead(SLPList* socklist, SLPDSocket* sock)
|
||||||
|
/*-------------------------------------------------------------------------*/
|
||||||
|
{
|
||||||
|
- int bytesread;
|
||||||
|
+ int bytesread, recvlen;
|
||||||
|
char peek[16];
|
||||||
|
int peeraddrlen = sizeof(struct sockaddr_in);
|
||||||
|
|
||||||
|
@@ -205,10 +205,14 @@
|
||||||
|
MSG_PEEK,
|
||||||
|
(struct sockaddr *)&(sock->peeraddr),
|
||||||
|
&peeraddrlen);
|
||||||
|
- if ( bytesread > 0 )
|
||||||
|
+ if ( bytesread >= 5 && *peek == 2 )
|
||||||
|
{
|
||||||
|
+ recvlen = AsUINT24(peek + 2);
|
||||||
|
+ /* one byte is minimum */
|
||||||
|
+ if (recvlen <= 0)
|
||||||
|
+ recvlen = 1;
|
||||||
|
/* allocate the recvbuf big enough for the whole message */
|
||||||
|
- sock->recvbuf = SLPBufferRealloc(sock->recvbuf,AsUINT24(peek+2));
|
||||||
|
+ sock->recvbuf = SLPBufferRealloc(sock->recvbuf, recvlen);
|
||||||
|
if ( sock->recvbuf )
|
||||||
|
{
|
||||||
|
sock->state = STREAM_READ;
|
||||||
|
@@ -219,7 +223,7 @@
|
||||||
|
sock->state = SOCKET_CLOSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- else
|
||||||
|
+ else if ( bytesread == -1 )
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
if ( WSAEWOULDBLOCK != WSAGetLastError() )
|
||||||
|
@@ -232,6 +236,10 @@
|
||||||
|
OutgoingStreamReconnect(socklist,sock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ sock->state = SOCKET_CLOSE;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( sock->state == STREAM_READ )
|
||||||
|
--- ./slpd/slpd_v1process.c.orig 2005-02-15 17:05:42.710057099 +0000
|
||||||
|
+++ ./slpd/slpd_v1process.c 2005-02-15 17:29:06.518563216 +0000
|
||||||
|
@@ -808,11 +808,16 @@
|
||||||
|
{
|
||||||
|
/* SLPv1 messages are handled only by DAs */
|
||||||
|
errorcode = SLP_ERROR_VER_NOT_SUPPORTED;
|
||||||
|
+ return errorcode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse just the message header the reset the buffer "curpos" pointer */
|
||||||
|
recvbuf->curpos = recvbuf->start;
|
||||||
|
errorcode = SLPv1MessageParseHeader(recvbuf, &header);
|
||||||
|
+ if (errorcode != 0)
|
||||||
|
+ {
|
||||||
|
+ return errorcode;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* TRICKY: Duplicate SRVREG recvbufs *before* parsing them */
|
||||||
|
/* it because we are going to keep them in the */
|
258
openslp.changes
Normal file
258
openslp.changes
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Nov 16 17:13:01 CET 2006 - mls@suse.de
|
||||||
|
|
||||||
|
- truncate oversized udp messages, finally fixes [#185483]
|
||||||
|
(can be turned of with "net.slp.oversizedUDP" option)
|
||||||
|
- do not try to send back empty answers
|
||||||
|
- add option "net.slp.allowDoubleEqualInPredicate" to make openslp
|
||||||
|
work with some buggy clients that use "==" for comparison [#95043]
|
||||||
|
- changed SLPGetPeer interface to support IPv6
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Sep 12 15:23:43 CEST 2006 - mls@suse.de
|
||||||
|
|
||||||
|
- obey OVERFLOW bit of incoming udp messages [#185483]
|
||||||
|
- use right length in send() calls [#185483]
|
||||||
|
- fix errno check in IncomingStreamWrite
|
||||||
|
- add SLPGetPeer method in libslp
|
||||||
|
- add --peerinfo option to slptool to print peerinfo
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed May 10 20:41:30 CEST 2006 - mls@suse.de
|
||||||
|
|
||||||
|
- fix unaligned memory access on ia64 [#171932]
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 24 14:23:39 CET 2006 - mls@suse.de
|
||||||
|
|
||||||
|
- fix listening on multiple interfaces [#160008]
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Mar 18 03:33:51 CET 2006 - schwab@suse.de
|
||||||
|
|
||||||
|
- Fix file descritor leak [#159303].
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jan 30 16:35:37 CET 2006 - mls@suse.de
|
||||||
|
|
||||||
|
- fix bug in DropSLPMulticastGroup
|
||||||
|
- add -fstack-protector to CFLAGS
|
||||||
|
- added logrotate script [#143069]
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 25 21:30:39 CET 2006 - mls@suse.de
|
||||||
|
|
||||||
|
- converted neededforbuild to BuildRequires
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Dec 23 15:41:12 CET 2005 - mls@suse.de
|
||||||
|
|
||||||
|
- clear overflow bit on TCP connections [#135248]
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Sep 29 03:15:17 CEST 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- add norootforbuild
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 22 19:31:23 CEST 2005 - mls@suse.de
|
||||||
|
|
||||||
|
- also listen on SLPv1 General Multicast address [#64138]
|
||||||
|
- use poll instead of select [#65673]
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Feb 15 19:52:01 CET 2005 - mls@suse.de
|
||||||
|
|
||||||
|
- update to version 1.2.0
|
||||||
|
- fixed security audit findings
|
||||||
|
- disable mdns in slpd for now, libslp still supports it
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Dec 3 12:39:40 CET 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- fix slpv DA discovery scope handling (#48728)
|
||||||
|
- use _dns-sd instead of _mdns in mdns findsrvtypes query (#48325)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Oct 14 13:55:00 CEST 2004 - adrian@suse.de
|
||||||
|
|
||||||
|
- add meta information for suse help.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Jun 13 14:27:28 CEST 2004 - bg@suse.de
|
||||||
|
|
||||||
|
- reduce hardcoded optimization from -O3 to -O2 to circumvent
|
||||||
|
ICE on hppa
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jun 1 16:17:17 CEST 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- added fillup and insserv prereq
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu May 27 14:30:41 CEST 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- use /proc/net/tcp_listen and /proc/net/tcp6_listen if
|
||||||
|
available to keep things fast on systems with lots of
|
||||||
|
network connections [#40888]
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed May 5 20:08:02 CEST 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- treat empty attributes as illegal [#39669]
|
||||||
|
- always start slpd on SLES [#39863]
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Apr 23 12:04:20 CEST 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- libslp: use configured TTL settings [#39030]
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Apr 2 12:17:42 CEST 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- beta is over, don't always start slpd
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Apr 2 09:18:03 CEST 2004 - kukuk@suse.de
|
||||||
|
|
||||||
|
- Fix init script
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 31 13:03:35 CEST 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- fix sighup processing
|
||||||
|
- clean up spi code
|
||||||
|
- fix spi null pointer reference
|
||||||
|
- fix namingauth comparison
|
||||||
|
- added try-restart to rcslpd
|
||||||
|
- fix slp.conf re-read
|
||||||
|
- fix prlist buffer overrun
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Mar 29 14:58:00 CEST 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- turn around srvtypes order in mdns
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 18 17:12:34 CET 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- code cleanup
|
||||||
|
- provide A RR with SRV RRs
|
||||||
|
- don't pack .xvpics
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 12 15:48:09 CET 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- added missing SLPGetMDNSName prototype to slp.h
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 12 12:38:38 CET 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- slpd: fix hostname detection segfault
|
||||||
|
- slpd: use ttl 255 for mdns
|
||||||
|
- slpd: put attrs in mdns TXT RR
|
||||||
|
- libslp: check mdns ttl
|
||||||
|
- libslp: make getattr work with mdns
|
||||||
|
- libslp: make mdns name available via new SLPGetMDNSName() function
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 4 18:45:35 CET 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- libslp: add scope/nameingauth/predicate to query
|
||||||
|
- slpd: reply to mdns service requests
|
||||||
|
- slpd: don't play DA if our hostname expands to loopback
|
||||||
|
- slpd: fix null pointer reference if SrvReg request is sent
|
||||||
|
over tcp (as done by apple)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Feb 27 18:07:46 CET 2004 - mls@suse.de
|
||||||
|
|
||||||
|
- slpd: check port status every 15 seconds for watch-port-tcp/udp
|
||||||
|
entries
|
||||||
|
- libslp: send MDNS queries for scope _mdns
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Feb 15 18:17:19 CET 2004 - adrian@suse.de
|
||||||
|
|
||||||
|
- export full qualified hostnames for $HOSTNAME
|
||||||
|
- replace several $HOSTNAME tags in a srvurl
|
||||||
|
- do only accept .reg files (no .rpmsave for instance)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Feb 14 01:33:22 CET 2004 - adrian@suse.de
|
||||||
|
|
||||||
|
- fix /proc/net/tcp* parsing
|
||||||
|
- ONLY FOR BETA: start slpd always
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jan 29 13:59:26 CET 2004 - adrian@suse.de
|
||||||
|
|
||||||
|
- fix reading from slpd.reg.d directory
|
||||||
|
(was broken since chroot run)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 14 13:42:41 CET 2004 - adrian@suse.de
|
||||||
|
|
||||||
|
- slptool register now services with max timeout.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Dec 16 09:14:12 CET 2003 - adrian@suse.de
|
||||||
|
|
||||||
|
- fix sig11 when using the library without spi file
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Dec 8 12:06:21 CET 2003 - adrian@suse.de
|
||||||
|
|
||||||
|
- security enhancements:
|
||||||
|
* use chroot and open needed file descriptors before
|
||||||
|
* panic if chroot or setuid fails
|
||||||
|
* pid-file= option in reg files is useless now, so
|
||||||
|
tcp-port= must be used for this now
|
||||||
|
- add SSL support again
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Nov 26 15:53:52 CET 2003 - adrian@suse.de
|
||||||
|
|
||||||
|
- add buffer fix from cvs
|
||||||
|
- add README.SuSE with config howto
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Nov 20 13:06:13 CET 2003 - adrian@suse.de
|
||||||
|
|
||||||
|
- drop the multicast route creation in runlevel script.
|
||||||
|
we do not need it anymore with 1.1.5
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Nov 19 16:45:08 CET 2003 - adrian@suse.de
|
||||||
|
|
||||||
|
- update to version 1.1.5
|
||||||
|
* development version, but it contains lots of fixes
|
||||||
|
- use $HOSTNAME instead of $LOCALHOST in reg files
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Nov 14 10:53:01 CET 2003 - adrian@suse.de
|
||||||
|
|
||||||
|
- use correct keyword "X-UnitedLinux-Should-Start" in init script
|
||||||
|
(seen by Martin Vidner)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Nov 13 22:58:49 CET 2003 - adrian@suse.de
|
||||||
|
|
||||||
|
- add "tcp-port=" option to test services running via (x)inted
|
||||||
|
- start after (x)inetd
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Nov 12 13:28:17 CET 2003 - adrian@suse.de
|
||||||
|
|
||||||
|
- add code to parse .reg files from any package below /etc/slp.reg.d/
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Nov 9 23:26:04 CET 2003 - adrian@suse.de
|
||||||
|
|
||||||
|
- fix security issue in init script
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Nov 8 17:56:38 CET 2003 - adrian@suse.de
|
||||||
|
|
||||||
|
- initial package of version 1.0.11
|
||||||
|
|
57
openslp.checkovr.diff
Normal file
57
openslp.checkovr.diff
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
--- ./common/slp_xcast.c.orig 2006-06-20 14:52:11.000000000 +0000
|
||||||
|
+++ ./common/slp_xcast.c 2006-06-26 10:08:42.000000000 +0000
|
||||||
|
@@ -75,6 +75,7 @@
|
||||||
|
|
||||||
|
#include "slp_xcast.h"
|
||||||
|
#include "slp_message.h"
|
||||||
|
+#include "slp_v1message.h"
|
||||||
|
#include "slp_property.h"
|
||||||
|
|
||||||
|
/*========================================================================*/
|
||||||
|
@@ -354,14 +355,26 @@ int SLPXcastRecvMessage(const SLPXcastSo
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
{
|
||||||
|
- if(AsUINT24(peek + 2) <= SLP_MAX_DATAGRAM_SIZE)
|
||||||
|
+ int ovlbit;
|
||||||
|
+ size_t size;
|
||||||
|
+ if (peek[0] == 1)
|
||||||
|
{
|
||||||
|
- *buf = SLPBufferRealloc(*buf, AsUINT24(peek + 2));
|
||||||
|
+ size = AsUINT16(peek + 2);
|
||||||
|
+ ovlbit = peek[4] & SLPv1_FLAG_OVERFLOW;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ size = AsUINT24(peek + 2);
|
||||||
|
+ ovlbit = peek[5] & (SLP_FLAG_OVERFLOW >> 8);
|
||||||
|
+ }
|
||||||
|
+ if(size <= SLP_MAX_DATAGRAM_SIZE && !ovlbit)
|
||||||
|
+ {
|
||||||
|
+ *buf = SLPBufferRealloc(*buf, size);
|
||||||
|
bytesread = recv(sockets->sock[i],
|
||||||
|
(*buf)->curpos,
|
||||||
|
(*buf)->end - (*buf)->curpos,
|
||||||
|
0);
|
||||||
|
- if(bytesread != AsUINT24(peek + 2))
|
||||||
|
+ if(bytesread != size)
|
||||||
|
{
|
||||||
|
/* This should never happen but we'll be paranoid*/
|
||||||
|
(*buf)->end = (*buf)->curpos + bytesread;
|
||||||
|
@@ -377,12 +390,14 @@ int SLPXcastRecvMessage(const SLPXcastSo
|
||||||
|
/* we got a bad message, or one that is too big! */
|
||||||
|
#ifndef UNICAST_NOT_SUPPORTED
|
||||||
|
/* Reading SLP_MAX_DATAGRAM_SIZE bytes on the socket */
|
||||||
|
- *buf = SLPBufferRealloc(*buf, SLP_MAX_DATAGRAM_SIZE);
|
||||||
|
+ if (size > SLP_MAX_DATAGRAM_SIZE)
|
||||||
|
+ size = SLP_MAX_DATAGRAM_SIZE;
|
||||||
|
+ *buf = SLPBufferRealloc(*buf, size);
|
||||||
|
bytesread = recv(sockets->sock[i],
|
||||||
|
(*buf)->curpos,
|
||||||
|
(*buf)->end - (*buf)->curpos,
|
||||||
|
0);
|
||||||
|
- if(bytesread != SLP_MAX_DATAGRAM_SIZE)
|
||||||
|
+ if(bytesread != size)
|
||||||
|
{
|
||||||
|
/* This should never happen but we'll be paranoid*/
|
||||||
|
(*buf)->end = (*buf)->curpos + bytesread;
|
4
openslp.desktop
Normal file
4
openslp.desktop
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=Open SLP User Guide
|
||||||
|
DocPath=/usr/share/doc/packages/openslp/html/UsersGuide/index.html
|
||||||
|
X-DOC-SearchMethod=htdig
|
136
openslp.diff
Normal file
136
openslp.diff
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
--- ./common/slp_iface.c.orig 2006-09-12 13:17:00.000000000 +0000
|
||||||
|
+++ ./common/slp_iface.c 2006-09-12 13:17:08.000000000 +0000
|
||||||
|
@@ -128,6 +128,7 @@ int SLPIfaceGetInfo(const char* useiface
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
perror("ioctl failed");
|
||||||
|
+ close(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -183,6 +184,7 @@ int SLPIfaceGetInfo(const char* useiface
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ close(fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
--- ./common/slp_net.c.orig 2006-09-12 13:17:00.000000000 +0000
|
||||||
|
+++ ./common/slp_net.c 2006-09-12 13:17:08.000000000 +0000
|
||||||
|
@@ -92,7 +92,7 @@ int SLPNetGetThisHostname(char** hostfdn
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- ifaddr.s_addr = *((unsigned long*)he->h_addr);
|
||||||
|
+ ifaddr = *((struct in_addr *)he->h_addr);
|
||||||
|
*hostfdn = xstrdup(inet_ntoa(ifaddr));
|
||||||
|
}
|
||||||
|
|
||||||
|
--- ./common/slp_spi.c.orig 2006-09-12 13:17:00.000000000 +0000
|
||||||
|
+++ ./common/slp_spi.c 2006-09-12 13:17:08.000000000 +0000
|
||||||
|
@@ -267,9 +267,9 @@ SLPSpiHandle SLPSpiOpen(const char* spif
|
||||||
|
fp = fopen(spifile,"r");
|
||||||
|
if(fp)
|
||||||
|
{
|
||||||
|
- result = xmalloc(sizeof(structSLPSpiHandle));
|
||||||
|
+ result = xmalloc(sizeof(struct _SLPSpiHandle));
|
||||||
|
if(result == 0) return 0;
|
||||||
|
- memset(result, 0, sizeof(structSLPSpiHandle));
|
||||||
|
+ memset(result, 0, sizeof(struct _SLPSpiHandle));
|
||||||
|
|
||||||
|
result->spifile = xstrdup(spifile);
|
||||||
|
result->cacheprivate = cacheprivate;
|
||||||
|
--- ./configure.in.orig 2006-09-12 13:17:00.000000000 +0000
|
||||||
|
+++ ./configure.in 2006-09-12 13:17:08.000000000 +0000
|
||||||
|
@@ -171,5 +171,12 @@ AC_CHECK_LIB(socket, main)
|
||||||
|
AC_CHECK_LIB(nsl, gethostbyname)
|
||||||
|
AC_CHECK_LIB(m, main)
|
||||||
|
AC_CHECK_FUNCS(ceil log10 strncasecmp strcasecmp )
|
||||||
|
-AC_OUTPUT(Makefile common/Makefile libslpattr/Makefile libslp/Makefile \
|
||||||
|
- slpd/Makefile slptool/Makefile test/Makefile slp.list)
|
||||||
|
+AC_CONFIG_FILES([ Makefile ])
|
||||||
|
+AC_CONFIG_FILES([ common/Makefile ])
|
||||||
|
+AC_CONFIG_FILES([ libslpattr/Makefile ])
|
||||||
|
+AC_CONFIG_FILES([ libslp/Makefile ])
|
||||||
|
+AC_CONFIG_FILES([ slpd/Makefile ])
|
||||||
|
+AC_CONFIG_FILES([ slptool/Makefile ])
|
||||||
|
+AC_CONFIG_FILES([ test/Makefile ])
|
||||||
|
+AC_CONFIG_FILES([ slp.list ])
|
||||||
|
+AC_OUTPUT
|
||||||
|
--- ./etc/slp.reg.orig 2006-09-12 13:17:00.000000000 +0000
|
||||||
|
+++ ./etc/slp.reg 2006-09-12 13:17:08.000000000 +0000
|
||||||
|
@@ -37,3 +37,10 @@
|
||||||
|
##Register telnet service with no attributes
|
||||||
|
#service:telnet.myorg://192.168.100.1,en,65535
|
||||||
|
#use default scopes
|
||||||
|
+
|
||||||
|
+##Register vnc kdm service, can be used via krdc
|
||||||
|
+#service:remotedesktop.kde:vnc://192.168.100.1:1,en,65535
|
||||||
|
+#attrid=(type=shared),(username=joe),(fullname=Joe User),(serviceid=1235456)
|
||||||
|
+#description=KDE remote login
|
||||||
|
+
|
||||||
|
+
|
||||||
|
--- ./slpd/slpd_incoming.c.orig 2006-09-12 13:17:00.000000000 +0000
|
||||||
|
+++ ./slpd/slpd_incoming.c 2006-09-12 13:19:18.000000000 +0000
|
||||||
|
@@ -137,11 +137,11 @@ void IncomingStreamWrite(SLPList* sockli
|
||||||
|
sock->state = STREAM_WRITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (sock->sendbuf->end - sock->sendbuf->start != 0)
|
||||||
|
+ if (sock->sendbuf->end - sock->sendbuf->curpos != 0)
|
||||||
|
{
|
||||||
|
byteswritten = send(sock->fd,
|
||||||
|
sock->sendbuf->curpos,
|
||||||
|
- sock->sendbuf->end - sock->sendbuf->start,
|
||||||
|
+ sock->sendbuf->end - sock->sendbuf->curpos,
|
||||||
|
flags);
|
||||||
|
if (byteswritten > 0)
|
||||||
|
{
|
||||||
|
@@ -157,9 +157,9 @@ void IncomingStreamWrite(SLPList* sockli
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
- if (WSAEWOULDBLOCK == WSAGetLastError())
|
||||||
|
+ if (WSAEWOULDBLOCK != WSAGetLastError())
|
||||||
|
#else
|
||||||
|
- if (errno == EWOULDBLOCK)
|
||||||
|
+ if (errno != EWOULDBLOCK)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
/* Error occured or connection was closed */
|
||||||
|
@@ -516,6 +516,7 @@ int SLPDIncomingInit()
|
||||||
|
/* Create socket that will handle multicast UDP. */
|
||||||
|
/*----------------------------------------------------------------*/
|
||||||
|
|
||||||
|
+ mcastaddr.s_addr = htonl(SLP_MCAST_ADDRESS);
|
||||||
|
sock = SLPDSocketCreateBoundDatagram(&myaddr,
|
||||||
|
&mcastaddr,
|
||||||
|
DATAGRAM_MULTICAST);
|
||||||
|
--- ./slpd/slpd_outgoing.c.orig 2002-12-03 21:04:54.000000000 +0000
|
||||||
|
+++ ./slpd/slpd_outgoing.c 2006-09-12 13:19:47.000000000 +0000
|
||||||
|
@@ -328,11 +328,11 @@ void OutgoingStreamWrite(SLPList* sockli
|
||||||
|
sock->state = STREAM_WRITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if ( sock->sendbuf->end - sock->sendbuf->start > 0 )
|
||||||
|
+ if ( sock->sendbuf->end - sock->sendbuf->curpos > 0 )
|
||||||
|
{
|
||||||
|
byteswritten = send(sock->fd,
|
||||||
|
sock->sendbuf->curpos,
|
||||||
|
- sock->sendbuf->end - sock->sendbuf->start,
|
||||||
|
+ sock->sendbuf->end - sock->sendbuf->curpos,
|
||||||
|
flags);
|
||||||
|
if ( byteswritten > 0 )
|
||||||
|
{
|
||||||
|
--- ./slpd/slpd_socket.c.orig 2006-09-12 13:17:00.000000000 +0000
|
||||||
|
+++ ./slpd/slpd_socket.c 2006-09-12 13:17:08.000000000 +0000
|
||||||
|
@@ -183,7 +183,7 @@ int DropSLPMulticastGroup(sockfd_t sockf
|
||||||
|
memcpy(&mreq.imr_multiaddr, maddr, sizeof(struct in_addr));
|
||||||
|
|
||||||
|
/* drop for the specified interface */
|
||||||
|
- memcpy(&mreq.imr_interface,addr,sizeof(addr));
|
||||||
|
+ memcpy(&mreq.imr_interface,addr,sizeof(struct in_addr));
|
||||||
|
|
||||||
|
return setsockopt(sockfd, IPPROTO_IP, IP_DROP_MEMBERSHIP, (char*)&mreq,sizeof(mreq));
|
||||||
|
}
|
59
openslp.doubleequal.diff
Normal file
59
openslp.doubleequal.diff
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
--- slpd/slpd_predicate.c.orig 2006-11-16 12:40:22.000000000 +0100
|
||||||
|
+++ slpd/slpd_predicate.c 2006-11-16 12:45:22.000000000 +0100
|
||||||
|
@@ -78,10 +78,11 @@
|
||||||
|
*********/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
-#include <ctype.h>
|
||||||
|
+#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "slpd_predicate.h"
|
||||||
|
+#include "slpd_property.h"
|
||||||
|
|
||||||
|
#include "../libslpattr/libslpattr.h"
|
||||||
|
#include "../libslpattr/libslpattr_internal.h"
|
||||||
|
@@ -1389,6 +1390,10 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (op == EQUAL && G_SlpdProperty.allowDoubleEqualInPredicate && operator[1] == '=')
|
||||||
|
+ {
|
||||||
|
+ val_start++;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/***** Get operands. *****/
|
||||||
|
/**** Left. ****/
|
||||||
|
--- slpd/slpd_property.h.orig2 2006-11-16 12:43:26.000000000 +0100
|
||||||
|
+++ slpd/slpd_property.h 2006-11-16 12:43:48.000000000 +0100
|
||||||
|
@@ -95,6 +95,7 @@
|
||||||
|
int checkSourceAddr;
|
||||||
|
int DAHeartBeat;
|
||||||
|
int oversizedUDP;
|
||||||
|
+ int allowDoubleEqualInPredicate;
|
||||||
|
}SLPDProperty;
|
||||||
|
|
||||||
|
|
||||||
|
--- slpd/slpd_property.c.orig2 2006-11-16 12:42:24.000000000 +0100
|
||||||
|
+++ slpd/slpd_property.c 2006-11-16 12:43:11.000000000 +0100
|
||||||
|
@@ -132,6 +132,7 @@
|
||||||
|
G_SlpdProperty.checkSourceAddr = SLPPropertyAsBoolean(SLPPropertyGet("net.slp.checkSourceAddr"));
|
||||||
|
G_SlpdProperty.DAHeartBeat = SLPPropertyAsInteger(SLPPropertyGet("net.slp.DAHeartBeat"));
|
||||||
|
G_SlpdProperty.oversizedUDP = SLPPropertyAsBoolean(SLPPropertyGet("net.slp.oversizedUDP"));
|
||||||
|
+ G_SlpdProperty.allowDoubleEqualInPredicate = SLPPropertyAsBoolean(SLPPropertyGet("net.slp.allowDoubleEqualInPredicate"));
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------*/
|
||||||
|
--- test/SLPD_predicate_test/slpd_predicate_test.c.orig 2006-11-16 13:09:05.000000000 +0100
|
||||||
|
+++ test/SLPD_predicate_test/slpd_predicate_test.c 2006-11-16 13:10:31.000000000 +0100
|
||||||
|
@@ -5,6 +5,10 @@
|
||||||
|
|
||||||
|
#ifdef ENABLE_PREDICATES
|
||||||
|
|
||||||
|
+#include <slpd_property.h>
|
||||||
|
+
|
||||||
|
+SLPDProperty G_SlpdProperty;
|
||||||
|
+
|
||||||
|
typedef void* SLPDPredicate;
|
||||||
|
int SLPDPredicateTest(SLPDPredicate predicate, SLPAttributes attr);
|
||||||
|
|
20
openslp.emptyanswer.diff
Normal file
20
openslp.emptyanswer.diff
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
--- slpd/slpd_incoming.c.orig 2006-11-16 12:19:04.000000000 +0100
|
||||||
|
+++ slpd/slpd_incoming.c 2006-11-16 12:22:00.000000000 +0100
|
||||||
|
@@ -251,10 +251,16 @@
|
||||||
|
sock->state = SOCKET_CLOSE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
+ if (!sock->sendbuf || sock->sendbuf->end == sock->sendbuf->start)
|
||||||
|
+ {
|
||||||
|
+ /* no answer available, just close socket */
|
||||||
|
+ sock->state = SOCKET_CLOSE;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
/* some clients cannot cope with the OVERFLOW
|
||||||
|
* bit set on a TCP stream, so always clear it
|
||||||
|
*/
|
||||||
|
- if (sock->sendbuf && sock->sendbuf->end - sock->sendbuf->start > 5)
|
||||||
|
+ if (sock->sendbuf->end - sock->sendbuf->start > 5)
|
||||||
|
{
|
||||||
|
if (sock->sendbuf->start[0] == 1)
|
||||||
|
sock->sendbuf->start[4] &= ~SLPv1_FLAG_OVERFLOW;
|
14
openslp.logrotate
Normal file
14
openslp.logrotate
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/var/log/slpd.log {
|
||||||
|
compress
|
||||||
|
dateext
|
||||||
|
maxage 14
|
||||||
|
rotate 99
|
||||||
|
size +1024k
|
||||||
|
notifempty
|
||||||
|
missingok
|
||||||
|
create 600 root root
|
||||||
|
sharedscripts
|
||||||
|
postrotate
|
||||||
|
/etc/init.d/slpd restart
|
||||||
|
endscript
|
||||||
|
}
|
853
openslp.poll.diff
Normal file
853
openslp.poll.diff
Normal file
@ -0,0 +1,853 @@
|
|||||||
|
--- ./common/slp_dhcp.c.orig 2005-08-22 17:24:56.813080069 +0000
|
||||||
|
+++ ./common/slp_dhcp.c 2005-08-22 17:25:15.753392664 +0000
|
||||||
|
@@ -69,6 +69,9 @@
|
||||||
|
#include <bits/ioctls.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+#include <sys/poll.h>
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
@@ -166,7 +169,11 @@ static int dhcpSendRequest(int sockfd, v
|
||||||
|
ETIMEDOUT read timed out
|
||||||
|
=========================================================================*/
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ struct pollfd writefd;
|
||||||
|
+#else
|
||||||
|
fd_set writefds;
|
||||||
|
+#endif
|
||||||
|
int xferbytes;
|
||||||
|
int flags = 0;
|
||||||
|
|
||||||
|
@@ -174,10 +181,17 @@ static int dhcpSendRequest(int sockfd, v
|
||||||
|
flags = MSG_NOSIGNAL;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ writefd.fd = sockfd;
|
||||||
|
+ writefd.events = POLLOUT;
|
||||||
|
+ writefd.revents = 0;
|
||||||
|
+ xferbytes = poll(&writefd, 1, timeout ? timeout->tv_sec * 1000 + timeout->tv_usec / 1000 : -1);
|
||||||
|
+#else
|
||||||
|
FD_ZERO(&writefds);
|
||||||
|
FD_SET(sockfd, &writefds);
|
||||||
|
-
|
||||||
|
- if((xferbytes = select(sockfd + 1, 0, &writefds, 0, timeout)) > 0)
|
||||||
|
+ xferbytes = select(sockfd + 1, 0, &writefds, 0, timeout);
|
||||||
|
+#endif
|
||||||
|
+ if(xferbytes > 0)
|
||||||
|
{
|
||||||
|
if((xferbytes = sendto(sockfd, (char*)buf, (int)bufsz, flags,
|
||||||
|
peeraddr, sizeof(struct sockaddr_in))) <= 0)
|
||||||
|
@@ -214,12 +228,23 @@ static int dhcpRecvResponse(int sockfd,
|
||||||
|
=========================================================================*/
|
||||||
|
{
|
||||||
|
int xferbytes;
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ struct pollfd readfd;
|
||||||
|
+#else
|
||||||
|
fd_set readfds;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ readfd.fd = sockfd;
|
||||||
|
+ readfd.events = POLLIN;
|
||||||
|
+ readfd.revents = 0;
|
||||||
|
+ xferbytes = poll(&readfd, 1, timeout ? timeout->tv_sec * 1000 + timeout->tv_usec / 1000 : -1);
|
||||||
|
+#else
|
||||||
|
FD_ZERO(&readfds);
|
||||||
|
FD_SET(sockfd, &readfds);
|
||||||
|
-
|
||||||
|
- if((xferbytes = select(sockfd + 1, &readfds, 0 , 0, timeout)) > 0)
|
||||||
|
+ xferbytes = select(sockfd + 1, &readfds, 0 , 0, timeout);
|
||||||
|
+#endif
|
||||||
|
+ if(xferbytes > 0)
|
||||||
|
{
|
||||||
|
if((xferbytes = recvfrom(sockfd, (char*)buf, (int)bufsz, 0, 0, 0)) <= 0)
|
||||||
|
{
|
||||||
|
--- ./common/slp_network.c.orig 2005-08-22 17:24:56.814079927 +0000
|
||||||
|
+++ ./common/slp_network.c 2005-08-22 17:25:15.754392523 +0000
|
||||||
|
@@ -221,7 +221,11 @@ int SLPNetworkSendMessage(int sockfd,
|
||||||
|
/* ETIME read timed out */
|
||||||
|
/*=========================================================================*/
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ struct pollfd writefd;
|
||||||
|
+#else
|
||||||
|
fd_set writefds;
|
||||||
|
+#endif
|
||||||
|
int xferbytes;
|
||||||
|
int flags = 0;
|
||||||
|
|
||||||
|
@@ -233,10 +237,17 @@ int SLPNetworkSendMessage(int sockfd,
|
||||||
|
|
||||||
|
while(buf->curpos < buf->end)
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ writefd.fd = sockfd;
|
||||||
|
+ writefd.events = POLLOUT;
|
||||||
|
+ writefd.revents = 0;
|
||||||
|
+ xferbytes = poll(&writefd, 1, timeout ? timeout->tv_sec * 1000 + timeout->tv_usec / 1000 : -1);
|
||||||
|
+#else
|
||||||
|
FD_ZERO(&writefds);
|
||||||
|
FD_SET(sockfd, &writefds);
|
||||||
|
|
||||||
|
xferbytes = select(sockfd + 1, 0, &writefds, 0, timeout);
|
||||||
|
+#endif
|
||||||
|
if(xferbytes > 0)
|
||||||
|
{
|
||||||
|
if(socktype == SOCK_DGRAM)
|
||||||
|
@@ -301,16 +312,27 @@ int SLPNetworkRecvMessage(int sockfd,
|
||||||
|
/*=========================================================================*/
|
||||||
|
{
|
||||||
|
int xferbytes, recvlen;
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ struct pollfd readfd;
|
||||||
|
+#else
|
||||||
|
fd_set readfds;
|
||||||
|
+#endif
|
||||||
|
char peek[16];
|
||||||
|
int peeraddrlen = sizeof(struct sockaddr_in);
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------*/
|
||||||
|
/* take a peek at the packet to get version and size information */
|
||||||
|
/*---------------------------------------------------------------*/
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ readfd.fd = sockfd;
|
||||||
|
+ readfd.events = POLLIN;
|
||||||
|
+ readfd.revents = 0;
|
||||||
|
+ xferbytes = poll(&readfd, 1, timeout ? timeout->tv_sec * 1000 + timeout->tv_usec / 1000 : -1);
|
||||||
|
+#else
|
||||||
|
FD_ZERO(&readfds);
|
||||||
|
FD_SET(sockfd, &readfds);
|
||||||
|
xferbytes = select(sockfd + 1, &readfds, 0 , 0, timeout);
|
||||||
|
+#endif
|
||||||
|
if(xferbytes > 0)
|
||||||
|
{
|
||||||
|
if(socktype == SOCK_DGRAM)
|
||||||
|
@@ -371,9 +393,16 @@ int SLPNetworkRecvMessage(int sockfd,
|
||||||
|
{
|
||||||
|
while((*buf)->curpos < (*buf)->end)
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ readfd.fd = sockfd;
|
||||||
|
+ readfd.events = POLLIN;
|
||||||
|
+ readfd.revents = 0;
|
||||||
|
+ xferbytes = poll(&readfd, 1, timeout ? timeout->tv_sec * 1000 + timeout->tv_usec / 1000 : -1);
|
||||||
|
+#else
|
||||||
|
FD_ZERO(&readfds);
|
||||||
|
FD_SET(sockfd, &readfds);
|
||||||
|
xferbytes = select(sockfd + 1, &readfds, 0 , 0, timeout);
|
||||||
|
+#endif
|
||||||
|
if(xferbytes > 0)
|
||||||
|
{
|
||||||
|
xferbytes = recv(sockfd,
|
||||||
|
--- ./common/slp_network.h.orig 2005-08-22 17:24:56.815079785 +0000
|
||||||
|
+++ ./common/slp_network.h 2005-08-22 17:25:15.754392523 +0000
|
||||||
|
@@ -72,6 +72,9 @@
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#endif
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+#include <sys/poll.h>
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#include "slp_buffer.h"
|
||||||
|
#include "slp_property.h"
|
||||||
|
--- ./common/slp_xcast.c.orig 2005-08-22 17:24:56.815079785 +0000
|
||||||
|
+++ ./common/slp_xcast.c 2005-08-22 17:25:15.755392381 +0000
|
||||||
|
@@ -65,6 +65,9 @@
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#endif
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+#include <sys/poll.h>
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#ifndef UNICAST_NOT_SUPPORTED
|
||||||
|
#include "../libslp/slp.h"
|
||||||
|
@@ -281,8 +284,12 @@ int SLPXcastRecvMessage(const SLPXcastSo
|
||||||
|
* Zero on success, non-zero with errno set on failure.
|
||||||
|
*========================================================================*/
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ struct pollfd readfds[SLP_MAX_IFACES];
|
||||||
|
+#else
|
||||||
|
fd_set readfds;
|
||||||
|
int highfd;
|
||||||
|
+#endif
|
||||||
|
int i;
|
||||||
|
int readable;
|
||||||
|
size_t bytesread;
|
||||||
|
@@ -295,6 +302,15 @@ int SLPXcastRecvMessage(const SLPXcastSo
|
||||||
|
recvloop = 1;
|
||||||
|
while(recvloop)
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ for (i=0; i<sockets->sock_count; i++)
|
||||||
|
+ {
|
||||||
|
+ readfds[i].fd = sockets->sock[i];
|
||||||
|
+ readfds[i].events = POLLIN;
|
||||||
|
+ readfds[i].revents = 0;
|
||||||
|
+ }
|
||||||
|
+ readable = poll(readfds, sockets->sock_count, timeout ? timeout->tv_sec * 1000 + timeout->tv_usec / 1000 : -1);
|
||||||
|
+#else
|
||||||
|
/* Set the readfds */
|
||||||
|
FD_ZERO(&readfds);
|
||||||
|
highfd = 0;
|
||||||
|
@@ -309,12 +325,17 @@ int SLPXcastRecvMessage(const SLPXcastSo
|
||||||
|
|
||||||
|
/* Select */
|
||||||
|
readable = select(highfd + 1,&readfds,NULL,NULL,timeout);
|
||||||
|
+#endif
|
||||||
|
if(readable > 0)
|
||||||
|
{
|
||||||
|
/* Read the datagram */
|
||||||
|
for (i=0; i<sockets->sock_count; i++)
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ if((readfds[i].revents & POLLIN) != 0)
|
||||||
|
+#else
|
||||||
|
if(FD_ISSET(sockets->sock[i],&readfds))
|
||||||
|
+#endif
|
||||||
|
{
|
||||||
|
/* Peek at the first 16 bytes of the header */
|
||||||
|
bytesread = recvfrom(sockets->sock[i],
|
||||||
|
--- ./configure.in.orig 2005-08-22 17:24:56.816079643 +0000
|
||||||
|
+++ ./configure.in 2005-08-22 17:25:15.756392239 +0000
|
||||||
|
@@ -170,7 +170,7 @@ AC_CHECK_LIB(resolv, inet_aton)
|
||||||
|
AC_CHECK_LIB(socket, main)
|
||||||
|
AC_CHECK_LIB(nsl, gethostbyname)
|
||||||
|
AC_CHECK_LIB(m, main)
|
||||||
|
-AC_CHECK_FUNCS(ceil log10 strncasecmp strcasecmp )
|
||||||
|
+AC_CHECK_FUNCS(ceil log10 strncasecmp strcasecmp poll )
|
||||||
|
AC_CONFIG_FILES([ Makefile ])
|
||||||
|
AC_CONFIG_FILES([ common/Makefile ])
|
||||||
|
AC_CONFIG_FILES([ libslpattr/Makefile ])
|
||||||
|
--- ./libslp/libslp_mdns.c.orig 2005-08-22 17:24:56.817079502 +0000
|
||||||
|
+++ ./libslp/libslp_mdns.c 2005-08-22 17:25:15.757392097 +0000
|
||||||
|
@@ -742,8 +742,12 @@ int SLPMDNSXcastRecvMessage(const SLPXca
|
||||||
|
* Zero on success, non-zero with errno set on failure.
|
||||||
|
*========================================================================*/
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ struct pollfd readfds[SLP_MAX_IFACES * 2];
|
||||||
|
+#else
|
||||||
|
fd_set readfds;
|
||||||
|
int highfd;
|
||||||
|
+#endif
|
||||||
|
int i;
|
||||||
|
int readable;
|
||||||
|
size_t bytesread;
|
||||||
|
@@ -761,6 +765,21 @@ int SLPMDNSXcastRecvMessage(const SLPXca
|
||||||
|
recvloop = 1;
|
||||||
|
while(recvloop)
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ for (i=0; i<sockets->sock_count; i++)
|
||||||
|
+ {
|
||||||
|
+ readfds[i].fd = sockets->sock[i];
|
||||||
|
+ readfds[i].events = POLLIN;
|
||||||
|
+ readfds[i].revents = 0;
|
||||||
|
+ }
|
||||||
|
+ for (i=0; i<mdnssockets->sock_count; i++)
|
||||||
|
+ {
|
||||||
|
+ readfds[i + sockets->sock_count].fd = mdnssockets->sock[i];
|
||||||
|
+ readfds[i + sockets->sock_count].events = POLLIN;
|
||||||
|
+ readfds[i + sockets->sock_count].revents = 0;
|
||||||
|
+ }
|
||||||
|
+ readable = poll(readfds, sockets->sock_count + mdnssockets->sock_count, timeout ? timeout->tv_sec * 1000 + timeout->tv_usec / 1000 : -1);
|
||||||
|
+#else
|
||||||
|
/* Set the readfds */
|
||||||
|
FD_ZERO(&readfds);
|
||||||
|
highfd = 0;
|
||||||
|
@@ -779,12 +798,17 @@ int SLPMDNSXcastRecvMessage(const SLPXca
|
||||||
|
|
||||||
|
/* Select */
|
||||||
|
readable = select(highfd + 1,&readfds,NULL,NULL,timeout);
|
||||||
|
+#endif
|
||||||
|
if(readable > 0)
|
||||||
|
{
|
||||||
|
/* Read the datagram */
|
||||||
|
for (i=0; i<sockets->sock_count; i++)
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ if((readfds[i].revents & POLLIN) != 0)
|
||||||
|
+#else
|
||||||
|
if(FD_ISSET(sockets->sock[i],&readfds))
|
||||||
|
+#endif
|
||||||
|
{
|
||||||
|
/* Peek at the first 16 bytes of the header */
|
||||||
|
bytesread = recvfrom(sockets->sock[i],
|
||||||
|
@@ -850,7 +874,11 @@ int SLPMDNSXcastRecvMessage(const SLPXca
|
||||||
|
}
|
||||||
|
for (i=0; i<mdnssockets->sock_count; i++)
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ if((readfds[sockets->sock_count + i].revents & POLLIN) == 0)
|
||||||
|
+#else
|
||||||
|
if(!FD_ISSET(mdnssockets->sock[i],&readfds))
|
||||||
|
+#endif
|
||||||
|
continue;
|
||||||
|
*buf = SLPBufferRealloc(*buf, 8000);
|
||||||
|
(*buf)->curpos = (*buf)->start;
|
||||||
|
--- ./slpd/slpd_incoming.c.orig 2005-08-22 17:24:56.818079360 +0000
|
||||||
|
+++ ./slpd/slpd_incoming.c 2005-08-22 17:25:15.758391955 +0000
|
||||||
|
@@ -313,23 +313,20 @@ void IncomingSocketListen(SLPList* sockl
|
||||||
|
|
||||||
|
/*=========================================================================*/
|
||||||
|
void SLPDIncomingHandler(int* fdcount,
|
||||||
|
- fd_set* readfds,
|
||||||
|
- fd_set* writefds)
|
||||||
|
+ SLPD_fdset *fdset)
|
||||||
|
/* Handles all outgoing requests that are pending on the specified file */
|
||||||
|
/* discriptors */
|
||||||
|
/* */
|
||||||
|
-/* fdcount (IN/OUT) number of file descriptors marked in fd_sets */
|
||||||
|
+/* fdcount (IN/OUT) number of file descriptors marked in fdset */
|
||||||
|
/* */
|
||||||
|
-/* readfds (IN) file descriptors with pending read IO */
|
||||||
|
-/* */
|
||||||
|
-/* writefds (IN) file descriptors with pending read IO */
|
||||||
|
+/* fdset (IN) file descriptors with pending read/write IO */
|
||||||
|
/*=========================================================================*/
|
||||||
|
{
|
||||||
|
SLPDSocket* sock;
|
||||||
|
sock = (SLPDSocket*) G_IncomingSocketList.head;
|
||||||
|
while (sock && *fdcount)
|
||||||
|
{
|
||||||
|
- if (FD_ISSET(sock->fd,readfds))
|
||||||
|
+ if (SLPD_fdset_readok(fdset, sock))
|
||||||
|
{
|
||||||
|
switch (sock->state)
|
||||||
|
{
|
||||||
|
@@ -354,7 +351,7 @@ void SLPDIncomingHandler(int* fdcount,
|
||||||
|
|
||||||
|
*fdcount = *fdcount - 1;
|
||||||
|
}
|
||||||
|
- else if (FD_ISSET(sock->fd,writefds))
|
||||||
|
+ else if (SLPD_fdset_writeok(fdset, sock))
|
||||||
|
{
|
||||||
|
switch (sock->state)
|
||||||
|
{
|
||||||
|
--- ./slpd/slpd_incoming.h.orig 2005-08-22 17:24:56.818079360 +0000
|
||||||
|
+++ ./slpd/slpd_incoming.h 2005-08-22 17:25:15.758391955 +0000
|
||||||
|
@@ -57,6 +57,7 @@
|
||||||
|
/* common code includes */
|
||||||
|
/*=========================================================================*/
|
||||||
|
#include "slp_linkedlist.h"
|
||||||
|
+#include "slpd_socket.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================*/
|
||||||
|
@@ -74,16 +75,13 @@ void SLPDIncomingAge(time_t seconds);
|
||||||
|
|
||||||
|
/*=========================================================================*/
|
||||||
|
void SLPDIncomingHandler(int* fdcount,
|
||||||
|
- fd_set* readfds,
|
||||||
|
- fd_set* writefds);
|
||||||
|
+ SLPD_fdset *fdset);
|
||||||
|
/* Handles all outgoing requests that are pending on the specified file */
|
||||||
|
/* discriptors */
|
||||||
|
/* */
|
||||||
|
-/* fdcount (IN/OUT) number of file descriptors marked in fd_sets */
|
||||||
|
+/* fdcount (IN/OUT) number of file descriptors marked in fdset */
|
||||||
|
/* */
|
||||||
|
-/* readfds (IN) file descriptors with pending read IO */
|
||||||
|
-/* */
|
||||||
|
-/* writefds (IN) file descriptors with pending read IO */
|
||||||
|
+/* fdset (IN) file descriptors with pending read/write IO */
|
||||||
|
/*=========================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
--- ./slpd/slpd_main.c.orig 2005-08-22 17:29:17.587046733 +0000
|
||||||
|
+++ ./slpd/slpd_main.c 2005-08-22 17:28:13.043216959 +0000
|
||||||
|
@@ -82,12 +82,11 @@ int G_SIGINT; /* Signal being used for
|
||||||
|
#endif
|
||||||
|
/*==========================================================================*/
|
||||||
|
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*/
|
||||||
|
-void LoadFdSets(SLPList* socklist,
|
||||||
|
- int* highfd,
|
||||||
|
- fd_set* readfds,
|
||||||
|
- fd_set* writefds)
|
||||||
|
+void LoadFdSets(SLPList* socklist,
|
||||||
|
+ SLPD_fdset *fdset)
|
||||||
|
/*-------------------------------------------------------------------------*/
|
||||||
|
{
|
||||||
|
SLPDSocket* sock = 0;
|
||||||
|
@@ -96,9 +95,87 @@ void LoadFdSets(SLPList* socklist,
|
||||||
|
sock = (SLPDSocket*)socklist->head;
|
||||||
|
while(sock)
|
||||||
|
{
|
||||||
|
- if(sock->fd > *highfd)
|
||||||
|
+ if (fdset->used == fdset->allocated) {
|
||||||
|
+ fdset->allocated += 32;
|
||||||
|
+ if (fdset->used)
|
||||||
|
+ fdset->fds = xrealloc(fdset->fds, fdset->allocated * sizeof(*fdset->fds));
|
||||||
|
+ else
|
||||||
|
+ fdset->fds = xmalloc(fdset->allocated * sizeof(*fdset->fds));
|
||||||
|
+ if (!fdset->fds)
|
||||||
|
+ SLPDFatal("No memory for fdset.\n");
|
||||||
|
+ }
|
||||||
|
+ fdset->fds[fdset->used].fd = sock->fd;
|
||||||
|
+ fdset->fds[fdset->used].events = 0;
|
||||||
|
+ fdset->fds[fdset->used].revents = 0;
|
||||||
|
+ switch(sock->state)
|
||||||
|
+ {
|
||||||
|
+ case DATAGRAM_UNICAST:
|
||||||
|
+ case DATAGRAM_MULTICAST:
|
||||||
|
+ case DATAGRAM_BROADCAST:
|
||||||
|
+ fdset->fds[fdset->used].events |= POLLIN;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case SOCKET_LISTEN:
|
||||||
|
+ if(socklist->count < SLPD_MAX_SOCKETS)
|
||||||
|
+ {
|
||||||
|
+ fdset->fds[fdset->used].events |= POLLIN;
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case STREAM_READ:
|
||||||
|
+ case STREAM_READ_FIRST:
|
||||||
|
+ fdset->fds[fdset->used].events |= POLLIN;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case STREAM_WRITE:
|
||||||
|
+ case STREAM_WRITE_FIRST:
|
||||||
|
+ case STREAM_CONNECT_BLOCK:
|
||||||
|
+ fdset->fds[fdset->used].events |= POLLOUT;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case SOCKET_CLOSE:
|
||||||
|
+ del = sock;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ default:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (fdset->fds[fdset->used].events)
|
||||||
|
{
|
||||||
|
- *highfd = sock->fd;
|
||||||
|
+ sock->fdsetnr = fdset->used++;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ sock->fdsetnr = -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ sock = (SLPDSocket*)sock->listitem.next;
|
||||||
|
+
|
||||||
|
+ if(del)
|
||||||
|
+ {
|
||||||
|
+ SLPDSocketFree((SLPDSocket*)SLPListUnlink(socklist,(SLPListItem*)del));
|
||||||
|
+ del = 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#else
|
||||||
|
+
|
||||||
|
+/*-------------------------------------------------------------------------*/
|
||||||
|
+void LoadFdSets(SLPList* socklist,
|
||||||
|
+ SLPD_fdset *fdset)
|
||||||
|
+/*-------------------------------------------------------------------------*/
|
||||||
|
+{
|
||||||
|
+ SLPDSocket* sock = 0;
|
||||||
|
+ SLPDSocket* del = 0;
|
||||||
|
+
|
||||||
|
+ sock = (SLPDSocket*)socklist->head;
|
||||||
|
+ while(sock)
|
||||||
|
+ {
|
||||||
|
+ if(sock->fd > fdset->highfd)
|
||||||
|
+ {
|
||||||
|
+ fdset->highfd = sock->fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(sock->state)
|
||||||
|
@@ -106,25 +183,25 @@ void LoadFdSets(SLPList* socklist,
|
||||||
|
case DATAGRAM_UNICAST:
|
||||||
|
case DATAGRAM_MULTICAST:
|
||||||
|
case DATAGRAM_BROADCAST:
|
||||||
|
- FD_SET(sock->fd,readfds);
|
||||||
|
+ FD_SET(sock->fd,&fdset->readfds);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SOCKET_LISTEN:
|
||||||
|
if(socklist->count < SLPD_MAX_SOCKETS)
|
||||||
|
{
|
||||||
|
- FD_SET(sock->fd,readfds);
|
||||||
|
+ FD_SET(sock->fd,&fdset->readfds);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STREAM_READ:
|
||||||
|
case STREAM_READ_FIRST:
|
||||||
|
- FD_SET(sock->fd,readfds);
|
||||||
|
+ FD_SET(sock->fd,&fdset->readfds);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STREAM_WRITE:
|
||||||
|
case STREAM_WRITE_FIRST:
|
||||||
|
case STREAM_CONNECT_BLOCK:
|
||||||
|
- FD_SET(sock->fd,writefds);
|
||||||
|
+ FD_SET(sock->fd,&fdset->writefds);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SOCKET_CLOSE:
|
||||||
|
@@ -145,17 +222,18 @@ void LoadFdSets(SLPList* socklist,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
void HandleSigTerm()
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
{
|
||||||
|
struct timeval timeout;
|
||||||
|
- fd_set readfds;
|
||||||
|
- fd_set writefds;
|
||||||
|
- int highfd = 0;
|
||||||
|
+ SLPD_fdset fdset;
|
||||||
|
int fdcount = 0;
|
||||||
|
|
||||||
|
+ SLPD_fdset_init(&fdset);
|
||||||
|
SLPDLog("****************************************\n");
|
||||||
|
SLPDLogTime();
|
||||||
|
SLPDLog("SLPD daemon shutting down\n");
|
||||||
|
@@ -179,16 +257,19 @@ void HandleSigTerm()
|
||||||
|
/* if possible wait until all outgoing socket are done and closed */
|
||||||
|
while(SLPDOutgoingDeinit(1))
|
||||||
|
{
|
||||||
|
- FD_ZERO(&writefds);
|
||||||
|
- FD_ZERO(&readfds);
|
||||||
|
- LoadFdSets(&G_OutgoingSocketList, &highfd, &readfds,&writefds);
|
||||||
|
- fdcount = select(highfd+1,&readfds,&writefds,0,&timeout);
|
||||||
|
+ SLPD_fdset_reset(&fdset);
|
||||||
|
+ LoadFdSets(&G_OutgoingSocketList, &fdset);
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ fdcount = poll(fdset.fds, fdset.used, timeout.tv_sec * 1000 + timeout.tv_usec / 1000);
|
||||||
|
+#else
|
||||||
|
+ fdcount = select(fdset.highfd+1,&fdset.readfds,&fdset.writefds,0,&timeout);
|
||||||
|
+#endif
|
||||||
|
if(fdcount == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
- SLPDOutgoingHandler(&fdcount,&readfds,&writefds);
|
||||||
|
+ SLPDOutgoingHandler(&fdcount,&fdset);
|
||||||
|
}
|
||||||
|
|
||||||
|
SLPDOutgoingDeinit(0);
|
||||||
|
@@ -491,11 +572,10 @@ int SetUpSignalHandlers()
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
/*=========================================================================*/
|
||||||
|
{
|
||||||
|
- fd_set readfds;
|
||||||
|
- fd_set writefds;
|
||||||
|
- int highfd;
|
||||||
|
+ SLPD_fdset fdset;
|
||||||
|
int fdcount = 0;
|
||||||
|
|
||||||
|
+ SLPD_fdset_init(&fdset);
|
||||||
|
reg_file_dir = strdup("/etc/slp.reg.d");
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
@@ -616,14 +696,12 @@ int main(int argc, char* argv[])
|
||||||
|
/*--------------------------------------------------------*/
|
||||||
|
/* Load the fdsets up with all valid sockets in the list */
|
||||||
|
/*--------------------------------------------------------*/
|
||||||
|
- highfd = 0;
|
||||||
|
- FD_ZERO(&readfds);
|
||||||
|
- FD_ZERO(&writefds);
|
||||||
|
- LoadFdSets(&G_IncomingSocketList, &highfd, &readfds,&writefds);
|
||||||
|
- LoadFdSets(&G_OutgoingSocketList, &highfd, &readfds,&writefds);
|
||||||
|
+ SLPD_fdset_reset(&fdset);
|
||||||
|
+ LoadFdSets(&G_IncomingSocketList, &fdset);
|
||||||
|
+ LoadFdSets(&G_OutgoingSocketList, &fdset);
|
||||||
|
|
||||||
|
#ifdef ENABLE_MDNS_SLPD
|
||||||
|
- LoadFdSets(&G_MDNSSocketList, &highfd, &readfds,&writefds);
|
||||||
|
+ LoadFdSets(&G_MDNSSocketList, &fdset);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------------------------------------*/
|
||||||
|
@@ -637,14 +715,18 @@ int main(int argc, char* argv[])
|
||||||
|
/*-------------*/
|
||||||
|
/* Main select */
|
||||||
|
/*-------------*/
|
||||||
|
- fdcount = select(highfd+1,&readfds,&writefds,0,0);
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ fdcount = poll(fdset.fds, fdset.used, -1);
|
||||||
|
+#else
|
||||||
|
+ fdcount = select(fdset.highfd+1,&fdset.readfds,&fdset.writefds,0,0);
|
||||||
|
+#endif
|
||||||
|
if(fdcount > 0) /* fdcount will be < 0 when interrupted by a signal */
|
||||||
|
{
|
||||||
|
- SLPDIncomingHandler(&fdcount,&readfds,&writefds);
|
||||||
|
- SLPDOutgoingHandler(&fdcount,&readfds,&writefds);
|
||||||
|
+ SLPDIncomingHandler(&fdcount,&fdset);
|
||||||
|
+ SLPDOutgoingHandler(&fdcount,&fdset);
|
||||||
|
|
||||||
|
#ifdef ENABLE_MDNS_SLPD
|
||||||
|
- SLPDMDNSHandler(&fdcount,&readfds,&writefds);
|
||||||
|
+ SLPDMDNSHandler(&fdcount,&fdset);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
--- ./slpd/slpd_mdns.c.orig 2005-08-22 17:24:56.821078934 +0000
|
||||||
|
+++ ./slpd/slpd_mdns.c 2005-08-22 17:25:15.761391529 +0000
|
||||||
|
@@ -207,23 +207,20 @@ int SLPDMDNSDeinit()
|
||||||
|
|
||||||
|
/*=========================================================================*/
|
||||||
|
void SLPDMDNSHandler(int* fdcount,
|
||||||
|
- fd_set* readfds,
|
||||||
|
- fd_set* writefds)
|
||||||
|
+ SLPD_fdset* fdset)
|
||||||
|
/* Handles all outgoing requests that are pending on the specified file */
|
||||||
|
/* discriptors */
|
||||||
|
/* */
|
||||||
|
-/* fdcount (IN/OUT) number of file descriptors marked in fd_sets */
|
||||||
|
+/* fdcount (IN/OUT) number of file descriptors marked in fdset */
|
||||||
|
/* */
|
||||||
|
-/* readfds (IN) file descriptors with pending read IO */
|
||||||
|
-/* */
|
||||||
|
-/* writefds (IN) file descriptors with pending read IO */
|
||||||
|
+/* fdset (IN) file descriptors with pending read/write IO */
|
||||||
|
/*=========================================================================*/
|
||||||
|
{
|
||||||
|
SLPDSocket* sock;
|
||||||
|
sock = (SLPDSocket*) G_MDNSSocketList.head;
|
||||||
|
while (sock && *fdcount)
|
||||||
|
{
|
||||||
|
- if (FD_ISSET(sock->fd,readfds))
|
||||||
|
+ if (SLPD_fdset_readok(fdset, sock))
|
||||||
|
{
|
||||||
|
switch (sock->state)
|
||||||
|
{
|
||||||
|
--- ./slpd/slpd_mdns.h.orig 2005-08-22 17:24:56.821078934 +0000
|
||||||
|
+++ ./slpd/slpd_mdns.h 2005-08-22 17:25:15.761391529 +0000
|
||||||
|
@@ -8,6 +8,7 @@
|
||||||
|
/*=========================================================================*/
|
||||||
|
#include "slp_linkedlist.h"
|
||||||
|
#include "slp_mdns.h"
|
||||||
|
+#include "slpd_socket.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================*/
|
||||||
|
@@ -17,16 +18,13 @@ extern SLPList G_MDNSSocketList;
|
||||||
|
|
||||||
|
/*=========================================================================*/
|
||||||
|
void SLPDMDNSHandler(int* fdcount,
|
||||||
|
- fd_set* readfds,
|
||||||
|
- fd_set* writefds);
|
||||||
|
+ SLPD_fdset* fdset);
|
||||||
|
/* Handles all outgoing requests that are pending on the specified file */
|
||||||
|
/* discriptors */
|
||||||
|
/* */
|
||||||
|
-/* fdcount (IN/OUT) number of file descriptors marked in fd_sets */
|
||||||
|
+/* fdcount (IN/OUT) number of file descriptors marked in fdset */
|
||||||
|
/* */
|
||||||
|
-/* readfds (IN) file descriptors with pending read IO */
|
||||||
|
-/* */
|
||||||
|
-/* writefds (IN) file descriptors with pending read IO */
|
||||||
|
+/* fdset (IN) file descriptors with pending read/write IO */
|
||||||
|
/*=========================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
--- ./slpd/slpd_outgoing.c.orig 2005-08-22 17:24:56.822078792 +0000
|
||||||
|
+++ ./slpd/slpd_outgoing.c 2005-08-22 17:25:15.762391388 +0000
|
||||||
|
@@ -451,24 +451,21 @@ void SLPDOutgoingDatagramWrite(SLPDSocke
|
||||||
|
|
||||||
|
/*=========================================================================*/
|
||||||
|
void SLPDOutgoingHandler(int* fdcount,
|
||||||
|
- fd_set* readfds,
|
||||||
|
- fd_set* writefds)
|
||||||
|
+ SLPD_fdset* fdset)
|
||||||
|
|
||||||
|
/* Handles all outgoing requests that are pending on the specified file */
|
||||||
|
/* discriptors */
|
||||||
|
/* */
|
||||||
|
-/* fdcount (IN/OUT) number of file descriptors marked in fd_sets */
|
||||||
|
+/* fdcount (IN/OUT) number of file descriptors marked in fdset */
|
||||||
|
/* */
|
||||||
|
-/* readfds (IN) file descriptors with pending read IO */
|
||||||
|
-/* */
|
||||||
|
-/* writefds (IN) file descriptors with pending read IO */
|
||||||
|
+/* fdset (IN) file descriptors with pending read/write IO */
|
||||||
|
/*=========================================================================*/
|
||||||
|
{
|
||||||
|
SLPDSocket* sock;
|
||||||
|
sock = (SLPDSocket*)G_OutgoingSocketList.head;
|
||||||
|
while ( sock && *fdcount )
|
||||||
|
{
|
||||||
|
- if ( FD_ISSET(sock->fd,readfds) )
|
||||||
|
+ if (SLPD_fdset_readok(fdset, sock))
|
||||||
|
{
|
||||||
|
switch ( sock->state )
|
||||||
|
{
|
||||||
|
@@ -490,7 +487,7 @@ void SLPDOutgoingHandler(int* fdcount,
|
||||||
|
|
||||||
|
*fdcount = *fdcount - 1;
|
||||||
|
}
|
||||||
|
- else if ( FD_ISSET(sock->fd,writefds) )
|
||||||
|
+ else if (SLPD_fdset_writeok(fdset, sock))
|
||||||
|
{
|
||||||
|
switch ( sock->state )
|
||||||
|
{
|
||||||
|
--- ./slpd/slpd_outgoing.h.orig 2005-08-22 17:24:56.823078650 +0000
|
||||||
|
+++ ./slpd/slpd_outgoing.h 2005-08-22 17:25:15.763391246 +0000
|
||||||
|
@@ -74,17 +74,14 @@ void SLPDOutgoingAge(time_t seconds);
|
||||||
|
|
||||||
|
/*=========================================================================*/
|
||||||
|
void SLPDOutgoingHandler(int* fdcount,
|
||||||
|
- fd_set* readfds,
|
||||||
|
- fd_set* writefds);
|
||||||
|
+ SLPD_fdset* fdset);
|
||||||
|
|
||||||
|
/* Handles all incoming requests that are pending on the specified file */
|
||||||
|
/* discriptors */
|
||||||
|
/* */
|
||||||
|
-/* fdcount (IN/OUT) number of file descriptors marked in fd_sets */
|
||||||
|
+/* fdcount (IN/OUT) number of file descriptors marked in fdset */
|
||||||
|
/* */
|
||||||
|
-/* readfds (IN) file descriptors with pending read IO */
|
||||||
|
-/* */
|
||||||
|
-/* writefds (IN) file descriptors with pending read IO */
|
||||||
|
+/* fdset (IN) file descriptors with pending read/write IO */
|
||||||
|
/*=========================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
--- ./slpd/slpd_socket.h.orig 2005-08-22 17:24:56.823078650 +0000
|
||||||
|
+++ ./slpd/slpd_socket.h 2005-08-22 17:25:15.763391246 +0000
|
||||||
|
@@ -107,8 +107,50 @@ typedef struct _SLPDSocket
|
||||||
|
/* Outgoing socket stuff */
|
||||||
|
int reconns;
|
||||||
|
SLPList sendlist;
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ int fdsetnr;
|
||||||
|
+#endif
|
||||||
|
}SLPDSocket;
|
||||||
|
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+
|
||||||
|
+#include <sys/poll.h>
|
||||||
|
+
|
||||||
|
+typedef struct _SLPD_fdset {
|
||||||
|
+ struct pollfd *fds;
|
||||||
|
+ int used;
|
||||||
|
+ int allocated;
|
||||||
|
+} SLPD_fdset;
|
||||||
|
+
|
||||||
|
+/* the following code supports only one fdset at a time */
|
||||||
|
+
|
||||||
|
+#define SLPD_fdset_readok(fdset, sock) ((sock)->fdsetnr != -1 && (sock)->fdsetnr < (fdset)->used && (fdset)->fds[(sock)->fdsetnr].fd == (sock)->fd ? ((fdset)->fds[(sock)->fdsetnr].revents & ((fdset)->fds[(sock)->fdsetnr].events & POLLIN ? (POLLIN|POLLERR|POLLHUP) : POLLIN)) != 0 : 0)
|
||||||
|
+#define SLPD_fdset_writeok(fdset, sock) ((sock)->fdsetnr != -1 && (sock)->fdsetnr < (fdset)->used && (fdset)->fds[(sock)->fdsetnr].fd == (sock)->fd ? ((fdset)->fds[(sock)->fdsetnr].revents & ((fdset)->fds[(sock)->fdsetnr].events & POLLOUT ? (POLLOUT|POLLERR|POLLHUP) : POLLOUT)) != 0 : 0)
|
||||||
|
+
|
||||||
|
+#define SLPD_fdset_reset(fdset) ((fdset)->used = 0)
|
||||||
|
+#define SLPD_fdset_init(fdset) ((fdset)->used = (fdset)->allocated = 0, (fdset)->fds = 0)
|
||||||
|
+#define SLPD_fdset_free(fdset) ((fdset)->allocated && xfree((fdset)->fds), SLPD_fdset_init(fdset))
|
||||||
|
+
|
||||||
|
+#else
|
||||||
|
+
|
||||||
|
+typedef struct _SLPD_fdset {
|
||||||
|
+ fd_set readfds;
|
||||||
|
+ fd_set writefds;
|
||||||
|
+ int highfd;
|
||||||
|
+} SLPD_fdset;
|
||||||
|
+
|
||||||
|
+#define SLPD_fdset_readok(fdset, sock) (FD_ISSET((sock)->fd, &(fdset)->readfds))
|
||||||
|
+#define SLPD_fdset_writeok(fdset, sock) (FD_ISSET((sock)->fd, &(fdset)->writefds))
|
||||||
|
+
|
||||||
|
+#define SLPD_fdset_reset(fdset) do { \
|
||||||
|
+ FD_ZERO(&(fdset)->readfds); \
|
||||||
|
+ FD_ZERO(&(fdset)->writefds); \
|
||||||
|
+ (fdset)->highfd = 0; \
|
||||||
|
+ } while(0)
|
||||||
|
+#define SLPD_fdset_init(fdset)
|
||||||
|
+#define SLPD_fdset_free(fdset)
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/*==========================================================================*/
|
||||||
|
SLPDSocket* SLPDSocketCreateConnected(struct in_addr* addr);
|
||||||
|
--- ./slpd/slpd_win32.c.orig 2005-08-22 17:24:56.824078508 +0000
|
||||||
|
+++ ./slpd/slpd_win32.c 2005-08-22 17:25:15.764391104 +0000
|
||||||
|
@@ -81,9 +81,7 @@ extern int G_SIGTERM;
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*/
|
||||||
|
void LoadFdSets(SLPList* socklist,
|
||||||
|
- int* highfd,
|
||||||
|
- fd_set* readfds,
|
||||||
|
- fd_set* writefds);
|
||||||
|
+ SLPD_fdset *fdset);
|
||||||
|
/* see slpd_main.c */
|
||||||
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@@ -221,16 +219,18 @@ void ServiceStop()
|
||||||
|
void ServiceStart (int argc, char **argv)
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
{
|
||||||
|
- fd_set readfds;
|
||||||
|
- fd_set writefds;
|
||||||
|
- int highfd;
|
||||||
|
+ SLPD_fdset fdset;
|
||||||
|
int fdcount = 0;
|
||||||
|
time_t curtime;
|
||||||
|
time_t alarmtime;
|
||||||
|
+#ifndef HAVE_POLL
|
||||||
|
struct timeval timeout;
|
||||||
|
+#endif
|
||||||
|
WSADATA wsaData;
|
||||||
|
WORD wVersionRequested = MAKEWORD(1,1);
|
||||||
|
|
||||||
|
+ SLPD_fdset_init(&fdset);
|
||||||
|
+
|
||||||
|
/*------------------------*/
|
||||||
|
/* Service initialization */
|
||||||
|
/*------------------------*/
|
||||||
|
@@ -335,11 +335,9 @@ void ServiceStart (int argc, char **argv
|
||||||
|
/*--------------------------------------------------------*/
|
||||||
|
/* Load the fdsets up with all valid sockets in the list */
|
||||||
|
/*--------------------------------------------------------*/
|
||||||
|
- highfd = 0;
|
||||||
|
- FD_ZERO(&readfds);
|
||||||
|
- FD_ZERO(&writefds);
|
||||||
|
- LoadFdSets(&G_IncomingSocketList, &highfd, &readfds,&writefds);
|
||||||
|
- LoadFdSets(&G_OutgoingSocketList, &highfd, &readfds,&writefds);
|
||||||
|
+ SLPD_fdset_reset(&fdset);
|
||||||
|
+ LoadFdSets(&G_IncomingSocketList, &fdset);
|
||||||
|
+ LoadFdSets(&G_OutgoingSocketList, &fdset);
|
||||||
|
|
||||||
|
/*--------------------------------------------------*/
|
||||||
|
/* Before select(), check to see if we got a signal */
|
||||||
|
@@ -352,13 +350,17 @@ void ServiceStart (int argc, char **argv
|
||||||
|
/*-------------*/
|
||||||
|
/* Main select */
|
||||||
|
/*-------------*/
|
||||||
|
+#ifdef HAVE_POLL
|
||||||
|
+ fdcount = poll(fdset.fds, fdset.used, SLPD_AGE_INTERVAL * 1000);
|
||||||
|
+#else
|
||||||
|
timeout.tv_sec = SLPD_AGE_INTERVAL;
|
||||||
|
timeout.tv_usec = 0;
|
||||||
|
- fdcount = select(highfd+1,&readfds,&writefds,0,&timeout);
|
||||||
|
+ fdcount = select(fdset.highfd+1,&fdset.readfds,&fdset.writefds,0,&timeout);
|
||||||
|
+#endif
|
||||||
|
if(fdcount > 0) /* fdcount will be < 0 when timed out */
|
||||||
|
{
|
||||||
|
- SLPDIncomingHandler(&fdcount,&readfds,&writefds);
|
||||||
|
- SLPDOutgoingHandler(&fdcount,&readfds,&writefds);
|
||||||
|
+ SLPDIncomingHandler(&fdcount,&fdset);
|
||||||
|
+ SLPDOutgoingHandler(&fdcount,&fdset);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------*/
|
385
openslp.spec
Normal file
385
openslp.spec
Normal file
@ -0,0 +1,385 @@
|
|||||||
|
#
|
||||||
|
# spec file for package openslp (Version 1.2.0)
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
|
# This file and all modifications and additions to the pristine
|
||||||
|
# package are under the same license as the package itself.
|
||||||
|
#
|
||||||
|
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
||||||
|
#
|
||||||
|
|
||||||
|
# norootforbuild
|
||||||
|
|
||||||
|
Name: openslp
|
||||||
|
BuildRequires: openssl-devel
|
||||||
|
Summary: An OpenSLP Implementation of Service Location Protocol V2
|
||||||
|
Version: 1.2.0
|
||||||
|
Release: 43
|
||||||
|
License: BSD License and BSD-like, Other License(s), see package
|
||||||
|
Group: System/Daemons
|
||||||
|
URL: http://www.openslp.org/
|
||||||
|
PreReq: %fillup_prereq %insserv_prereq
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
Source0: %name-%version.tar.bz2
|
||||||
|
Source1: slpd.init
|
||||||
|
Source2: README.SuSE
|
||||||
|
Source3: openslp.desktop
|
||||||
|
Source4: openslp-devel.desktop
|
||||||
|
Source5: openslp.logrotate
|
||||||
|
Patch1: openslp.diff
|
||||||
|
Patch2: openslp.audit.diff
|
||||||
|
Patch3: extensions.diff
|
||||||
|
Patch4: slptool-timeout.diff
|
||||||
|
Patch5: hppa.diff
|
||||||
|
Patch6: v1dadiscovery.diff
|
||||||
|
Patch7: openslp.poll.diff
|
||||||
|
Patch8: openslp.v1sladdr.diff
|
||||||
|
Patch9: openslp.tcpclearovr.diff
|
||||||
|
Patch10: openslp.checkovr.diff
|
||||||
|
Patch11: openslp.truncate.diff
|
||||||
|
Patch12: openslp.emptyanswer.diff
|
||||||
|
Patch13: openslp.doubleequal.diff
|
||||||
|
|
||||||
|
%description
|
||||||
|
Service Location Protocol is an IETF standards track protocol that
|
||||||
|
provides a framework that allows networking applications to discover
|
||||||
|
the existence, location, and configuration of networked services in
|
||||||
|
enterprise networks.
|
||||||
|
|
||||||
|
OpenSLP is an open source implementation of the SLPv2 protocol as
|
||||||
|
defined by RFC 2608 and RFC 2614. This package includes the slptool
|
||||||
|
and runtime libraries.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Matthew Peterson <mpeterson@calderasystems.com>
|
||||||
|
Ganesan Rajagopal <rganesan@myrealbox.com>
|
||||||
|
David McCormack <david.mccormack@ottawa.com>
|
||||||
|
Evan Hughes <hughes@lab43.org>
|
||||||
|
Matthieu Desmons <mdes@ocegr.fr>
|
||||||
|
Praveen Kumar Amritaluru <praveen@india.hp.com>
|
||||||
|
|
||||||
|
%package server
|
||||||
|
Group: System/Daemons
|
||||||
|
Summary: The OpenSLP Implementation of the Service Location Protocol V2
|
||||||
|
|
||||||
|
%description server
|
||||||
|
Service Location Protocol is an IETF standards track protocol that
|
||||||
|
provides a framework that allows networking applications to discover
|
||||||
|
the existence, location, and configuration of networked services in
|
||||||
|
enterprise networks.
|
||||||
|
|
||||||
|
This package contains the SLP server. Every system, which provides any
|
||||||
|
services that should be used via an SLP client must run this server and
|
||||||
|
register the service.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Matthew Peterson <mpeterson@calderasystems.com>
|
||||||
|
Ganesan Rajagopal <rganesan@myrealbox.com>
|
||||||
|
David McCormack <david.mccormack@ottawa.com>
|
||||||
|
Evan Hughes <hughes@lab43.org>
|
||||||
|
Matthieu Desmons <mdes@ocegr.fr>
|
||||||
|
Praveen Kumar Amritaluru <praveen@india.hp.com>
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Requires: openssl-devel openslp = %version
|
||||||
|
Group: System/Daemons
|
||||||
|
Summary: OpenSLP Development SDK
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
Service Location Protocol is an IETF standards track protocol that
|
||||||
|
provides a framework that allows networking applications to discover
|
||||||
|
the existence, location, and configuration of networked services in
|
||||||
|
enterprise networks.
|
||||||
|
|
||||||
|
This package contains header and library files to compile applications
|
||||||
|
with SLP support. It also contains developer documentation to develop
|
||||||
|
such applications.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Matthew Peterson <mpeterson@calderasystems.com>
|
||||||
|
Ganesan Rajagopal <rganesan@myrealbox.com>
|
||||||
|
David McCormack <david.mccormack@ottawa.com>
|
||||||
|
Evan Hughes <hughes@lab43.org>
|
||||||
|
Matthieu Desmons <mdes@ocegr.fr>
|
||||||
|
Praveen Kumar Amritaluru <praveen@india.hp.com>
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
%patch1
|
||||||
|
%patch2
|
||||||
|
%patch3
|
||||||
|
%patch4
|
||||||
|
%ifarch hppa
|
||||||
|
%patch5
|
||||||
|
%endif
|
||||||
|
%patch6
|
||||||
|
%patch7
|
||||||
|
%patch8
|
||||||
|
%patch9
|
||||||
|
%patch10
|
||||||
|
%patch11
|
||||||
|
%patch12
|
||||||
|
%patch13
|
||||||
|
autoreconf --force --install
|
||||||
|
|
||||||
|
%build
|
||||||
|
export CFLAGS="$RPM_OPT_FLAGS -fstack-protector"
|
||||||
|
./configure \
|
||||||
|
--prefix=/usr \
|
||||||
|
--libdir=%_libdir \
|
||||||
|
--sysconfdir=%_sysconfdir \
|
||||||
|
--enable-slpv1 \
|
||||||
|
--enable-async-api \
|
||||||
|
--enable-slpv2-security
|
||||||
|
make
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf ${RPM_BUILD_ROOT}
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}/etc/slp.reg.d
|
||||||
|
cp etc/slp.conf ${RPM_BUILD_ROOT}/etc
|
||||||
|
cp etc/slp.reg ${RPM_BUILD_ROOT}/etc
|
||||||
|
cp etc/slp.spi ${RPM_BUILD_ROOT}/etc
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}/%_libdir
|
||||||
|
libtool install libslp/libslp.la ${RPM_BUILD_ROOT}/%_libdir
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}/usr/sbin
|
||||||
|
libtool install slpd/slpd ${RPM_BUILD_ROOT}/usr/sbin
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}/usr/bin
|
||||||
|
libtool install slptool/slptool ${RPM_BUILD_ROOT}/usr/bin
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}/usr/include
|
||||||
|
cp libslp/slp.h ${RPM_BUILD_ROOT}/usr/include
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}%_defaultdocdir/%name
|
||||||
|
find . -name CVS -o -name .cvsignore -o -name .xvpics | xargs rm -rf
|
||||||
|
cp -a AUTHORS COPYING README FAQ doc/rfc doc/html %SOURCE2 \
|
||||||
|
${RPM_BUILD_ROOT}%_defaultdocdir/%name
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}/etc/init.d/
|
||||||
|
install -m 755 %{SOURCE1} ${RPM_BUILD_ROOT}/etc/init.d/slpd
|
||||||
|
ln -sf ../../etc/init.d/slpd ${RPM_BUILD_ROOT}/usr/sbin/rcslpd
|
||||||
|
ln -sf ../../etc/init.d/slpd ${RPM_BUILD_ROOT}/usr/sbin/rcopenslp
|
||||||
|
install -D -m 0644 %{SOURCE5} ${RPM_BUILD_ROOT}/etc/logrotate.d/openslp-server
|
||||||
|
# install susehelp file
|
||||||
|
mkdir -p $RPM_BUILD_ROOT/usr/share/susehelp/meta/Administration/
|
||||||
|
install -m 0644 %SOURCE3 \
|
||||||
|
$RPM_BUILD_ROOT/usr/share/susehelp/meta/Administration/
|
||||||
|
mkdir -p $RPM_BUILD_ROOT/usr/share/susehelp/meta/Development/Libraries/
|
||||||
|
install -m 0644 %SOURCE4 \
|
||||||
|
$RPM_BUILD_ROOT/usr/share/susehelp/meta/Development/Libraries/
|
||||||
|
%if 0
|
||||||
|
# actually, these files should get translated, but do we really want to
|
||||||
|
# add update-desktop-files to needed_for_build ?
|
||||||
|
%suse_update_desktop_file $RPM_BUILD_ROOT/usr/share/susehelp/meta/Administration/openslp.desktop
|
||||||
|
%suse_update_desktop_file $RPM_BUILD_ROOT/usr/share/susehelp/meta/Development/Libraries/openslp-devel.desktop
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%post
|
||||||
|
%run_ldconfig
|
||||||
|
|
||||||
|
%postun
|
||||||
|
%run_ldconfig
|
||||||
|
|
||||||
|
%post server
|
||||||
|
%if %sles_version > 0
|
||||||
|
%{fillup_and_insserv -y slpd}
|
||||||
|
%else
|
||||||
|
%{fillup_and_insserv slpd}
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%postun server
|
||||||
|
%restart_on_update slpd
|
||||||
|
%insserv_cleanup
|
||||||
|
|
||||||
|
%preun server
|
||||||
|
%stop_on_removal slpd
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%dir %_defaultdocdir/%name
|
||||||
|
%dir %_defaultdocdir/%name/html
|
||||||
|
%doc %_defaultdocdir/%name/AUTHORS
|
||||||
|
%doc %_defaultdocdir/%name/COPYING
|
||||||
|
%doc %_defaultdocdir/%name/README
|
||||||
|
%doc %_defaultdocdir/%name/README.SuSE
|
||||||
|
%_libdir/libslp.so.*
|
||||||
|
/usr/bin/slptool
|
||||||
|
%config(noreplace) /etc/slp.conf
|
||||||
|
%config(noreplace) /etc/slp.spi
|
||||||
|
|
||||||
|
%files server
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%dir /usr/share/susehelp
|
||||||
|
%dir /usr/share/susehelp/meta
|
||||||
|
%dir /usr/share/susehelp/meta/Administration
|
||||||
|
%doc %dir %_defaultdocdir/%name/FAQ
|
||||||
|
%doc %_defaultdocdir/%name/html/IntroductionToSLP
|
||||||
|
%doc %_defaultdocdir/%name/html/UsersGuide
|
||||||
|
%doc %_defaultdocdir/%name/html/faq.html
|
||||||
|
%doc %_defaultdocdir/%name/rfc
|
||||||
|
%doc /usr/share/susehelp/meta/Administration/openslp.desktop
|
||||||
|
%dir /etc/slp.reg.d/
|
||||||
|
/usr/sbin/rcopenslp
|
||||||
|
/usr/sbin/rcslpd
|
||||||
|
/usr/sbin/slpd
|
||||||
|
/etc/init.d/slpd
|
||||||
|
%config(noreplace) /etc/slp.reg
|
||||||
|
%config(noreplace) /etc/logrotate.d/openslp-server
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%dir /usr/share/susehelp
|
||||||
|
%dir /usr/share/susehelp/meta
|
||||||
|
%dir /usr/share/susehelp/meta/Development
|
||||||
|
%dir /usr/share/susehelp/meta/Development/Libraries
|
||||||
|
%doc %_defaultdocdir/%name/html/ProgrammersGuide
|
||||||
|
%doc /usr/share/susehelp/meta/Development/Libraries/openslp-devel.desktop
|
||||||
|
/usr/include/slp.h
|
||||||
|
%_libdir/libslp.a
|
||||||
|
%_libdir/libslp.la
|
||||||
|
%_libdir/libslp.so
|
||||||
|
|
||||||
|
%changelog -n openslp
|
||||||
|
* Thu Nov 16 2006 - mls@suse.de
|
||||||
|
- truncate oversized udp messages, finally fixes [#185483]
|
||||||
|
(can be turned of with "net.slp.oversizedUDP" option)
|
||||||
|
- do not try to send back empty answers
|
||||||
|
- add option "net.slp.allowDoubleEqualInPredicate" to make openslp
|
||||||
|
work with some buggy clients that use "==" for comparison [#95043]
|
||||||
|
- changed SLPGetPeer interface to support IPv6
|
||||||
|
* Tue Sep 12 2006 - mls@suse.de
|
||||||
|
- obey OVERFLOW bit of incoming udp messages [#185483]
|
||||||
|
- use right length in send() calls [#185483]
|
||||||
|
- fix errno check in IncomingStreamWrite
|
||||||
|
- add SLPGetPeer method in libslp
|
||||||
|
- add --peerinfo option to slptool to print peerinfo
|
||||||
|
* Wed May 10 2006 - mls@suse.de
|
||||||
|
- fix unaligned memory access on ia64 [#171932]
|
||||||
|
* Fri Mar 24 2006 - mls@suse.de
|
||||||
|
- fix listening on multiple interfaces [#160008]
|
||||||
|
* Sat Mar 18 2006 - schwab@suse.de
|
||||||
|
- Fix file descritor leak [#159303].
|
||||||
|
* Mon Jan 30 2006 - mls@suse.de
|
||||||
|
- fix bug in DropSLPMulticastGroup
|
||||||
|
- add -fstack-protector to CFLAGS
|
||||||
|
- added logrotate script [#143069]
|
||||||
|
* Wed Jan 25 2006 - mls@suse.de
|
||||||
|
- converted neededforbuild to BuildRequires
|
||||||
|
* Fri Dec 23 2005 - mls@suse.de
|
||||||
|
- clear overflow bit on TCP connections [#135248]
|
||||||
|
* Thu Sep 29 2005 - dmueller@suse.de
|
||||||
|
- add norootforbuild
|
||||||
|
* Mon Aug 22 2005 - mls@suse.de
|
||||||
|
- also listen on SLPv1 General Multicast address [#64138]
|
||||||
|
- use poll instead of select [#65673]
|
||||||
|
* Tue Feb 15 2005 - mls@suse.de
|
||||||
|
- update to version 1.2.0
|
||||||
|
- fixed security audit findings
|
||||||
|
- disable mdns in slpd for now, libslp still supports it
|
||||||
|
* Fri Dec 03 2004 - mls@suse.de
|
||||||
|
- fix slpv DA discovery scope handling (#48728)
|
||||||
|
- use _dns-sd instead of _mdns in mdns findsrvtypes query (#48325)
|
||||||
|
* Thu Oct 14 2004 - adrian@suse.de
|
||||||
|
- add meta information for suse help.
|
||||||
|
* Sun Jun 13 2004 - bg@suse.de
|
||||||
|
- reduce hardcoded optimization from -O3 to -O2 to circumvent
|
||||||
|
ICE on hppa
|
||||||
|
* Tue Jun 01 2004 - mls@suse.de
|
||||||
|
- added fillup and insserv prereq
|
||||||
|
* Thu May 27 2004 - mls@suse.de
|
||||||
|
- use /proc/net/tcp_listen and /proc/net/tcp6_listen if
|
||||||
|
available to keep things fast on systems with lots of
|
||||||
|
network connections [#40888]
|
||||||
|
* Wed May 05 2004 - mls@suse.de
|
||||||
|
- treat empty attributes as illegal [#39669]
|
||||||
|
- always start slpd on SLES [#39863]
|
||||||
|
* Fri Apr 23 2004 - mls@suse.de
|
||||||
|
- libslp: use configured TTL settings [#39030]
|
||||||
|
* Fri Apr 02 2004 - mls@suse.de
|
||||||
|
- beta is over, don't always start slpd
|
||||||
|
* Fri Apr 02 2004 - kukuk@suse.de
|
||||||
|
- Fix init script
|
||||||
|
* Wed Mar 31 2004 - mls@suse.de
|
||||||
|
- fix sighup processing
|
||||||
|
- clean up spi code
|
||||||
|
- fix spi null pointer reference
|
||||||
|
- fix namingauth comparison
|
||||||
|
- added try-restart to rcslpd
|
||||||
|
- fix slp.conf re-read
|
||||||
|
- fix prlist buffer overrun
|
||||||
|
* Mon Mar 29 2004 - mls@suse.de
|
||||||
|
- turn around srvtypes order in mdns
|
||||||
|
* Thu Mar 18 2004 - mls@suse.de
|
||||||
|
- code cleanup
|
||||||
|
- provide A RR with SRV RRs
|
||||||
|
- don't pack .xvpics
|
||||||
|
* Fri Mar 12 2004 - mls@suse.de
|
||||||
|
- added missing SLPGetMDNSName prototype to slp.h
|
||||||
|
* Fri Mar 12 2004 - mls@suse.de
|
||||||
|
- slpd: fix hostname detection segfault
|
||||||
|
- slpd: use ttl 255 for mdns
|
||||||
|
- slpd: put attrs in mdns TXT RR
|
||||||
|
- libslp: check mdns ttl
|
||||||
|
- libslp: make getattr work with mdns
|
||||||
|
- libslp: make mdns name available via new SLPGetMDNSName() function
|
||||||
|
* Thu Mar 04 2004 - mls@suse.de
|
||||||
|
- libslp: add scope/nameingauth/predicate to query
|
||||||
|
- slpd: reply to mdns service requests
|
||||||
|
- slpd: don't play DA if our hostname expands to loopback
|
||||||
|
- slpd: fix null pointer reference if SrvReg request is sent
|
||||||
|
over tcp (as done by apple)
|
||||||
|
* Fri Feb 27 2004 - mls@suse.de
|
||||||
|
- slpd: check port status every 15 seconds for watch-port-tcp/udp
|
||||||
|
entries
|
||||||
|
- libslp: send MDNS queries for scope _mdns
|
||||||
|
* Sun Feb 15 2004 - adrian@suse.de
|
||||||
|
- export full qualified hostnames for $HOSTNAME
|
||||||
|
- replace several $HOSTNAME tags in a srvurl
|
||||||
|
- do only accept .reg files (no .rpmsave for instance)
|
||||||
|
* Sat Feb 14 2004 - adrian@suse.de
|
||||||
|
- fix /proc/net/tcp* parsing
|
||||||
|
- ONLY FOR BETA: start slpd always
|
||||||
|
* Thu Jan 29 2004 - adrian@suse.de
|
||||||
|
- fix reading from slpd.reg.d directory
|
||||||
|
(was broken since chroot run)
|
||||||
|
* Wed Jan 14 2004 - adrian@suse.de
|
||||||
|
- slptool register now services with max timeout.
|
||||||
|
* Tue Dec 16 2003 - adrian@suse.de
|
||||||
|
- fix sig11 when using the library without spi file
|
||||||
|
* Mon Dec 08 2003 - adrian@suse.de
|
||||||
|
- security enhancements:
|
||||||
|
* use chroot and open needed file descriptors before
|
||||||
|
* panic if chroot or setuid fails
|
||||||
|
* pid-file= option in reg files is useless now, so
|
||||||
|
tcp-port= must be used for this now
|
||||||
|
- add SSL support again
|
||||||
|
* Wed Nov 26 2003 - adrian@suse.de
|
||||||
|
- add buffer fix from cvs
|
||||||
|
- add README.SuSE with config howto
|
||||||
|
* Thu Nov 20 2003 - adrian@suse.de
|
||||||
|
- drop the multicast route creation in runlevel script.
|
||||||
|
we do not need it anymore with 1.1.5
|
||||||
|
* Wed Nov 19 2003 - adrian@suse.de
|
||||||
|
- update to version 1.1.5
|
||||||
|
* development version, but it contains lots of fixes
|
||||||
|
- use $HOSTNAME instead of $LOCALHOST in reg files
|
||||||
|
* Fri Nov 14 2003 - adrian@suse.de
|
||||||
|
- use correct keyword "X-UnitedLinux-Should-Start" in init script
|
||||||
|
(seen by Martin Vidner)
|
||||||
|
* Thu Nov 13 2003 - adrian@suse.de
|
||||||
|
- add "tcp-port=" option to test services running via (x)inted
|
||||||
|
- start after (x)inetd
|
||||||
|
* Wed Nov 12 2003 - adrian@suse.de
|
||||||
|
- add code to parse .reg files from any package below /etc/slp.reg.d/
|
||||||
|
* Sun Nov 09 2003 - adrian@suse.de
|
||||||
|
- fix security issue in init script
|
||||||
|
* Sat Nov 08 2003 - adrian@suse.de
|
||||||
|
- initial package of version 1.0.11
|
27
openslp.tcpclearovr.diff
Normal file
27
openslp.tcpclearovr.diff
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
--- ./slpd/slpd_incoming.c.orig 2005-12-23 14:13:55.000000000 +0000
|
||||||
|
+++ ./slpd/slpd_incoming.c 2005-12-23 14:42:26.000000000 +0000
|
||||||
|
@@ -63,6 +63,7 @@
|
||||||
|
/*=========================================================================*/
|
||||||
|
#include "slp_xmalloc.h"
|
||||||
|
#include "slp_message.h"
|
||||||
|
+#include "slp_v1message.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================*/
|
||||||
|
@@ -242,6 +243,16 @@ void IncomingStreamRead(SLPList* socklis
|
||||||
|
sock->state = SOCKET_CLOSE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
+ /* some clients cannot cope with the OVERFLOW
|
||||||
|
+ * bit set on a TCP stream, so always clear it
|
||||||
|
+ */
|
||||||
|
+ if (sock->sendbuf && sock->sendbuf->end - sock->sendbuf->start > 5)
|
||||||
|
+ {
|
||||||
|
+ if (sock->sendbuf->start[0] == 1)
|
||||||
|
+ sock->sendbuf->start[4] &= ~SLPv1_FLAG_OVERFLOW;
|
||||||
|
+ else
|
||||||
|
+ sock->sendbuf->start[5] &= ~(SLP_FLAG_OVERFLOW >> 8);
|
||||||
|
+ }
|
||||||
|
sock->state = STREAM_WRITE_FIRST;
|
||||||
|
IncomingStreamWrite(socklist, sock);
|
||||||
|
}
|
188
openslp.truncate.diff
Normal file
188
openslp.truncate.diff
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
--- ./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;
|
||||||
|
|
||||||
|
|
34
openslp.v1sladdr.diff
Normal file
34
openslp.v1sladdr.diff
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
--- ./common/slp_message.h.orig 2005-04-13 17:21:37.000000000 +0000
|
||||||
|
+++ ./common/slp_message.h 2005-04-13 17:22:47.527724927 +0000
|
||||||
|
@@ -93,6 +93,7 @@
|
||||||
|
#define SLP_RESERVED_PORT 427
|
||||||
|
#define SLP_MCAST_ADDRESS 0xeffffffd /* 239.255.255.253 */
|
||||||
|
#define SLP_BCAST_ADDRESS 0xffffffff /* 255.255.255.255 */
|
||||||
|
+#define SLPv1_SL_MCAST_ADDRESS 0xe0000116 /* 224.0.1.22 */
|
||||||
|
#define SLPv1_DA_MCAST_ADDRESS 0xe0000123 /* 224.0.1.35 */
|
||||||
|
#define LOOPBACK_ADDRESS 0x7f000001 /* 127.0.0.1 */
|
||||||
|
#define SLP_MAX_DATAGRAM_SIZE 1400
|
||||||
|
--- ./slpd/slpd_incoming.c.orig 2005-04-13 15:58:18.000000000 +0000
|
||||||
|
+++ ./slpd/slpd_incoming.c 2005-04-13 17:29:26.486900643 +0000
|
||||||
|
@@ -534,6 +531,21 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(ENABLE_SLPv1)
|
||||||
|
+ /*------------------------------------------------------------*/
|
||||||
|
+ /* Create socket that will handle multicast UDP for SLPv1 */
|
||||||
|
+ /* Service Location General Multicast address. */
|
||||||
|
+ /*------------------------------------------------------------*/
|
||||||
|
+ mcastaddr.s_addr = htonl(SLPv1_SL_MCAST_ADDRESS);
|
||||||
|
+ sock = SLPDSocketCreateBoundDatagram(&myaddr,
|
||||||
|
+ &mcastaddr,
|
||||||
|
+ DATAGRAM_MULTICAST);
|
||||||
|
+ if (sock)
|
||||||
|
+ {
|
||||||
|
+ SLPListLinkTail(&G_IncomingSocketList,(SLPListItem*)sock);
|
||||||
|
+ SLPDLog("SLPv1 Service Location General Multicast socket on %s ready\n",
|
||||||
|
+ inet_ntoa(myaddr));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (G_SlpdProperty.isDA)
|
||||||
|
{
|
||||||
|
/*------------------------------------------------------------*/
|
72
slpd.init
Normal file
72
slpd.init
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Copyright (c) 2003 SuSE AG Nuernberg, Germany.
|
||||||
|
#
|
||||||
|
# Author: adrian@suse.de, based on template from source package
|
||||||
|
#
|
||||||
|
# /etc/init.d/slpd
|
||||||
|
# and its symbolic link
|
||||||
|
# /usr/sbin/rcslpd
|
||||||
|
#
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: openslp slpd
|
||||||
|
# Required-Start: $network $named
|
||||||
|
# Required-Stop:
|
||||||
|
# Default-Start: 3 5
|
||||||
|
# Default-Stop: 0 1 2 4 6
|
||||||
|
# Description: slpd - OpenSLP daemon for the Service Location Protocol
|
||||||
|
### END INIT INFO
|
||||||
|
|
||||||
|
. /etc/rc.status
|
||||||
|
|
||||||
|
# Determine the base and follow a runlevel link name.
|
||||||
|
base=${0##*/}
|
||||||
|
link=${base#*[SK][0-9][0-9]}
|
||||||
|
|
||||||
|
# Force execution if not called by a runlevel directory.
|
||||||
|
test -x /usr/sbin/slpd || exit 0
|
||||||
|
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
echo -n 'Starting slpd '
|
||||||
|
startproc /usr/sbin/slpd
|
||||||
|
rc_status -v
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
echo -n "Shutting down slpd "
|
||||||
|
killproc -TERM /usr/sbin/slpd
|
||||||
|
rc_status -v
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
$0 stop
|
||||||
|
$0 start
|
||||||
|
rc_status
|
||||||
|
;;
|
||||||
|
try-restart)
|
||||||
|
$0 status
|
||||||
|
if test $? = 0; then
|
||||||
|
$0 restart
|
||||||
|
else
|
||||||
|
rc_reset
|
||||||
|
fi
|
||||||
|
rc_status
|
||||||
|
;;
|
||||||
|
force-reload)
|
||||||
|
$0 stop; sleep 1 && $0 start
|
||||||
|
rc_status
|
||||||
|
;;
|
||||||
|
reload)
|
||||||
|
echo -n "Reload service slpd "
|
||||||
|
killproc -HUP /usr/sbin/slpd
|
||||||
|
rc_status -v
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
echo -n "Checking for slpd "
|
||||||
|
checkproc /usr/sbin/slpd
|
||||||
|
rc_status -v
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {start|stop|try-restart|restart|force-reload|reload|status}"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
rc_exit
|
11
slptool-timeout.diff
Normal file
11
slptool-timeout.diff
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- slptool/slptool.c
|
||||||
|
+++ slptool/slptool.c 2004/01/14 12:26:12
|
||||||
|
@@ -481,7 +481,7 @@
|
||||||
|
|
||||||
|
result = SLPReg(hslp,
|
||||||
|
cmdline->cmdparam1,
|
||||||
|
- SLP_LIFETIME_DEFAULT,
|
||||||
|
+ SLP_LIFETIME_MAXIMUM,
|
||||||
|
srvtype,
|
||||||
|
cmdline->cmdparam2,
|
||||||
|
SLP_TRUE,
|
67
v1dadiscovery.diff
Normal file
67
v1dadiscovery.diff
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
--- ./common/slp_v1message.c.orig 2002-12-03 21:04:50.000000000 +0000
|
||||||
|
+++ ./common/slp_v1message.c 2004-12-03 18:48:44.740573934 +0000
|
||||||
|
@@ -40,6 +40,7 @@
|
||||||
|
|
||||||
|
#include "slp_v1message.h"
|
||||||
|
#include "slp_utf8.h"
|
||||||
|
+#include "slp_compare.h"
|
||||||
|
|
||||||
|
/* Implementation Note:
|
||||||
|
*
|
||||||
|
@@ -215,7 +216,8 @@
|
||||||
|
srvrqst->predicate += srvrqst->srvtypelen + 1;
|
||||||
|
|
||||||
|
/* Now split out the scope (if any) */
|
||||||
|
- if(*srvrqst->predicate == '/')
|
||||||
|
+ /* Special case DA discovery, empty scope is allowed here */
|
||||||
|
+ if(*srvrqst->predicate == '/' && SLPCompareString(srvrqst->srvtypelen, srvrqst->srvtype, 15, "directory-agent") != 0)
|
||||||
|
{
|
||||||
|
/* no scope - so set default scope */
|
||||||
|
srvrqst->scopelist = "default";
|
||||||
|
--- ./slpd/slpd_v1process.c.orig 2004-12-03 18:49:08.656163167 +0000
|
||||||
|
+++ ./slpd/slpd_v1process.c 2004-12-03 19:10:09.159293506 +0000
|
||||||
|
@@ -76,25 +76,32 @@
|
||||||
|
int errorcode)
|
||||||
|
/*-------------------------------------------------------------------------*/
|
||||||
|
{
|
||||||
|
- if (message->body.srvrqst.scopelistlen == 0 ||
|
||||||
|
- SLPIntersectStringList(message->body.srvrqst.scopelistlen,
|
||||||
|
- message->body.srvrqst.scopelist,
|
||||||
|
- G_SlpdProperty.useScopesLen,
|
||||||
|
- G_SlpdProperty.useScopes))
|
||||||
|
+ if (G_SlpdProperty.isDA)
|
||||||
|
{
|
||||||
|
- /* fill out real structure */
|
||||||
|
- errorcode = SLPDKnownDAGenerateMyV1DAAdvert(errorcode,
|
||||||
|
- message->header.encoding,
|
||||||
|
- message->header.xid,
|
||||||
|
- sendbuf);
|
||||||
|
+ if (message->body.srvrqst.scopelistlen == 0 ||
|
||||||
|
+ SLPIntersectStringList(message->body.srvrqst.scopelistlen,
|
||||||
|
+ message->body.srvrqst.scopelist,
|
||||||
|
+ G_SlpdProperty.useScopesLen,
|
||||||
|
+ G_SlpdProperty.useScopes))
|
||||||
|
+ {
|
||||||
|
+ /* fill out real structure */
|
||||||
|
+ errorcode = SLPDKnownDAGenerateMyV1DAAdvert(errorcode,
|
||||||
|
+ message->header.encoding,
|
||||||
|
+ message->header.xid,
|
||||||
|
+ sendbuf);
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ errorcode = SLP_ERROR_SCOPE_NOT_SUPPORTED;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- errorcode = SLP_ERROR_SCOPE_NOT_SUPPORTED;
|
||||||
|
+ errorcode = SLP_ERROR_MESSAGE_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* don't return errorcodes to multicast messages */
|
||||||
|
- if (errorcode == 0)
|
||||||
|
+ if (errorcode != 0)
|
||||||
|
{
|
||||||
|
if (message->header.flags & SLP_FLAG_MCAST ||
|
||||||
|
ISMCAST(peeraddr->sin_addr))
|
Loading…
x
Reference in New Issue
Block a user