From d4b7ceefdfb9c828799749419e8f8f7a36c2d7b8 Mon Sep 17 00:00:00 2001 From: Nicolás Reynolds Date: Tue, 22 Apr 2014 03:45:42 +0000 Subject: Tue Apr 22 03:41:19 UTC 2014 --- extra/rsync/CVE-2014-2855.patch | 83 +++++++++++++++++++++++++++++++++++++++++ extra/rsync/PKGBUILD | 17 ++++++--- 2 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 extra/rsync/CVE-2014-2855.patch (limited to 'extra/rsync') diff --git a/extra/rsync/CVE-2014-2855.patch b/extra/rsync/CVE-2014-2855.patch new file mode 100644 index 000000000..b73e77be9 --- /dev/null +++ b/extra/rsync/CVE-2014-2855.patch @@ -0,0 +1,83 @@ +From 0dedfbce2c1b851684ba658861fe9d620636c56a Mon Sep 17 00:00:00 2001 +From: Wayne Davison +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 + diff --git a/extra/rsync/PKGBUILD b/extra/rsync/PKGBUILD index 4744ab5b8..75710119d 100644 --- a/extra/rsync/PKGBUILD +++ b/extra/rsync/PKGBUILD @@ -1,25 +1,32 @@ -# $Id: PKGBUILD 195476 2013-09-30 19:07:27Z pierre $ +# $Id: PKGBUILD 211621 2014-04-21 17:22:50Z jgc $ pkgname=rsync pkgver=3.1.0 -pkgrel=1 +pkgrel=2 pkgdesc="A file transfer program to keep remote files in sync" arch=('i686' 'x86_64') -url="http://samba.anu.edu.au/rsync/" +url="http://rsync.samba.org/" license=('GPL3') depends=('perl' 'popt') backup=('etc/rsyncd.conf' 'etc/xinetd.d/rsync') source=("http://rsync.samba.org/ftp/rsync/$pkgname-$pkgver.tar.gz" "http://rsync.samba.org/ftp/rsync/$pkgname-$pkgver.tar.gz.asc" 'rsyncd.conf' 'rsync.xinetd' 'rsyncd.service' - 'rsyncd.socket' 'rsyncd@.service') + 'rsyncd.socket' 'rsyncd@.service' + 'CVE-2014-2855.patch') md5sums=('3be148772a33224771a8d4d2a028b132' 'SKIP' 'bce64d122a8e0f86872a4a21a03bc7f3' 'ea3e9277dc908bc51f9eddc0f6b935c1' '084140868d38cf3e937a2db716d47c0f' 'ae4c381e0c02d6132c7f6ded3f473041' - '53f94e613e0bc502d38dd61bd2cd7636') + '53f94e613e0bc502d38dd61bd2cd7636' + 'dacfe77bd72fbf6b6ba65c741c57f74c') + +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i ../CVE-2014-2855.patch +} build() { cd "$srcdir/$pkgname-$pkgver" -- cgit v1.2.3-54-g00ecf