Hello community,

here is the log from the commit of package libtirpc for openSUSE:Factory 
checked in at 2014-01-15 16:25:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libtirpc (Old)
 and      /work/SRC/openSUSE:Factory/.libtirpc.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libtirpc"

Changes:
--------
--- /work/SRC/openSUSE:Factory/libtirpc/libtirpc.changes        2013-12-10 
17:43:49.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libtirpc.new/libtirpc.changes   2014-01-15 
16:25:28.000000000 +0100
@@ -1,0 +2,13 @@
+Fri Jan 10 11:54:35 UTC 2014 - o...@suse.com
+
+- taddr2uaddr would return trailing garbage for AF_LOCAL addresses 
(libtirpc-taddr2uaddr-local.patch)
+
+-------------------------------------------------------------------
+Thu Jan  9 11:15:17 UTC 2014 - o...@suse.com
+
+- Fix a segfault in clntunix_create (libtirpc-clntunix_create.patch)
+- Fix misc segfaults in rpcb_* function (libtirpc-misc-segfaults.patch)
+- Fix _PATH_RPCBSOCK to match rpcbind behavior under systemd
+  (libtirpc-new-path-rpcbindsock.patch)
+
+-------------------------------------------------------------------

New:
----
  libtirpc-clntunix_create.patch
  libtirpc-misc-segfaults.patch
  libtirpc-new-path-rpcbindsock.patch
  libtirpc-taddr2uaddr-local.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libtirpc.spec ++++++
--- /var/tmp/diff_new_pack.ZCNuej/_old  2014-01-15 16:25:29.000000000 +0100
+++ /var/tmp/diff_new_pack.ZCNuej/_new  2014-01-15 16:25:29.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package libtirpc
 #
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -42,6 +42,10 @@
 Patch31:        libtirpc-getpmaphandle.patch
 Patch32:        libtirpc-pmap-setunset.patch
 Patch34:        libtirpc-bindresvport_blacklist.patch
+Patch35:        libtirpc-clntunix_create.patch
+Patch36:        libtirpc-misc-segfaults.patch
+Patch37:        libtirpc-new-path-rpcbindsock.patch
+Patch38:        libtirpc-taddr2uaddr-local.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %define debug_package_requires libtirpc1 = %{version}-%{release}
 
@@ -82,6 +86,10 @@
 %patch31 -p1
 %patch32 -p1
 %patch34 -p1
+%patch35 -p1
+%patch36 -p1
+%patch37 -p1
+%patch38 -p1
 
 %build
 autoreconf -fiv

++++++ libtirpc-clntunix_create.patch ++++++
commit 79bf7950d8c8bc9d323887ba0e5fa7555aa6644a
Author: Olaf Kirch <o...@suse.de>
Date:   Tue Feb 8 10:21:16 2011 +0100

    Fix a crash in clntunix_create
    
    Programs using clntunix_create would abort because glibc detected an
    attempt to free a bad pointer. It turns out that clntunix_create
    has two bugs:
    
     -  it sets up a struct netbuf to hold the sockaddr_un passed
        into the function, but instead of copying the data, it
        just assigns the sockaddr pointer - and eventually tries to
        free that pointer.
    
     -  when setting up the netbuf, it uses sizeof(raddr) instead
        of sizeof(*raddr).
    
    Instead of doing the trivial fixes, I changed the function to use
    the __rpc_set_netbuf utility function. While I was at it, I removed
    an unused local variable.
    
    Signed-off-by: Olaf Kirch <o...@suse.de>

---
 src/rpc_soc.c |   20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

