Hello community, here is the log from the commit of package memcached for openSUSE:Factory checked in at 2020-06-11 14:47:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/memcached (Old) and /work/SRC/openSUSE:Factory/.memcached.new.3606 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "memcached" Thu Jun 11 14:47:31 2020 rev:47 rq:813310 version:1.6.6 Changes: -------- --- /work/SRC/openSUSE:Factory/memcached/memcached.changes 2020-04-25 20:08:25.779560771 +0200 +++ /work/SRC/openSUSE:Factory/.memcached.new.3606/memcached.changes 2020-06-11 14:47:51.837935184 +0200 @@ -1,0 +2,9 @@ +Sat Jun 6 05:37:41 UTC 2020 - Andreas Stieger <[email protected]> + +- update to 1.6.6: + * Fix crash on shutdown when handling signals with TLS enabled + * Disable aarch64 hw crc32 function for now + * Pull in BigEndian-compatible crc32c + * minimum libevent version is 2.x + +------------------------------------------------------------------- Old: ---- memcached-1.6.5.tar.gz New: ---- memcached-1.6.6.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ memcached.spec ++++++ --- /var/tmp/diff_new_pack.5rxx5t/_old 2020-06-11 14:47:52.417936873 +0200 +++ /var/tmp/diff_new_pack.5rxx5t/_new 2020-06-11 14:47:52.421936885 +0200 @@ -28,7 +28,7 @@ %endif Name: memcached -Version: 1.6.5 +Version: 1.6.6 Release: 0 Summary: A high-performance, distributed memory object caching system License: BSD-3-Clause @@ -42,7 +42,7 @@ BuildRequires: autoconf BuildRequires: automake BuildRequires: cyrus-sasl-devel -BuildRequires: libevent-devel +BuildRequires: libevent-devel >= 2.0 BuildRequires: libtool %if %{with tls} BuildRequires: openssl-devel >= 1.1.0 ++++++ memcached-1.6.5.tar.gz -> memcached-1.6.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/README.md new/memcached-1.6.6/README.md --- old/memcached-1.6.5/README.md 2020-04-04 04:14:26.000000000 +0200 +++ new/memcached-1.6.6/README.md 2020-05-13 05:24:24.000000000 +0200 @@ -19,7 +19,9 @@ * libevent, https://www.monkey.org/~provos/libevent/ (libevent-dev) * libseccomp, (optional, experimental, linux) - enables process restrictions for - better security. Tested only on x86_64 architectures. + better security. Tested only on x86-64 architectures. +* openssl, (optional) - enables TLS support. need relatively up to date + version. ## Environment @@ -28,13 +30,17 @@ don't swap. memcached does non-blocking network I/O, but not disk. (it should never go to disk, or you've lost the whole point of it) +## Build status + +See https://build.memcached.org/ for multi-platform regression testing status. + ## Bug reports Feel free to use the issue tracker on github. **If you are reporting a security bug** please contact a maintainer privately. We follow responsible disclosure: we handle reports privately, prepare a -patch, allow notifications to vendor lists, then run a fix release and your +patch, allow notifications to vendor lists. Then we push a fix release and your bug can be posted publicly with credit in our release notes and commit history. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/configure new/memcached-1.6.6/configure --- old/memcached-1.6.5/configure 2020-04-13 20:46:27.000000000 +0200 +++ new/memcached-1.6.6/configure 2020-05-13 05:32:50.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for memcached 1.6.5. +# Generated by GNU Autoconf 2.69 for memcached 1.6.6. # # Report bugs to <[email protected]>. # @@ -580,8 +580,8 @@ # Identity of this package. PACKAGE_NAME='memcached' PACKAGE_TARNAME='memcached' -PACKAGE_VERSION='1.6.5' -PACKAGE_STRING='memcached 1.6.5' +PACKAGE_VERSION='1.6.6' +PACKAGE_STRING='memcached 1.6.6' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -761,7 +761,6 @@ enable_option_checking enable_silent_rules enable_dependency_tracking -enable_arm_crc32 enable_extstore enable_seccomp enable_sasl @@ -1336,7 +1335,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures memcached 1.6.5 to adapt to many kinds of systems. +\`configure' configures memcached 1.6.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1407,7 +1406,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of memcached 1.6.5:";; + short | recursive ) echo "Configuration of memcached 1.6.6:";; esac cat <<\_ACEOF @@ -1421,7 +1420,6 @@ do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build - --enable-arm-crc32 Enable ARMv8 CRC32 instructions --disable-extstore Disable external storage (extstore) --enable-seccomp Enable seccomp restrictions EXPERIMENTAL --enable-sasl Enable SASL authentication @@ -1517,7 +1515,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -memcached configure 1.6.5 +memcached configure 1.6.6 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2169,7 +2167,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by memcached $as_me 1.6.5, which was +It was created by memcached $as_me 1.6.6, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3104,7 +3102,7 @@ # Define the identity of the package. PACKAGE='memcached' - VERSION='1.6.5' + VERSION='1.6.6' cat >>confdefs.h <<_ACEOF @@ -4906,11 +4904,6 @@ -# Check whether --enable-arm_crc32 was given. -if test "${enable_arm_crc32+set}" = set; then : - enableval=$enable_arm_crc32; -fi - # Check whether --enable-extstore was given. if test "${enable_extstore+set}" = set; then : @@ -7844,7 +7837,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by memcached $as_me 1.6.5, which was +This file was extended by memcached $as_me 1.6.6, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -7910,7 +7903,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -memcached config.status 1.6.5 +memcached config.status 1.6.6 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/configure.ac new/memcached-1.6.6/configure.ac --- old/memcached-1.6.5/configure.ac 2020-04-13 20:39:14.000000000 +0200 +++ new/memcached-1.6.6/configure.ac 2020-05-13 05:24:24.000000000 +0200 @@ -82,8 +82,10 @@ AM_PROG_CC_C_O AC_PROG_INSTALL -AC_ARG_ENABLE(arm_crc32, - [AS_HELP_STRING([--enable-arm-crc32], [Enable ARMv8 CRC32 instructions])]) +dnl ARM crc32 optimization is disabled until we have hardware for an automated +dnl regression test. +dnl AC_ARG_ENABLE(arm_crc32, +dnl [AS_HELP_STRING([--enable-arm-crc32], [Enable ARMv8 CRC32 instructions])]) AC_ARG_ENABLE(extstore, [AS_HELP_STRING([--disable-extstore], [Disable external storage (extstore)])]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/crc32c.c new/memcached-1.6.6/crc32c.c --- old/memcached-1.6.5/crc32c.c 2020-04-04 04:14:26.000000000 +0200 +++ new/memcached-1.6.6/crc32c.c 2020-05-13 05:24:24.000000000 +0200 @@ -1,6 +1,6 @@ /* crc32c.c -- compute CRC-32C using the Intel crc32 instruction - * Copyright (C) 2013 Mark Adler - * Version 1.1 1 Aug 2013 Mark Adler + * Copyright (C) 2013, 2015 Mark Adler + * Version 1.3 31 Dec 2015 Mark Adler */ /* @@ -31,19 +31,16 @@ /* Version history: 1.0 10 Feb 2013 First version 1.1 1 Aug 2013 Correct comments on why three crc instructions in parallel + 1.2 1 Nov 2015 Add const qualifier to avoid compiler warning + Load entire input into memory (test code) + Argument gives number of times to repeat (test code) + Argument < 0 forces software implementation (test code) + 1.3 31 Dec 2015 Check for Intel architecture using compiler macro + Support big-endian processors in software calculation + Add header for external use */ -/* This version has been modified by dormando for inclusion in memcached */ - -#include <stdio.h> -#include <stdlib.h> -#include <stdint.h> -#include <unistd.h> #include <pthread.h> -#include "config.h" -#if defined(__linux__) && defined(__aarch64__) -#include <sys/auxv.h> -#endif #include "crc32c.h" crc_func crc32c; @@ -51,133 +48,19 @@ /* CRC-32C (iSCSI) polynomial in reversed bit order. */ #define POLY 0x82f63b78 -/* Table for a quadword-at-a-time software crc. */ -static pthread_once_t crc32c_once_sw = PTHREAD_ONCE_INIT; -static uint32_t crc32c_table[8][256]; - -/* Construct table for software CRC-32C calculation. */ -static void crc32c_init_sw(void) -{ - uint32_t n, crc, k; - - for (n = 0; n < 256; n++) { - crc = n; - crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; - crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; - crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; - crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; - crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; - crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; - crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; - crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; - crc32c_table[0][n] = crc; - } - for (n = 0; n < 256; n++) { - crc = crc32c_table[0][n]; - for (k = 1; k < 8; k++) { - crc = crc32c_table[0][crc & 0xff] ^ (crc >> 8); - crc32c_table[k][n] = crc; - } - } -} - -/* Table-driven software version as a fall-back. This is about 15 times slower - than using the hardware instructions. This assumes little-endian integers, - as is the case on Intel processors that the assembler code here is for. */ -static uint32_t crc32c_sw(uint32_t crci, const void *buf, size_t len) -{ - const unsigned char *next = buf; - uint64_t crc; - - pthread_once(&crc32c_once_sw, crc32c_init_sw); - crc = crci ^ 0xffffffff; - while (len && ((uintptr_t)next & 7) != 0) { - crc = crc32c_table[0][(crc ^ *next++) & 0xff] ^ (crc >> 8); - len--; - } - while (len >= 8) { - crc ^= *(uint64_t *)next; - crc = crc32c_table[7][crc & 0xff] ^ - crc32c_table[6][(crc >> 8) & 0xff] ^ - crc32c_table[5][(crc >> 16) & 0xff] ^ - crc32c_table[4][(crc >> 24) & 0xff] ^ - crc32c_table[3][(crc >> 32) & 0xff] ^ - crc32c_table[2][(crc >> 40) & 0xff] ^ - crc32c_table[1][(crc >> 48) & 0xff] ^ - crc32c_table[0][crc >> 56]; - next += 8; - len -= 8; - } - while (len) { - crc = crc32c_table[0][(crc ^ *next++) & 0xff] ^ (crc >> 8); - len--; - } - return (uint32_t)crc ^ 0xffffffff; -} - -/* Hardware CRC support for aarch64 platform */ -#if defined(__linux__) && defined(__aarch64__) && defined(ARM_CRC32) +uint32_t crc32c_sw(uint32_t crc, void const *buf, size_t len); +uint32_t crc32c_sw_little(uint32_t crc, void const *buf, size_t len); +uint32_t crc32c_sw_big(uint32_t crc, void const *buf, size_t len); +#ifdef __x86_64__ -#define CRC32CX(crc, value) __asm__("crc32cx %w[c], %w[c], %x[v]":[c]"+r"(crc):[v]"r"(+value)) -#define CRC32CW(crc, value) __asm__("crc32cw %w[c], %w[c], %w[v]":[c]"+r"(crc):[v]"r"(+value)) -#define CRC32CH(crc, value) __asm__("crc32ch %w[c], %w[c], %w[v]":[c]"+r"(crc):[v]"r"(+value)) -#define CRC32CB(crc, value) __asm__("crc32cb %w[c], %w[c], %w[v]":[c]"+r"(crc):[v]"r"(+value)) - -#ifndef HWCAP_CRC32 -#define HWCAP_CRC32 (1 << 7) -#endif /* HWCAP for crc32 */ - -static uint32_t crc32c_hw_aarch64(uint32_t crc, const void* buf, size_t len) -{ - const uint8_t* p_buf = buf; - uint64_t crc64bit = crc; - for (size_t i = 0; i < len / sizeof(uint64_t); i++) { - CRC32CX(crc64bit, *(uint64_t*) p_buf); - p_buf += sizeof(uint64_t); - } - - uint32_t crc32bit = (uint32_t) crc64bit; - len &= sizeof(uint64_t) - 1; - switch (len) { - case 7: - CRC32CB(crc32bit, *p_buf++); - case 6: - CRC32CH(crc32bit, *(uint16_t*) p_buf); - p_buf += 2; - case 4: - CRC32CW(crc32bit, *(uint32_t*) p_buf); - break; - case 3: - CRC32CB(crc32bit, *p_buf++); - case 2: - CRC32CH(crc32bit, *(uint16_t*) p_buf); - break; - case 5: - CRC32CW(crc32bit, *(uint32_t*) p_buf); - p_buf += 4; - case 1: - CRC32CB(crc32bit, *p_buf); - break; - case 0: - break; - } - - return crc32bit; -} -#endif - -/* Apply if the platform is intel */ -#if defined(__X86_64__)||defined(__x86_64__)||defined(__ia64__) +/* Hardware CRC-32C for Intel and compatible processors. */ /* Multiply a matrix times a vector over the Galois field of two elements, GF(2). Each element is a bit in an unsigned integer. mat must have at least as many entries as the power of two for most significant one bit in vec. */ -static inline uint32_t gf2_matrix_times(uint32_t *mat, uint32_t vec) -{ - uint32_t sum; - - sum = 0; +static inline uint32_t gf2_matrix_times(uint32_t *mat, uint32_t vec) { + uint32_t sum = 0; while (vec) { if (vec & 1) sum ^= *mat; @@ -189,11 +72,8 @@ /* Multiply a matrix by itself over GF(2). Both mat and square must have 32 rows. */ -static inline void gf2_matrix_square(uint32_t *square, uint32_t *mat) -{ - int n; - - for (n = 0; n < 32; n++) +static inline void gf2_matrix_square(uint32_t *square, uint32_t *mat) { + for (unsigned n = 0; n < 32; n++) square[n] = gf2_matrix_times(mat, mat[n]); } @@ -202,16 +82,13 @@ largest power of two less than len. The result for len == 0 is the same as for len == 1. A version of this routine could be easily written for any len, but that is not needed for this application. */ -static void crc32c_zeros_op(uint32_t *even, size_t len) -{ - int n; - uint32_t row; +static void crc32c_zeros_op(uint32_t *even, size_t len) { uint32_t odd[32]; /* odd-power-of-two zeros operator */ /* put operator for one zero bit in odd */ odd[0] = POLY; /* CRC-32C polynomial */ - row = 1; - for (n = 1; n < 32; n++) { + uint32_t row = 1; + for (unsigned n = 1; n < 32; n++) { odd[n] = row; row <<= 1; } @@ -235,19 +112,17 @@ } while (len); /* answer ended up in odd -- copy to even */ - for (n = 0; n < 32; n++) + for (unsigned n = 0; n < 32; n++) even[n] = odd[n]; } /* Take a length and build four lookup tables for applying the zeros operator for that length, byte-by-byte on the operand. */ -static void crc32c_zeros(uint32_t zeros[][256], size_t len) -{ - uint32_t n; +static void crc32c_zeros(uint32_t zeros[][256], size_t len) { uint32_t op[32]; crc32c_zeros_op(op, len); - for (n = 0; n < 256; n++) { + for (unsigned n = 0; n < 256; n++) { zeros[0][n] = gf2_matrix_times(op, n); zeros[1][n] = gf2_matrix_times(op, n << 8); zeros[2][n] = gf2_matrix_times(op, n << 16); @@ -256,8 +131,7 @@ } /* Apply the zeros operator table to crc. */ -static inline uint32_t crc32c_shift(uint32_t zeros[][256], uint32_t crc) -{ +static inline uint32_t crc32c_shift(uint32_t zeros[][256], uint32_t crc) { return zeros[0][crc & 0xff] ^ zeros[1][(crc >> 8) & 0xff] ^ zeros[2][(crc >> 16) & 0xff] ^ zeros[3][crc >> 24]; } @@ -278,27 +152,23 @@ static uint32_t crc32c_short[4][256]; /* Initialize tables for shifting crcs. */ -static void crc32c_init_hw(void) -{ +static void crc32c_init_hw(void) { crc32c_zeros(crc32c_long, LONG); crc32c_zeros(crc32c_short, SHORT); } /* Compute CRC-32C using the Intel hardware instruction. */ -static uint32_t crc32c_hw(uint32_t crc, const void *buf, size_t len) -{ - const unsigned char *next = buf; - const unsigned char *end; - uint64_t crc0, crc1, crc2; /* need to be 64 bits for crc32q */ - +static uint32_t crc32c_hw(uint32_t crc, void const *buf, size_t len) { /* populate shift tables the first time through */ pthread_once(&crc32c_once_hw, crc32c_init_hw); /* pre-process the crc */ - crc0 = crc ^ 0xffffffff; + crc = ~crc; + uint64_t crc0 = crc; /* 64-bits for crc32q instruction */ /* compute the crc for up to seven leading bytes to bring the data pointer to an eight-byte boundary */ + unsigned char const *next = buf; while (len && ((uintptr_t)next & 7) != 0) { __asm__("crc32b\t" "(%1), %0" : "=r"(crc0) @@ -312,9 +182,9 @@ Westmere, Sandy Bridge, and Ivy Bridge architectures, which have a throughput of one crc per cycle, but a latency of three cycles */ while (len >= LONG*3) { - crc1 = 0; - crc2 = 0; - end = next + LONG; + uint64_t crc1 = 0; + uint64_t crc2 = 0; + unsigned char const * const end = next + LONG; do { __asm__("crc32q\t" "(%3), %0\n\t" "crc32q\t" LONGx1 "(%3), %1\n\t" @@ -332,9 +202,9 @@ /* do the same thing, but now on SHORT*3 blocks for the remaining data less than a LONG*3 block */ while (len >= SHORT*3) { - crc1 = 0; - crc2 = 0; - end = next + SHORT; + uint64_t crc1 = 0; + uint64_t crc2 = 0; + unsigned char const * const end = next + SHORT; do { __asm__("crc32q\t" "(%3), %0\n\t" "crc32q\t" SHORTx1 "(%3), %1\n\t" @@ -351,14 +221,16 @@ /* compute the crc on the remaining eight-byte units less than a SHORT*3 block */ - end = next + (len - (len & 7)); - while (next < end) { - __asm__("crc32q\t" "(%1), %0" - : "=r"(crc0) - : "r"(next), "0"(crc0)); - next += 8; + { + unsigned char const * const end = next + (len - (len & 7)); + while (next < end) { + __asm__("crc32q\t" "(%1), %0" + : "=r"(crc0) + : "r"(next), "0"(crc0)); + next += 8; + } + len &= 7; } - len &= 7; /* compute the crc for up to seven trailing bytes */ while (len) { @@ -370,7 +242,7 @@ } /* return a post-processed crc */ - return (uint32_t)crc0 ^ 0xffffffff; + return ~crc0; } /* Check for SSE 4.2. SSE 4.2 was first supported in Nehalem processors @@ -389,27 +261,172 @@ (have) = (ecx >> 20) & 1; \ } while (0) -#endif /* Compute a CRC-32C. If the crc32 instruction is available, use the hardware version. Otherwise, use the software version. */ void crc32c_init(void) { - #if defined(__X86_64__)||defined(__x86_64__)||defined(__ia64__) int sse42; - SSE42(sse42); + SSE42(sse42); if (sse42) { crc32c = crc32c_hw; - } else - #endif - /* Check if CRC instructions supported by aarch64 */ - #if defined(__linux__) && defined(__aarch64__) && defined(ARM_CRC32) - unsigned long hwcap = getauxval(AT_HWCAP); - - if (hwcap & HWCAP_CRC32) { - crc32c = crc32c_hw_aarch64; - } else - #endif - { + } else { crc32c = crc32c_sw; } } + +#else /* !__x86_64__ */ + +void crc32c_init(void) { + crc32c = crc32c_sw; +} + +#endif + +/* Construct table for software CRC-32C little-endian calculation. */ +static pthread_once_t crc32c_once_little = PTHREAD_ONCE_INIT; +static uint32_t crc32c_table_little[8][256]; +static void crc32c_init_sw_little(void) { + for (unsigned n = 0; n < 256; n++) { + uint32_t crc = n; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc32c_table_little[0][n] = crc; + } + for (unsigned n = 0; n < 256; n++) { + uint32_t crc = crc32c_table_little[0][n]; + for (unsigned k = 1; k < 8; k++) { + crc = crc32c_table_little[0][crc & 0xff] ^ (crc >> 8); + crc32c_table_little[k][n] = crc; + } + } +} + +/* Compute a CRC-32C in software assuming a little-endian architecture, + constructing the required table if that hasn't already been done. */ +uint32_t crc32c_sw_little(uint32_t crc, void const *buf, size_t len) { + unsigned char const *next = buf; + + pthread_once(&crc32c_once_little, crc32c_init_sw_little); + crc = ~crc; + while (len && ((uintptr_t)next & 7) != 0) { + crc = crc32c_table_little[0][(crc ^ *next++) & 0xff] ^ (crc >> 8); + len--; + } + if (len >= 8) { + uint64_t crcw = crc; + do { + crcw ^= *(uint64_t const *)next; + crcw = crc32c_table_little[7][crcw & 0xff] ^ + crc32c_table_little[6][(crcw >> 8) & 0xff] ^ + crc32c_table_little[5][(crcw >> 16) & 0xff] ^ + crc32c_table_little[4][(crcw >> 24) & 0xff] ^ + crc32c_table_little[3][(crcw >> 32) & 0xff] ^ + crc32c_table_little[2][(crcw >> 40) & 0xff] ^ + crc32c_table_little[1][(crcw >> 48) & 0xff] ^ + crc32c_table_little[0][crcw >> 56]; + next += 8; + len -= 8; + } while (len >= 8); + crc = crcw; + } + while (len) { + crc = crc32c_table_little[0][(crc ^ *next++) & 0xff] ^ (crc >> 8); + len--; + } + return ~crc; +} + +/* Swap the bytes in a uint64_t. (Only for big-endian.) */ +#if defined(__has_builtin) || (defined(__GNUC__) && \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) +# define swap __builtin_bswap64 +#else +static inline uint64_t swap(uint64_t x) { + x = ((x << 8) & 0xff00ff00ff00ff00) | ((x >> 8) & 0xff00ff00ff00ff); + x = ((x << 16) & 0xffff0000ffff0000) | ((x >> 16) & 0xffff0000ffff); + return (x << 32) | (x >> 32); +} +#endif + +/* Construct tables for software CRC-32C big-endian calculation. */ +static pthread_once_t crc32c_once_big = PTHREAD_ONCE_INIT; +static uint32_t crc32c_table_big_byte[256]; +static uint64_t crc32c_table_big[8][256]; +static void crc32c_init_sw_big(void) { + for (unsigned n = 0; n < 256; n++) { + uint32_t crc = n; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; + crc32c_table_big_byte[n] = crc; + } + for (unsigned n = 0; n < 256; n++) { + uint32_t crc = crc32c_table_big_byte[n]; + crc32c_table_big[0][n] = swap(crc); + for (unsigned k = 1; k < 8; k++) { + crc = crc32c_table_big_byte[crc & 0xff] ^ (crc >> 8); + crc32c_table_big[k][n] = swap(crc); + } + } +} + +/* Compute a CRC-32C in software assuming a big-endian architecture, + constructing the required tables if that hasn't already been done. */ +uint32_t crc32c_sw_big(uint32_t crc, void const *buf, size_t len) { + unsigned char const *next = buf; + + pthread_once(&crc32c_once_big, crc32c_init_sw_big); + crc = ~crc; + while (len && ((uintptr_t)next & 7) != 0) { + crc = crc32c_table_big_byte[(crc ^ *next++) & 0xff] ^ (crc >> 8); + len--; + } + if (len >= 8) { + uint64_t crcw = swap(crc); + do { + crcw ^= *(uint64_t const *)next; + crcw = crc32c_table_big[0][crcw & 0xff] ^ + crc32c_table_big[1][(crcw >> 8) & 0xff] ^ + crc32c_table_big[2][(crcw >> 16) & 0xff] ^ + crc32c_table_big[3][(crcw >> 24) & 0xff] ^ + crc32c_table_big[4][(crcw >> 32) & 0xff] ^ + crc32c_table_big[5][(crcw >> 40) & 0xff] ^ + crc32c_table_big[6][(crcw >> 48) & 0xff] ^ + crc32c_table_big[7][(crcw >> 56)]; + next += 8; + len -= 8; + } while (len >= 8); + crc = swap(crcw); + } + while (len) { + crc = crc32c_table_big_byte[(crc ^ *next++) & 0xff] ^ (crc >> 8); + len--; + } + return ~crc; +} + +/* Table-driven software CRC-32C. This is about 15 times slower than using the + hardware instructions. Determine the endianess of the processor and proceed + accordingly. Ideally the endianess will be determined at compile time, in + which case the unused functions and tables for the other endianess will be + removed by the optimizer. If not, then the proper routines and tables will + be used, even if the endianess is changed mid-stream. (Yes, there are + processors that permit that -- go figure.) */ +uint32_t crc32c_sw(uint32_t crc, void const *buf, size_t len) { + static int const little = 1; + if (*(char const *)&little) + return crc32c_sw_little(crc, buf, len); + else + return crc32c_sw_big(crc, buf, len); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/crc32c.h new/memcached-1.6.6/crc32c.h --- old/memcached-1.6.5/crc32c.h 2020-04-04 04:14:26.000000000 +0200 +++ new/memcached-1.6.6/crc32c.h 2020-05-13 05:24:24.000000000 +0200 @@ -1,6 +1,17 @@ #ifndef CRC32C_H #define CRC32C_H + +// crc32c.h -- header for crc32c.c +// Copyright (C) 2015 Mark Adler +// See crc32c.c for the license. + +#include <stdint.h> + +// Return the CRC-32C of buf[0..len-1] given the starting CRC crc. This can be +// used to calculate the CRC of a sequence of bytes a chunk at a time, using +// the previously returned crc in the next call. The first call must be with +// crc == 0. crc32c() uses the Intel crc32 hardware instruction if available. typedef uint32_t (*crc_func)(uint32_t crc, const void *buf, size_t len); extern crc_func crc32c; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/doc/Makefile new/memcached-1.6.6/doc/Makefile --- old/memcached-1.6.5/doc/Makefile 2020-04-13 20:46:30.000000000 +0200 +++ new/memcached-1.6.6/doc/Makefile 2020-05-13 05:32:52.000000000 +0200 @@ -192,10 +192,10 @@ PACKAGE = memcached PACKAGE_BUGREPORT = [email protected] PACKAGE_NAME = memcached -PACKAGE_STRING = memcached 1.6.5 +PACKAGE_STRING = memcached 1.6.6 PACKAGE_TARNAME = memcached PACKAGE_URL = -PACKAGE_VERSION = 1.6.5 +PACKAGE_VERSION = 1.6.6 PATH_SEPARATOR = : PROFILER = /usr/bin/gcov PROFILER_FLAGS = -fprofile-arcs -ftest-coverage @@ -203,7 +203,7 @@ SET_MAKE = SHELL = /bin/bash STRIP = -VERSION = 1.6.5 +VERSION = 1.6.6 XML2RFC = /usr/bin/xml2rfc XSLTPROC = /usr/bin/xsltproc abs_builddir = /home/dormando/d/p/danga/git/memcached/doc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/doc/protocol.txt new/memcached-1.6.6/doc/protocol.txt --- old/memcached-1.6.5/doc/protocol.txt 2020-04-12 22:39:36.000000000 +0200 +++ new/memcached-1.6.6/doc/protocol.txt 2020-05-13 05:24:24.000000000 +0200 @@ -897,6 +897,8 @@ The meta no-op command exists solely to return a static response code. It takes no flags, no arguments. +"mn\r\n" + This returns the static response: "MN\r\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/memcached.c new/memcached-1.6.6/memcached.c --- old/memcached-1.6.5/memcached.c 2020-04-12 22:39:36.000000000 +0200 +++ new/memcached-1.6.6/memcached.c 2020-05-13 05:24:24.000000000 +0200 @@ -181,7 +181,7 @@ * can block the listener via a condition. */ static volatile bool allow_new_conns = true; -static bool stop_main_loop = false; +static int stop_main_loop = NOT_STOP; static struct event maxconnsevent; static void maxconns_handler(const evutil_socket_t fd, const short which, void *arg) { struct timeval t = {.tv_sec = 0, .tv_usec = 10000}; @@ -8279,8 +8279,8 @@ } static void sig_handler(const int sig) { + stop_main_loop = EXIT_NORMALLY; printf("Signal handled: %s.\n", strsignal(sig)); - exit(EXIT_SUCCESS); } static void sighup_handler(const int sig) { @@ -8289,7 +8289,7 @@ static void sig_usrhandler(const int sig) { printf("Graceful shutdown signal handled: %s.\n", strsignal(sig)); - stop_main_loop = true; + stop_main_loop = GRACE_STOP; } #ifndef HAVE_SIGIGNORE @@ -8381,13 +8381,9 @@ const char *ever = event_get_version(); if (ever != NULL) { if (strncmp(ever, "1.", 2) == 0) { - /* Require at least 1.3 (that's still a couple of years old) */ - if (('0' <= ever[2] && ever[2] < '3') && !isdigit(ever[3])) { - fprintf(stderr, "You are using libevent %s.\nPlease upgrade to" - " a more recent version (1.3 or newer)\n", - event_get_version()); - return false; - } + fprintf(stderr, "You are using libevent %s.\nPlease upgrade to 2.x" + " or newer\n", event_get_version()); + return false; } } @@ -10106,6 +10102,7 @@ /* Only rescues non-COLD items if below this threshold */ settings.ext_drop_under = storage_file->page_count / 4; } + // FIXME: temporarily removed. crc32c_init(); /* Init free chunks to zero. */ for (int x = 0; x < MAX_NUMBER_OF_SLAB_CLASSES; x++) { @@ -10309,9 +10306,20 @@ } } - fprintf(stderr, "Gracefully stopping\n"); + switch (stop_main_loop) { + case GRACE_STOP: + fprintf(stderr, "Gracefully stopping\n"); + break; + case EXIT_NORMALLY: + // Don't need to print anything to STDERR for a normal shutdown. + break; + default: + fprintf(stderr, "Exiting on error\n"); + break; + } + stop_threads(); - if (memory_file != NULL) { + if (memory_file != NULL && stop_main_loop == GRACE_STOP) { restart_mmap_close(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/memcached.h new/memcached-1.6.6/memcached.h --- old/memcached-1.6.5/memcached.h 2020-04-04 04:14:26.000000000 +0200 +++ new/memcached-1.6.6/memcached.h 2020-05-13 05:24:24.000000000 +0200 @@ -233,6 +233,12 @@ RESUME_WORKER_THREADS }; +enum stop_reasons { + NOT_STOP, + GRACE_STOP, + EXIT_NORMALLY +}; + #define IS_TCP(x) (x == tcp_transport) #define IS_UDP(x) (x == udp_transport) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/memcached.spec new/memcached-1.6.6/memcached.spec --- old/memcached-1.6.5/memcached.spec 2020-04-13 20:46:26.000000000 +0200 +++ new/memcached-1.6.6/memcached.spec 2020-05-13 05:32:49.000000000 +0200 @@ -28,7 +28,7 @@ %endif Name: memcached -Version: 1.6.5 +Version: 1.6.6 Release: 1%{?dist} Summary: High Performance, Distributed Memory Object Cache diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/t/README-TLS.md new/memcached-1.6.6/t/README-TLS.md --- old/memcached-1.6.5/t/README-TLS.md 1970-01-01 01:00:00.000000000 +0100 +++ new/memcached-1.6.6/t/README-TLS.md 2020-05-13 05:24:24.000000000 +0200 @@ -0,0 +1,29 @@ +# Certificates creation process + +## Create certificate authority key and certificate +``` +$ openssl genrsa -out cakey.pem 2048 +$ openssl req -x509 -new -nodes -key cakey.pem -sha256 -days 1825 -out cacert.pem \ +-subj "/CN=Test Root Certificate Authority/ST=CA/C=US/[email protected]/O=Test/OU=Test Department" +``` +## Create server key and certificate +``` +$ openssl genrsa -out server_key.pem 2048 +$ openssl req -new -sha256 -key server_key.pem -subj \ +"/C=US/ST=CA/O=Test/OU=Subunit of Test Organization/CN=test.com/[email protected]" \ +-out server_crt.csr +$ openssl x509 -req -in server_crt.csr -CA cacert.pem -CAkey cakey.pem \ +-CAcreateserial -out server_cert.pem -days 1825 -sha256 +``` +## Create client key and certificate +``` +$ openssl genrsa -out client_key.pem 2048 +$ openssl req -new -sha256 -key client_key.pem -subj \ +"/C=US/ST=CA/O=Test Client/OU=Subunit of Test Organization/CN=client.test.com/[email protected]" \ +-out client_crt.csr +$ openssl x509 -req -in client_crt.csr -CA cacert.pem -CAkey cakey.pem \ +-CAcreateserial -out client_cert.pem -days 1825 -sha256 +``` + +**NOTES**: *.csr files are certificate signing requests which are needed in order to sign certificates with signing authority. +-CAcreateserial option creates one file which we do not need but openssl does. You can delete it after you are done. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/t/cacert.pem new/memcached-1.6.6/t/cacert.pem --- old/memcached-1.6.5/t/cacert.pem 2020-04-12 03:28:14.000000000 +0200 +++ new/memcached-1.6.6/t/cacert.pem 2020-05-13 05:24:24.000000000 +0200 @@ -1,22 +1,24 @@ -----BEGIN CERTIFICATE----- -MIIDqzCCApOgAwIBAgIJAOFc3ZmVKolRMA0GCSqGSIb3DQEBBQUAMIGLMSgwJgYD -VQQDDB9UZXN0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQswCQYDVQQIDAJD -QTELMAkGA1UEBhMCVVMxHDAaBgkqhkiG9w0BCQEWDXJvb3RAdGVzdC5jb20xDTAL -BgNVBAoMBFRlc3QxGDAWBgNVBAsMD1Rlc3QgRGVwYXJ0bWVudDAeFw0xOTAxMDcx -ODIzMjlaFw0yNDAxMDYxODIzMjlaMIGLMSgwJgYDVQQDDB9UZXN0IFJvb3QgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMxHDAa -BgkqhkiG9w0BCQEWDXJvb3RAdGVzdC5jb20xDTALBgNVBAoMBFRlc3QxGDAWBgNV -BAsMD1Rlc3QgRGVwYXJ0bWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAJQcDfenVed0uJCykaWowL2qGUs9e5gyjGo9URoNhI5LDYSSq3ebxZGfbi1T -BcC7oL5OI/B0lCShPR9sJjKFkQ60vs43ltmkTLNSGoKLnxXMlBjdpCxweDDAMiF3 -p/vCG2hUa7auOkMWMYIkM81rcQsRB0qj0ilt3zcTsS860oKGzNrtPeAcz3KxbYWI -nJEhQVy3S4U59b7mm3cGz3/3m2NUjn+b8sA7J8F9K5mnFkCUCRva6zte6qmL2ruH -sGRav9ICLGxDqiJoic6Y2ReffgU77RDJO+sTuJme+VeTDE77vBIHvCVCSG+e0RSs -L+6nQYDtjHH5bLgoSXq9D3hgxEsCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkq -hkiG9w0BAQUFAAOCAQEARWcYJvkleq+qfOPPI1eQAuBf5OZwz8mthsBvMfsQMCLk -+wSxdlJvJyvPoFgZBv8YbTde2b40lQe94gTsGDUXGEkOsERrjt/jqHxO9X8n7a+z -M/okeSSYnam0Zcl1M9sa5L7BVXbGh/sE9j/bXrAhz64np5P773dZTLTPYjBf2Grp -NheCsGDtJbegJqn7pp5MfAKcyzLxnZAE0cilSVKZB7R3urISJVdwiRtkprJL7IwQ -oIu+XhUgdZbx7TQQnjTkq3COSIIof5+5oqFnhzTqfSgi/06dWWvCwl17Mz+vCMZ9 -1MA8L4cR+iNdJYlCQPbk30laJx1akfqnpv7qTXq7nQ== +MIID+TCCAuGgAwIBAgIUdoaMai7jgEXI5Q1OWcMPoE/VtpIwDQYJKoZIhvcNAQEL +BQAwgYsxKDAmBgNVBAMMH1Rlc3QgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkx +CzAJBgNVBAgMAkNBMQswCQYDVQQGEwJVUzEcMBoGCSqGSIb3DQEJARYNcm9vdEB0 +ZXN0LmNvbTENMAsGA1UECgwEVGVzdDEYMBYGA1UECwwPVGVzdCBEZXBhcnRtZW50 +MB4XDTIwMDQyNzA2MzM0NVoXDTI1MDQyNjA2MzM0NVowgYsxKDAmBgNVBAMMH1Rl +c3QgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxCzAJBgNVBAgMAkNBMQswCQYD +VQQGEwJVUzEcMBoGCSqGSIb3DQEJARYNcm9vdEB0ZXN0LmNvbTENMAsGA1UECgwE +VGVzdDEYMBYGA1UECwwPVGVzdCBEZXBhcnRtZW50MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAunYFlfIfYcp7RS1+oO4x9z1C1t9FiHr+XjCrY+QI6C/r +FSWqD4nA5LgV9youq4isYFQoXYTmtxZciggZ+wEbclAC6Dz2ZWFbYWoyUY6qAf2M +D3rz3VNxfAVuhvs0AcQDG/0UG+EakndfC2MDD2BZkiGLFm29PubP0aHafVRzk2L4 +vXb0NXes3qXT6wZeg0ST0qAS0gnVC9AILYiGP/s8x7iyFoGaVmm8KSwpQHghfPME +2qU6C8sqcezsxccFZzoFWM6C+HZJi2i6vr6jXwWe0aLdZSnhkFXhiHHc1ffdZfcS +GZpRbx32EqBnr4W7iT59XjC19HLgO3TlwqZG53tbdQIDAQABo1MwUTAdBgNVHQ4E +FgQUT1kDDTXj0kZ+xS8covSbuV1iZ4wwHwYDVR0jBBgwFoAUT1kDDTXj0kZ+xS8c +ovSbuV1iZ4wwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEArpon +m4GxIVqlVanpdFoWcRAhS+lGuxClaJPI/VjmCaOb6ORyrHnk7eCwKXgDgsWcM87N +tiakQH4Y2zHCN3HVkIjWgwrNLkdwSPYykYsWGxc+tgonYkNqyo0gMk8fDT/pwLzO +LcnvKS0HIoYYDuCbeZsyv48kDjSplAD1Ybl3+4lZ544O7SW6+5tSTwTgg4py93yc +WHBTDdjNMUqLarpgYA0RKVQoyJe9wLpNd3kWctobkKGBOP7/9THWTqMRFW7TUWO2 +yjxMbklUSH7W2jA/2KzF4IdN6G8Bn52vd+nWU29g4rfmLKZvQZPhvjjGdsE59Xq3 +EVAvVnZm52Ne+YlbRg== -----END CERTIFICATE----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/t/cakey.pem new/memcached-1.6.6/t/cakey.pem --- old/memcached-1.6.5/t/cakey.pem 2019-12-14 00:56:48.000000000 +0100 +++ new/memcached-1.6.6/t/cakey.pem 2020-05-13 05:24:24.000000000 +0200 @@ -1,30 +1,30 @@ -----BEGIN ENCRYPTED PRIVATE KEY----- -MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIigxGWoxgfJACAggA -MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECHgfMUpgAX2tBIIEyFcJT6kFw1TH -kmwmbtB+MPW3+zUxoKZuP+L7UCaMHQPHcQ4/AThVNPPhXa++/lgL0P1q33SBhqsm -HK5nRfzEe75bQIFoZ1FFg3YGaAB4KUPm5vJ4XhmyzCEiUvp75mgiw38fkL5ZCPqW -eitNKgyAYEl9zIrF1cRyN/s6O6mPR8NOPbVL2ZtCGGvy/LN+mhlolvuMFySEEI+s -nzu5682LU7QQOzLFB/q3Vqrt2tafzoIHYtj8YYVsPMO6bWkoKx1BWyTCuesFOLTN -agnXx3AKtmD8Q0C3vvdmpqNnWw1iP1Vc4r/BZwmD2MFXUh8cExBGRaPIfUr41BoR -p1bHqtcAsbipuU7qQ6wjnLyuqAvFQxy1LCBGNyBrzMMD25+lXh9BoeS9H5L+WW0N -pcAPA5FoD1RQc27ZXVf0kRGEy8Vj/UsE3Pf74Z8u16bC+6ojAUvvvc49ERm0t85O -T5rP9ql3sITtg4EvNdNhHtYdJGVkZQ7H8T9G1OXEf4dE/vqYNnqhtFm+5CyWb8Vk -Rly2XFbBs4I4UnVIi0Nt0ybIqqwAvvKAU5kSOIEy6Q9mvUYyvBZrhY5Va2KEwaTU -ig2yjWxWFoOArE1UVu2kJaslaOKqAr9OPqW510+6G9s+lREm7EYqUd6Ut1cwcXUv -/s1fdx/As6U6qApH9+TC0XqNm5yXNCuADVtK2PmOoanczpEXZTZGijylGFDROQQj -bofjoB0hiN80Xc+II0zClGwXwZz43Xy4uVIMbvMBi3yp03ct1RMwORPCGkiH/1uV -iazsfV4DAD8KdGmgUL57WfnMPZJCEfqpM4YrM7rKu3Md8v8hKyFGUAdeNsCFTwwY -g2E6NXWbtqGrUFC/r/70/axfijWRoyPaLcBoourc5HcZ+K/TmmY+uOxKBcJsfS/t -HiRZ5l48sva+lZVWN6KNG5N93pa3TqgCCfp56VPOo3o3kj4XAJ3aMK6RsK3QrGi7 -TTXlv/hKFYW3GUJ0IGNfinnARbdMoD6ww8nQLe3Id3HKzqh7xfQb4xJZpQhpSXVS -KJmf5H80GHQnJq54Xwi7daYmxpTS+yNHuxKq+ryBqO7WeotNkOCbG6Flc/GBO6a3 -7rbSOTmqpyJPTRPQEf1ogHNgCG9txPIbZRAi9PPJVn/gV/dKttUpj5OGI9fjDaSK -ILEwLuokdRwTAGeFRIkucKnvA0pzXQkZRMG4D4kYzxskutUQVvKFAsqvEkb2c6qL -j8MjKYfYZqxG44o68aOk8H42vR6lkemclj6byvLfnqbZPUka3MUnrG8oPI+vNLlg -N57QpU2Kw5joBf1oCSROTXEv3BT/JYE3qQ2T6q/NGgG0s8aXbROh/7HaZJrENmoD -pDJZp+bSGn6On6vmDu98F3fyubKgg611tA5pyDdWE4MSvJBGKHc2/HmqgxbLtK1c -gn2BBefAi+Qqzc+XSeJxh2nlAx7ohvgEcodO3Vqb9eSoPviMHyO9bap8QIFJqTNW -QK6rMqtou0QTEcXp5cIlVRW59zZHKEPpNpJ08fNtxB5n/Ngo+vo86LLVUysfbwkY -p7GK4kraBGhU3rEXzuFBXn1Cr7015VrAC8mLafKqar7OLhLduHDRPxGidXJc6oxE -2PpJudZFhS6P+0M5AkMq2Q== +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQII8yP9NBTVEACAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECOLCMMR2QyzdBIIEyMf2/xsaOdiV +LijpsozRrg7iABViWNW6jD1yfth5zsqVEhdhKgXGWXmOp6GtPh6HH59C9PuVl02g +T5kdvI3sCQ45ypJ0+voo4vN+gOU9sFaMZ2AirUFypPwwyuui8BcjVwvdoqioQTp/ +kCI16R4CZtKLbbUHK3YQeYp8IEi87AQbdUK/kYRKJVfmAM0DmvJoTqLozwaX7G2f +I70dJff8clCP5RYlEcD9y4+OMhiR8cWXbiHjG098KwE2ciavbBWN5S3jmKaefp0O +G5X0k2uXlLSvnC67yqbH41n67LPBBH79w5n3I2XeSszDTNCnr+RUCd514nOEZXJJ +1VQI0NdpMD5RmHBBkvc/DS5Bu5lnPqZO1w2JwfhpjjsbmB29ZKmuEof1E0Z5DcWV +EhZgwdZG/7kzSQqbVQYNVwfLJloQE2FSibGUVZQuXrGzWvznAEhoY5FnjCSz/1JY +JWlMHVWWW56sfA+vSXS1sbm1vJzMaB1w/dap9mzxiWvOgRlu9LzNXfzc3z7wPG1f +OMDk/JzwSK36ijq+sdsywaEwgaCFpsLXgB2GfNnJ5IfEfL71hjGqpjAkM1tQf7sA +bz0hY4qnmPjCStwdyujvsXz5JbeJFDK7DIyHW4Efoj1PVchOEqDq7NU6x0NWmcnP +unpRV61BvKAkiYBBk0TJnuHBeQeP1kHmuj1Ez2SIhP43qr8fcnvOyAsCYDI+ig7G +iCuinAiq2pwsruBOAFMc019C1ILgNkZrjOrnBsi/gzyEjPBAj143mopuHA05nr8S +SsJbclEw1oPmpek6eGJujIwlDgx1tOb0gErCzfvHwUcZ/ivr8WKl4ptkXS8LaSNs +1yv44MGprz3qbnwmJUtvUces3UFdmrbZomsJutXWFCHxsuWjRXGbIWqCmlhvmTy/ +Wamzw/f7z6vcCYU9AJPxYNkyfy9JlK4HnoI/ol+59+wQhh8uPYpLAkXVM1mhJ/NZ +3HdfUHovZNIn7l0L0Pfvzy1ZMAY9Lu40wlV6ZOZvSSlCG68BZF3xN0aIwW0cXBpI +gxRlteDK9EqlOOr02xMc+W1CxGW/a5T4YoIN6IY5nbhD4xCZFO63KeJsC5TPNXPm +z2SHoFqTsN82COoCysIdqCfegcrZltnm440C8vhRdgPMgnJnU0bcMzRrmndOHXaz ++GsX+/WCVdKLGGpMWCpAET24gA/KF6QuzcRUvDUKrAwr6ZIlumc3daXTSU1cJLcV +uxvWIMoZ9IZCmImTPuzkI74BCqf2Si6G4n5dM3JB8blY9AmsxeOioI+EkGFLGWkp +wii3rSon9umzsLWSAuS/is6iVk7R5CMYAPa1mdec3do2/8NbKgX7miCxBLYuO9L8 +ObRtxLtv9xVLtwmGh5EE3vsp7+KWE1kTkrYYEfZW8Yhtxb7f8rfQi7EX8n05XHt1 +4iNjKy8dT6F8J8p4Vh/SYc/tJDZw2C66rBrDfR6UuEk1BrrTT96SeNXqUetzwkIP +Ak+r5+HuhwQqgQsvYF90D8QgiJ5+XPDIRVbdeCG5NaW1gza5WJ5Y1qmflGiy9nve +rctwKxuKXIwl0GT0WZZxeeefAC2BQ6Wl2uvA8jpS8VT24MwI6Nazu5d72VPvs0tw +TIRsDH+GQXfzwu9tJ4QcQg== -----END ENCRYPTED PRIVATE KEY----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/t/client_crt.pem new/memcached-1.6.6/t/client_crt.pem --- old/memcached-1.6.5/t/client_crt.pem 2019-12-14 00:56:48.000000000 +0100 +++ new/memcached-1.6.6/t/client_crt.pem 2020-05-13 05:24:24.000000000 +0200 @@ -1,68 +1,72 @@ Certificate: Data: - Version: 3 (0x2) - Serial Number: 2 (0x2) - Signature Algorithm: sha1WithRSAEncryption - Issuer: CN=Test Root Certificate Authority, ST=CA, C=US/[email protected], O=Test, OU=Test Department + Version: 1 (0x0) + Serial Number: + 71:a5:f7:f3:8f:7e:0a:d7:79:ce:b6:eb:01:60:ac:00:c3:76:5a:9f + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN = Test Root Certificate Authority, ST = CA, C = US, emailAddress = [email protected], O = Test, OU = Test Department Validity - Not Before: Jan 7 19:26:14 2019 GMT - Not After : Jan 6 19:26:14 2024 GMT - Subject: CN=client.test.com, ST=CA, C=US/[email protected], O=Test Client, OU=Subunit of Test Organization + Not Before: Apr 27 06:57:23 2020 GMT + Not After : Apr 26 06:57:23 2025 GMT + Subject: C = US, ST = CA, O = Test Client, OU = Subunit of Test Organization, CN = client.test.com, emailAddress = [email protected] Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (1024 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:a6:a4:24:19:14:9e:96:0a:3e:b8:14:7b:e9:04: - ca:a0:ef:61:1a:e6:63:84:51:34:10:58:9e:f2:6f: - 9d:27:64:e5:a9:32:02:e2:fb:f0:c5:47:d0:b2:8f: - f4:19:71:2a:de:f8:de:ae:cb:0b:41:cf:cc:76:63: - 9b:4a:9b:12:50:5f:b9:b4:fc:e3:fd:05:85:7f:a7: - 1c:ad:ec:d1:40:70:fa:4c:51:88:a3:d4:e5:49:b2: - 72:7c:2e:4d:c5:00:ae:40:96:15:84:34:5f:99:75: - 7b:6a:00:d3:ec:a0:7d:82:d3:71:a3:79:cc:d4:4c: - 3b:50:49:d0:9b:27:e4:0b:cb + 00:9e:9a:94:cc:21:a4:01:ec:9d:c4:37:41:8c:62: + f6:05:f2:f0:b2:89:a5:8c:62:40:78:7d:91:6e:15: + 76:97:c0:0e:e0:d1:12:77:cf:51:42:f9:6e:1a:eb: + 9a:24:c6:5c:5d:0b:8c:04:5f:4f:9c:f2:be:03:9f: + e2:b9:07:21:eb:7f:7d:0e:31:b2:c4:3c:86:d7:83: + bc:75:b6:02:d6:6b:37:da:70:ed:14:83:59:dd:18: + 8f:06:55:20:26:d3:fc:3c:9a:0c:a2:66:14:a5:5f: + b8:cc:9f:76:cb:f1:47:61:6b:0e:9e:58:ba:f7:58: + 89:64:39:08:23:cb:77:86:29:a9:55:79:52:4f:b7: + 92:36:8e:3e:c2:c6:2f:ea:25:86:8b:88:91:16:90: + c8:ca:36:15:97:56:2f:7c:a9:a7:32:04:9b:af:71: + a8:34:6d:5b:b7:3e:a5:6d:90:c3:71:c7:b3:c1:7e: + 88:3c:fe:1a:58:22:be:a5:1b:92:69:d1:d9:42:21: + 62:33:11:05:d0:92:d8:af:53:c3:f3:3a:17:49:dc: + b8:5b:22:5a:4d:37:0c:fe:bf:c2:ca:ae:db:50:ab: + 3c:c5:b4:43:64:18:ef:3e:cf:7b:b2:b7:f0:0c:80: + 6f:bd:25:34:31:e4:77:e4:8c:73:6f:72:3f:2c:32: + 10:27 Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - X509v3 Key Usage: - Digital Signature, Non Repudiation, Key Encipherment - X509v3 Subject Alternative Name: - DNS:client.test.com, DNS:alt.client.test.com - Signature Algorithm: sha1WithRSAEncryption - 4f:11:ff:ed:05:e2:80:75:bd:e0:b3:f3:21:34:65:50:67:ff: - 3c:45:88:58:58:77:9a:6e:f6:1e:74:f9:cb:02:e1:31:e0:52: - d9:f9:63:e5:fb:01:d2:83:df:20:c1:77:a7:15:da:18:3a:e0: - ea:e0:66:ab:41:21:9e:36:9c:36:28:1c:cb:20:43:94:94:e8: - 9b:0d:3d:2a:ac:20:48:5b:b8:c0:45:0d:5c:30:91:be:ba:67: - b9:f6:bd:64:08:ab:af:35:a1:db:dd:54:e8:32:c9:3a:95:34: - 26:8f:a1:1b:a1:a2:32:47:a0:e0:a4:11:06:dc:d2:67:87:1a: - 51:50:bc:09:26:e3:1c:e7:83:a5:69:48:92:6c:87:94:46:f6: - b2:45:55:6f:5e:f2:6b:c8:9d:65:61:31:83:09:71:60:71:d5: - 9c:44:65:27:f6:3f:fd:fb:40:30:47:02:b1:6f:5a:ff:7a:c5: - 83:e0:80:52:53:a7:2c:24:71:51:81:df:3f:2f:1d:42:df:bc: - 86:b4:0c:18:64:8d:33:a7:c0:e8:f2:9e:f5:0b:92:c4:4d:f7: - 4b:2f:13:8d:81:25:f3:47:f5:72:71:c2:62:3d:36:09:3c:ec: - d1:15:6d:15:77:28:c6:de:f9:73:5d:5b:a0:a4:0f:f2:50:a0: - 00:20:87:fa + Signature Algorithm: sha256WithRSAEncryption + aa:c0:5a:6b:d6:2f:24:b1:fe:01:3a:78:a7:6d:19:82:d3:1a: + 40:8e:6b:c3:9e:8e:8d:e0:8a:25:28:8e:92:b4:8e:05:ac:a1: + 65:7c:a0:7e:89:82:e3:17:41:16:ec:95:76:83:5b:a9:36:eb: + fb:6e:d6:37:73:ab:46:23:9d:c9:99:72:1c:0c:25:e8:e7:22: + 4c:20:b0:05:3a:95:57:ce:1f:93:82:3f:2b:e6:72:b7:67:d3: + 83:ce:73:8d:fb:69:64:d5:a6:52:3a:6e:a2:0d:15:05:79:c1: + 60:d8:03:4a:f6:d6:63:f7:f4:43:92:4f:eb:2f:53:44:9b:c8: + 33:7b:9a:a2:10:54:71:cd:4c:6a:a0:51:4c:4a:d6:26:cb:21: + 14:f0:54:2a:e8:b5:b9:cc:b2:6f:17:75:de:04:cd:70:52:00: + c6:93:66:b4:c3:f3:8e:73:c9:4f:0a:b0:3b:11:36:88:77:d4: + b6:5b:a2:ea:db:df:90:b1:d9:a5:86:a7:74:82:60:10:b2:c1: + 32:3b:a7:b9:87:61:66:96:37:e3:62:ff:7a:56:e4:ec:7c:73: + 16:c8:16:a2:81:49:19:39:7b:3f:f2:a1:e2:58:8f:ef:c8:2d: + b5:a3:c6:22:d1:22:91:d9:6e:9a:2c:87:56:52:d0:e9:a6:fe: + e6:44:4f:8e -----BEGIN CERTIFICATE----- -MIIDZTCCAk2gAwIBAgIBAjANBgkqhkiG9w0BAQUFADCBizEoMCYGA1UEAwwfVGVz -dCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eTELMAkGA1UECAwCQ0ExCzAJBgNV -BAYTAlVTMRwwGgYJKoZIhvcNAQkBFg1yb290QHRlc3QuY29tMQ0wCwYDVQQKDARU -ZXN0MRgwFgYDVQQLDA9UZXN0IERlcGFydG1lbnQwHhcNMTkwMTA3MTkyNjE0WhcN -MjQwMTA2MTkyNjE0WjCBljEYMBYGA1UEAwwPY2xpZW50LnRlc3QuY29tMQswCQYD -VQQIDAJDQTELMAkGA1UEBhMCVVMxIzAhBgkqhkiG9w0BCQEWFHJvb3RAY2xpZW50 -LnRlc3QuY29tMRQwEgYDVQQKDAtUZXN0IENsaWVudDElMCMGA1UECwwcU3VidW5p -dCBvZiBUZXN0IE9yZ2FuaXphdGlvbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC -gYEApqQkGRSelgo+uBR76QTKoO9hGuZjhFE0EFie8m+dJ2TlqTIC4vvwxUfQso/0 -GXEq3vjerssLQc/MdmObSpsSUF+5tPzj/QWFf6ccrezRQHD6TFGIo9TlSbJyfC5N -xQCuQJYVhDRfmXV7agDT7KB9gtNxo3nM1Ew7UEnQmyfkC8sCAwEAAaNLMEkwCQYD -VR0TBAIwADALBgNVHQ8EBAMCBeAwLwYDVR0RBCgwJoIPY2xpZW50LnRlc3QuY29t -ghNhbHQuY2xpZW50LnRlc3QuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQBPEf/tBeKA -db3gs/MhNGVQZ/88RYhYWHeabvYedPnLAuEx4FLZ+WPl+wHSg98gwXenFdoYOuDq -4GarQSGeNpw2KBzLIEOUlOibDT0qrCBIW7jARQ1cMJG+ume59r1kCKuvNaHb3VTo -Msk6lTQmj6EboaIyR6DgpBEG3NJnhxpRULwJJuMc54OlaUiSbIeURvayRVVvXvJr -yJ1lYTGDCXFgcdWcRGUn9j/9+0AwRwKxb1r/esWD4IBSU6csJHFRgd8/Lx1C37yG -tAwYZI0zp8Do8p71C5LETfdLLxONgSXzR/VyccJiPTYJPOzRFW0VdyjG3vlzXVug -pA/yUKAAIIf6 +MIIDqjCCApICFHGl9/OPfgrXec626wFgrADDdlqfMA0GCSqGSIb3DQEBCwUAMIGL +MSgwJgYDVQQDDB9UZXN0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQswCQYD +VQQIDAJDQTELMAkGA1UEBhMCVVMxHDAaBgkqhkiG9w0BCQEWDXJvb3RAdGVzdC5j +b20xDTALBgNVBAoMBFRlc3QxGDAWBgNVBAsMD1Rlc3QgRGVwYXJ0bWVudDAeFw0y +MDA0MjcwNjU3MjNaFw0yNTA0MjYwNjU3MjNaMIGWMQswCQYDVQQGEwJVUzELMAkG +A1UECAwCQ0ExFDASBgNVBAoMC1Rlc3QgQ2xpZW50MSUwIwYDVQQLDBxTdWJ1bml0 +IG9mIFRlc3QgT3JnYW5pemF0aW9uMRgwFgYDVQQDDA9jbGllbnQudGVzdC5jb20x +IzAhBgkqhkiG9w0BCQEWFHJvb3RAY2xpZW50LnRlc3QuY29tMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnpqUzCGkAeydxDdBjGL2BfLwsomljGJAeH2R +bhV2l8AO4NESd89RQvluGuuaJMZcXQuMBF9PnPK+A5/iuQch6399DjGyxDyG14O8 +dbYC1ms32nDtFINZ3RiPBlUgJtP8PJoMomYUpV+4zJ92y/FHYWsOnli691iJZDkI +I8t3himpVXlST7eSNo4+wsYv6iWGi4iRFpDIyjYVl1YvfKmnMgSbr3GoNG1btz6l +bZDDccezwX6IPP4aWCK+pRuSadHZQiFiMxEF0JLYr1PD8zoXSdy4WyJaTTcM/r/C +yq7bUKs8xbRDZBjvPs97srfwDIBvvSU0MeR35Ixzb3I/LDIQJwIDAQABMA0GCSqG +SIb3DQEBCwUAA4IBAQCqwFpr1i8ksf4BOninbRmC0xpAjmvDno6N4IolKI6StI4F +rKFlfKB+iYLjF0EW7JV2g1upNuv7btY3c6tGI53JmXIcDCXo5yJMILAFOpVXzh+T +gj8r5nK3Z9ODznON+2lk1aZSOm6iDRUFecFg2ANK9tZj9/RDkk/rL1NEm8gze5qi +EFRxzUxqoFFMStYmyyEU8FQq6LW5zLJvF3XeBM1wUgDGk2a0w/OOc8lPCrA7ETaI +d9S2W6Lq29+Qsdmlhqd0gmAQssEyO6e5h2FmljfjYv96VuTsfHMWyBaigUkZOXs/ +8qHiWI/vyC21o8Yi0SKR2W6aLIdWUtDppv7mRE+O -----END CERTIFICATE----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/t/client_key.pem new/memcached-1.6.6/t/client_key.pem --- old/memcached-1.6.5/t/client_key.pem 2019-12-14 00:56:48.000000000 +0100 +++ new/memcached-1.6.6/t/client_key.pem 2020-05-13 05:24:24.000000000 +0200 @@ -1,15 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/t/lib/MemcachedTest.pm new/memcached-1.6.6/t/lib/MemcachedTest.pm --- old/memcached-1.6.5/t/lib/MemcachedTest.pm 2020-04-12 22:39:36.000000000 +0200 +++ new/memcached-1.6.6/t/lib/MemcachedTest.pm 2020-05-13 05:24:24.000000000 +0200 @@ -2,6 +2,7 @@ use strict; use IO::Socket::INET; use IO::Socket::UNIX; +use POSIX ":sys_wait_h"; use Exporter 'import'; use Carp qw(croak); use vars qw(@EXPORT); @@ -248,6 +249,11 @@ return system("$exe -h"); } +# -1 if the pid is actually dead. +sub is_running { + return waitpid($_[0], WNOHANG) >= 0 ? 1 : 0; +} + sub new_memcached { my ($args, $passed_port) = @_; my $port = $passed_port; @@ -306,23 +312,43 @@ my $exe = get_memcached_exe(); unless ($childpid) { - #print STDERR "RUN: $exe $args\n"; - exec "$builddir/timedrun 600 $exe $args"; + my $valgrind = ""; + my $valgrind_args = "--quiet --error-exitcode=1 --exit-on-first-error=yes"; + if ($ENV{VALGRIND_ARGS}) { + $valgrind_args = $ENV{VALGRIND_ARGS}; + } + if ($ENV{VALGRIND_TEST}) { + $valgrind = "valgrind $valgrind_args"; + # NOTE: caller file stuff. + $valgrind .= " $ENV{VALGRIND_EXTRA_ARGS}"; + } + my $cmd = "$builddir/timedrun 600 $valgrind $exe $args"; + #print STDERR "RUN: $cmd\n\n"; + exec $cmd; exit; # never gets here. } # unix domain sockets if ($args =~ /-s (\S+)/) { - sleep 1; + # A slow/emulated/valgrinded/etc system may take longer than a second + # for the unix socket to appear. my $filename = $1; - my $conn = IO::Socket::UNIX->new(Peer => $filename) || - croak("Failed to connect to unix domain socket: $! '$filename'"); - - return Memcached::Handle->new(pid => $childpid, - conn => $conn, - domainsocket => $filename, - host => $host, - port => $port); + for (1..20) { + sleep 1; + my $conn = IO::Socket::UNIX->new(Peer => $filename); + + if ($conn) { + return Memcached::Handle->new(pid => $childpid, + conn => $conn, + domainsocket => $filename, + host => $host, + port => $port); + } else { + croak("Failed to connect to unix socket: memcached not running") unless is_running($childpid); + sleep 1; + } + } + croak("Failed to connect to unix domain socket: $! '$filename'") if $@; } # try to connect / find open port, only if we're not using unix domain @@ -347,7 +373,8 @@ host => $host, port => $port); } - select undef, undef, undef, 0.10; + croak("Failed to connect: memcached not running") unless is_running($childpid); + select undef, undef, undef, 0.25; } croak("Failed to startup/connect to memcached server."); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/t/lru-crawler.t new/memcached-1.6.6/t/lru-crawler.t --- old/memcached-1.6.5/t/lru-crawler.t 2020-04-04 04:14:26.000000000 +0200 +++ new/memcached-1.6.6/t/lru-crawler.t 2020-05-13 05:24:24.000000000 +0200 @@ -88,10 +88,20 @@ print $sock "lru_crawler disable\r\n"; is(scalar <$sock>, "OK\r\n", "disabled lru crawler"); -{ +my $settings_match = 0; +# TODO: we retry a few times since the settings value is changed +# outside of a memory barrier, but the thread is stopped before the OK is +# returned. +# At some point better handling of the setings synchronization should happen. +for (1 .. 10) { my $stats = mem_stats($server->sock, ' settings'); - is($stats->{lru_crawler}, "no"); + if ($stats->{lru_crawler} eq "no") { + $settings_match = 1; + last; + } + sleep 1; } +is($settings_match, 1, "settings output matches crawler state"); $server->stop; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/t/maxconns.t new/memcached-1.6.6/t/maxconns.t --- old/memcached-1.6.5/t/maxconns.t 2019-04-28 02:18:53.000000000 +0200 +++ new/memcached-1.6.6/t/maxconns.t 2020-05-13 05:24:24.000000000 +0200 @@ -5,12 +5,16 @@ use strict; use warnings; -use Test::More tests => 11; +use Test::More; use FindBin qw($Bin); use lib "$Bin/lib"; use MemcachedTest; +plan skip_all => "maxconns test does not work"; +exit 0; + +plan tests => 6; # start up a server with 10 maximum connections my $server = new_memcached('-c 100'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/t/restart.t new/memcached-1.6.6/t/restart.t --- old/memcached-1.6.5/t/restart.t 2020-04-12 22:39:36.000000000 +0200 +++ new/memcached-1.6.6/t/restart.t 2020-05-13 05:24:24.000000000 +0200 @@ -90,7 +90,7 @@ diag "Data that should expire while stopped."; { - print $sock "set low1 0 8 2\r\nbo\r\n"; + print $sock "set low1 0 5 2\r\nbo\r\n"; like(scalar <$sock>, qr/STORED/, "stored low ttl item"); # This one should stay. print $sock "set low2 0 20 2\r\nmo\r\n"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/t/server_crt.pem new/memcached-1.6.6/t/server_crt.pem --- old/memcached-1.6.5/t/server_crt.pem 2020-04-12 03:28:14.000000000 +0200 +++ new/memcached-1.6.6/t/server_crt.pem 2020-05-13 05:24:24.000000000 +0200 @@ -1,67 +1,72 @@ Certificate: Data: - Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha1WithRSAEncryption - Issuer: CN=Test Root Certificate Authority, ST=CA, C=US/[email protected], O=Test, OU=Test Department + Version: 1 (0x0) + Serial Number: + 71:a5:f7:f3:8f:7e:0a:d7:79:ce:b6:eb:01:60:ac:00:c3:76:5a:a0 + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN = Test Root Certificate Authority, ST = CA, C = US, emailAddress = [email protected], O = Test, OU = Test Department Validity - Not Before: Jan 7 18:25:01 2019 GMT - Not After : Jan 6 18:25:01 2024 GMT - Subject: CN=test.com, ST=CA, C=US/[email protected], O=Test, OU=Subunit of Test Organization + Not Before: Apr 27 07:01:42 2020 GMT + Not After : Apr 26 07:01:42 2025 GMT + Subject: C = US, ST = CA, O = Test, OU = Subunit of Test Organization, CN = test.com, emailAddress = [email protected] Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (1024 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:ca:76:35:79:91:e8:a2:ee:ef:f4:35:7e:29:85: - 75:90:65:5a:60:f8:a0:d9:ef:68:d1:61:79:69:d7: - e2:7b:f1:67:71:65:50:31:4e:9a:f8:6f:27:e9:05: - 0b:0e:76:95:24:9b:c2:bf:90:e5:6b:45:fd:e3:54: - ac:d5:62:90:4e:37:de:8f:ae:96:f6:b3:57:eb:ad: - b8:44:13:5d:a7:34:76:c1:26:49:91:67:3e:5e:52: - 68:c1:1c:7f:91:c7:9e:01:e2:be:a7:a8:eb:3f:44: - 6d:c7:c5:82:4b:97:d9:3f:c0:51:99:1b:20:df:12: - a3:e6:bb:66:45:6d:b4:e1:07 + 00:d6:cc:70:e1:24:a6:11:49:80:d2:44:4b:60:b7: + 5b:7b:ff:ed:2a:ba:dd:e5:88:4d:d9:d1:5a:c0:24: + 42:e7:40:ab:4d:cd:f1:b9:e3:8c:b6:93:2f:5a:e6: + eb:45:36:f3:5e:e2:8e:1a:5d:ba:fd:b5:f7:66:d7: + 23:20:df:08:b5:70:45:43:01:03:47:7b:6e:2b:6c: + 1b:d8:b6:20:be:7c:45:49:be:17:a1:00:68:a8:11: + f3:1f:15:c3:0e:39:6b:16:ee:05:36:0e:07:4d:c3: + 28:f6:9b:9c:66:e2:b5:56:76:38:fd:12:db:41:fa: + e4:02:67:64:54:a4:7d:28:9f:37:4e:e2:12:19:7f: + 79:14:17:e5:dd:c0:12:7c:33:52:ff:df:82:08:3b: + 61:b5:c6:59:50:49:93:87:20:97:45:52:33:4b:95: + 08:0c:6f:29:23:74:e3:dc:22:19:d4:b6:79:e6:1d: + 4f:07:75:47:d9:25:ee:05:97:cc:78:84:b9:64:36: + 9b:d2:b9:f9:2c:0f:40:e8:e9:16:cf:17:f5:3b:fb: + 56:a5:80:1a:29:93:90:0b:d6:4c:9a:8f:8e:d9:dd: + 9c:9d:06:da:a1:db:bc:44:14:b0:93:80:8c:3d:37: + e7:c3:4b:04:01:81:4b:f9:78:d0:b4:ed:51:78:24: + fd:cd Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - X509v3 Key Usage: - Digital Signature, Non Repudiation, Key Encipherment - X509v3 Subject Alternative Name: - DNS:test.com, DNS:alt.test.com - Signature Algorithm: sha1WithRSAEncryption - 61:c1:18:b4:04:79:05:0e:b9:79:2f:0e:3f:aa:f1:36:e3:90: - b9:c6:99:25:53:4a:06:64:52:92:29:c5:09:41:a6:16:74:1b: - 3c:4e:81:32:c2:d8:54:e0:1e:08:45:cf:f1:d0:ad:ea:11:1a: - b5:cf:7c:98:8a:dd:c1:01:e4:d0:f5:8e:60:fa:7f:e7:74:2d: - 91:43:81:bd:95:92:41:66:84:8b:8c:70:d7:2f:d4:2f:37:82: - 8f:9a:ef:c0:7d:c5:56:56:92:7a:00:b6:30:65:37:4c:6c:7a: - ba:cc:e2:dc:73:e9:f5:2c:3c:3e:31:67:ee:3d:b7:78:96:89: - ba:be:4f:85:a2:a8:83:3e:53:20:f0:bf:29:50:dc:23:38:58: - d8:33:f5:7b:4a:12:df:2b:34:4c:1c:f1:76:6b:86:95:74:43: - 29:f7:68:f0:ca:04:08:89:ac:97:7d:05:14:a0:ca:81:56:5c: - dd:c3:56:a3:53:01:0a:01:5c:55:b4:39:10:1b:be:47:19:58: - a1:f2:e6:0c:08:95:b0:35:4e:6c:81:6d:b9:cf:0e:5c:70:ff: - f3:b4:a7:95:69:1a:58:b7:ac:cc:2c:79:47:7e:20:17:cc:36: - be:2c:10:11:31:28:63:dd:6f:8d:8d:e9:11:ea:ca:fc:10:0a: - e0:ae:53:db + Signature Algorithm: sha256WithRSAEncryption + 14:1e:2a:7a:94:1d:c7:9a:69:c1:51:af:57:d0:b5:53:51:2f: + bb:a5:a6:fa:28:c4:02:a9:74:83:b8:3e:ce:26:44:dd:e7:71: + ef:3e:f6:20:91:da:f3:af:87:c4:c1:dc:6d:64:ee:64:86:98: + 07:45:8c:23:2e:b3:7a:ed:c4:dd:3a:5c:ab:20:ff:16:7d:66: + 53:45:7e:d5:ff:fb:dd:47:e6:25:a1:3c:97:27:db:04:f5:f4: + de:bb:f2:18:ac:99:a6:b3:39:b4:c0:08:f9:53:6a:22:b5:64: + 8c:2a:81:8c:2a:4e:1c:45:ca:94:68:7a:c1:0f:5d:c2:09:37: + f4:d5:5a:bf:63:62:dd:e1:e3:37:8f:2f:11:8d:e4:91:1b:43: + d2:a1:ea:14:7b:f9:b1:4e:97:2f:7e:71:2a:0c:67:a4:46:89: + 93:19:04:d4:93:a5:b3:97:ea:54:0d:4d:f0:89:cd:a7:f2:96: + 84:4c:80:9e:66:c2:33:ec:3d:4d:25:5f:ce:10:f5:e5:7e:a3: + b7:fe:02:5a:8e:c3:31:1a:55:a8:96:54:03:c4:f2:5b:55:63: + d7:e6:db:96:a5:47:a2:80:88:52:25:04:c9:15:fa:ad:b8:dd: + 34:89:8d:af:96:36:08:56:c6:a7:66:f4:ee:b8:4a:75:af:30: + 54:0e:64:b4 -----BEGIN CERTIFICATE----- -MIIDQjCCAiqgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBizEoMCYGA1UEAwwfVGVz -dCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eTELMAkGA1UECAwCQ0ExCzAJBgNV -BAYTAlVTMRwwGgYJKoZIhvcNAQkBFg1yb290QHRlc3QuY29tMQ0wCwYDVQQKDARU -ZXN0MRgwFgYDVQQLDA9UZXN0IERlcGFydG1lbnQwHhcNMTkwMTA3MTgyNTAxWhcN -MjQwMTA2MTgyNTAxWjCBgTERMA8GA1UEAwwIdGVzdC5jb20xCzAJBgNVBAgMAkNB -MQswCQYDVQQGEwJVUzEcMBoGCSqGSIb3DQEJARYNcm9vdEB0ZXN0LmNvbTENMAsG -A1UECgwEVGVzdDElMCMGA1UECwwcU3VidW5pdCBvZiBUZXN0IE9yZ2FuaXphdGlv -bjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAynY1eZHoou7v9DV+KYV1kGVa -YPig2e9o0WF5adfie/FncWVQMU6a+G8n6QULDnaVJJvCv5Dla0X941Ss1WKQTjfe -j66W9rNX6624RBNdpzR2wSZJkWc+XlJowRx/kceeAeK+p6jrP0Rtx8WCS5fZP8BR -mRsg3xKj5rtmRW204QcCAwEAAaM9MDswCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAw -IQYDVR0RBBowGIIIdGVzdC5jb22CDGFsdC50ZXN0LmNvbTANBgkqhkiG9w0BAQUF -AAOCAQEAYcEYtAR5BQ65eS8OP6rxNuOQucaZJVNKBmRSkinFCUGmFnQbPE6BMsLY -VOAeCEXP8dCt6hEatc98mIrdwQHk0PWOYPp/53QtkUOBvZWSQWaEi4xw1y/ULzeC -j5rvwH3FVlaSegC2MGU3TGx6uszi3HPp9Sw8PjFn7j23eJaJur5PhaKogz5TIPC/ -KVDcIzhY2DP1e0oS3ys0TBzxdmuGlXRDKfdo8MoECImsl30FFKDKgVZc3cNWo1MB -CgFcVbQ5EBu+RxlYofLmDAiVsDVObIFtuc8OXHD/87SnlWkaWLeszCx5R34gF8w2 -viwQETEoY91vjY3pEerK/BAK4K5T2w== +MIIDlTCCAn0CFHGl9/OPfgrXec626wFgrADDdlqgMA0GCSqGSIb3DQEBCwUAMIGL +MSgwJgYDVQQDDB9UZXN0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQswCQYD +VQQIDAJDQTELMAkGA1UEBhMCVVMxHDAaBgkqhkiG9w0BCQEWDXJvb3RAdGVzdC5j +b20xDTALBgNVBAoMBFRlc3QxGDAWBgNVBAsMD1Rlc3QgRGVwYXJ0bWVudDAeFw0y +MDA0MjcwNzAxNDJaFw0yNTA0MjYwNzAxNDJaMIGBMQswCQYDVQQGEwJVUzELMAkG +A1UECAwCQ0ExDTALBgNVBAoMBFRlc3QxJTAjBgNVBAsMHFN1YnVuaXQgb2YgVGVz +dCBPcmdhbml6YXRpb24xETAPBgNVBAMMCHRlc3QuY29tMRwwGgYJKoZIhvcNAQkB +Fg1yb290QHRlc3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +1sxw4SSmEUmA0kRLYLdbe//tKrrd5YhN2dFawCRC50CrTc3xueOMtpMvWubrRTbz +XuKOGl26/bX3ZtcjIN8ItXBFQwEDR3tuK2wb2LYgvnxFSb4XoQBoqBHzHxXDDjlr +Fu4FNg4HTcMo9pucZuK1VnY4/RLbQfrkAmdkVKR9KJ83TuISGX95FBfl3cASfDNS +/9+CCDthtcZZUEmThyCXRVIzS5UIDG8pI3Tj3CIZ1LZ55h1PB3VH2SXuBZfMeIS5 +ZDab0rn5LA9A6OkWzxf1O/tWpYAaKZOQC9ZMmo+O2d2cnQbaodu8RBSwk4CMPTfn +w0sEAYFL+XjQtO1ReCT9zQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAUHip6lB3H +mmnBUa9X0LVTUS+7pab6KMQCqXSDuD7OJkTd53HvPvYgkdrzr4fEwdxtZO5khpgH +RYwjLrN67cTdOlyrIP8WfWZTRX7V//vdR+YloTyXJ9sE9fTeu/IYrJmmszm0wAj5 +U2oitWSMKoGMKk4cRcqUaHrBD13CCTf01Vq/Y2Ld4eM3jy8RjeSRG0PSoeoUe/mx +TpcvfnEqDGekRomTGQTUk6Wzl+pUDU3wic2n8paETICeZsIz7D1NJV/OEPXlfqO3 +/gJajsMxGlWollQDxPJbVWPX5tuWpUeigIhSJQTJFfqtuN00iY2vljYIVsanZvTu +uEp1rzBUDmS0 -----END CERTIFICATE----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/t/server_key.pem new/memcached-1.6.6/t/server_key.pem --- old/memcached-1.6.5/t/server_key.pem 2020-04-12 03:28:14.000000000 +0200 +++ new/memcached-1.6.6/t/server_key.pem 2020-05-13 05:24:24.000000000 +0200 @@ -1,15 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.5/version.m4 new/memcached-1.6.6/version.m4 --- old/memcached-1.6.5/version.m4 2020-04-13 20:46:26.000000000 +0200 +++ new/memcached-1.6.6/version.m4 2020-05-13 05:32:49.000000000 +0200 @@ -1 +1 @@ -m4_define([VERSION_NUMBER], [1.6.5]) +m4_define([VERSION_NUMBER], [1.6.6])
