File openslp.cloexec.diff of Package openslp

--- ./common/slp_dhcp.c.orig	2014-02-17 18:16:57.883239271 +0000
+++ ./common/slp_dhcp.c	2014-02-17 18:20:16.386238920 +0000
@@ -101,7 +101,7 @@ static sockfd_t dhcpCreateBCSkt(void * p
    so_bool_t on = 1;
 
    /* setup dhcp broadcast-to-server address structure */
-   if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) != SLP_INVALID_SOCKET)
+   if ((sockfd = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0)) != SLP_INVALID_SOCKET)
    {
       int addr = INADDR_ANY;
       struct sockaddr_storage localaddr;
@@ -355,7 +355,7 @@ static int dhcpGetAddressInfo(unsigned c
    struct arpreq arpreq;
    struct sockaddr_in * sin;
 
-   if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == SLP_INVALID_SOCKET)
+   if ((sockfd = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0)) == SLP_INVALID_SOCKET)
       return -1;
 
    *hlen = 0;
--- ./common/slp_iface.c.orig	2014-02-17 18:16:57.886239271 +0000
+++ ./common/slp_iface.c	2014-02-17 18:21:25.194238798 +0000
@@ -457,7 +457,7 @@ static int GetV6Scope(struct sockaddr_in
    family = AF_INET6;
 
    /* Check if address is a global address and if it is then assign a scope ID as zero */
-   fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+   fd = socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_TCP);
    if (fd != INVALID_SOCKET)
    {
       if (addr != NULL )
@@ -552,7 +552,7 @@ static int GetV6Scope(struct sockaddr_in
       xfree(pAddr);
 #else
    sockfd_t fd;
-   fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+   fd = socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_TCP);
    if (fd != SLP_INVALID_SOCKET)
    {
       /* This loop attempts to find the proper scope value
@@ -698,7 +698,7 @@ int SLPIfaceGetDefaultInfo(SLPIfaceInfo
 #ifdef LINUX
       SLPIfaceGetV6Addr(ifaceinfo);
 #else
-      fd = socket(AF_INET6, SOCK_DGRAM, 0);
+      fd = socket(AF_INET6, SOCK_DGRAM|SOCK_CLOEXEC, 0);
       if (fd != -1)
       {
 #ifdef AIX
@@ -739,7 +739,7 @@ int SLPIfaceGetDefaultInfo(SLPIfaceInfo
 
    if ((family == AF_INET) || (family == AF_UNSPEC))
    {
-      fd = socket(AF_INET, SOCK_DGRAM, 0);
+      fd = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0);
       if (fd != -1)
       {
 #ifdef AIX
@@ -813,7 +813,7 @@ int SLPIfaceGetDefaultInfo(SLPIfaceInfo*
       SOCKET_ADDRESS_LIST * plist = 0;
       int i;
 
-      if ((fd = socket(AF_INET6, SOCK_DGRAM, 0)) != INVALID_SOCKET)
+      if ((fd = socket(AF_INET6, SOCK_DGRAM|SOCK_CLOEXEC, 0)) != INVALID_SOCKET)
       {
          /* We want to get a reasonable length buffer, so call empty first to fill in buflen, ignoring errors*/
          WSAIoctl(fd, SIO_ADDRESS_LIST_QUERY, 0, 0, buffer, buflen, &buflen, 0, 0);
@@ -850,7 +850,7 @@ int SLPIfaceGetDefaultInfo(SLPIfaceInfo*
       SOCKET_ADDRESS_LIST * plist = 0;
       int i;
 
-      if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) != INVALID_SOCKET)
+      if ((fd = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0)) != INVALID_SOCKET)
       {
          /* We want to get a reasonable length buffer, so call empty first to fill in buflen, ignoring errors */
          WSAIoctl(fd, SIO_ADDRESS_LIST_QUERY, 0, 0, buffer, buflen, &buflen, 0, 0);
@@ -1054,7 +1054,7 @@ int SLPIfaceGetInfo(const char * useifac
                {
                   if (SLPNetIsIPV4() && ((family == AF_INET) || (family == AF_UNSPEC)))
                   {
-                     fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+                     fd = socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_TCP);
                      if (fd != SLP_INVALID_SOCKET)
                      {
                         v4addr.sin_family = AF_INET;
--- ./common/slp_network.c.orig	2014-02-17 18:16:57.884239271 +0000
+++ ./common/slp_network.c	2014-02-17 18:21:48.434238757 +0000
@@ -88,7 +88,7 @@ sockfd_t SLPNetworkConnectStream(void *
    (void)timeout;
    /** @todo Make the socket non-blocking so we can timeout on connect. */
 
-   result = socket(a->sa_family, SOCK_STREAM, IPPROTO_TCP);
+   result = socket(a->sa_family, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_TCP);
    if (result != SLP_INVALID_SOCKET)
    {
       if (connect(result, peeraddr, sizeof(struct sockaddr_storage)) == 0)
@@ -127,7 +127,7 @@ sockfd_t SLPNetworkCreateDatagram(short
      recvfrom will fail on some platforms*/
    sockfd_t result;
 
-   result = socket(family, SOCK_DGRAM, IPPROTO_UDP);
+   result = socket(family, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_UDP);
    if (result != SLP_INVALID_SOCKET)
    {
 #ifndef _WIN32
--- ./common/slp_property.c.orig	2014-02-17 18:16:53.361239279 +0000
+++ ./common/slp_property.c	2014-02-17 18:23:39.306238561 +0000
@@ -217,7 +217,7 @@ static void InitializeMTUPropertyValue()
 #ifndef _WIN32
    family = SLPPropertyAsBoolean("net.slp.useIPv4") ? AF_INET : AF_INET6;
 
-   if ((sock = socket(family, SOCK_DGRAM, 0)) != SLP_INVALID_SOCKET)
+   if ((sock = socket(family, SOCK_DGRAM|SOCK_CLOEXEC, 0)) != SLP_INVALID_SOCKET)
    {
       if (getsockopt(sock, SOL_SOCKET, SO_RCVBUF, &value, &valSize) != -1)
       {
@@ -311,7 +311,7 @@ static bool ReadFileProperties(char cons
       rewind(conffp);
 
    /* open configuration file for read - missing file returns false */
-   if ((fp = s_UsePropertyFps ? conffp : fopen(conffile, "r")) != 0)
+   if ((fp = s_UsePropertyFps ? conffp : fopen(conffile, "re")) != 0)
    {
       /* read a line at a time - max 4k characters per line */
       while (fgets(alloced, CONFFILE_RDBUFSZ, fp))
@@ -400,11 +400,11 @@ static int ReadPropertyFiles(void)
    if (s_UsePropertyFps == 1)
    {
       if (*s_GlobalPropertyFile)
-         s_GlobalPropertyFp = fopen(s_GlobalPropertyFile, "r");
+         s_GlobalPropertyFp = fopen(s_GlobalPropertyFile, "re");
       if (*s_EnvPropertyFile)
-         s_EnvPropertyFp = fopen(s_EnvPropertyFile, "r");
+         s_EnvPropertyFp = fopen(s_EnvPropertyFile, "re");
       if (*s_AppPropertyFile)
-         s_AppPropertyFp = fopen(s_AppPropertyFile, "r");
+         s_AppPropertyFp = fopen(s_AppPropertyFile, "re");
       s_UsePropertyFps = 2;
    }
 
--- ./common/slp_spi.c.orig	2014-02-17 18:16:57.885239271 +0000
+++ ./common/slp_spi.c	2014-02-17 18:23:08.570238615 +0000
@@ -124,7 +124,7 @@ static SLPCryptoDSAKey * SLPSpiReadKeyFi
    FILE * fp;
    SLPCryptoDSAKey * result = 0;
 
-   fp = fopen(keyfile, "r");
+   fp = fopen(keyfile, "re");
    if (fp)
    {
       if (keytype == SLPSPI_KEY_TYPE_PUBLIC)
@@ -262,7 +262,7 @@ SLPSpiHandle SLPSpiOpen(const char * spi
    SLPSpiHandle result = 0;
    SLPSpiEntry * spientry;      
 
-   fp = fopen(spifile,"r");
+   fp = fopen(spifile,"re");
    if (fp)
    {
       result = xmalloc(sizeof(struct _SLPSpiHandle));
--- ./common/slp_xcast.c.orig	2014-02-17 18:16:57.882239271 +0000
+++ ./common/slp_xcast.c	2014-02-17 18:22:40.010238666 +0000
@@ -79,7 +79,7 @@ int SLPBroadcastSend(const SLPIfaceInfo
       if (ifaceinfo[socks->sock_count].bcast_addr->ss_family == AF_INET)
       {
          socks->sock[socks->sock_count] = socket(ifaceinfo[socks->sock_count]
-               .bcast_addr->ss_family, SOCK_DGRAM, 0);
+               .bcast_addr->ss_family, SOCK_DGRAM|SOCK_CLOEXEC, 0);
 
          if (socks->sock[socks->sock_count] == SLP_INVALID_SOCKET)
             return -1;  /* error creating socket */
@@ -190,7 +190,7 @@ int SLPMulticastSend(const SLPIfaceInfo
    {
       int family = ifaceinfo->iface_addr[socks->sock_count].ss_family;
 
-      socks->sock[socks->sock_count] = socket(family, SOCK_DGRAM, 0);
+      socks->sock[socks->sock_count] = socket(family, SOCK_DGRAM|SOCK_CLOEXEC, 0);
       if((socks->sock[socks->sock_count] == SLP_INVALID_SOCKET) ||
          (SetMulticastIF(family, socks->sock[socks->sock_count], &ifaceinfo->iface_addr[socks->sock_count]) ||
          (SetMulticastTTL(family, socks->sock[socks->sock_count], SLPPropertyAsInteger("net.slp.multicastTTL")))))
--- ./common/slp_xmalloc.c.orig	2014-02-17 18:16:57.884239271 +0000
+++ ./common/slp_xmalloc.c	2014-02-17 18:23:17.506238600 +0000
@@ -292,7 +292,7 @@ void _xfree(const char * file, int line,
 */
 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 == 0)
       return 0;
    G_xmalloc_freemem = freemem;
--- ./libslp/libslp_network.c.orig	2014-02-17 18:16:57.888239271 +0000
+++ ./libslp/libslp_network.c	2014-02-17 18:18:05.498239152 +0000
@@ -1618,7 +1618,7 @@ SLPError NetworkMultiUcastRqstRply(
     /*----------------------------------------*/
     /* Create a UDP socket to use             */
     /*----------------------------------------*/
-    udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
+    udp_socket = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0);
     if (udp_socket < 0)
     {
         result = SLP_NETWORK_ERROR;
@@ -2092,7 +2092,7 @@ SLPError NetworkMultiUcastRqstRply(
                 if (result == SLP_ERROR_RETRY_UNICAST)
                 {
                     result = SLP_OK;
-                    pconn->socket = socket(AF_INET, SOCK_STREAM, 0);
+                    pconn->socket = socket(AF_INET, SOCK_STREAM||SOCK_CLOEXEC, 0);
                     if (pconn->socket < 0)
                     {
                         result = SLP_NETWORK_ERROR;