Index: libtirpc-0.2.4-rc2/src/rpc_soc.c
===================================================================
--- libtirpc-0.2.4-rc2.orig/src/rpc_soc.c
+++ libtirpc-0.2.4-rc2/src/rpc_soc.c
@@ -564,16 +564,12 @@ clntunix_create(raddr, prog, vers, sockp
        u_int sendsz;
        u_int recvsz;
 {
-       struct netbuf *svcaddr;
-       CLIENT *cl;
+       struct netbuf svcaddr;
+       CLIENT *cl = NULL;
        int len;
 
-       cl = NULL;
-       svcaddr = NULL;
-       if (((svcaddr = malloc(sizeof(struct netbuf))) == NULL ) ||
-           ((svcaddr->buf = malloc(sizeof(struct sockaddr_un))) == NULL)) {
-               if (svcaddr != NULL)
-                       free(svcaddr);
+       memset(&svcaddr, 0, sizeof(svcaddr));
+       if (__rpc_set_netbuf(&svcaddr, raddr, sizeof(*raddr)) == NULL) {
                rpc_createerr.cf_stat = RPC_SYSTEMERROR;
                rpc_createerr.cf_error.re_errno = errno;
                return(cl);
@@ -590,14 +586,10 @@ clntunix_create(raddr, prog, vers, sockp
                        goto done;
                }
        }
-       svcaddr->buf = raddr;
-       svcaddr->len = sizeof(raddr);
-       svcaddr->maxlen = sizeof (struct sockaddr_un);
-       cl = clnt_vc_create(*sockp, svcaddr, prog,
+       cl = clnt_vc_create(*sockp, &svcaddr, prog,
            vers, sendsz, recvsz);
 done:
-       free(svcaddr->buf);
-       free(svcaddr);
+       free(svcaddr.buf);
        return(cl);
 }
 
++++++ libtirpc-misc-segfaults.patch ++++++
This patch fixes various unexpected segfaults caused by invoking rpcb_* 
functions with
NULL arguments.


diff -u -ur libtirpc-0.2.4-rc2/src/rpcb_clnt.c 
libtirpc-0.2.4-rc2/src/rpcb_clnt.c
--- libtirpc-0.2.4-rc2/src/rpcb_clnt.c  2014-01-09 09:09:59.000000000 +0100
+++ libtirpc-0.2.4-rc2/src/rpcb_clnt.c  2014-01-09 11:13:01.000000000 +0100
@@ -287,6 +287,18 @@
        struct address_cache *ad_cache;
        char *tmpaddr;
 
+       if (nconf == NULL) {
+               rpc_createerr.cf_stat = RPC_UNKNOWNPROTO;
+               return NULL;
+       }
+
+       if (nconf->nc_protofmly != NULL &&
+           strcmp(nconf->nc_protofmly, NC_LOOPBACK) != 0 &&
+           host == NULL) {
+               rpc_createerr.cf_stat = RPC_UNKNOWNHOST;
+               return NULL;
+       }
+
 /* VARIABLES PROTECTED BY rpcbaddr_cache_lock:  ad_cache */
 
        /* Get the address of the rpcbind.  Check cache first */
@@ -296,6 +308,7 @@
        addr_to_delete.len = 0;
        rwlock_rdlock(&rpcbaddr_cache_lock);
        ad_cache = NULL;
+
        if (host != NULL)
                ad_cache = check_cache(host, nconf->nc_netid);
        if (ad_cache != NULL) {
@@ -303,7 +316,7 @@
                client = clnt_tli_create(RPC_ANYFD, nconf, addr,
                    (rpcprog_t)RPCBPROG, (rpcvers_t)RPCBVERS4, 0, 0);
                if (client != NULL) {
-                       if (targaddr)
+                       if (targaddr && ad_cache->ac_uaddr)
                                *targaddr = strdup(ad_cache->ac_uaddr);
                        rwlock_unlock(&rpcbaddr_cache_lock);
                        return (client);
@@ -353,9 +366,11 @@
                } else {
                        struct sockaddr_un sun;
 
-                       *targaddr = malloc(sizeof(sun.sun_path));
-                       strncpy(*targaddr, _PATH_RPCBINDSOCK,
-                           sizeof(sun.sun_path));
+                       if (targaddr) {
+                               *targaddr = malloc(sizeof(sun.sun_path));
+                               strncpy(*targaddr, _PATH_RPCBINDSOCK,
+                                   sizeof(sun.sun_path));
+                       }
                        return (client);
                }
        } else {
@@ -402,7 +417,8 @@
 
                if (client) {
                        tmpaddr = targaddr ? taddr2uaddr(nconf, &taddr) : NULL;
-                       add_cache(host, nconf->nc_netid, &taddr, tmpaddr);
+                       if (host)
+                               add_cache(host, nconf->nc_netid, &taddr, 
tmpaddr);
                        if (targaddr)
                                *targaddr = tmpaddr;
                        break;
++++++ libtirpc-new-path-rpcbindsock.patch ++++++
Starting with openSUSE 13.1, rpcbind creates its socket in /var rather that 
/var/run.
Update libtirpc to go looking for it in the right place.

Signed-off-by: Olaf Kirch <o...@suse.de>
---
 tirpc/rpc/rpcb_prot.h |    2 +-
 tirpc/rpc/rpcb_prot.x |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Index: libtirpc-0.2.4-rc2/tirpc/rpc/rpcb_prot.h
===================================================================
--- libtirpc-0.2.4-rc2/tirpc/rpc/rpcb_prot.h
+++ libtirpc-0.2.4-rc2/tirpc/rpc/rpcb_prot.h
@@ -476,7 +476,7 @@ extern bool_t xdr_netbuf(XDR *, struct n
 #define RPCBVERS_3 RPCBVERS
 #define RPCBVERS_4 RPCBVERS4
 
-#define _PATH_RPCBINDSOCK "/var/run/rpcbind.sock"
+#define _PATH_RPCBINDSOCK "/run/rpcbind.sock"
 
 #else /* ndef _KERNEL */
 #ifdef __cplusplus
Index: libtirpc-0.2.4-rc2/tirpc/rpc/rpcb_prot.x
===================================================================
--- libtirpc-0.2.4-rc2/tirpc/rpc/rpcb_prot.x
+++ libtirpc-0.2.4-rc2/tirpc/rpc/rpcb_prot.x
@@ -410,7 +410,7 @@ program RPCBPROG {
 %#define       RPCBVERS_3              RPCBVERS
 %#define       RPCBVERS_4              RPCBVERS4
 %
-%#define       _PATH_RPCBINDSOCK       "/var/run/rpcbind.sock"
+%#define       _PATH_RPCBINDSOCK       "/run/rpcbind.sock"
 %
 %#else         /* ndef _KERNEL */
 %#ifdef __cplusplus
++++++ libtirpc-taddr2uaddr-local.patch ++++++
taddr2uaddr would return trailing garbage for AF_LOCAL addresses

taddr2uaddr assumed that the sun_path field of an AF_LOCAL address
was always NULL terminated, but that is not necessarily the case,
especially if the buffer was allocated using the correct SUN_LEN().

Signed-off-by: Olaf Kirch <o...@suse.de>
---
 src/rpc_generic.c |   12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

Index: libtirpc-0.2.4-rc2/src/rpc_generic.c
===================================================================
--- libtirpc-0.2.4-rc2.orig/src/rpc_generic.c
+++ libtirpc-0.2.4-rc2/src/rpc_generic.c
@@ -608,6 +608,7 @@ __rpc_taddr2uaddr_af(int af, const struc
        struct sockaddr_in6 *sin6;
        char namebuf6[INET6_ADDRSTRLEN];
 #endif
+       int path_len;
        u_int16_t port;
 
        if (nbuf->len <= 0)
@@ -638,13 +639,12 @@ __rpc_taddr2uaddr_af(int af, const struc
 #endif
        case AF_LOCAL:
                sun = nbuf->buf;
-               /*      if (asprintf(&ret, "%.*s", (int)(sun->sun_len -
-                   offsetof(struct sockaddr_un, sun_path)),
-                   sun->sun_path) < 0)*/
-               if (asprintf(&ret, "%.*s", (int)(sizeof(*sun) -
-                                                offsetof(struct sockaddr_un, 
sun_path)),
-                            sun->sun_path) < 0)
 
+               path_len = nbuf->len - offsetof(struct sockaddr_un, sun_path);
+               if (path_len < 0)
+                       return NULL;
+
+               if (asprintf(&ret, "%.*s", path_len, sun->sun_path) < 0)
                        return (NULL);
                break;
        default:
-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to