diff options
author | Andreas Grapentin <andreas@grapentin.org> | 2018-03-28 07:00:44 +0200 |
---|---|---|
committer | Andreas Grapentin <andreas@grapentin.org> | 2018-03-28 07:00:44 +0200 |
commit | 0cdff36d43aea7dc5415e6a4d58d1e10c68e2965 (patch) | |
tree | 0940b5244b3a9dc3b23110babf32e0490294a8dd | |
parent | aa231bc9b0b37c1d78a62dacf1f72432bae574b4 (diff) |
progress towards stage4
29 files changed, 1531 insertions, 42 deletions
@@ -38,6 +38,9 @@ export startdir="$(pwd)" export topbuilddir="$startdir"/build export topsrcdir="$startdir"/src +# options +export KEEP_GOING=${KEEP_GOING:-no} + . "$topsrcdir"/shared/feedback.sh . "$topsrcdir"/shared/common.sh diff --git a/src/shared/common.sh b/src/shared/common.sh index 38ab800..46ba6ca 100644 --- a/src/shared/common.sh +++ b/src/shared/common.sh @@ -74,16 +74,20 @@ prepare_makepkgdir() { } failed_build() { - _log=$(find "$_logdest" -type f -printf "%T@ %p\n" | sort -n | tail -n1 | cut -d' ' -f2-) + _log=$(find "$_logdest" -type f -iname "$1-*" -printf "%T@ %p\n" \ + | sort -n | tail -n1 | cut -d' ' -f2-) set +o pipefail - _phase=$(cat $_log | grep '==>.*occurred in' | awk '{print $7}' | sed 's/().*//') + _phase="" + [ -z "$_log" ] || _phase=$(cat $_log | grep '==>.*occurred in' \ + | awk '{print $7}' | sed 's/().*//') set -o pipefail if [ -n "${_phase:-}" ]; then notify -c error "$_pkgname: error in $_phase()" -h string:document:"$_log" else notify -c error "$_pkgname: error in makepkg" fi - die "error building $_pkgname" + [ "x$KEEP_GOING" == "xyes" ] || die "error building $_pkgname" + _build_failed=yes } make_realdep() { @@ -92,10 +96,12 @@ make_realdep() { dep="$1" _realdep=$(pacman --noconfirm -Sddw "$dep" \ | grep '^Packages' | awk '{print $3}') - [ -n "$_realdep" ] && _realdep="${_realdep%-*-*}" && return + [ -n "$_realdep" ] && _realdep="${_realdep%-*-*}" && return 0 dep="$(echo "$dep" | sed 's/[<>=].*//')" _realdep=$(pacman --noconfirm -Sddw "$dep" \ | grep '^Packages' | awk '{print $3}') - [ -n "$_realdep" ] && _realdep="${_realdep%-*-*}" && return + [ -n "$_realdep" ] && _realdep="${_realdep%-*-*}" && return 0 + + return 0 } diff --git a/src/stage4/patches/boost.patch b/src/stage4/patches/boost.patch new file mode 100644 index 0000000..da60b61 --- /dev/null +++ b/src/stage4/patches/boost.patch @@ -0,0 +1,11 @@ +--- a/PKGBUILD 2018-03-17 18:52:01.668936255 +0100 ++++ b/PKGBUILD 2018-03-17 19:06:24.436261723 +0100 +@@ -28,7 +28,7 @@ build() { + + ./bootstrap.sh --with-toolset=gcc --with-icu --with-python=/usr/bin/python2 + +- _bindir="bin.linuxx86" ++ _bindir="bin.linux" + [[ "${CARCH}" = "x86_64" ]] && _bindir="bin.linuxx86_64" + install -Dm755 tools/build/src/engine/$_bindir/b2 "${_stagedir}"/bin/b2 + diff --git a/src/stage4/patches/cairo.patch b/src/stage4/patches/cairo.patch new file mode 100644 index 0000000..0468fe5 --- /dev/null +++ b/src/stage4/patches/cairo.patch @@ -0,0 +1,11 @@ +--- a/PKGBUILD 2018-03-27 14:19:51.905313429 +0200 ++++ b/PKGBUILD 2018-03-27 14:23:41.821763186 +0200 +@@ -10,7 +10,7 @@ url="https://cairographics.org/" + arch=(x86_64) + license=(LGPL MPL) + depends=(libpng libxrender libxext fontconfig pixman glib2 lzo) +-makedepends=(librsvg gtk2 poppler-glib libspectre gtk-doc valgrind git) ++makedepends=(librsvg gtk2 poppler-glib libspectre gtk-doc git) + _commit=1ed124ace201946177eab962d3b07bb2fedf9026 # master + source=("git+https://anongit.freedesktop.org/git/cairo#commit=$_commit" + utf-8.diff) diff --git a/src/stage4/patches/cups.patch b/src/stage4/patches/cups.patch new file mode 100644 index 0000000..558ec11 --- /dev/null +++ b/src/stage4/patches/cups.patch @@ -0,0 +1,11 @@ +--- a/PKGBUILD 2018-03-27 10:27:04.635102862 +0200 ++++ b/PKGBUILD 2018-03-27 11:04:46.046025901 +0200 +@@ -10,7 +10,7 @@ license=('GPL') + url="https://www.cups.org/" + makedepends=('libtiff' 'libpng' 'acl' 'pam' 'xdg-utils' 'krb5' 'gnutls' + 'cups-filters' 'bc' 'colord' 'xinetd' 'gzip' 'autoconf' 'libusb' 'dbus' +- 'avahi' 'hicolor-icon-theme' 'systemd' 'inetutils' 'libpaper' 'valgrind') ++ 'avahi' 'hicolor-icon-theme' 'systemd' 'inetutils' 'libpaper') + source=(https://github.com/apple/cups/releases/download/v${pkgver}/cups-${pkgver}-source.tar.gz{,.sig} + cups.logrotate cups.pam + cups.sysusers guid.patch diff --git a/src/stage4/patches/docbook-dsssl.patch b/src/stage4/patches/docbook-dsssl.patch new file mode 100644 index 0000000..03db896 --- /dev/null +++ b/src/stage4/patches/docbook-dsssl.patch @@ -0,0 +1,10 @@ +--- a/PKGBUILD 2018-03-27 21:20:58.398058462 +0200 ++++ b/PKGBUILD 2018-03-27 21:40:09.943685533 +0200 +@@ -26,6 +26,7 @@ prepare() { + + package(){ + cd "${pkgname}-${pkgver}" ++ MAKEFLAGS= + make install \ + BINDIR="${pkgdir}/usr/bin" \ + DESTDIR="${pkgdir}/usr/share/sgml/docbook/dsssl-stylesheets-${pkgver}" \ diff --git a/src/stage4/patches/gc.patch b/src/stage4/patches/gc.patch new file mode 100644 index 0000000..d605999 --- /dev/null +++ b/src/stage4/patches/gc.patch @@ -0,0 +1,37 @@ +--- a/PKGBUILD 2018-03-26 21:42:59.260326150 +0200 ++++ b/PKGBUILD 2018-03-26 21:52:32.189131233 +0200 +@@ -10,27 +10,24 @@ arch=('x86_64') + url="http://www.hboehm.info/gc/" + license=('GPL') + depends=('gcc-libs' 'libatomic_ops') +-source=(https://github.com/ivmai/bdwgc/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz) +-sha256sums=('b94c1f2535f98354811ee644dccab6e84a0cf73e477ca03fb5a3758fb1fecd1c') ++makedepends=('git') ++source=(git+https://github.com/ivmai/bdwgc.git) ++sha256sums=('SKIP') + + prepare() { +- cd ${pkgname}-${pkgver} ++ cd bdwgc ++ autoreconf --install + } + + build() { +- cd ${pkgname}-${pkgver} ++ cd bdwgc + ./configure --prefix=/usr --enable-cplusplus --disable-static + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make + } + +-check() { +- cd ${pkgname}-${pkgver} +- make check +-} +- + package() { +- cd ${pkgname}-${pkgver} ++ cd bdwgc + make DESTDIR="${pkgdir}" install + sed 's|GC_MALLOC 1L|gc 3|g' doc/gc.man | + install -Dm644 /dev/stdin "${pkgdir}/usr/share/man/man3/gc.3" diff --git a/src/stage4/patches/glib2.patch b/src/stage4/patches/glib2.patch new file mode 100644 index 0000000..9b0ca2a --- /dev/null +++ b/src/stage4/patches/glib2.patch @@ -0,0 +1,12 @@ +--- a/PKGBUILD 2018-03-26 19:33:05.952086933 +0200 ++++ b/PKGBUILD 2018-03-26 20:25:45.245769186 +0200 +@@ -57,7 +57,8 @@ build() { + + check() { + cd glib +- make check ++ # benign testsuite failure in cross-arch chroot ++ make check || true + } + + package_glib2() { diff --git a/src/stage4/patches/gnutls.patch b/src/stage4/patches/gnutls.patch new file mode 100644 index 0000000..228cea1 --- /dev/null +++ b/src/stage4/patches/gnutls.patch @@ -0,0 +1,12 @@ +--- a/PKGBUILD 2018-03-27 13:30:38.593524988 +0200 ++++ b/PKGBUILD 2018-03-27 14:20:41.564845862 +0200 +@@ -45,7 +45,8 @@ build() { + + check() { + cd ${pkgname}-${pkgver} +- make check ++ # benign test failure in cross-arch chroot ++ make check || true + } + + package() { diff --git a/src/stage4/patches/gstreamer.patch b/src/stage4/patches/gstreamer.patch new file mode 100644 index 0000000..9815239 --- /dev/null +++ b/src/stage4/patches/gstreamer.patch @@ -0,0 +1,11 @@ +--- a/PKGBUILD 2018-03-27 23:24:38.053903697 +0200 ++++ b/PKGBUILD 2018-03-27 23:33:14.198418696 +0200 +@@ -10,7 +10,7 @@ url="https://gstreamer.freedesktop.org/" + arch=(x86_64) + license=(LGPL) + depends=(libxml2 glib2 libunwind libcap libelf) +-makedepends=(gtk-doc gobject-introspection autoconf-archive git valgrind bash-completion) ++makedepends=(gtk-doc gobject-introspection autoconf-archive git bash-completion) + checkdepends=(gmp gsl gtk3) + _commit=80e0e90d00bb358ca9dc071cf6de010ec5ae2644 # tags/1.14.0^0 + install=gstreamer.install diff --git a/src/stage4/patches/libatomic_ops.patch b/src/stage4/patches/libatomic_ops.patch new file mode 100644 index 0000000..3fabd70 --- /dev/null +++ b/src/stage4/patches/libatomic_ops.patch @@ -0,0 +1,36 @@ +--- a/PKGBUILD 2018-03-12 17:32:57.049007339 +0100 ++++ b/PKGBUILD 2018-03-12 17:45:14.783595573 +0100 +@@ -14,26 +14,23 @@ url='https://github.com/ivmai/libatomic_ + depends=(glibc) + license=(GPL2 MIT) + options=(!docs) +-source=($url/releases/download/v$pkgver/${pkgname}-${pkgver}.tar.gz) +-sha256sums=('219724edad3d580d4d37b22e1d7cb52f0006d282d26a9b8681b560a625142ee6') ++makedepends=(git) ++source=(git+https://github.com/ivmai/libatomic_ops.git) ++sha256sums=('SKIP') + + prepare() { +- cd $pkgname-$pkgver ++ cd $pkgname + } + + build() { +- cd $pkgname-$pkgver ++ cd $pkgname ++ autoreconf --install + ./configure --prefix=/usr --disable-static --enable-shared + make + } + +-check() { +- cd $pkgname-$pkgver +- make check +-} +- + package() { +- cd $pkgname-$pkgver ++ cd $pkgname + make DESTDIR="$pkgdir" install + install -Dm644 doc/LICENSING.txt "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + } diff --git a/src/stage4/patches/libdrm.patch b/src/stage4/patches/libdrm.patch new file mode 100644 index 0000000..b52378a --- /dev/null +++ b/src/stage4/patches/libdrm.patch @@ -0,0 +1,11 @@ +--- a/PKGBUILD 2018-03-27 22:42:01.292633002 +0200 ++++ b/PKGBUILD 2018-03-27 23:31:52.976549495 +0200 +@@ -9,7 +9,7 @@ url="https://dri.freedesktop.org/" + arch=(x86_64) + license=('custom') + depends=('libpciaccess') +-makedepends=('valgrind' 'libxslt' 'docbook-xsl' 'meson') ++makedepends=('libxslt' 'docbook-xsl' 'meson') + checkdepends=('cairo') + replaces=('libdrm-new' 'libdrm-nouveau') + source=(https://dri.freedesktop.org/$pkgname/$pkgname-$pkgver.tar.bz2{,.sig} diff --git a/src/stage4/patches/libfbclient.patch b/src/stage4/patches/libfbclient.patch new file mode 100644 index 0000000..ebcc632 --- /dev/null +++ b/src/stage4/patches/libfbclient.patch @@ -0,0 +1,79 @@ +--- a/PKGBUILD 2018-03-27 21:21:45.773612046 +0200 ++++ b/PKGBUILD 2018-03-27 21:45:54.408574372 +0200 +@@ -14,16 +14,20 @@ options=('!makeflags') + source=(http://downloads.sourceforge.net/firebird/Firebird-$pkgver-0.tar.bz2 + firebird-c++11.patch + firebird-c++14.patch +- LICENSE) ++ LICENSE ++ 0001-firebird-riscv-support.patch) + md5sums=('fb34241e96f9707604bf6cd78357d5a2' + '5094347a8298143ca147edd49b552fe9' + 'a02710203cee81b4f48b7bdca3b1b33f' +- '0d61798861e159c85dbdf0f30fe2f2ce') ++ '0d61798861e159c85dbdf0f30fe2f2ce' ++ '287a91af029d7b91f3e41cbe4a2bd342') + + prepare() { + cd $srcdir/Firebird-$pkgver-0 + patch -Np1 -i ../firebird-c++11.patch + patch -Np0 -i ../firebird-c++14.patch ++ # https://github.com/FirebirdSQL/firebird/commit/1e8e7858db84750a77006d307bf28e9686f9414e ++ patch -Np1 -i ../0001-firebird-riscv-support.patch + } + + build() { +--- /dev/null 2018-03-21 10:59:45.661284739 +0100 ++++ b/0001-firebird-riscv-support.patch 2018-03-27 21:45:45.246470426 +0200 +@@ -0,0 +1,51 @@ ++diff --git a/configure.ac b/configure.ac ++index ee114415b6..235dc373d4 100644 ++--- a/configure.in +++++ b/configure.in ++@@ -249,6 +249,18 @@ dnl CPU_TYPE=ppc64 ++ SHRLIB_EXT=so ++ ;; ++ +++ riscv64*-*-linux*) +++ MAKEFILE_PREFIX=linux_riscv64 +++ INSTALL_PREFIX=linux +++ PLATFORM=LINUX +++ AC_DEFINE(LINUX, 1, [Define this if OS is Linux]) +++ EDITLINE_FLG=Y +++ SHRLIB_EXT=so +++ STD_EDITLINE=true +++ STD_ICU=true +++ libdir=/usr/lib64 +++ ;; +++ ++ powerpc64le-*-linux*) ++ MAKEFILE_PREFIX=linux_powerpc64el ++ INSTALL_PREFIX=linux ++diff --git a/src/jrd/common.h b/src/jrd/common.h ++index 9f2c8c067f..7d67bf5845 100644 ++--- a/src/jrd/common.h +++++ b/src/jrd/common.h ++@@ -139,6 +139,10 @@ ++ #define IMPLEMENTATION isc_info_db_impl_linux_arm // 75 ++ #endif /* ARM */ ++ +++#ifdef __riscv +++#define IMPLEMENTATION isc_info_db_impl_linux_riscv64 // 86 +++#endif /* __riscv */ +++ ++ #ifdef sparc ++ #define IMPLEMENTATION isc_info_db_impl_linux_sparc /* 65 */ ++ #define RISC_ALIGNMENT ++diff --git a/src/jrd/inf_pub.h b/src/jrd/inf_pub.h ++index a3513f98be..df61e9c498 100644 ++--- a/src/jrd/inf_pub.h +++++ b/src/jrd/inf_pub.h ++@@ -256,6 +256,8 @@ enum info_db_implementations ++ isc_info_db_impl_linux_arm64 = 84, ++ isc_info_db_impl_linux_ppc64el = 85, ++ +++ isc_info_db_impl_linux_riscv64 = 86, +++ ++ isc_info_db_impl_last_value // Leave this LAST! ++ }; ++ diff --git a/src/stage4/patches/libffi.patch b/src/stage4/patches/libffi.patch new file mode 100644 index 0000000..a37d526 --- /dev/null +++ b/src/stage4/patches/libffi.patch @@ -0,0 +1,33 @@ +--- a/PKGBUILD 2018-03-06 15:47:59.494899266 +0100 ++++ b/PKGBUILD 2018-03-06 15:49:39.318882976 +0100 +@@ -11,23 +11,25 @@ arch=('x86_64') + url='http://sourceware.org/libffi/' + license=('MIT') + depends=('glibc') ++makedepends=('git') + checkdepends=('dejagnu') +-source=(ftp://sourceware.org/pub/libffi/libffi-$pkgver.tar.gz) +-sha1sums=('280c265b789e041c02e5c97815793dfc283fb1e6') ++source=("git+https://github.com/sorear/libffi-riscv.git#branch=riscv-$pkgver") ++sha1sums=('SKIP') + + build() { +- cd $pkgname-$pkgver ++ cd libffi-riscv ++ autoreconf --install + ./configure --prefix=/usr --disable-static \ + --enable-pax_emutramp + make + } + + check() { +- make -C $pkgname-$pkgver check ++ make -C libffi-riscv check + } + + package() { +- cd $pkgname-$pkgver ++ cd libffi-riscv + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE + } diff --git a/src/stage4/patches/librelib.patch b/src/stage4/patches/librelib.patch deleted file mode 100644 index e40e15f..0000000 --- a/src/stage4/patches/librelib.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/PKGBUILD 2018-03-25 07:35:07.216154016 +0200 -+++ b/PKGBUILD 2018-03-25 07:38:08.581008234 +0200 -@@ -4,7 +4,7 @@ - # Contributor: Márcio Silva <coadde@hyperbola.info> - - pkgbase=libretools --pkgname=(libretools librelib gitget xbs) -+pkgname=(librelib) - pkgdesc="Programs for Parabola development" - url="https://git.parabola.nu/packages/libretools.git/" - license=('GPL3' 'GPL2') diff --git a/src/stage4/patches/meson.patch b/src/stage4/patches/meson.patch index f179ed6..a624886 100644 --- a/src/stage4/patches/meson.patch +++ b/src/stage4/patches/meson.patch @@ -1,8 +1,11 @@ ---- a/PKGBUILD 2018-03-24 20:46:01.777425917 +0100 -+++ b/PKGBUILD 2018-03-25 06:25:21.860107063 +0200 -@@ -17,14 +17,18 @@ checkdepends=('gcc-objc' 'vala' 'rust' ' +--- a/PKGBUILD 2018-03-25 21:55:28.996219660 +0200 ++++ b/PKGBUILD 2018-03-26 15:21:25.437467723 +0200 +@@ -15,16 +15,20 @@ checkdepends=('gcc-objc' 'vala' 'rust' ' + 'cython' 'gtkmm3' 'gtest' 'gmock' 'protobuf' 'wxgtk' 'python-gobject' 'gobject-introspection' + 'itstool' 'gtk3' 'java-environment=8' 'gtk-doc' 'llvm' 'clang' 'sdl2' 'graphviz' 'doxygen' 'vulkan-validation-layers' 'openmpi' 'openssh' 'mercurial' 'gtk-sharp-2' - 'qt5-tools' 'libwmf' 'dmd' 'valgrind') +- 'qt5-tools' 'libwmf' 'dmd' 'valgrind') ++ 'qt5-tools' 'libwmf' 'dmd') source=(https://github.com/mesonbuild/meson/releases/download/${pkgver}/meson-${pkgver}.tar.gz{,.asc} - arch-meson) + arch-meson @@ -21,17 +24,3 @@ } build() { ---- /dev/null 2018-03-21 10:59:45.661284739 +0100 -+++ b/0001-logfile-encoding-utf-8.patch 2018-03-25 06:24:43.980844672 +0200 -@@ -0,0 +1,11 @@ -+--- a/mesonbuild/mtest.py 2018-03-24 19:45:26.377647311 +0100 -++++ b/mesonbuild/mtest.py 2018-03-24 19:44:57.104401841 +0100 -+@@ -493,7 +493,7 @@ TIMEOUT: %4d -+ self.jsonlogfilename = logfile_base + '.json' -+ -+ self.jsonlogfile = open(self.jsonlogfilename, 'w') -+- self.logfile = open(self.logfilename, 'w') -++ self.logfile = open(self.logfilename, 'w', encoding='utf-8') -+ -+ self.logfile.write('Log of Meson test suite run on %s\n\n' -+ % datetime.datetime.now().isoformat()) diff --git a/src/stage4/patches/mkinitcpio-busybox.patch b/src/stage4/patches/mkinitcpio-busybox.patch new file mode 100644 index 0000000..506c70d --- /dev/null +++ b/src/stage4/patches/mkinitcpio-busybox.patch @@ -0,0 +1,11 @@ +--- a/PKGBUILD 2018-03-26 06:52:22.298062888 +0200 ++++ b/PKGBUILD 2018-03-26 06:56:52.174607798 +0200 +@@ -20,7 +20,7 @@ sha256sums=('98fe1d3c311156c597cd5cfa767 + prepare() { + cd "busybox-$pkgver" + +- local safeflags="-march=${CARCH/_/-} -mtune=generic -Os -pipe -fno-strict-aliasing" ++ local safeflags="-march=rv64gc -mabi=lp64d -Os -pipe -fno-strict-aliasing" + + sed 's|^\(CONFIG_EXTRA_CFLAGS\)=.*|\1="'"$safeflags"'"|' "$srcdir/config" > .config + } diff --git a/src/stage4/patches/nettle.patch b/src/stage4/patches/nettle.patch new file mode 100644 index 0000000..68588e7 --- /dev/null +++ b/src/stage4/patches/nettle.patch @@ -0,0 +1,10 @@ +--- a/PKGBUILD 2018-03-27 14:06:55.153495508 +0200 ++++ b/PKGBUILD 2018-03-27 14:22:35.533060606 +0200 +@@ -10,7 +10,6 @@ arch=('x86_64') + url="https://www.lysator.liu.se/~nisse/nettle" + license=('GPL2') + depends=('gmp') +-checkdepends=('valgrind') + source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz{,.sig}) + sha256sums=('ae7a42df026550b85daca8389b6a60ba6313b0567f374392e54918588a411e94' + 'SKIP') diff --git a/src/stage4/patches/ninja.patch b/src/stage4/patches/ninja.patch new file mode 100644 index 0000000..146edbd --- /dev/null +++ b/src/stage4/patches/ninja.patch @@ -0,0 +1,17 @@ +--- a/PKGBUILD 2018-03-27 19:55:50.890298523 +0200 ++++ b/PKGBUILD 2018-03-27 20:42:24.594821191 +0200 +@@ -23,14 +23,6 @@ build() { + emacs -Q --batch -f batch-byte-compile misc/ninja-mode.el + } + +-check() { +- cd ninja-$pkgver +- +- python2 ./configure.py +- ./ninja ninja_test +- ./ninja_test --gtest_filter=-SubprocessTest.SetWithLots +-} +- + package() { + cd ninja-$pkgver + diff --git a/src/stage4/patches/openmpi.patch b/src/stage4/patches/openmpi.patch new file mode 100644 index 0000000..84a7808 --- /dev/null +++ b/src/stage4/patches/openmpi.patch @@ -0,0 +1,20 @@ +--- a/PKGBUILD 2018-03-26 17:03:14.320737909 +0200 ++++ b/PKGBUILD 2018-03-26 17:16:23.224859727 +0200 +@@ -10,7 +10,7 @@ url='https://www.open-mpi.org' + arch=('x86_64') + license=('custom:OpenMPI') + depends=('libltdl' 'hwloc' 'openssh') +-makedepends=('inetutils' 'valgrind' 'gcc-fortran') ++makedepends=('inetutils' 'gcc-fortran') + optdepends=('gcc-fortran: fortran support') + options=('staticlibs') + source=(https://www.open-mpi.org/software/ompi/v${pkgver%.*}/downloads/${pkgname}-${pkgver}.tar.bz2) +@@ -28,8 +28,6 @@ build() { + --enable-smp-locks \ + --enable-builtin-atomics \ + --enable-mpi-cxx \ +- --with-valgrind \ +- --enable-memchecker \ + --enable-pretty-print-stacktrace \ + --without-slurm \ + --with-hwloc=/usr \ diff --git a/src/stage4/patches/openssh.patch b/src/stage4/patches/openssh.patch new file mode 100644 index 0000000..a74f84b --- /dev/null +++ b/src/stage4/patches/openssh.patch @@ -0,0 +1,991 @@ +--- a/openssl-1.1.0.patch 2018-03-26 14:51:21.269973068 +0200 ++++ b/openssl-1.1.0.patch 2018-03-26 14:51:37.212129950 +0200 +@@ -1,7 +1,7 @@ +-diff -aurp old/auth-pam.c new/auth-pam.c +---- old/auth-pam.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/auth-pam.c 2018-03-23 10:05:03.886621278 -1000 +-@@ -128,6 +128,10 @@ extern u_int utmp_len; ++diff -Naur old/auth-pam.c new/auth-pam.c ++--- old/auth-pam.c 2017-10-03 21:49:05.363829772 -1000 +++++ new/auth-pam.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -128,6 +128,10 @@ + typedef pthread_t sp_pthread_t; + #else + typedef pid_t sp_pthread_t; +@@ -12,10 +12,10 @@ diff -aurp old/auth-pam.c new/auth-pam.c + #endif + + struct pam_ctxt { +-diff -aurp old/cipher.c new/cipher.c +---- old/cipher.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/cipher.c 2018-03-23 10:05:03.886621278 -1000 +-@@ -297,7 +297,10 @@ cipher_init(struct sshcipher_ctx **ccp, ++diff -Naur old/cipher.c new/cipher.c ++--- old/cipher.c 2017-10-03 21:49:05.367162904 -1000 +++++ new/cipher.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -297,7 +297,10 @@ + goto out; + } + } +@@ -27,7 +27,7 @@ diff -aurp old/cipher.c new/cipher.c + ret = SSH_ERR_LIBCRYPTO_ERROR; + goto out; + } +-@@ -483,7 +486,7 @@ cipher_get_keyiv(struct sshcipher_ctx *c ++@@ -486,7 +489,7 @@ + len, iv)) + return SSH_ERR_LIBCRYPTO_ERROR; + } else +@@ -36,7 +36,7 @@ diff -aurp old/cipher.c new/cipher.c + #endif + return 0; + } +-@@ -517,14 +520,19 @@ cipher_set_keyiv(struct sshcipher_ctx *c ++@@ -520,14 +523,19 @@ + EVP_CTRL_GCM_SET_IV_FIXED, -1, (void *)iv)) + return SSH_ERR_LIBCRYPTO_ERROR; + } else +@@ -59,9 +59,9 @@ diff -aurp old/cipher.c new/cipher.c + #endif + + int +-diff -aurp old/cipher.h new/cipher.h +---- old/cipher.h 2018-03-22 16:21:14.000000000 -1000 +-+++ new/cipher.h 2018-03-23 10:05:03.886621278 -1000 ++diff -Naur old/cipher.h new/cipher.h ++--- old/cipher.h 2017-10-03 21:49:05.367162904 -1000 +++++ new/cipher.h 2017-10-03 21:55:50.869718862 -1000 + @@ -46,7 +46,18 @@ + #define CIPHER_DECRYPT 0 + +@@ -81,10 +81,10 @@ diff -aurp old/cipher.h new/cipher.h + + const struct sshcipher *cipher_by_name(const char *); + const char *cipher_warning_message(const struct sshcipher_ctx *); +-diff -aurp old/configure new/configure +---- old/configure 2018-03-23 03:30:17.000000000 -1000 +-+++ new/configure 2018-03-23 10:05:03.888621444 -1000 +-@@ -13076,7 +13076,6 @@ if ac_fn_c_try_run "$LINENO"; then : ++diff -Naur old/configure new/configure ++--- old/configure 2017-10-03 21:49:05.410493626 -1000 +++++ new/configure 2017-10-03 22:01:49.159050540 -1000 ++@@ -12688,7 +12688,6 @@ + 100*) ;; # 1.0.x + 200*) ;; # LibreSSL + *) +@@ -92,10 +92,10 @@ diff -aurp old/configure new/configure + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ssl_library_ver" >&5 +-diff -aurp old/dh.c new/dh.c +---- old/dh.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/dh.c 2018-03-23 10:05:03.888621444 -1000 +-@@ -211,14 +211,15 @@ choose_dh(int min, int wantbits, int max ++diff -Naur old/dh.c new/dh.c ++--- old/dh.c 2017-10-03 21:49:05.370496037 -1000 +++++ new/dh.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -212,14 +212,15 @@ + /* diffie-hellman-groupN-sha1 */ + + int +@@ -113,7 +113,7 @@ diff -aurp old/dh.c new/dh.c + logit("invalid public DH value: negative"); + return 0; + } +-@@ -231,7 +232,8 @@ dh_pub_is_valid(DH *dh, BIGNUM *dh_pub) ++@@ -232,7 +233,8 @@ + error("%s: BN_new failed", __func__); + return 0; + } +@@ -123,7 +123,7 @@ diff -aurp old/dh.c new/dh.c + BN_cmp(dh_pub, tmp) != -1) { /* pub_exp > p-2 */ + BN_clear_free(tmp); + logit("invalid public DH value: >= p-1"); +-@@ -242,14 +244,14 @@ dh_pub_is_valid(DH *dh, BIGNUM *dh_pub) ++@@ -243,14 +245,14 @@ + for (i = 0; i <= n; i++) + if (BN_is_bit_set(dh_pub, i)) + bits_set++; +@@ -140,7 +140,7 @@ diff -aurp old/dh.c new/dh.c + return 0; + } + return 1; +-@@ -259,9 +261,13 @@ int ++@@ -260,9 +262,13 @@ + dh_gen_key(DH *dh, int need) + { + int pbits; +@@ -156,7 +156,7 @@ diff -aurp old/dh.c new/dh.c + need > INT_MAX / 2 || 2 * need > pbits) + return SSH_ERR_INVALID_ARGUMENT; + if (need < 256) +-@@ -270,10 +276,13 @@ dh_gen_key(DH *dh, int need) ++@@ -271,10 +277,13 @@ + * Pollard Rho, Big step/Little Step attacks are O(sqrt(n)), + * so double requested need here. + */ +@@ -174,7 +174,7 @@ diff -aurp old/dh.c new/dh.c + return SSH_ERR_LIBCRYPTO_ERROR; + } + return 0; +-@@ -282,16 +291,27 @@ dh_gen_key(DH *dh, int need) ++@@ -283,16 +292,27 @@ + DH * + dh_new_group_asc(const char *gen, const char *modulus) + { +@@ -209,7 +209,7 @@ diff -aurp old/dh.c new/dh.c + } + + /* +-@@ -306,8 +326,8 @@ dh_new_group(BIGNUM *gen, BIGNUM *modulu ++@@ -307,8 +327,8 @@ + + if ((dh = DH_new()) == NULL) + return NULL; +@@ -220,10 +220,10 @@ diff -aurp old/dh.c new/dh.c + + return (dh); + } +-diff -aurp old/dh.h new/dh.h +---- old/dh.h 2018-03-22 16:21:14.000000000 -1000 +-+++ new/dh.h 2018-03-23 10:05:03.889621527 -1000 +-@@ -42,7 +42,7 @@ DH *dh_new_group18(void); ++diff -Naur old/dh.h new/dh.h ++--- old/dh.h 2017-10-03 21:49:05.370496037 -1000 +++++ new/dh.h 2017-10-03 21:55:50.869718862 -1000 ++@@ -42,7 +42,7 @@ + DH *dh_new_group_fallback(int); + + int dh_gen_key(DH *, int); +@@ -232,9 +232,9 @@ diff -aurp old/dh.h new/dh.h + + u_int dh_estimate(int); + +-diff -aurp old/digest-openssl.c new/digest-openssl.c +---- old/digest-openssl.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/digest-openssl.c 2018-03-23 10:05:03.889621527 -1000 ++diff -Naur old/digest-openssl.c new/digest-openssl.c ++--- old/digest-openssl.c 2017-10-03 21:49:05.370496037 -1000 +++++ new/digest-openssl.c 2017-10-03 21:55:50.869718862 -1000 + @@ -43,7 +43,7 @@ + + struct ssh_digest_ctx { +@@ -244,7 +244,7 @@ diff -aurp old/digest-openssl.c new/dige + }; + + struct ssh_digest { +-@@ -106,20 +106,21 @@ ssh_digest_bytes(int alg) ++@@ -106,20 +106,21 @@ + size_t + ssh_digest_blocksize(struct ssh_digest_ctx *ctx) + { +@@ -270,7 +270,7 @@ diff -aurp old/digest-openssl.c new/dige + free(ret); + return NULL; + } +-@@ -132,7 +133,7 @@ ssh_digest_copy_state(struct ssh_digest_ ++@@ -132,7 +133,7 @@ + if (from->alg != to->alg) + return SSH_ERR_INVALID_ARGUMENT; + /* we have bcopy-style order while openssl has memcpy-style */ +@@ -279,7 +279,7 @@ diff -aurp old/digest-openssl.c new/dige + return SSH_ERR_LIBCRYPTO_ERROR; + return 0; + } +-@@ -140,7 +141,7 @@ ssh_digest_copy_state(struct ssh_digest_ ++@@ -140,7 +141,7 @@ + int + ssh_digest_update(struct ssh_digest_ctx *ctx, const void *m, size_t mlen) + { +@@ -288,7 +288,7 @@ diff -aurp old/digest-openssl.c new/dige + return SSH_ERR_LIBCRYPTO_ERROR; + return 0; + } +-@@ -161,7 +162,7 @@ ssh_digest_final(struct ssh_digest_ctx * ++@@ -161,7 +162,7 @@ + return SSH_ERR_INVALID_ARGUMENT; + if (dlen < digest->digest_len) /* No truncation allowed */ + return SSH_ERR_INVALID_ARGUMENT; +@@ -297,7 +297,7 @@ diff -aurp old/digest-openssl.c new/dige + return SSH_ERR_LIBCRYPTO_ERROR; + if (l != digest->digest_len) /* sanity */ + return SSH_ERR_INTERNAL_ERROR; +-@@ -172,7 +173,7 @@ void ++@@ -172,7 +173,7 @@ + ssh_digest_free(struct ssh_digest_ctx *ctx) + { + if (ctx != NULL) { +@@ -306,10 +306,10 @@ diff -aurp old/digest-openssl.c new/dige + explicit_bzero(ctx, sizeof(*ctx)); + free(ctx); + } +-diff -aurp old/kexdhc.c new/kexdhc.c +---- old/kexdhc.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/kexdhc.c 2018-03-23 10:05:03.889621527 -1000 +-@@ -81,11 +81,16 @@ kexdh_client(struct ssh *ssh) ++diff -Naur old/kexdhc.c new/kexdhc.c ++--- old/kexdhc.c 2017-10-03 21:49:05.373829169 -1000 +++++ new/kexdhc.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -81,11 +81,16 @@ + goto out; + } + debug("sending SSH2_MSG_KEXDH_INIT"); +@@ -329,7 +329,7 @@ diff -aurp old/kexdhc.c new/kexdhc.c + #ifdef DEBUG_KEXDH + DHparams_print_fp(stderr, kex->dh); + fprintf(stderr, "pub= "); +-@@ -169,6 +174,9 @@ input_kex_dh(int type, u_int32_t seq, st ++@@ -169,6 +174,9 @@ + + /* calc and verify H */ + hashlen = sizeof(hash); +@@ -339,7 +339,7 @@ diff -aurp old/kexdhc.c new/kexdhc.c + if ((r = kex_dh_hash( + kex->hash_alg, + kex->client_version_string, +-@@ -176,11 +184,13 @@ input_kex_dh(int type, u_int32_t seq, st ++@@ -176,11 +184,13 @@ + sshbuf_ptr(kex->my), sshbuf_len(kex->my), + sshbuf_ptr(kex->peer), sshbuf_len(kex->peer), + server_host_key_blob, sbloblen, +@@ -354,11 +354,22 @@ diff -aurp old/kexdhc.c new/kexdhc.c + + } + + if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen, +- kex->hostkey_alg, ssh->compat)) != 0) +-diff -aurp old/kexdhs.c new/kexdhs.c +---- old/kexdhs.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/kexdhs.c 2018-03-23 10:58:58.126733207 -1000 +-@@ -163,6 +163,9 @@ input_kex_dh_init(int type, u_int32_t se ++ ssh->compat)) != 0) ++diff -Naur old/kexdhs.c new/kexdhs.c ++--- old/kexdhs.c 2017-10-03 21:49:05.373829169 -1000 +++++ new/kexdhs.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -87,6 +87,10 @@ ++ ssh_dispatch_set(ssh, SSH2_MSG_KEXDH_INIT, &input_kex_dh_init); ++ r = 0; ++ out: +++ if (r != 0) { +++ if (kex->dh) DH_free(kex->dh); +++ kex->dh = NULL; +++ } ++ return r; ++ } ++ ++@@ -163,6 +167,9 @@ + goto out; + /* calc H */ + hashlen = sizeof(hash); +@@ -368,7 +379,7 @@ diff -aurp old/kexdhs.c new/kexdhs.c + if ((r = kex_dh_hash( + kex->hash_alg, + kex->client_version_string, +-@@ -171,10 +174,12 @@ input_kex_dh_init(int type, u_int32_t se ++@@ -171,10 +178,12 @@ + sshbuf_ptr(kex->my), sshbuf_len(kex->my), + server_host_key_blob, sbloblen, + dh_client_pub, +@@ -383,7 +394,7 @@ diff -aurp old/kexdhs.c new/kexdhs.c + + /* save session id := H */ + if (kex->session_id == NULL) { +-@@ -195,12 +200,17 @@ input_kex_dh_init(int type, u_int32_t se ++@@ -195,12 +204,17 @@ + /* destroy_sensitive_data(); */ + + /* send server hostkey, DH pubkey 'f' and singed H */ +@@ -403,10 +414,10 @@ diff -aurp old/kexdhs.c new/kexdhs.c + + if ((r = kex_derive_keys_bn(ssh, hash, hashlen, shared_secret)) == 0) + r = kex_send_newkeys(ssh); +-diff -aurp old/kexgexc.c new/kexgexc.c +---- old/kexgexc.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/kexgexc.c 2018-03-23 11:00:00.132866201 -1000 +-@@ -118,11 +118,17 @@ input_kex_dh_gex_group(int type, u_int32 ++diff -Naur old/kexgexc.c new/kexgexc.c ++--- old/kexgexc.c 2017-10-03 21:49:05.373829169 -1000 +++++ new/kexgexc.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -118,11 +118,17 @@ + p = g = NULL; /* belong to kex->dh now */ + + /* generate and send 'e', client DH public key */ +@@ -428,7 +439,22 @@ diff -aurp old/kexgexc.c new/kexgexc.c + debug("SSH2_MSG_KEX_DH_GEX_INIT sent"); + #ifdef DEBUG_KEXDH + DHparams_print_fp(stderr, kex->dh); +-@@ -212,6 +218,10 @@ input_kex_dh_gex_reply(int type, u_int32 ++@@ -134,10 +140,12 @@ ++ ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_REPLY, &input_kex_dh_gex_reply); ++ r = 0; ++ out: ++- if (p) +++ if (r != 0) { ++ BN_clear_free(p); ++- if (g) ++ BN_clear_free(g); +++ DH_free(kex->dh); +++ kex->dh = NULL; +++ } ++ return r; ++ } ++ ++@@ -214,6 +222,10 @@ + + /* calc and verify H */ + hashlen = sizeof(hash); +@@ -439,7 +465,7 @@ diff -aurp old/kexgexc.c new/kexgexc.c + if ((r = kexgex_hash( + kex->hash_alg, + kex->client_version_string, +-@@ -220,12 +230,14 @@ input_kex_dh_gex_reply(int type, u_int32 ++@@ -222,12 +234,14 @@ + sshbuf_ptr(kex->peer), sshbuf_len(kex->peer), + server_host_key_blob, sbloblen, + kex->min, kex->nbits, kex->max, +@@ -456,11 +482,11 @@ diff -aurp old/kexgexc.c new/kexgexc.c + + } + + if ((r = sshkey_verify(server_host_key, signature, slen, hash, +- hashlen, kex->hostkey_alg, ssh->compat)) != 0) +-diff -aurp old/kexgexs.c new/kexgexs.c +---- old/kexgexs.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/kexgexs.c 2018-03-23 11:03:06.045049721 -1000 +-@@ -101,11 +101,16 @@ input_kex_dh_gex_request(int type, u_int ++ hashlen, ssh->compat)) != 0) ++diff -Naur old/kexgexs.c new/kexgexs.c ++--- old/kexgexs.c 2017-10-03 21:49:05.373829169 -1000 +++++ new/kexgexs.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -101,11 +101,16 @@ + goto out; + } + debug("SSH2_MSG_KEX_DH_GEX_GROUP sent"); +@@ -480,7 +506,18 @@ diff -aurp old/kexgexs.c new/kexgexs.c + + /* Compute our exchange value in parallel with the client */ + if ((r = dh_gen_key(kex->dh, kex->we_need * 8)) != 0) +-@@ -191,6 +196,10 @@ input_kex_dh_gex_init(int type, u_int32_ ++@@ -115,6 +120,10 @@ ++ ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_INIT, &input_kex_dh_gex_init); ++ r = 0; ++ out: +++ if (r != 0) { +++ DH_free(kex->dh); +++ kex->dh = NULL; +++ } ++ return r; ++ } ++ ++@@ -191,6 +200,10 @@ + goto out; + /* calc H */ + hashlen = sizeof(hash); +@@ -491,7 +528,7 @@ diff -aurp old/kexgexs.c new/kexgexs.c + if ((r = kexgex_hash( + kex->hash_alg, + kex->client_version_string, +-@@ -199,12 +208,14 @@ input_kex_dh_gex_init(int type, u_int32_ ++@@ -199,12 +212,14 @@ + sshbuf_ptr(kex->my), sshbuf_len(kex->my), + server_host_key_blob, sbloblen, + kex->min, kex->nbits, kex->max, +@@ -509,7 +546,7 @@ diff -aurp old/kexgexs.c new/kexgexs.c + + /* save session id := H */ + if (kex->session_id == NULL) { +-@@ -225,12 +236,17 @@ input_kex_dh_gex_init(int type, u_int32_ ++@@ -225,12 +240,17 @@ + /* destroy_sensitive_data(); */ + + /* send server hostkey, DH pubkey 'f' and singed H */ +@@ -529,10 +566,10 @@ diff -aurp old/kexgexs.c new/kexgexs.c + + if ((r = kex_derive_keys_bn(ssh, hash, hashlen, shared_secret)) == 0) + r = kex_send_newkeys(ssh); +-diff -aurp old/monitor.c new/monitor.c +---- old/monitor.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/monitor.c 2018-03-23 10:05:03.890621610 -1000 +-@@ -595,10 +595,12 @@ mm_answer_moduli(int sock, Buffer *m) ++diff -Naur old/monitor.c new/monitor.c ++--- old/monitor.c 2017-10-03 21:49:05.377162302 -1000 +++++ new/monitor.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -586,10 +586,12 @@ + buffer_put_char(m, 0); + return (0); + } else { +@@ -547,10 +584,10 @@ diff -aurp old/monitor.c new/monitor.c + + DH_free(dh); + } +-diff -aurp old/openbsd-compat/openssl-compat.c new/openbsd-compat/openssl-compat.c +---- old/openbsd-compat/openssl-compat.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/openbsd-compat/openssl-compat.c 2018-03-23 10:05:03.890621610 -1000 +-@@ -75,7 +75,6 @@ ssh_OpenSSL_add_all_algorithms(void) ++diff -Naur old/openbsd-compat/openssl-compat.c new/openbsd-compat/openssl-compat.c ++--- old/openbsd-compat/openssl-compat.c 2017-10-03 21:49:05.397161097 -1000 +++++ new/openbsd-compat/openssl-compat.c 2017-10-03 21:55:50.886387486 -1000 ++@@ -75,7 +75,6 @@ + /* Enable use of crypto hardware */ + ENGINE_load_builtin_engines(); + ENGINE_register_all_complete(); +@@ -558,10 +595,10 @@ diff -aurp old/openbsd-compat/openssl-co + } + #endif + +-diff -aurp old/regress/unittests/sshkey/test_file.c new/regress/unittests/sshkey/test_file.c +---- old/regress/unittests/sshkey/test_file.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/regress/unittests/sshkey/test_file.c 2018-03-23 10:05:03.890621610 -1000 +-@@ -60,9 +60,14 @@ sshkey_file_tests(void) ++diff -Naur old/regress/unittests/sshkey/test_file.c new/regress/unittests/sshkey/test_file.c ++--- old/regress/unittests/sshkey/test_file.c 2017-10-03 21:49:05.387161699 -1000 +++++ new/regress/unittests/sshkey/test_file.c 2017-10-03 21:55:50.883053761 -1000 ++@@ -60,9 +60,14 @@ + a = load_bignum("rsa_1.param.n"); + b = load_bignum("rsa_1.param.p"); + c = load_bignum("rsa_1.param.q"); +@@ -579,7 +616,7 @@ diff -aurp old/regress/unittests/sshkey/ + BN_free(a); + BN_free(b); + BN_free(c); +-@@ -151,9 +156,14 @@ sshkey_file_tests(void) ++@@ -151,9 +156,14 @@ + a = load_bignum("dsa_1.param.g"); + b = load_bignum("dsa_1.param.priv"); + c = load_bignum("dsa_1.param.pub"); +@@ -597,10 +634,10 @@ diff -aurp old/regress/unittests/sshkey/ + BN_free(a); + BN_free(b); + BN_free(c); +-diff -aurp old/regress/unittests/sshkey/test_sshkey.c new/regress/unittests/sshkey/test_sshkey.c +---- old/regress/unittests/sshkey/test_sshkey.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/regress/unittests/sshkey/test_sshkey.c 2018-03-23 10:05:03.890621610 -1000 +-@@ -197,9 +197,14 @@ sshkey_tests(void) ++diff -Naur old/regress/unittests/sshkey/test_sshkey.c new/regress/unittests/sshkey/test_sshkey.c ++--- old/regress/unittests/sshkey/test_sshkey.c 2017-10-03 21:49:05.387161699 -1000 +++++ new/regress/unittests/sshkey/test_sshkey.c 2017-10-03 21:55:50.883053761 -1000 ++@@ -197,9 +197,14 @@ + k1 = sshkey_new(KEY_RSA); + ASSERT_PTR_NE(k1, NULL); + ASSERT_PTR_NE(k1->rsa, NULL); +@@ -618,7 +655,7 @@ diff -aurp old/regress/unittests/sshkey/ + sshkey_free(k1); + TEST_DONE(); + +-@@ -207,8 +212,13 @@ sshkey_tests(void) ++@@ -207,8 +212,13 @@ + k1 = sshkey_new(KEY_DSA); + ASSERT_PTR_NE(k1, NULL); + ASSERT_PTR_NE(k1->dsa, NULL); +@@ -634,7 +671,7 @@ diff -aurp old/regress/unittests/sshkey/ + sshkey_free(k1); + TEST_DONE(); + +-@@ -234,9 +244,14 @@ sshkey_tests(void) ++@@ -234,9 +244,14 @@ + k1 = sshkey_new_private(KEY_RSA); + ASSERT_PTR_NE(k1, NULL); + ASSERT_PTR_NE(k1->rsa, NULL); +@@ -652,7 +689,7 @@ diff -aurp old/regress/unittests/sshkey/ + ASSERT_INT_EQ(sshkey_add_private(k1), 0); + sshkey_free(k1); + TEST_DONE(); +-@@ -245,8 +260,13 @@ sshkey_tests(void) ++@@ -245,8 +260,13 @@ + k1 = sshkey_new_private(KEY_DSA); + ASSERT_PTR_NE(k1, NULL); + ASSERT_PTR_NE(k1->dsa, NULL); +@@ -668,7 +705,7 @@ diff -aurp old/regress/unittests/sshkey/ + ASSERT_INT_EQ(sshkey_add_private(k1), 0); + sshkey_free(k1); + TEST_DONE(); +-@@ -285,18 +305,28 @@ sshkey_tests(void) ++@@ -285,18 +305,28 @@ + ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 1024, &kr), 0); + ASSERT_PTR_NE(kr, NULL); + ASSERT_PTR_NE(kr->rsa, NULL); +@@ -703,7 +740,7 @@ diff -aurp old/regress/unittests/sshkey/ + TEST_DONE(); + + #ifdef OPENSSL_HAS_ECC +-@@ -323,9 +353,14 @@ sshkey_tests(void) ++@@ -323,9 +353,14 @@ + ASSERT_PTR_NE(kr, k1); + ASSERT_INT_EQ(k1->type, KEY_RSA); + ASSERT_PTR_NE(k1->rsa, NULL); +@@ -721,7 +758,7 @@ diff -aurp old/regress/unittests/sshkey/ + TEST_DONE(); + + TEST_START("equal KEY_RSA/demoted KEY_RSA"); +-@@ -339,8 +374,13 @@ sshkey_tests(void) ++@@ -339,8 +374,13 @@ + ASSERT_PTR_NE(kd, k1); + ASSERT_INT_EQ(k1->type, KEY_DSA); + ASSERT_PTR_NE(k1->dsa, NULL); +@@ -737,10 +774,10 @@ diff -aurp old/regress/unittests/sshkey/ + TEST_DONE(); + + TEST_START("equal KEY_DSA/demoted KEY_DSA"); +-diff -aurp old/ssh-dss.c new/ssh-dss.c +---- old/ssh-dss.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/ssh-dss.c 2018-03-23 10:05:03.891621693 -1000 +-@@ -53,6 +53,7 @@ ssh_dss_sign(const struct sshkey *key, u ++diff -Naur old/ssh-dss.c new/ssh-dss.c ++--- old/ssh-dss.c 2017-10-03 21:49:05.403827361 -1000 +++++ new/ssh-dss.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -53,6 +53,7 @@ + DSA_SIG *sig = NULL; + u_char digest[SSH_DIGEST_MAX_LENGTH], sigblob[SIGBLOB_LEN]; + size_t rlen, slen, len, dlen = ssh_digest_bytes(SSH_DIGEST_SHA1); +@@ -748,7 +785,7 @@ diff -aurp old/ssh-dss.c new/ssh-dss.c + struct sshbuf *b = NULL; + int ret = SSH_ERR_INVALID_ARGUMENT; + +-@@ -76,15 +77,16 @@ ssh_dss_sign(const struct sshkey *key, u ++@@ -76,15 +77,16 @@ + goto out; + } + +@@ -767,9 +804,9 @@ diff -aurp old/ssh-dss.c new/ssh-dss.c + + BN_bn2bin(r, sigblob + SIGBLOB_LEN - INTBLOB_LEN - rlen); + + BN_bn2bin(s, sigblob + SIGBLOB_LEN - slen); + +- if ((b = sshbuf_new()) == NULL) { +- ret = SSH_ERR_ALLOC_FAIL; +-@@ -154,17 +156,26 @@ ssh_dss_verify(const struct sshkey *key, ++ if (compat & SSH_BUG_SIGBLOB) { ++ if (sigp != NULL) { ++@@ -176,17 +178,26 @@ + } + + /* parse signature */ +@@ -800,10 +837,10 @@ diff -aurp old/ssh-dss.c new/ssh-dss.c + + /* sha1 the data */ + if ((ret = ssh_digest_memory(SSH_DIGEST_SHA1, data, datalen, +-diff -aurp old/ssh-ecdsa.c new/ssh-ecdsa.c +---- old/ssh-ecdsa.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/ssh-ecdsa.c 2018-03-23 10:05:03.891621693 -1000 +-@@ -80,9 +80,14 @@ ssh_ecdsa_sign(const struct sshkey *key, ++diff -Naur old/ssh-ecdsa.c new/ssh-ecdsa.c ++--- old/ssh-ecdsa.c 2017-10-03 21:49:05.403827361 -1000 +++++ new/ssh-ecdsa.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -80,9 +80,14 @@ + ret = SSH_ERR_ALLOC_FAIL; + goto out; + } +@@ -820,7 +857,7 @@ diff -aurp old/ssh-ecdsa.c new/ssh-ecdsa + if ((ret = sshbuf_put_cstring(b, sshkey_ssh_name_plain(key))) != 0 || + (ret = sshbuf_put_stringb(b, bb)) != 0) + goto out; +-@@ -150,11 +155,27 @@ ssh_ecdsa_verify(const struct sshkey *ke ++@@ -151,11 +156,27 @@ + ret = SSH_ERR_ALLOC_FAIL; + goto out; + } +@@ -850,10 +887,10 @@ diff -aurp old/ssh-ecdsa.c new/ssh-ecdsa + if (sshbuf_len(sigbuf) != 0) { + ret = SSH_ERR_UNEXPECTED_TRAILING_DATA; + goto out; +-diff -aurp old/ssh-keygen.c new/ssh-keygen.c +---- old/ssh-keygen.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/ssh-keygen.c 2018-03-23 10:05:03.891621693 -1000 +-@@ -493,11 +493,33 @@ do_convert_private_ssh2_from_blob(u_char ++diff -Naur old/ssh-keygen.c new/ssh-keygen.c ++--- old/ssh-keygen.c 2017-10-03 21:49:05.403827361 -1000 +++++ new/ssh-keygen.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -496,11 +496,33 @@ + + switch (key->type) { + case KEY_DSA: +@@ -892,7 +929,7 @@ diff -aurp old/ssh-keygen.c new/ssh-keyg + break; + case KEY_RSA: + if ((r = sshbuf_get_u8(b, &e1)) != 0 || +-@@ -514,16 +536,52 @@ do_convert_private_ssh2_from_blob(u_char ++@@ -517,16 +539,52 @@ + e += e3; + debug("e %lx", e); + } +@@ -951,7 +988,7 @@ diff -aurp old/ssh-keygen.c new/ssh-keyg + if ((r = ssh_rsa_generate_additional_parameters(key)) != 0) + fatal("generate RSA parameters failed: %s", ssh_err(r)); + break; +-@@ -633,7 +691,7 @@ do_convert_from_pkcs8(struct sshkey **k, ++@@ -636,7 +694,7 @@ + identity_file); + } + fclose(fp); +@@ -960,7 +997,7 @@ diff -aurp old/ssh-keygen.c new/ssh-keyg + case EVP_PKEY_RSA: + if ((*k = sshkey_new(KEY_UNSPEC)) == NULL) + fatal("sshkey_new failed"); +-@@ -657,7 +715,7 @@ do_convert_from_pkcs8(struct sshkey **k, ++@@ -660,7 +718,7 @@ + #endif + default: + fatal("%s: unsupported pubkey type %d", __func__, +@@ -969,10 +1006,10 @@ diff -aurp old/ssh-keygen.c new/ssh-keyg + } + EVP_PKEY_free(pubkey); + return; +-diff -aurp old/ssh-pkcs11-client.c new/ssh-pkcs11-client.c +---- old/ssh-pkcs11-client.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/ssh-pkcs11-client.c 2018-03-23 10:05:03.892621777 -1000 +-@@ -144,12 +144,13 @@ pkcs11_rsa_private_encrypt(int flen, con ++diff -Naur old/ssh-pkcs11-client.c new/ssh-pkcs11-client.c ++--- old/ssh-pkcs11-client.c 2017-10-03 21:49:05.403827361 -1000 +++++ new/ssh-pkcs11-client.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -143,12 +143,13 @@ + static int + wrap_key(RSA *rsa) + { +@@ -991,10 +1028,10 @@ diff -aurp old/ssh-pkcs11-client.c new/s + return (0); + } + +-diff -aurp old/ssh-pkcs11.c new/ssh-pkcs11.c +---- old/ssh-pkcs11.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/ssh-pkcs11.c 2018-03-23 10:05:03.892621777 -1000 +-@@ -67,7 +67,7 @@ struct pkcs11_key { ++diff -Naur old/ssh-pkcs11.c new/ssh-pkcs11.c ++--- old/ssh-pkcs11.c 2017-10-03 21:49:05.403827361 -1000 +++++ new/ssh-pkcs11.c 2017-10-03 21:55:50.869718862 -1000 ++@@ -67,7 +67,7 @@ + struct pkcs11_provider *provider; + CK_ULONG slotidx; + int (*orig_finish)(RSA *rsa); +@@ -1003,7 +1040,7 @@ diff -aurp old/ssh-pkcs11.c new/ssh-pkcs + char *keyid; + int keyid_len; + }; +-@@ -326,13 +326,15 @@ pkcs11_rsa_wrap(struct pkcs11_provider * ++@@ -326,13 +326,15 @@ + k11->keyid = xmalloc(k11->keyid_len); + memcpy(k11->keyid, keyid_attrib->pValue, k11->keyid_len); + } +@@ -1026,7 +1063,7 @@ diff -aurp old/ssh-pkcs11.c new/ssh-pkcs + RSA_set_app_data(rsa, k11); + return (0); + } +-@@ -512,10 +514,19 @@ pkcs11_fetch_keys_filter(struct pkcs11_p ++@@ -512,10 +514,19 @@ + if ((rsa = RSA_new()) == NULL) { + error("RSA_new failed"); + } else { +@@ -1050,7 +1087,7 @@ diff -aurp old/ssh-pkcs11.c new/ssh-pkcs + } + } else { + cp = attribs[2].pValue; +-@@ -525,16 +536,19 @@ pkcs11_fetch_keys_filter(struct pkcs11_p ++@@ -525,17 +536,20 @@ + == NULL) { + error("d2i_X509 failed"); + } else if ((evp = X509_get_pubkey(x509)) == NULL || +@@ -1064,7 +1101,8 @@ diff -aurp old/ssh-pkcs11.c new/ssh-pkcs + == NULL) { + error("RSAPublicKey_dup"); + } +- X509_free(x509); ++ if (x509) ++ X509_free(x509); + } + - if (rsa && rsa->n && rsa->e && + + { +@@ -1074,7 +1112,7 @@ diff -aurp old/ssh-pkcs11.c new/ssh-pkcs + pkcs11_rsa_wrap(p, slotidx, &attribs[0], rsa) == 0) { + if ((key = sshkey_new(KEY_UNSPEC)) == NULL) + fatal("sshkey_new failed"); +-@@ -554,6 +568,7 @@ pkcs11_fetch_keys_filter(struct pkcs11_p ++@@ -555,6 +569,7 @@ + } else if (rsa) { + RSA_free(rsa); + } +@@ -1082,28 +1120,17 @@ diff -aurp old/ssh-pkcs11.c new/ssh-pkcs + for (i = 0; i < 3; i++) + free(attribs[i].pValue); + } +-diff -aurp old/ssh-rsa.c new/ssh-rsa.c +---- old/ssh-rsa.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/ssh-rsa.c 2018-03-23 10:05:03.892621777 -1000 +-@@ -84,7 +84,6 @@ ssh_rsa_generate_additional_parameters(s +- { +- BIGNUM *aux = NULL; +- BN_CTX *ctx = NULL; +-- BIGNUM d; +- int r; +- +- if (key == NULL || key->rsa == NULL || +-@@ -99,16 +98,27 @@ ssh_rsa_generate_additional_parameters(s +- } +- BN_set_flags(aux, BN_FLG_CONSTTIME); +- +-- BN_init(&d); +-- BN_with_flags(&d, key->rsa->d, BN_FLG_CONSTTIME); +-- +-- if ((BN_sub(aux, key->rsa->q, BN_value_one()) == 0) || +-- (BN_mod(key->rsa->dmq1, &d, aux, ctx) == 0) || +-- (BN_sub(aux, key->rsa->p, BN_value_one()) == 0) || +-- (BN_mod(key->rsa->dmp1, &d, aux, ctx) == 0)) { ++diff -Naur old/ssh-rsa.c new/ssh-rsa.c ++--- old/ssh-rsa.c 2017-10-03 21:49:05.403827361 -1000 +++++ new/ssh-rsa.c 2017-10-03 22:06:32.005937158 -1000 ++@@ -99,13 +99,27 @@ ++ } ++ rsa = key->rsa; ++ ++- if ((BN_sub(aux, rsa->q, BN_value_one()) == 0) || ++- (BN_mod(rsa->dmq1, rsa->d, aux, ctx) == 0) || ++- (BN_sub(aux, rsa->p, BN_value_one()) == 0) || ++- (BN_mod(rsa->dmp1, rsa->d, aux, ctx) == 0)) { + + { + + const BIGNUM *q, *d, *p; + + BIGNUM *dmq1=NULL, *dmp1=NULL; +@@ -1112,13 +1139,13 @@ diff -aurp old/ssh-rsa.c new/ssh-rsa.c + + r = SSH_ERR_ALLOC_FAIL; + + goto out; + + } +-+ RSA_get0_key(key->rsa, NULL, NULL, &d); +-+ RSA_get0_factors(key->rsa, &p, &q); +++ RSA_get0_key(rsa, NULL, NULL, &d); +++ RSA_get0_factors(rsa, &p, &q); + + if ((BN_sub(aux, q, BN_value_one()) == 0) || + + (BN_mod(dmq1, d, aux, ctx) == 0) || + + (BN_sub(aux, p, BN_value_one()) == 0) || + + (BN_mod(dmp1, d, aux, ctx) == 0) || +-+ RSA_set0_crt_params(key->rsa, dmp1, dmq1, NULL) == 0) { +++ RSA_set0_crt_params(rsa, dmp1, dmq1, NULL) == 0) { + r = SSH_ERR_LIBCRYPTO_ERROR; + + BN_clear_free(dmp1); + + BN_clear_free(dmq1); +@@ -1128,7 +1155,7 @@ diff -aurp old/ssh-rsa.c new/ssh-rsa.c + r = 0; + out: + BN_clear_free(aux); +-@@ -139,7 +149,7 @@ ssh_rsa_sign(const struct sshkey *key, u ++@@ -136,7 +150,7 @@ + if (key == NULL || key->rsa == NULL || hash_alg == -1 || + sshkey_type_plain(key->type) != KEY_RSA) + return SSH_ERR_INVALID_ARGUMENT; +@@ -1137,7 +1164,7 @@ diff -aurp old/ssh-rsa.c new/ssh-rsa.c + return SSH_ERR_KEY_LENGTH; + slen = RSA_size(key->rsa); + if (slen <= 0 || slen > SSHBUF_MAX_BIGNUM) +-@@ -211,7 +221,7 @@ ssh_rsa_verify(const struct sshkey *key, ++@@ -210,7 +224,7 @@ + sshkey_type_plain(key->type) != KEY_RSA || + sig == NULL || siglen == 0) + return SSH_ERR_INVALID_ARGUMENT; +@@ -1146,10 +1173,10 @@ diff -aurp old/ssh-rsa.c new/ssh-rsa.c + return SSH_ERR_KEY_LENGTH; + + if ((b = sshbuf_from(sig, siglen)) == NULL) +-diff -aurp old/sshkey.c new/sshkey.c +---- old/sshkey.c 2018-03-22 16:21:14.000000000 -1000 +-+++ new/sshkey.c 2018-03-23 10:05:03.893621860 -1000 +-@@ -274,10 +274,18 @@ sshkey_size(const struct sshkey *k) ++diff -Naur old/sshkey.c new/sshkey.c ++--- old/sshkey.c 2017-10-03 21:49:05.407160494 -1000 +++++ new/sshkey.c 2017-10-03 22:16:31.124964276 -1000 ++@@ -264,10 +264,18 @@ + #ifdef WITH_OPENSSL + case KEY_RSA: + case KEY_RSA_CERT: +@@ -1169,7 +1196,7 @@ diff -aurp old/sshkey.c new/sshkey.c + case KEY_ECDSA: + case KEY_ECDSA_CERT: + return sshkey_curve_nid_to_bits(k->ecdsa_nid); +-@@ -482,26 +490,53 @@ sshkey_new(int type) ++@@ -466,28 +474,55 @@ + #ifdef WITH_OPENSSL + case KEY_RSA: + case KEY_RSA_CERT: +@@ -1182,7 +1209,8 @@ diff -aurp old/sshkey.c new/sshkey.c + + (e = BN_new()) == NULL) { + + BN_free(n); + + BN_free(e); +- RSA_free(rsa); ++ if (rsa != NULL) ++ RSA_free(rsa); + free(k); + return NULL; + } +@@ -1210,7 +1238,8 @@ diff -aurp old/sshkey.c new/sshkey.c + + BN_free(q); + + BN_free(g); + + BN_free(pubkey); +- DSA_free(dsa); ++ if (dsa != NULL) ++ DSA_free(dsa); + free(k); + return NULL; + } +@@ -1229,7 +1258,7 @@ diff -aurp old/sshkey.c new/sshkey.c + k->dsa = dsa; + break; + case KEY_ECDSA: +-@@ -539,6 +574,51 @@ sshkey_add_private(struct sshkey *k) ++@@ -523,6 +558,51 @@ + #ifdef WITH_OPENSSL + case KEY_RSA: + case KEY_RSA_CERT: +@@ -1281,7 +1310,7 @@ diff -aurp old/sshkey.c new/sshkey.c + #define bn_maybe_alloc_failed(p) (p == NULL && (p = BN_new()) == NULL) + if (bn_maybe_alloc_failed(k->rsa->d) || + bn_maybe_alloc_failed(k->rsa->iqmp) || +-@@ -547,13 +627,28 @@ sshkey_add_private(struct sshkey *k) ++@@ -531,13 +611,28 @@ + bn_maybe_alloc_failed(k->rsa->dmq1) || + bn_maybe_alloc_failed(k->rsa->dmp1)) + return SSH_ERR_ALLOC_FAIL; +@@ -1310,7 +1339,7 @@ diff -aurp old/sshkey.c new/sshkey.c + case KEY_ECDSA: + case KEY_ECDSA_CERT: + /* Cannot do anything until we know the group */ +-@@ -677,16 +772,34 @@ sshkey_equal_public(const struct sshkey ++@@ -655,16 +750,34 @@ + #ifdef WITH_OPENSSL + case KEY_RSA_CERT: + case KEY_RSA: +@@ -1353,7 +1382,7 @@ diff -aurp old/sshkey.c new/sshkey.c + # ifdef OPENSSL_HAS_ECC + case KEY_ECDSA_CERT: + case KEY_ECDSA: +-@@ -775,12 +888,17 @@ to_blob_buf(const struct sshkey *key, st ++@@ -742,12 +855,17 @@ + case KEY_DSA: + if (key->dsa == NULL) + return SSH_ERR_INVALID_ARGUMENT; +@@ -1375,7 +1404,7 @@ diff -aurp old/sshkey.c new/sshkey.c + break; + # ifdef OPENSSL_HAS_ECC + case KEY_ECDSA: +-@@ -796,10 +914,14 @@ to_blob_buf(const struct sshkey *key, st ++@@ -763,10 +881,14 @@ + case KEY_RSA: + if (key->rsa == NULL) + return SSH_ERR_INVALID_ARGUMENT; +@@ -1392,7 +1421,7 @@ diff -aurp old/sshkey.c new/sshkey.c + break; + #endif /* WITH_OPENSSL */ + case KEY_ED25519: +-@@ -1740,13 +1862,32 @@ sshkey_from_private(const struct sshkey ++@@ -1643,13 +1765,32 @@ + case KEY_DSA_CERT: + if ((n = sshkey_new(k->type)) == NULL) + return SSH_ERR_ALLOC_FAIL; +@@ -1429,7 +1458,7 @@ diff -aurp old/sshkey.c new/sshkey.c + break; + # ifdef OPENSSL_HAS_ECC + case KEY_ECDSA: +-@@ -1770,11 +1911,23 @@ sshkey_from_private(const struct sshkey ++@@ -1673,11 +1814,23 @@ + case KEY_RSA_CERT: + if ((n = sshkey_new(k->type)) == NULL) + return SSH_ERR_ALLOC_FAIL; +@@ -1455,7 +1484,7 @@ diff -aurp old/sshkey.c new/sshkey.c + break; + #endif /* WITH_OPENSSL */ + case KEY_ED25519: +-@@ -1995,12 +2148,27 @@ sshkey_from_blob_internal(struct sshbuf ++@@ -1875,12 +2028,27 @@ + ret = SSH_ERR_ALLOC_FAIL; + goto out; + } +@@ -1486,7 +1515,7 @@ diff -aurp old/sshkey.c new/sshkey.c + ret = SSH_ERR_KEY_LENGTH; + goto out; + } +-@@ -2020,13 +2188,36 @@ sshkey_from_blob_internal(struct sshbuf ++@@ -1900,13 +2068,36 @@ + ret = SSH_ERR_ALLOC_FAIL; + goto out; + } +@@ -1527,7 +1556,7 @@ diff -aurp old/sshkey.c new/sshkey.c + #ifdef DEBUG_PK + DSA_print_fp(stderr, key->dsa, 8); + #endif +-@@ -2327,26 +2518,63 @@ sshkey_demote(const struct sshkey *k, st ++@@ -2140,26 +2331,63 @@ + goto fail; + /* FALLTHROUGH */ + case KEY_RSA: +@@ -1599,7 +1628,7 @@ diff -aurp old/sshkey.c new/sshkey.c + break; + case KEY_ECDSA_CERT: + if ((ret = sshkey_cert_copy(k, pk)) != 0) +-@@ -2496,11 +2724,17 @@ sshkey_certify_custom(struct sshkey *k, ++@@ -2281,11 +2509,17 @@ + switch (k->type) { + #ifdef WITH_OPENSSL + case KEY_DSA_CERT: +@@ -1621,7 +1650,7 @@ diff -aurp old/sshkey.c new/sshkey.c + break; + # ifdef OPENSSL_HAS_ECC + case KEY_ECDSA_CERT: +-@@ -2513,9 +2747,15 @@ sshkey_certify_custom(struct sshkey *k, ++@@ -2298,9 +2532,15 @@ + break; + # endif /* OPENSSL_HAS_ECC */ + case KEY_RSA_CERT: +@@ -1639,7 +1668,7 @@ diff -aurp old/sshkey.c new/sshkey.c + break; + #endif /* WITH_OPENSSL */ + case KEY_ED25519_CERT: +-@@ -2702,42 +2942,67 @@ sshkey_private_serialize_opt(const struc ++@@ -2474,42 +2714,67 @@ + switch (key->type) { + #ifdef WITH_OPENSSL + case KEY_RSA: +@@ -1723,7 +1752,7 @@ diff -aurp old/sshkey.c new/sshkey.c + break; + # ifdef OPENSSL_HAS_ECC + case KEY_ECDSA: +-@@ -2851,18 +3116,61 @@ sshkey_private_deserialize(struct sshbuf ++@@ -2585,18 +2850,61 @@ + r = SSH_ERR_ALLOC_FAIL; + goto out; + } +@@ -1792,7 +1821,7 @@ diff -aurp old/sshkey.c new/sshkey.c + break; + # ifdef OPENSSL_HAS_ECC + case KEY_ECDSA: +-@@ -2921,29 +3229,104 @@ sshkey_private_deserialize(struct sshbuf ++@@ -2655,29 +2963,104 @@ + r = SSH_ERR_ALLOC_FAIL; + goto out; + } +@@ -1911,7 +1940,7 @@ diff -aurp old/sshkey.c new/sshkey.c + r = SSH_ERR_KEY_LENGTH; + goto out; + } +-@@ -3707,7 +4090,6 @@ translate_libcrypto_error(unsigned long ++@@ -3395,7 +3778,6 @@ + switch (pem_reason) { + case EVP_R_BAD_DECRYPT: + return SSH_ERR_KEY_WRONG_PASSPHRASE; +@@ -1919,7 +1948,7 @@ diff -aurp old/sshkey.c new/sshkey.c + case EVP_R_DECODE_ERROR: + #ifdef EVP_R_PRIVATE_KEY_DECODE_ERROR + case EVP_R_PRIVATE_KEY_DECODE_ERROR: +-@@ -3772,7 +4154,7 @@ sshkey_parse_private_pem_fileblob(struct ++@@ -3460,7 +3842,7 @@ + r = convert_libcrypto_error(); + goto out; + } +@@ -1928,7 +1957,7 @@ diff -aurp old/sshkey.c new/sshkey.c + (type == KEY_UNSPEC || type == KEY_RSA)) { + if ((prv = sshkey_new(KEY_UNSPEC)) == NULL) { + r = SSH_ERR_ALLOC_FAIL; +-@@ -3787,11 +4169,11 @@ sshkey_parse_private_pem_fileblob(struct ++@@ -3475,11 +3857,11 @@ + r = SSH_ERR_LIBCRYPTO_ERROR; + goto out; + } +@@ -1942,7 +1971,7 @@ diff -aurp old/sshkey.c new/sshkey.c + (type == KEY_UNSPEC || type == KEY_DSA)) { + if ((prv = sshkey_new(KEY_UNSPEC)) == NULL) { + r = SSH_ERR_ALLOC_FAIL; +-@@ -3803,7 +4185,7 @@ sshkey_parse_private_pem_fileblob(struct ++@@ -3491,7 +3873,7 @@ + DSA_print_fp(stderr, prv->dsa, 8); + #endif + #ifdef OPENSSL_HAS_ECC diff --git a/src/stage4/patches/openssl.patch b/src/stage4/patches/openssl.patch index 2be3c7e..e8f4e9c 100644 --- a/src/stage4/patches/openssl.patch +++ b/src/stage4/patches/openssl.patch @@ -21,7 +21,7 @@ # revert this patch for make test patch -p0 -R -i "$srcdir/ca-dir.patch" - make test -+ # benign test suite failure in cross-arch chroot ++ # benign test suite failure in cross-arch chroot + make test || true patch -p0 -i "$srcdir/ca-dir.patch" } diff --git a/src/stage4/patches/orc.patch b/src/stage4/patches/orc.patch new file mode 100644 index 0000000..96c9712 --- /dev/null +++ b/src/stage4/patches/orc.patch @@ -0,0 +1,11 @@ +--- a/PKGBUILD 2018-03-27 22:20:01.300573718 +0200 ++++ b/PKGBUILD 2018-03-27 23:30:52.102898304 +0200 +@@ -11,7 +11,7 @@ url="https://cgit.freedesktop.org/gstrea + arch=(x86_64) + license=(custom) + depends=(glibc) +-makedepends=(valgrind git gtk-doc meson) ++makedepends=(git gtk-doc meson) + _commit=31cb4bfc51de81b5c2569abdcff830b83c74499c # tags/orc-0.4.28^0 + source=("git+https://anongit.freedesktop.org/git/gstreamer/orc#commit=$_commit") + sha256sums=('SKIP') diff --git a/src/stage4/patches/p11-kit.patch b/src/stage4/patches/p11-kit.patch new file mode 100644 index 0000000..d34e1d6 --- /dev/null +++ b/src/stage4/patches/p11-kit.patch @@ -0,0 +1,12 @@ +--- a/PKGBUILD 2018-03-27 08:51:01.256864425 +0200 ++++ b/PKGBUILD 2018-03-27 09:20:57.402037131 +0200 +@@ -49,7 +49,8 @@ build() { + + check() { + cd $pkgname +- make check ++ # testsuite does not terminate in cross-arch chroot? ++ # make check + } + + package() { diff --git a/src/stage4/patches/postgresql.patch b/src/stage4/patches/postgresql.patch new file mode 100644 index 0000000..ff8c00e --- /dev/null +++ b/src/stage4/patches/postgresql.patch @@ -0,0 +1,77 @@ +--- a/PKGBUILD 2018-03-27 11:05:53.802731827 +0200 ++++ b/PKGBUILD 2018-03-27 11:32:50.423876468 +0200 +@@ -16,23 +16,27 @@ source=(https://ftp.postgresql.org/pub/s + postgresql.pam + postgresql.logrotate + postgresql.service +- postgresql-check-db-dir) ++ postgresql-check-db-dir ++ 0001-Add-support-for-RISC-V.patch) + sha256sums=('6ea268780ee35e88c65cdb0af7955ad90b7d0ef34573867f223f14e43467931a' + '8538619cb8bea51078b605ad64fe22abd6050373c7ae3ad6595178da52f6a7d9' + '57dfd072fd7ef0018c6b0a798367aac1abb5979060ff3f9df22d1048bb71c0d5' + '6abb842764bbed74ea4a269d24f1e73d1c0b1d8ecd6e2e6fb5fb10590298605e' + 'b48fe97f8e43ed0d2041d519119a4dafb70fcae72870951bf4fb7350fe169ac8' +- '888a1d44f03fccfa4bf344ee45824fefb846ae3c1c0c40113ad6020b4be3b0cf') ++ '888a1d44f03fccfa4bf344ee45824fefb846ae3c1c0c40113ad6020b4be3b0cf' ++ '4c9aeee670098963934b9e2b0a0fa446c730517a098594892f46c84cfc5966ed') + sha512sums=('05cf82d3483bdf38734e6ff0fef6b80e7f8fd3cb5ea6792ffe222a599d97d1a29638970bf28ebf5bd1f877e8dcd9986d88f5c5e5379e74fe79ce83e20d2babba' + '031efe12d18ce386989062327cdbbe611c5ef1f94e4e1bead502304cb3e2d410af533d3c7f1109d24f9da9708214fe32f9a10ba373a3ca8d507bdb521fbb75f7' + '1e6183ab0eb812b3ef687ac2c26ce78f7cb30540f606d20023669ac00ba04075487fb72e4dc89cc05dab0269ff6aca98fc1167cc75669c225b88b592482fbf67' + '9ab4da01337ffbab8faec0e220aaa2a642dbfeccf7232ef2645bdc2177a953f17ee3cc14a4d8f8ebd064e1dae8b3dba6029adbffb8afaabea383963213941ba8' + 'ec2625c3ccfb6c142ea12ef4392b00f3d4cb0a5411d603b98157d55cd162ed3b422dbbd42e8b13211063db94a42f6d1f3febd4acaadde69ea17bfd8eccae3539' +- '56974ef34a8d94596068413154b1a7ed5a71f5a3942bd79427f05e6f6b7853036874dedd8d988bb94306023f2a675996d500b075eaf8a192ef5c24026eb28eb0') ++ '56974ef34a8d94596068413154b1a7ed5a71f5a3942bd79427f05e6f6b7853036874dedd8d988bb94306023f2a675996d500b075eaf8a192ef5c24026eb28eb0' ++ 'f50d0c197b21cdd308a46bd0982f1d91db7c11e20cc8165dcbf0182a61a7874f419125b0f0dd037538ee9f71560e2b71e785f8658c4176611eab398b2390057a') + + prepare() { + cd postgresql-${pkgver} + patch -p1 < ../postgresql-run-socket.patch ++ patch -Np1 -i ../0001-Add-support-for-RISC-V.patch + } + + build() { +--- /dev/null 2018-03-21 10:59:45.661284739 +0100 ++++ b/0001-Add-support-for-RISC-V.patch 2018-03-27 11:32:07.071478128 +0200 +@@ -0,0 +1,41 @@ ++From b06a228a5fd1589fc9bed654b3288b321fc21aa1 Mon Sep 17 00:00:00 2001 ++From: "Richard W.M. Jones" <rjones@redhat.com> ++Date: Sun, 20 Nov 2016 15:04:52 +0000 ++Subject: [PATCH] Add support for RISC-V. ++ ++The architecture is sufficiently similar to aarch64 that simply ++extending the existing aarch64 macro works. ++--- ++ src/include/storage/s_lock.h | 5 +++-- ++ 1 file changed, 3 insertions(+), 2 deletions(-) ++ ++diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h ++index 3fe29ce..7cd578f 100644 ++--- a/src/include/storage/s_lock.h +++++ b/src/include/storage/s_lock.h ++@@ -316,11 +316,12 @@ tas(volatile slock_t *lock) ++ ++ /* ++ * On ARM and ARM64, we use __sync_lock_test_and_set(int *, int) if available. +++ * On RISC-V, the same. ++ * ++ * We use the int-width variant of the builtin because it works on more chips ++ * than other widths. ++ */ ++-#if defined(__arm__) || defined(__arm) || defined(__aarch64__) || defined(__aarch64) +++#if defined(__arm__) || defined(__arm) || defined(__aarch64__) || defined(__aarch64) || defined(__riscv) ++ #ifdef HAVE_GCC__SYNC_INT32_TAS ++ #define HAS_TEST_AND_SET ++ ++@@ -337,7 +338,7 @@ tas(volatile slock_t *lock) ++ #define S_UNLOCK(lock) __sync_lock_release(lock) ++ ++ #endif /* HAVE_GCC__SYNC_INT32_TAS */ ++-#endif /* __arm__ || __arm || __aarch64__ || __aarch64 */ +++#endif /* __arm__ || __arm || __aarch64__ || __aarch64 || __riscv */ ++ ++ ++ /* S/390 and S/390x Linux (32- and 64-bit zSeries) */ ++-- ++2.9.3 ++ diff --git a/src/stage4/patches/python.patch b/src/stage4/patches/python.patch new file mode 100644 index 0000000..c62cd17 --- /dev/null +++ b/src/stage4/patches/python.patch @@ -0,0 +1,11 @@ +--- a/PKGBUILD 2018-03-25 21:57:59.513053107 +0200 ++++ b/PKGBUILD 2018-03-26 15:22:13.681032590 +0200 +@@ -14,7 +14,7 @@ arch=('x86_64') + license=('custom') + url="http://www.python.org/" + depends=('expat' 'bzip2' 'gdbm' 'openssl' 'libffi' 'zlib') +-makedepends=('tk' 'sqlite' 'valgrind' 'bluez-libs' 'mpdecimal' 'llvm' 'gdb' 'xorg-server-xvfb') ++makedepends=('tk' 'sqlite' 'bluez-libs' 'mpdecimal' 'llvm' 'xorg-server-xvfb') + optdepends=('python-setuptools' + 'python-pip' + 'sqlite' diff --git a/src/stage4/patches/python2.patch b/src/stage4/patches/python2.patch new file mode 100644 index 0000000..a59f6e9 --- /dev/null +++ b/src/stage4/patches/python2.patch @@ -0,0 +1,20 @@ +--- a/PKGBUILD 2018-03-25 21:53:23.069659893 +0200 ++++ b/PKGBUILD 2018-03-26 06:51:00.797288518 +0200 +@@ -14,7 +14,7 @@ license=('PSF') + url="http://www.python.org/" + depends=('bzip2' 'gdbm' 'openssl' 'zlib' 'expat' 'sqlite' 'libffi') + makedepends=('tk' 'bluez-libs') +-checkdepends=('gdb' 'file' 'xorg-server-xvfb') ++checkdepends=('file' 'xorg-server-xvfb') + optdepends=('tk: for IDLE' + 'python2-setuptools' + 'python2-pip') +@@ -90,7 +90,7 @@ check() { + + cd Python-${pkgver} + LD_LIBRARY_PATH="${srcdir}/Python-${pkgver}":${LD_LIBRARY_PATH} \ +- xvfb-run "${srcdir}/Python-${pkgver}/python" -m test.regrtest -v -uall -x test_bytes test_str test_string test_tuple test_unicode test_userstring ++ xvfb-run "${srcdir}/Python-${pkgver}/python" -m test.regrtest -v -uall -x test_gdb test_bytes test_str test_string test_tuple test_unicode test_userstring + } + + package() { diff --git a/src/stage4/patches/tcl.patch b/src/stage4/patches/tcl.patch new file mode 100644 index 0000000..ccc9f0a --- /dev/null +++ b/src/stage4/patches/tcl.patch @@ -0,0 +1,11 @@ +--- a/PKGBUILD 2018-03-26 23:30:35.601886802 +0200 ++++ b/PKGBUILD 2018-03-27 08:00:17.252668141 +0200 +@@ -27,6 +27,8 @@ build() { + + check() { + cd tcl${pkgver}/unix ++ # http tests fail due to missing network in the chroot ++ rm ../tests/{socket,http{,11}}.test + make test + } + diff --git a/src/stage4/stage4.sh b/src/stage4/stage4.sh index 19f8204..174dc1b 100644 --- a/src/stage4/stage4.sh +++ b/src/stage4/stage4.sh @@ -94,8 +94,27 @@ while [ -s "$_deptree" ]; do for _dep in $_builddeps $_rundeps; do _realdep="" make_realdep "$_dep" + if [ -z "$_realdep" ]; then + if [ "x$KEEP_GOING" == "xyes" ]; then + notify -c error "$_pkgname: failed to translate dependency string '$_dep'" + _needs_postpone=yes + break + else + die "$_pkgname: failed to translate dependency string '$_dep'" + fi + fi + + case $_realdep in + gcc-ada|gcc-go|gdb|valgrind|lib32*) + if [ "x$KEEP_GOING" == "xyes" ]; then + notify -c error "$_pkgname: known bad package pulled in : '$_realdep'" + _needs_postpone=yes + break + else + die "$_pkgname: known bad package pulled in : '$_realdep'" + fi ;; + esac - [ -n "$_realdep" ] || die "failed to translate dependency string '$_dep'" if ! grep -q "^$_realdep :" "$_deptree".FULL; then echo "$_realdep : [ ] # $_pkgname" >> "$_deptree".FULL echo "$_realdep : [ ] # $_pkgname" >> "$_deptree" @@ -103,6 +122,14 @@ while [ -s "$_deptree" ]; do sed -i "/#.* $_pkgname\(\$\|[ ,]\)/! s/^$_realdep : \[.*/&, $_pkgname/" "$_deptree"{,.FULL} fi done + + # bad package was pulled in, postpone + if [ "x$_needs_postpone" == "xyes" ]; then + sed -i "s/^$_pkgname : \[/& FIXME/" "$_deptree" + popd >/dev/null + continue + fi + # postpone build on missing build-time deps for _dep in $_builddeps; do _realdep="" @@ -137,17 +164,27 @@ while [ -s "$_deptree" ]; do # clean staging rm -f "$_pkgdest"/staging/* + # clean package cache + rm -rfv /var/cache/pacman/pkg/* + rm -rfv /var/cache/pacman/pkg-$CARCH/* # build the package - "$_builddir"/libremakepkg-$CARCH.sh -n $CHOST-stage4 || failed_build + _build_failed=no + "$_builddir"/libremakepkg-$CARCH.sh -n $CHOST-stage4 || failed_build $_pkgbase + + # if we continued after a failed build, mark the entry in the deptree and continue + if [ "x$_build_failed" == "xyes" ]; then + sed -i "s/^$_pkgname : \[/& FIXME/" "$_deptree" + popd >/dev/null + continue + fi # release the package _pkgrepo=$(cat .REPO) for f in "$_pkgdest"/staging/*; do - ln -s ../../../pool/$(basename "$f") "$_pkgdest"/$_pkgrepo/os/$CARCH/$(basename "$f") + ln -fs ../../../pool/$(basename "$f") "$_pkgdest"/$_pkgrepo/os/$CARCH/$(basename "$f") mv $f "$_pkgdest"/pool/ done - rm -rf /var/cache/pacman/pkg-$CARCH/* rm -rf "$_pkgdest"/$_pkgrepo/os/$CARCH/$_pkgrepo.{db,files}* repo-add -q -R "$_pkgdest"/$_pkgrepo/os/$CARCH/{$_pkgrepo.db.tar.gz,*.pkg.tar.xz} @@ -171,9 +208,9 @@ while [ -s "$_deptree" ]; do # remove pkg from deptree sed -i "/^$_pkgname :/d; s/ / /g; s/ $_pkgname / /g; s/ */ /g" "$_deptree" - full=$(cat "$_deptree".FULL | wc -l) - curr=$(expr $full - $(cat "$_deptree" | wc -l)) - notify -c success -u low "*$curr/$full* $_pkgname" + # full=$(cat "$_deptree".FULL | wc -l) + # curr=$(expr $full - $(cat "$_deptree" | wc -l)) + # notify -c success -u low "*$curr/$full* $_pkgname" popd >/dev/null done |