Hello community,

here is the log from the commit of package rsync for openSUSE:Factory checked 
in at 2014-04-23 20:35:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rsync (Old)
 and      /work/SRC/openSUSE:Factory/.rsync.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rsync"

Changes:
--------
--- /work/SRC/openSUSE:Factory/rsync/rsync.changes      2013-10-25 
18:53:54.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.rsync.new/rsync.changes 2014-04-23 
20:35:49.000000000 +0200
@@ -1,0 +2,7 @@
+Tue Apr 15 14:57:34 UTC 2014 - vci...@suse.com
+
+- fix for CVE-2014-2855 (bnc#873740)
+  * a denial of service via CPU consumption
+  * added rsync-CVE-2014-2855.patch
+
+-------------------------------------------------------------------

New:
----
  rsync-CVE-2014-2855.patch

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

Other differences:
------------------
++++++ rsync.spec ++++++
--- /var/tmp/diff_new_pack.87q7tB/_old  2014-04-23 20:35:49.000000000 +0200
+++ /var/tmp/diff_new_pack.87q7tB/_new  2014-04-23 20:35:49.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package rsync
 #
-# 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
@@ -43,6 +43,7 @@
 Source12:       %{name}.keyring
 Patch3:         system-zlib.diff
 Patch4:         0001-use-lp_num_modules-instead-of-the-removed-lp_numserv.patch
+Patch5:         rsync-CVE-2014-2855.patch
 BuildRequires:  autoconf
 BuildRequires:  libacl-devel
 BuildRequires:  libattr-devel
@@ -86,6 +87,7 @@
 %patch3
 %endif
 %patch4 -p1
+%patch5 -p1
 patch -p1 < patches/acls.diff
 patch -p1 < patches/xattrs.diff
 patch -p1 < patches/slp.diff


++++++ rsync-CVE-2014-2855.patch ++++++
>From 0dedfbce2c1b851684ba658861fe9d620636c56a Mon Sep 17 00:00:00 2001
From: Wayne Davison <way...@samba.org>
Date: Sun, 13 Apr 2014 13:44:58 -0700
Subject: [PATCH] Avoid infinite wait reading secrets file.

---
 authenticate.c |   24 +++++++++++++-----------
 1 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/authenticate.c b/authenticate.c
index 3381b8c..c92746c 100644
--- a/authenticate.c
+++ b/authenticate.c
@@ -102,15 +102,16 @@ static const char *check_secret(int module, const char 
*user, const char *group,
        char pass2[MAX_DIGEST_LEN*2];
        const char *fname = lp_secrets_file(module);
        STRUCT_STAT st;
-       int fd, ok = 1;
+       int ok = 1;
        int user_len = strlen(user);
        int group_len = group ? strlen(group) : 0;
        char *err;
+       FILE *fh;
 
-       if (!fname || !*fname || (fd = open(fname, O_RDONLY)) < 0)
+       if (!fname || !*fname || (fh = fopen(fname, "r")) == NULL)
                return "no secrets file";
 
-       if (do_fstat(fd, &st) == -1) {
+       if (do_fstat(fileno(fh), &st) == -1) {
                rsyserr(FLOG, errno, "fstat(%s)", fname);
                ok = 0;
        } else if (lp_strict_modes(module)) {
@@ -123,29 +124,30 @@ static const char *check_secret(int module, const char 
*user, const char *group,
                }
        }
        if (!ok) {
-               close(fd);
+               fclose(fh);
                return "ignoring secrets file";
        }
 
        if (*user == '#') {
                /* Reject attempt to match a comment. */
-               close(fd);
+               fclose(fh);
                return "invalid username";
        }
 
        /* Try to find a line that starts with the user (or @group) name and a 
':'. */
        err = "secret not found";
-       while ((user || group) && read_line_old(fd, line, sizeof line, 1)) {
-               const char **ptr, *s;
+       while ((user || group) && fgets(line, sizeof line, fh) != NULL) {
+               const char **ptr, *s = strtok(line, "\n\r");
                int len;
-               if (*line == '@') {
+               if (!s)
+                       continue;
+               if (*s == '@') {
                        ptr = &group;
                        len = group_len;
-                       s = line+1;
+                       s++;
                } else {
                        ptr = &user;
                        len = user_len;
-                       s = line;
                }
                if (!*ptr || strncmp(s, *ptr, len) != 0 || s[len] != ':')
                        continue;
@@ -158,7 +160,7 @@ static const char *check_secret(int module, const char 
*user, const char *group,
                *ptr = NULL; /* Don't look for name again. */
        }
 
-       close(fd);
+       fclose(fh);
 
        memset(line, 0, sizeof line);
        memset(pass2, 0, sizeof pass2);
-- 
1.7.0.4



-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to