
7 changed files with 417 additions and 0 deletions
@ -0,0 +1,19 @@ |
|||||||
|
diff -up openslp-2.0.0/slpd/slpd_process.c.orig openslp-2.0.0/slpd/slpd_process.c |
||||||
|
--- openslp-2.0.0/slpd/slpd_process.c.orig 2018-05-09 13:08:06.185104375 +0200 |
||||||
|
+++ openslp-2.0.0/slpd/slpd_process.c 2018-05-09 13:07:21.017095089 +0200 |
||||||
|
@@ -462,6 +462,15 @@ static int ProcessSrvRqst(SLPMessage * m |
||||||
|
message->body.srvrqst.srvtype, 23, SLP_DA_SERVICE_TYPE) == 0) |
||||||
|
{ |
||||||
|
errorcode = ProcessDASrvRqst(message, sendbuf, errorcode); |
||||||
|
+ |
||||||
|
+ if (result != *sendbuf) |
||||||
|
+ { |
||||||
|
+ // The pointer stored at *sendbuf can be modified by a realloc |
||||||
|
+ // operation in ProcessDASrvRqst(). Fix up the local copy of |
||||||
|
+ // that pointer if necessary. |
||||||
|
+ result = *sendbuf; |
||||||
|
+ } |
||||||
|
+ |
||||||
|
if (errorcode == 0) |
||||||
|
{ |
||||||
|
/* Since we have an errorcode of 0, we were successful, |
@ -0,0 +1,53 @@ |
|||||||
|
diff -up openslp-2.0.0/slpd/slpd_predicate.c.orig openslp-2.0.0/slpd/slpd_predicate.c |
||||||
|
--- openslp-2.0.0/slpd/slpd_predicate.c.orig 2012-12-11 00:31:53.000000000 +0100 |
||||||
|
+++ openslp-2.0.0/slpd/slpd_predicate.c 2015-01-14 13:17:45.115104003 +0100 |
||||||
|
@@ -1425,6 +1425,8 @@ void freePredicateParseTree(SLPDPredicat |
||||||
|
break; |
||||||
|
} |
||||||
|
pNextNode = pNode->next; |
||||||
|
+ xfree(pNode->nodeBody.comparison.tag_str); |
||||||
|
+ xfree(pNode->nodeBody.comparison.value_str); |
||||||
|
xfree(pNode); |
||||||
|
pNode = pNextNode; |
||||||
|
} |
||||||
|
@@ -1643,26 +1645,28 @@ SLPDPredicateParseResult createPredicate |
||||||
|
rhs = val_start; |
||||||
|
|
||||||
|
/***** Create leaf node. *****/ |
||||||
|
- *ppNode = (SLPDPredicateTreeNode *)xmalloc(sizeof (SLPDPredicateTreeNode) + lhs_len + rhs_len); |
||||||
|
+ *ppNode = (SLPDPredicateTreeNode *)xmalloc(sizeof (SLPDPredicateTreeNode)); |
||||||
|
if (!(*ppNode)) |
||||||
|
return PREDICATE_PARSE_INTERNAL_ERROR; |
||||||
|
|
||||||
|
+ (*ppNode)->nodeBody.comparison.tag_str = (char *)xmalloc((lhs_len+1) * sizeof(char)); |
||||||
|
+ if (!((*ppNode)->nodeBody.comparison.tag_str)) |
||||||
|
+ return PREDICATE_PARSE_INTERNAL_ERROR; |
||||||
|
+ |
||||||
|
+ (*ppNode)->nodeBody.comparison.value_str = (char *)xmalloc((rhs_len+1) * sizeof(char)); |
||||||
|
+ if (!((*ppNode)->nodeBody.comparison.value_str)) |
||||||
|
+ return PREDICATE_PARSE_INTERNAL_ERROR; |
||||||
|
+ |
||||||
|
(*ppNode)->nodeType = op; |
||||||
|
(*ppNode)->next = (SLPDPredicateTreeNode *)0; |
||||||
|
|
||||||
|
- /* Finished with "operator" now - just use as temporary pointer to assist with copying the |
||||||
|
- * attribute name (lhs) and required value (rhs) into the node |
||||||
|
- */ |
||||||
|
- operator = (*ppNode)->nodeBody.comparison.storage; |
||||||
|
- strncpy(operator, lhs, lhs_len); |
||||||
|
- operator[lhs_len] = '\0'; |
||||||
|
(*ppNode)->nodeBody.comparison.tag_len = lhs_len; |
||||||
|
- (*ppNode)->nodeBody.comparison.tag_str = operator; |
||||||
|
- operator += lhs_len + 1; |
||||||
|
- strncpy(operator, rhs, rhs_len); |
||||||
|
- operator[rhs_len] = '\0'; |
||||||
|
+ strncpy((*ppNode)->nodeBody.comparison.tag_str, lhs, lhs_len); |
||||||
|
+ (*ppNode)->nodeBody.comparison.tag_str[lhs_len] = '\0'; |
||||||
|
+ |
||||||
|
(*ppNode)->nodeBody.comparison.value_len = rhs_len; |
||||||
|
- (*ppNode)->nodeBody.comparison.value_str = operator; |
||||||
|
+ strncpy((*ppNode)->nodeBody.comparison.value_str, rhs, rhs_len); |
||||||
|
+ (*ppNode)->nodeBody.comparison.value_str[rhs_len] = '\0'; |
||||||
|
|
||||||
|
return PREDICATE_PARSE_OK; |
||||||
|
} |
@ -0,0 +1,134 @@ |
|||||||
|
diff -up openslp-2.0.0/etc/slpd.all_init.orig openslp-2.0.0/etc/slpd.all_init |
||||||
|
--- openslp-2.0.0/etc/slpd.all_init.orig 2012-11-28 18:07:04.000000000 +0100 |
||||||
|
+++ openslp-2.0.0/etc/slpd.all_init 2013-06-24 13:27:34.375575496 +0200 |
||||||
|
@@ -1,28 +1,5 @@ |
||||||
|
#!/bin/bash |
||||||
|
-# |
||||||
|
-# /etc/rc.d/init.d/slpd |
||||||
|
-# |
||||||
|
-# slpd Start/Stop the OpenSLP SA daemon (slpd). |
||||||
|
-# |
||||||
|
-# chkconfig: 345 13 87 |
||||||
|
-# description: OpenSLP daemon for the Service Location Protocol |
||||||
|
-# processname: slpd |
||||||
|
- |
||||||
|
-# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org> |
||||||
|
-# Modified for RHS Linux by Damien Neil |
||||||
|
-# Modified for COL by Raymund Will, <ray@lst.de> |
||||||
|
-# Modified for OpenSLP by Matt Peterson <mpeterson@calderasystems.com> |
||||||
|
-# Modified to be distribution agnostic by Bart Whiteley <bart@caldera.com> |
||||||
|
- |
||||||
|
-#//////////////////////////////////////////////////# |
||||||
|
-# Does nothing if a route exists that supports # |
||||||
|
-# multicast traffic. If no routes supporting # |
||||||
|
-# multicast traffic exists, the function tries to # |
||||||
|
-# add one. A 0 is returned on success and a 1 # |
||||||
|
-# on failure. One parameter must be passed in. # |
||||||
|
-# This variable determins verbosity. If parameter # |
||||||
|
-# is non-zero debugging will appear # |
||||||
|
-#//////////////////////////////////////////////////# |
||||||
|
+ |
||||||
|
multicast_route_set() |
||||||
|
{ |
||||||
|
PING_OPTIONS_1='-c1 -w1' |
||||||
|
@@ -91,94 +68,11 @@ multicast_route_set() |
||||||
|
return $retval |
||||||
|
} |
||||||
|
|
||||||
|
-NAME=slpd |
||||||
|
-DAEMON=/usr/sbin/$NAME |
||||||
|
-SUSE=0 |
||||||
|
- |
||||||
|
-# Change to root |
||||||
|
-OLDDIR=`pwd` |
||||||
|
-cd / |
||||||
|
- |
||||||
|
-# Source function library. |
||||||
|
-if [ -f /etc/rc.d/init.d/functions ]; then |
||||||
|
- . /etc/rc.d/init.d/functions |
||||||
|
-else |
||||||
|
- SUSE=1 |
||||||
|
-fi |
||||||
|
- |
||||||
|
-test -x $DAEMON || exit 0 |
||||||
|
- |
||||||
|
-if [ ! "$SVIlock" = "" ]; then |
||||||
|
- unset LOCK |
||||||
|
-else |
||||||
|
- LOCK=/var/lock/subsys/slpd |
||||||
|
+multicast_route_set 1 |
||||||
|
+multicast_enabled=$? |
||||||
|
+if [ "$multicast_enabled" != "0" ] ; then |
||||||
|
+ echo "Failure: No Route Available for Multicast Traffic" |
||||||
|
+ exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
-RETVAL=0 |
||||||
|
- |
||||||
|
-# |
||||||
|
-# See how we were called. |
||||||
|
-# |
||||||
|
-case "$1" in |
||||||
|
- start) |
||||||
|
- # Check if atd is already running |
||||||
|
- # RH style |
||||||
|
- if [ $SUSE -eq 0 ] && [ ! "$LOCK" = "" ] && [ -f $LOCK ]; then |
||||||
|
- exit 0 |
||||||
|
- fi |
||||||
|
- # Caldera Style |
||||||
|
- if [ ! "$SVIlock" = "" ] && [ -f $SVIlock ]; then |
||||||
|
- exit 0 |
||||||
|
- fi |
||||||
|
- echo -n 'Starting slpd: ' |
||||||
|
- |
||||||
|
- multicast_route_set 1 |
||||||
|
- multicast_enabled=$? |
||||||
|
- if [ "$multicast_enabled" != "0" ] ; then |
||||||
|
- echo "Failure: No Route Available for Multicast Traffic" |
||||||
|
- exit 1 |
||||||
|
- fi |
||||||
|
- if [ $SUSE -eq 0 ]; then |
||||||
|
- if [ -x /sbin/ssd ]; then |
||||||
|
- ssd -S -n $NAME -x $DAEMON -- $OPTIONS |
||||||
|
- [ ! "$SVIlock" = "" ] && touch $SVIlock |
||||||
|
- else |
||||||
|
- daemon $DAEMON |
||||||
|
- RETVAL=$? |
||||||
|
- fi |
||||||
|
- else |
||||||
|
- startproc $DAEMON $OPTIONS |
||||||
|
- fi |
||||||
|
- [ $SUSE -eq 0 ] && [ ! "$LOCK" = "" ] && [ $RETVAL -eq 0 ] && touch $LOCK |
||||||
|
- echo |
||||||
|
- ;; |
||||||
|
- stop) |
||||||
|
- echo -n 'Stopping slpd: ' |
||||||
|
- |
||||||
|
- if [ -x /sbin/ssd ]; then |
||||||
|
- ssd -K -p /var/run/$NAME.pid -n $NAME |
||||||
|
- [ ! "$SVIlock" = "" ] && rm -f $SVIlock |
||||||
|
- else |
||||||
|
- killproc $DAEMON |
||||||
|
- RETVAL=$? |
||||||
|
- fi |
||||||
|
- [ ! "$LOCK" = "" ] && [ $RETVAL -eq 0 ] && rm -f $LOCK |
||||||
|
- echo |
||||||
|
- ;; |
||||||
|
- reload|restart) |
||||||
|
- cd $OLDDIR |
||||||
|
- $0 stop |
||||||
|
- $0 start |
||||||
|
- cd / |
||||||
|
- RETVAL=$? |
||||||
|
- ;; |
||||||
|
- status) |
||||||
|
- status /usr/sbin/slpd |
||||||
|
- RETVAL=$? |
||||||
|
- ;; |
||||||
|
- *) |
||||||
|
- echo "Usage: /etc/rc.d/init.d/slpd {start|stop|restart|reload|status}" |
||||||
|
- exit 1 |
||||||
|
-esac |
||||||
|
- |
||||||
|
-exit $RETVAL |
||||||
|
+exit 0 |
Binary file not shown.
@ -0,0 +1,11 @@ |
|||||||
|
[Unit] |
||||||
|
Description=OpenSLP daemon for the Service Location Protocol |
||||||
|
After=network.target |
||||||
|
|
||||||
|
[Service] |
||||||
|
Type=forking |
||||||
|
ExecStart=/usr/sbin/slpd |
||||||
|
ExecStartPre=/usr/lib/openslp-server/slp-multicast-set.sh |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=multi-user.target |
Binary file not shown.
@ -0,0 +1,200 @@ |
|||||||
|
Name: openslp |
||||||
|
Version: 2.0.0 |
||||||
|
Release: 7%{?dist} |
||||||
|
Epoch: 1 |
||||||
|
Summary: Open implementation of Service Location Protocol V2 |
||||||
|
|
||||||
|
Group: System Environment/Libraries |
||||||
|
License: BSD |
||||||
|
URL: http://www.openslp.org |
||||||
|
Source0: http://downloads.sourceforge.net/openslp/%{name}-%{version}.tar.gz |
||||||
|
# Source1,2: simple man pages (slightly modified help2man output) |
||||||
|
Source1: slpd.8.gz |
||||||
|
Source2: slptool.1.gz |
||||||
|
# Source3: service file |
||||||
|
Source3: slpd.service |
||||||
|
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) |
||||||
|
|
||||||
|
# Patch0: creates script from upstream init script that sets multicast |
||||||
|
# prior to the start of the service |
||||||
|
Patch0: openslp-2.0.0-multicast-set.patch |
||||||
|
# Patch1: fixes buffer overflow, rhbz#1181474 |
||||||
|
Patch1: openslp-2.0.0-fortify-source-buffer-overflow.patch |
||||||
|
# Patch2: fixes heap memory corruption in slpd/slpd_process.c, which allows |
||||||
|
# denial of service or potentially code execution, |
||||||
|
# backported form upstream, CVE-2017-17833 |
||||||
|
Patch2: openslp-2.0.0-cve-2017-17833.patch |
||||||
|
|
||||||
|
BuildRequires: bison flex openssl-devel doxygen |
||||||
|
BuildRequires: automake libtool |
||||||
|
BuildRequires: systemd-units |
||||||
|
|
||||||
|
%description |
||||||
|
Service Location Protocol is an IETF standards track protocol that |
||||||
|
provides a framework to allow 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. |
||||||
|
|
||||||
|
%package server |
||||||
|
Summary: OpenSLP server daemon |
||||||
|
Group: System Environment/Daemons |
||||||
|
Requires: %{name} = %{epoch}:%{version}-%{release} |
||||||
|
Requires: /bin/netstat |
||||||
|
Requires(preun): chkconfig, /sbin/service |
||||||
|
Requires(post): chkconfig |
||||||
|
Requires(postun): /sbin/service |
||||||
|
|
||||||
|
%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. |
||||||
|
|
||||||
|
%package devel |
||||||
|
Summary: OpenSLP headers and libraries |
||||||
|
Group: Development/Libraries |
||||||
|
Requires: %{name} = %{epoch}:%{version}-%{release} |
||||||
|
|
||||||
|
%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. |
||||||
|
|
||||||
|
%prep |
||||||
|
%setup -q |
||||||
|
%patch0 -p1 -b .multicast-set |
||||||
|
%patch1 -p1 -b .fortify-source-buffer-overflow |
||||||
|
%patch2 -p1 -b .cve-2017-17833 |
||||||
|
|
||||||
|
|
||||||
|
%build |
||||||
|
export CFLAGS="-fPIC -fno-strict-aliasing -fPIE -DPIE $RPM_OPT_FLAGS" |
||||||
|
export LDFLAGS="-pie -Wl,-z,now" |
||||||
|
%configure \ |
||||||
|
--prefix=%{_prefix} \ |
||||||
|
--libdir=%{_libdir} \ |
||||||
|
--sysconfdir=%{_sysconfdir} \ |
||||||
|
--enable-async-api \ |
||||||
|
--disable-rpath \ |
||||||
|
--enable-slpv2-security \ |
||||||
|
--localstatedir=/var |
||||||
|
make %{?_smp_mflags} |
||||||
|
|
||||||
|
|
||||||
|
%install |
||||||
|
rm -rf $RPM_BUILD_ROOT |
||||||
|
make install DESTDIR=$RPM_BUILD_ROOT |
||||||
|
mkdir -p ${RPM_BUILD_ROOT}/%{_sysconfdir}/slp.reg.d |
||||||
|
# install script that sets multicast |
||||||
|
mkdir -p ${RPM_BUILD_ROOT}/usr/lib/%{name}-server |
||||||
|
install -m 0755 etc/slpd.all_init ${RPM_BUILD_ROOT}/usr/lib/%{name}-server/slp-multicast-set.sh |
||||||
|
# install service file |
||||||
|
mkdir -p ${RPM_BUILD_ROOT}/%{_unitdir} |
||||||
|
install -p -m 644 %{SOURCE3} ${RPM_BUILD_ROOT}/%{_unitdir}/slpd.service |
||||||
|
# install man page |
||||||
|
mkdir -p ${RPM_BUILD_ROOT}/%{_mandir}/man8/ |
||||||
|
mkdir -p ${RPM_BUILD_ROOT}/%{_mandir}/man1/ |
||||||
|
cp %SOURCE1 ${RPM_BUILD_ROOT}/%{_mandir}/man8/ |
||||||
|
cp %SOURCE2 ${RPM_BUILD_ROOT}/%{_mandir}/man1/ |
||||||
|
rm -f $RPM_BUILD_ROOT%{_libdir}/lib*.a |
||||||
|
rm -f $RPM_BUILD_ROOT%{_libdir}/lib*.la |
||||||
|
|
||||||
|
|
||||||
|
%clean |
||||||
|
rm -rf $RPM_BUILD_ROOT |
||||||
|
|
||||||
|
|
||||||
|
%post -p /sbin/ldconfig |
||||||
|
|
||||||
|
%postun -p /sbin/ldconfig |
||||||
|
|
||||||
|
%post server |
||||||
|
%systemd_post slpd.service |
||||||
|
|
||||||
|
%postun server |
||||||
|
%systemd_postun_with_restart slpd.service |
||||||
|
|
||||||
|
%preun server |
||||||
|
%systemd_preun slpd.service |
||||||
|
|
||||||
|
|
||||||
|
%files |
||||||
|
%defattr(-,root,root,-) |
||||||
|
%doc AUTHORS COPYING ChangeLog NEWS README |
||||||
|
%doc doc/doc/* |
||||||
|
%{_libdir}/libslp.so.* |
||||||
|
%{_bindir}/slptool |
||||||
|
%config(noreplace) %{_sysconfdir}/slp.conf |
||||||
|
%config(noreplace) %{_sysconfdir}/slp.spi |
||||||
|
%{_mandir}/man1/* |
||||||
|
|
||||||
|
%files server |
||||||
|
%defattr(-,root,root,-) |
||||||
|
%dir /%{_sysconfdir}/slp.reg.d/ |
||||||
|
%dir /usr/lib/%{name}-server |
||||||
|
/usr/lib/%{name}-server/slp-multicast-set.sh |
||||||
|
%{_sbindir}/slpd |
||||||
|
%config(noreplace) %{_sysconfdir}/slp.reg |
||||||
|
%{_unitdir}/slpd.service |
||||||
|
%{_mandir}/man8/* |
||||||
|
|
||||||
|
%files devel |
||||||
|
%defattr(-,root,root,-) |
||||||
|
%{_includedir}/slp.h |
||||||
|
%{_libdir}/libslp.so |
||||||
|
|
||||||
|
|
||||||
|
%changelog |
||||||
|
* Tue Jul 03 2018 Vitezslav Crhonek <vcrhonek@redhat.com> - 1:2.0.0-7 |
||||||
|
- Fix possible heap memory corruption, CVE-2017-17833 |
||||||
|
Resolves: #1575698 |
||||||
|
|
||||||
|
* Tue Jun 28 2016 Vitezslav Crhonek <vcrhonek@redhat.com> - 1:2.0.0-6 |
||||||
|
- Fix buffer overflow termination of slpd with -D_FORTIFY_SOURCE=2 |
||||||
|
Resolves: #1181474 |
||||||
|
|
||||||
|
* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 1:2.0.0-5 |
||||||
|
- Mass rebuild 2014-01-24 |
||||||
|
|
||||||
|
* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 1:2.0.0-4 |
||||||
|
- Mass rebuild 2013-12-27 |
||||||
|
|
||||||
|
* Wed Oct 16 2013 Vitezslav Crhonek <vcrhonek@redhat.com> - 1:2.0.0-3 |
||||||
|
- Fix full relro |
||||||
|
Resolves: #881226 |
||||||
|
|
||||||
|
* Mon Jul 15 2013 Vitezslav Crhonek <vcrhonek@redhat.com> - 1:2.0.0-2 |
||||||
|
- Fix -devel requires |
||||||
|
|
||||||
|
* Tue Jun 25 2013 Vitezslav Crhonek <vcrhonek@redhat.com> - 1:2.0.0-1 |
||||||
|
- Update to openslp-2.0.0 |
||||||
|
- Add systemd support |
||||||
|
- Require /bin/netstat |
||||||
|
|
||||||
|
* Wed May 15 2013 Vitezslav Crhonek <vcrhonek@redhat.com> - 2.0-0.3.beta2 |
||||||
|
- Add man pages for slptool and slpd |
||||||
|
- Add CFLAGS and LDFLAGS for full relro |
||||||
|
|
||||||
|
* Thu Jul 28 2011 Vitezslav Crhonek <vcrhonek@redhat.com> - 2.0-0.2.beta2 |
||||||
|
- Build with -fno-strict-aliasing |
||||||
|
|
||||||
|
* Wed Jul 20 2011 Vitezslav Crhonek <vcrhonek@redhat.com> - 2.0-0.1.beta2 |
||||||
|
- Fix N-V-R |
||||||
|
|
||||||
|
* Wed Jul 20 2011 Vitezslav Crhonek <vcrhonek@redhat.com> - 2.0.beta2-2 |
||||||
|
- Build |
||||||
|
|
||||||
|
* Tue Jul 19 2011 Vitezslav Crhonek <vcrhonek@redhat.com> - 2.0.beta2-1 |
||||||
|
- Initial support |
Loading…
Reference in new issue