File openslp-ocloexec.patch of Package openslp

--- slpd/slpd_main.c.orig
+++ slpd/slpd_main.c
@@ -93,7 +93,7 @@ static void SLPDOpenDABackupFile()
     char filename[1024];
     snprintf(filename, sizeof(filename), "%s/slpd/%s", reg_file_dir, "DABackup");
 
-    fp = fopen(filename, "a+");
+    fp = fopen(filename, "a+e");
     if (!DABackupfp && !fp)
 	SLPDLog("Could not open DABackup file\n");
     if (fp)
--- slpd/slpd_outgoing.c.orig
+++ slpd/slpd_outgoing.c
@@ -142,7 +142,7 @@ void OutgoingStreamReconnect(SLPList* so
     /* socket                                                         */
     /*----------------------------------------------------------------*/
     CloseSocket(sock->fd);
-    sock->fd = socket(PF_INET,SOCK_STREAM,0);
+    sock->fd = socket(PF_INET,SOCK_STREAM|SOCK_CLOEXEC,0);
     if ( sock->fd < 0 )
     {
         sock->state = SOCKET_CLOSE;
--- slpd/slpd_log.c.orig
+++ slpd/slpd_log.c
@@ -99,11 +99,11 @@ int SLPDLogFileOpen(const char* path, in
 #endif        
         if (append)
         {
-            G_SlpdLogFile = fopen(path,"a");
+            G_SlpdLogFile = fopen(path,"ae");
         }
         else
         {
-            G_SlpdLogFile = fopen(path,"w");
+            G_SlpdLogFile = fopen(path,"we");
         }
 
         if (G_SlpdLogFile == 0)
--- slpd/slpd_property.c.orig
+++ slpd/slpd_property.c
@@ -80,7 +80,7 @@ int SLPDPropertyInit(const char* conffil
     
     if (conffile)
     {
-	G_SlpdConffileFP = fopen(conffile, "r");
+	G_SlpdConffileFP = fopen(conffile, "re");
 	if (G_SlpdConffileFP)
 	{
 	    SLPPropertySet("net.slp.OpenSLPConfigFile",conffile);
--- slpd/slpd_socket.c.orig
+++ slpd/slpd_socket.c
@@ -333,7 +333,7 @@ SLPDSocket* SLPDSocketCreateDatagram(str
         if(sock->recvbuf && sock->sendbuf)
         {
 
-            sock->fd = socket(PF_INET, SOCK_DGRAM, 0);
+            sock->fd = socket(PF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0);
             if(sock->fd >=0)
             {
                 switch(type)
@@ -409,7 +409,7 @@ SLPDSocket* SLPDSocketCreateBoundDatagra
     {
         sock->recvbuf = SLPBufferAlloc(SLP_MAX_DATAGRAM_SIZE);
         sock->sendbuf = SLPBufferAlloc(SLP_MAX_DATAGRAM_SIZE);
-        sock->fd = socket(PF_INET, SOCK_DGRAM, 0);
+        sock->fd = socket(PF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0);
         if(sock->fd >=0)
         {
 	    if(myaddr != NULL)
@@ -478,7 +478,7 @@ SLPDSocket* SLPDSocketCreateListen(struc
     sock = SLPDSocketAlloc();
     if(sock)
     {
-        sock->fd = socket(PF_INET, SOCK_STREAM, 0);
+        sock->fd = socket(PF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
         if(sock->fd >= 0)
         {
 	    if(peeraddr != NULL)
@@ -492,9 +492,6 @@ SLPDSocket* SLPDSocketCreateListen(struc
 #ifdef _WIN32
                     fdflags = 1;
                     ioctlsocket(sock->fd, FIONBIO, &fdflags);
-#else
-                    fdflags = fcntl(sock->fd, F_GETFL, 0);
-                    fcntl(sock->fd,F_SETFL, fdflags | O_NONBLOCK);
 #endif        
                     sock->state = SOCKET_LISTEN;
 
@@ -540,7 +537,7 @@ SLPDSocket* SLPDSocketCreateConnected(st
     }
 
     /* create the stream socket */
-    sock->fd = socket(PF_INET,SOCK_STREAM,0);
+    sock->fd = socket(PF_INET,SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK,0);
     if(sock->fd < 0)
     {
         goto FAILURE;                        
@@ -550,9 +547,6 @@ SLPDSocket* SLPDSocketCreateConnected(st
 #ifdef _WIN32
     fdflags = 1;
     ioctlsocket(sock->fd, FIONBIO, &fdflags);
-#else
-    fdflags = fcntl(sock->fd, F_GETFL, 0);
-    fcntl(sock->fd,F_SETFL, fdflags | O_NONBLOCK);
 #endif  
 
     /* zero then set peeraddr to connect to */
--- slpd/slpd_database.c.orig
+++ slpd/slpd_database.c
@@ -877,7 +877,7 @@ int SLPDDatabaseInit(const char* regfile
     {
 	fclose(regfileFP);
     }
-    regfileFP = fopen(regfile, "r");
+    regfileFP = fopen(regfile, "re");
     return SLPDDatabaseReInit();
 }
 
@@ -958,7 +958,7 @@ enum {
 
 static int reconnect_nl(int *fd)
 {
-    int new_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_INET_DIAG);
+    int new_fd = socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_INET_DIAG);
 
     close (*fd);
 
@@ -1115,15 +1115,15 @@ void SLPDDatabaseWatcher(void)
     SLPSrvReg*          srvreg;
 
     if (!initialized) {
-	inet_diag = socket(AF_NETLINK, SOCK_RAW, NETLINK_INET_DIAG);
-	proctcp = open("/proc/net/tcp_listen", O_RDONLY);
+	inet_diag = socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_INET_DIAG);
+	proctcp = open("/proc/net/tcp_listen", O_RDONLY|O_CLOEXEC);
 	if (proctcp == -1)
-	  proctcp = open("/proc/net/tcp", O_RDONLY);
-	procudp = open("/proc/net/udp", O_RDONLY);
-	proctcp6 = open("/proc/net/tcp6_listen", O_RDONLY);
+	  proctcp = open("/proc/net/tcp", O_RDONLY|O_CLOEXEC);
+	procudp = open("/proc/net/udp", O_RDONLY|O_CLOEXEC);
+	proctcp6 = open("/proc/net/tcp6_listen", O_RDONLY|O_CLOEXEC);
 	if (proctcp6 == -1)
-	  proctcp6 = open("/proc/net/tcp6", O_RDONLY);
-	procudp6 = open("/proc/net/udp6", O_RDONLY);
+	  proctcp6 = open("/proc/net/tcp6", O_RDONLY|O_CLOEXEC);
+	procudp6 = open("/proc/net/udp6", O_RDONLY|O_CLOEXEC);
 	initialized = 1;
     }
     flags = 0;
@@ -1237,7 +1237,7 @@ int SLPDDatabaseReInit()
 
              if ( strlen(filename)>4 && 
                   strcmp(filename+strlen(filename)-4, ".reg") == 0 &&
-                  (fd=fopen(filename,"rb")) )
+                  (fd=fopen(filename,"rbe")) )
              {
                  while ( SLPDRegFileReadSrvReg(fd, SLP_REG_SOURCE_STATIC, &msg, &buf) == 0 )
                  {
--- common/slp_property.c.orig
+++ common/slp_property.c
@@ -345,7 +345,7 @@ int SLPPropertyReadFile(const char* conf
     FILE*   fp;
     int     ret;
 
-    fp = fopen(conffile,"r");
+    fp = fopen(conffile,"re");
     if (fp)
     {
 	/* Set the property that keeps track of conffile */
--- slpd/slpd_mdns.c.orig
+++ slpd/slpd_mdns.c
@@ -70,7 +70,7 @@ SLPDSocket* SLPDMDNSCreateBoundDatagram(
       sock->ifaddr.sin_addr = *myaddr;
     sock->recvbuf = SLPBufferAlloc(MDNS_MAX_DATAGRAM_SIZE);
     sock->sendbuf = SLPBufferAlloc(MDNS_MAX_DATAGRAM_SIZE);
-    sock->fd = socket(PF_INET, SOCK_DGRAM, 0);
+    sock->fd = socket(PF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0);
     if (sock->fd < 0)
     {
 	SLPDSocketFree(sock);
--- common/slp_xcast.c.orig
+++ common/slp_xcast.c
@@ -116,7 +116,7 @@ int SLPBroadcastSend(const SLPIfaceInfo*
          socks->sock_count < ifaceinfo->iface_count; 
          socks->sock_count++)
     {
-        socks->sock[socks->sock_count] = socket(AF_INET, SOCK_DGRAM, 0);
+        socks->sock[socks->sock_count] = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0);
         if (socks->sock[socks->sock_count] < 0)
         {
             /* error creating socket */
@@ -190,7 +190,7 @@ int SLPMulticastSend(const SLPIfaceInfo*
          socks->sock_count < ifaceinfo->iface_count;
          socks->sock_count++)
     {
-        socks->sock[socks->sock_count] = socket(AF_INET, SOCK_DGRAM, 0);
+        socks->sock[socks->sock_count] = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0);
         if (socks->sock[socks->sock_count] < 0)
         {
             /* error creating socket */
--- common/slp_dhcp.c.orig
+++ common/slp_dhcp.c
@@ -135,7 +135,7 @@ static int dhcpCreateBCSkt(struct sockad
 #endif
 
 	/* setup dhcp broadcast-to-server address structure */
-	if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0)
+	if((sockfd = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0)) >= 0)
 	{
 		struct sockaddr_in localaddr;
 
@@ -369,7 +369,7 @@ static int dhcpGetAddressInfo(unsigned c
 	struct arpreq arpreq;
 	struct sockaddr_in *sin;
 
-	if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
+	if ((sockfd = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0)
 		return -1;
 
 	*hlen = 0;
--- common/slp_network.c.orig
+++ common/slp_network.c
@@ -70,7 +70,7 @@ int SLPNetworkConnectStream(struct socka
 
     /* TODO: Make this connect non-blocking so that it will timeout */
 
-    result = socket(AF_INET,SOCK_STREAM,0);
+    result = socket(AF_INET,SOCK_STREAM|SOCK_CLOEXEC,0);
     if(result >= 0)
     {
         if(connect(result,
@@ -132,7 +132,7 @@ int SLPNetworkConnectToMulticast(struct
 
 
     /* setup multicast socket */
-    sockfd = socket(AF_INET,SOCK_DGRAM,0);
+    sockfd = socket(AF_INET,SOCK_DGRAM|SOCK_CLOEXEC,0);
     if(sockfd >= 0)
     {
         peeraddr->sin_family = AF_INET;
@@ -190,7 +190,7 @@ int SLPNetworkConnectToBroadcast(struct
 
 
     /* setup broadcast */
-    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
+    sockfd = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0);
     if(sockfd >= 0)
     {
         peeraddr->sin_family = AF_INET;
--- common/slp_xmalloc.c.orig
+++ common/slp_xmalloc.c
@@ -317,7 +317,7 @@ char* _xstrdup(const char* file,
 int xmalloc_init(const char* filename, size_t freemem)
 /*=========================================================================*/
 {
-    G_xmalloc_fh = fopen(filename, "w");
+    G_xmalloc_fh = fopen(filename, "we");
     if(G_xmalloc_fh)
     {
         return 0;
--- common/slp_spi.c.orig
+++ common/slp_spi.c
@@ -112,7 +112,7 @@ SLPCryptoDSAKey* SLPSpiReadKeyFile(const
     FILE*            fp;
     SLPCryptoDSAKey* result = 0;
 
-    fp = fopen(keyfile,"r");
+    fp = fopen(keyfile,"re");
     if(fp)
     {
         if(keytype == SLPSPI_KEY_TYPE_PUBLIC)
@@ -264,7 +264,7 @@ SLPSpiHandle SLPSpiOpen(const char* spif
     SLPSpiHandle    result = 0;
     SLPSpiEntry*    spientry;      
 
-    fp = fopen(spifile,"r");
+    fp = fopen(spifile,"re");
     if(fp)
     {
         result = xmalloc(sizeof(struct _SLPSpiHandle));
--- common/slp_iface.c.orig
+++ common/slp_iface.c
@@ -111,7 +111,7 @@ int SLPIfaceGetInfo(const char* useiface
     ifc.ifc_len = sizeof(struct ifreq) * SLP_MAX_IFACES ;
     ifc.ifc_req = ifrlist;
     
-    fd = socket(AF_INET,SOCK_STREAM,0);
+    fd = socket(AF_INET,SOCK_STREAM|SOCK_CLOEXEC,0);
     if(fd == -1)
     {
         /* failed to create socket */
--- libslp/libslp_network.c.orig
+++ libslp/libslp_network.c
@@ -68,7 +68,7 @@ int NetworkConnectToSlpd(struct sockaddr
 #endif
     int result;
 
-    result = socket(AF_INET,SOCK_STREAM,0);
+    result = socket(AF_INET,SOCK_STREAM|SOCK_CLOEXEC,0);
     if(result >= 0)
     {
         peeraddr->sin_family      = AF_INET;
--- libslp/libslp_mdns.c.orig
+++ libslp/libslp_mdns.c
@@ -665,7 +665,7 @@ int SLPMDNSMulticastSend(const SLPIfaceI
          socks->sock_count < ifaceinfo->iface_count;
          socks->sock_count++)
     {
-        socks->sock[socks->sock_count] = socket(AF_INET, SOCK_DGRAM, 0);
+        socks->sock[socks->sock_count] = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0);
         if (socks->sock[socks->sock_count] < 0)
         {
             /* error creating socket */
@@ -892,7 +892,7 @@ int SLPMDNSXcastRecvMessage(const SLPXca
 		mhdr.msg_control = cmsgbuf;
 		mhdr.msg_controllen = sizeof(cmsgbuf);
 		mhdr.msg_flags = 0;
-		bytesread = recvmsg(mdnssockets->sock[i], &mhdr, 0);
+		bytesread = recvmsg(mdnssockets->sock[i], &mhdr, MSG_CMSG_CLOEXEC);
 		if (bytesread < 12)
 		    continue;
 		cmsg = CMSG_FIRSTHDR(&mhdr);
--- configure.in.orig
+++ configure.in
@@ -111,7 +111,9 @@ fi
 dnl ***********************************************************************
 dnl Checks for programs.
 dnl ***********************************************************************
-AC_PROG_CC
+AC_PROG_CC_STDC
+AC_USE_SYSTEM_EXTENSIONS
+AC_SYS_LARGEFILE
 AC_PROG_INSTALL
 AM_PROG_LIBTOOL
 AM_PROG_LEX
openSUSE Build Service is sponsored by