Package: release.debian.org Severity: normal Tags: jessie User: release.debian....@packages.debian.org Usertags: pu
Dear Release Team, I would like to update drbd-utils in Jessie to fix the IPv6-specific issue outlined in #808315. The issue is fixed by backporting a commit from upstream's git. The change is also present in 8.9.5-1 currently in unstable. A full source debdiff is attached. Regards, Apollon
diff -Nru drbd-utils-8.9.2~rc1/debian/changelog drbd-utils-8.9.2~rc1/debian/changelog --- drbd-utils-8.9.2~rc1/debian/changelog 2014-11-23 17:40:27.000000000 +0200 +++ drbd-utils-8.9.2~rc1/debian/changelog 2016-01-04 14:36:03.000000000 +0200 @@ -1,3 +1,9 @@ +drbd-utils (8.9.2~rc1-2+deb8u1) jessie; urgency=medium + + * Fix drbdadm adjust with IPv6 peer addresses (Closes: #808315) + + -- Apollon Oikonomopoulos <apoi...@debian.org> Mon, 04 Jan 2016 14:23:24 +0200 + drbd-utils (8.9.2~rc1-2) unstable; urgency=medium * Build-Depend on docbook-xml to avoid fetching the docbook DTDs from the diff -Nru drbd-utils-8.9.2~rc1/debian/gbp.conf drbd-utils-8.9.2~rc1/debian/gbp.conf --- drbd-utils-8.9.2~rc1/debian/gbp.conf 2014-11-23 11:40:38.000000000 +0200 +++ drbd-utils-8.9.2~rc1/debian/gbp.conf 2016-01-04 14:23:00.000000000 +0200 @@ -1,3 +1,7 @@ +[buildpackage] +dist = jessie + [DEFAULT] +debian-branch = debian/stable/jessie sign-tags = True pristine-tar = True diff -Nru drbd-utils-8.9.2~rc1/debian/patches/fix-ipv6-address-output drbd-utils-8.9.2~rc1/debian/patches/fix-ipv6-address-output --- drbd-utils-8.9.2~rc1/debian/patches/fix-ipv6-address-output 1970-01-01 02:00:00.000000000 +0200 +++ drbd-utils-8.9.2~rc1/debian/patches/fix-ipv6-address-output 2016-01-04 14:19:56.000000000 +0200 @@ -0,0 +1,100 @@ +commit 9186b8e0fd8b76553b87d0a64b4a071c09b255c5 +Author: Lars Ellenberg <lars.ellenb...@linbit.com> +Date: Mon Dec 14 17:34:46 2015 +0100 + + drbdsetup: show: fix ipv6 address output + + Code restructuring introduced a bug using some character buffer + both as target and source of an sprintf(). + + While at it, use getnameinfo rather than inet_ntop, + we want to include the scope in the output (if any). + +diff --git a/user/v84/config_flags.c b/user/v84/config_flags.c +index 3b0303f..c6f867e 100644 +--- a/user/v84/config_flags.c ++++ b/user/v84/config_flags.c +@@ -526,10 +526,16 @@ void sprint_address(char *buffer, void *address, int addr_len) + inet_ntoa(a.addr4.sin_addr), + ntohs(a.addr4.sin_port)); + } else if (a.addr.sa_family == AF_INET6) { +- sprintf(buffer, "%s [%s]:%d", +- af_to_str(a.addr6.sin6_family), +- inet_ntop(a.addr6.sin6_family, &a.addr6.sin6_addr, buffer, INET6_ADDRSTRLEN), +- ntohs(a.addr6.sin6_port)); ++ char buf2[ADDRESS_STR_MAX]; ++ int n; ++ buf2[0] = 0; ++ getnameinfo(&a.addr, addr_len, buf2, sizeof(buf2), ++ NULL, 0, NI_NUMERICHOST|NI_NUMERICSERV); ++ n = snprintf(buffer, ADDRESS_STR_MAX, "%s [%s]:%d", ++ af_to_str(a.addr6.sin6_family), buf2, ++ ntohs(a.addr6.sin6_port)); ++ assert(n > 0); ++ assert(n < ADDRESS_STR_MAX); /* there should be no need to truncate */ + } else { + sprintf(buffer, "[unknown af=%d, len=%d]", a.addr.sa_family, addr_len); + } +@@ -537,8 +543,7 @@ void sprint_address(char *buffer, void *address, int addr_len) + + static const char *get_address(struct context_def *ctx, struct field_def *field, struct nlattr *nla) + { +- static char buffer[INET6_ADDRSTRLEN]; +- ++ static char buffer[ADDRESS_STR_MAX]; + sprint_address(buffer, nla_data(nla), nla_len(nla)); + + return buffer; +diff --git a/user/v84/config_flags.h b/user/v84/config_flags.h +index 4d6919e..4e34c3b 100644 +--- a/user/v84/config_flags.h ++++ b/user/v84/config_flags.h +@@ -60,6 +60,8 @@ extern const char *double_quote_string(const char *str); + + /* Also used by argument processing in drbdsetup */ + extern int nla_put_address(struct msg_buff *msg, int attrtype, const char *arg); ++/* INET6_ADDRSTRLEN + 'ipv6 []:54321 + possible scope + some */ ++#define ADDRESS_STR_MAX 256 + extern void sprint_address(char *buffer, void *address, int addr_len); + extern int get_af_ssocks(int warn_and_use_default); + +diff --git a/user/v84/drbdsetup.c b/user/v84/drbdsetup.c +index 247866e..8a4c5da 100644 +--- a/user/v84/drbdsetup.c ++++ b/user/v84/drbdsetup.c +@@ -1538,8 +1538,7 @@ static int generic_get_cmd(const struct drbd_cmd *cm, int argc, char **argv) + + static void show_address(void* address, int addr_len) + { +- char buffer[INET6_ADDRSTRLEN]; +- ++ char buffer[ADDRESS_STR_MAX]; + sprint_address(buffer, address, addr_len); + printI("address\t\t\t%s;\n", buffer); + } +diff --git a/user/v9/drbdsetup.c b/user/v9/drbdsetup.c +index 27a5bb6..33d39dc 100644 +--- a/user/v9/drbdsetup.c ++++ b/user/v9/drbdsetup.c +@@ -2499,11 +2499,17 @@ static char *address_str(char *buffer, void* address, int addr_len) + ntohs(a.addr4.sin_port)); + return buffer; + } else if (a.addr.sa_family == AF_INET6) { +- char buffer2[INET6_ADDRSTRLEN]; +- snprintf(buffer, ADDRESS_STR_MAX, "%s:[%s]:%u", +- af_to_str(a.addr6.sin6_family), +- inet_ntop(a.addr6.sin6_family, &a.addr6.sin6_addr, buffer2, INET6_ADDRSTRLEN), ++ char buf2[ADDRESS_STR_MAX]; ++ int n; ++ buf2[0] = 0; ++ /* inet_ntop does not include scope info */ ++ getnameinfo(&a.addr, addr_len, buf2, sizeof(buf2), ++ NULL, 0, NI_NUMERICHOST|NI_NUMERICSERV); ++ n = snprintf(buffer, ADDRESS_STR_MAX, "%s:[%s]:%u", ++ af_to_str(a.addr6.sin6_family), buf2, + ntohs(a.addr6.sin6_port)); ++ assert(n > 0); ++ assert(n < ADDRESS_STR_MAX); /* there should be no need to truncate */ + return buffer; + } else + return NULL; diff -Nru drbd-utils-8.9.2~rc1/debian/patches/series drbd-utils-8.9.2~rc1/debian/patches/series --- drbd-utils-8.9.2~rc1/debian/patches/series 2014-11-23 12:43:33.000000000 +0200 +++ drbd-utils-8.9.2~rc1/debian/patches/series 2016-01-04 14:20:02.000000000 +0200 @@ -5,3 +5,4 @@ add-lsb-description.patch initscript-remove-path.patch fix-8.4-manpages +fix-ipv6-address-output