openSUSE Commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
July 2017
- 1 participants
- 1683 discussions
Hello community,
here is the log from the commit of package 000product for openSUSE:Factory checked in at 2017-07-28 09:48:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/000product (Old)
and /work/SRC/openSUSE:Factory/.000product.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "000product"
Fri Jul 28 09:48:20 2017 rev:31 rq: version:unknown
Changes:
--------
New Changes file:
NO CHANGES FILE!!!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
_service:product_converter:openSUSE-Addon-Lang-cd-cd-x86_64.kiwi: same change
_service:product_converter:openSUSE-Addon-Lang-release.spec: same change
_service:product_converter:openSUSE-Addon-NonOss-cd-addon-nonoss-i586_x86_64.kiwi: same change
_service:product_converter:openSUSE-Addon-NonOss-ftp-ftp-i586_x86_64.kiwi: same change
_service:product_converter:openSUSE-Addon-NonOss-release.spec: same change
++++++ _service:product_converter:openSUSE-Kubic-dvd5-DVD-x86_64.kiwi ++++++
--- /var/tmp/diff_new_pack.gt5CfC/_old 2017-07-28 09:48:37.683936365 +0200
+++ /var/tmp/diff_new_pack.gt5CfC/_new 2017-07-28 09:48:37.683936365 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__openSUSE-Kubic___20170727" schemaversion="4.1">
+<image name="OBS__openSUSE-Kubic___20170728" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -34,9 +34,9 @@
<productvar name="RUN_ISOHYBRID">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20170727</productvar>
+ <productvar name="VERSION">20170728</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:opensuse-kubic:20170727,openSUSE Kubic</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:opensuse-kubic:20170728,openSUSE Kubic</productinfo>
<productinfo name="LINGUAS">en_US </productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/suse-tumbleweed</productoption>
++++++ _service:product_converter:openSUSE-Kubic-release.spec ++++++
--- /var/tmp/diff_new_pack.gt5CfC/_old 2017-07-28 09:48:37.707932985 +0200
+++ /var/tmp/diff_new_pack.gt5CfC/_new 2017-07-28 09:48:37.711932422 +0200
@@ -20,7 +20,7 @@
Summary: openSUSE Kubic
License: GPL-2.0+
Group: System/Fhs
-Version: 20170727
+Version: 20170728
Release: 0
BuildRequires: skelcd-openSUSE
Recommends: branding
@@ -31,9 +31,9 @@
Provides: %name-%version
Provides: product() = openSUSE-Kubic
-Provides: product(openSUSE-Kubic) = 20170727-0
+Provides: product(openSUSE-Kubic) = 20170728-0
Provides: product-label() = openSUSE%20Kubic
-Provides: product-cpeid() = cpe%3A%2Fo%3Aopensuse%3Aopensuse%2Dkubic%3A20170727
+Provides: product-cpeid() = cpe%3A%2Fo%3Aopensuse%3Aopensuse%2Dkubic%3A20170728
Provides: product-url(releasenotes) = https%3A%2F%2Fwww.suse.com%2Freleasenotes%2F%{_target_cpu}%2FSUSE%2DCAASP%2F1.0%2Frelease%2Dnotes%2Dcaasp.rpm
Provides: product-endoflife()
@@ -90,7 +90,7 @@
PRETTY_NAME="openSUSE Kubic"
ID="opensuse-kubic"
ANSI_COLOR="0;32"
-CPE_NAME="cpe:/o:opensuse:opensuse-kubic:20170727"
+CPE_NAME="cpe:/o:opensuse:opensuse-kubic:20170728"
EOF
@@ -100,11 +100,11 @@
<product schemeversion="0">
<vendor>openSUSE</vendor>
<name>openSUSE-Kubic</name>
- <version>20170727</version>
+ <version>20170728</version>
<release>0</release>
<endoflife></endoflife>
<arch>%{_target_cpu}</arch>
- <cpeid>cpe:/o:opensuse:opensuse-kubic:20170727</cpeid>
+ <cpeid>cpe:/o:opensuse:opensuse-kubic:20170728</cpeid>
<productline>openSUSE-Kubic</productline>
<register>
<target/>
_service:product_converter:openSUSE-cd-mini-x86_64.kiwi: same change
_service:product_converter:openSUSE-dvd5-dvd-i586.kiwi: same change
_service:product_converter:openSUSE-dvd5-dvd-promo-i586.kiwi: same change
_service:product_converter:openSUSE-dvd5-dvd-promo-x86_64.kiwi: same change
_service:product_converter:openSUSE-dvd5-dvd-x86_64.kiwi: same change
_service:product_converter:openSUSE-dvd9-dvd-biarch-i586_x86_64.kiwi: same change
_service:product_converter:openSUSE-ftp-ftp-i586_x86_64.kiwi: same change
_service:product_converter:openSUSE-release.spec: same change
openSUSE-Kubic-release.spec: same change
openSUSE-release.spec: same change
++++++ openSUSE-Kubic.product ++++++
--- /var/tmp/diff_new_pack.gt5CfC/_old 2017-07-28 09:48:38.195864255 +0200
+++ /var/tmp/diff_new_pack.gt5CfC/_new 2017-07-28 09:48:38.195864255 +0200
@@ -6,7 +6,7 @@
<name>openSUSE-Kubic</name>
<releasepkgname>openSUSE-Kubic-release</releasepkgname>
<endoflife/>
- <version>20170727</version>
+ <version>20170728</version>
<!-- release is no longer optional -->
<release>0</release>
<productline>openSUSE-Kubic</productline>
1
0
Hello community,
here is the log from the commit of package mosh for openSUSE:Factory checked in at 2017-07-28 09:48:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mosh (Old)
and /work/SRC/openSUSE:Factory/.mosh.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mosh"
Fri Jul 28 09:48:08 2017 rev:16 rq:512857 version:1.3.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/mosh/mosh.changes 2017-04-07 13:56:45.590211642 +0200
+++ /work/SRC/openSUSE:Factory/.mosh.new/mosh.changes 2017-07-28 09:48:09.971839875 +0200
@@ -1,0 +2,23 @@
+Mon Jul 24 13:38:47 UTC 2017 - mpluskal(a)suse.com
+
+- Update to version 1.3.2:
+ * Platform support:
+ + Explicitly enable binding to both IPv4 and IPv6 addresses.
+ (Giel van Schijndel)
+ + Restore perl 5.8.8 support for RHEL5.
+ (Alexander Chernyakhovsky)
+ + Make tests detect UTF-8 locale with a helper executable.
+ (John Hood)
+ + Don't print /etc/motd on IllumOS. (John Hood)
+ + Print {,/var}/run/motd.dynamic on Ubuntu. (John Hood)
+ + Fix build on Haiku. (Adrien Destugues)
+ + Disable unicode-later-combining.test for tmux 2.4.
+ This fixes build failures. (John Hood)
+ * Bug fixes:
+ + In tests, explicitly set 80x24 tmux window, for newer versions
+ of tmux. (John Hood)
+ + Work around JuiceSSH rendering bug. (John Hood)
+ + Do not move cursor for SCROLL UP and SCROLL DOWN--
+ fixes an issue with tmux 2.4. (John Hood)
+
+-------------------------------------------------------------------
Old:
----
mosh-1.3.0.tar.gz
New:
----
mosh-1.3.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mosh.spec ++++++
--- /var/tmp/diff_new_pack.n9WEDw/_old 2017-07-28 09:48:10.419776779 +0200
+++ /var/tmp/diff_new_pack.n9WEDw/_new 2017-07-28 09:48:10.419776779 +0200
@@ -18,7 +18,7 @@
Name: mosh
-Version: 1.3.0
+Version: 1.3.2
Release: 0
Summary: The mobile shell
License: GPL-3.0+
@@ -66,10 +66,9 @@
%{buildroot}%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/mosh
%check
-make check
+make %{?_smp_mflags} check
%files
-%defattr(-,root,root)
%config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/mosh
%dir %{_sysconfdir}/ufw/
%dir %{_sysconfdir}/ufw/applications.d/
++++++ mosh-1.3.0.tar.gz -> mosh-1.3.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/ChangeLog new/mosh-1.3.2/ChangeLog
--- old/mosh-1.3.0/ChangeLog 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/ChangeLog 2017-07-22 23:14:53.000000000 +0200
@@ -1,3 +1,25 @@
+2017-07-21 Keith Winstein <mosh-devel(a)mit.edu>
+
+ * Version 1.3.2 released.
+
+ * Platform support:
+ * Explicitly enable binding to both IPv4 and IPv6 addresses.
+ (Giel van Schijndel)
+ * Restore perl 5.8.8 support for RHEL5. (Alexander Chernyakhovsky)
+ * Make tests detect UTF-8 locale with a helper executable. (John Hood)
+ * Don't print /etc/motd on IllumOS. (John Hood)
+ * Print {,/var}/run/motd.dynamic on Ubuntu. (John Hood)
+ * Fix build on Haiku. (Adrien Destugues)
+ * Disable unicode-later-combining.test for tmux 2.4.
+ This fixes build failures. (John Hood)
+
+ * Bug fixes:
+ * In tests, explicitly set 80x24 tmux window, for newer versions
+ of tmux. (John Hood)
+ * Work around JuiceSSH rendering bug. (John Hood)
+ * Do not move cursor for SCROLL UP and SCROLL DOWN--
+ fixes an issue with tmux 2.4. (John Hood)
+
2017-03-25 Keith Winstein <mosh-devel(a)mit.edu>
* Version 1.3.0 released.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/Makefile.in new/mosh-1.3.2/Makefile.in
--- old/mosh-1.3.0/Makefile.in 2017-03-26 21:04:58.000000000 +0200
+++ new/mosh-1.3.2/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -247,7 +247,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/README.md new/mosh-1.3.2/README.md
--- old/mosh-1.3.0/README.md 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/README.md 2017-07-22 23:14:53.000000000 +0200
@@ -139,6 +139,11 @@
intensive and mostly sits idle when the user is not typing, we think
the results suggest that `-O2` (the default) is preferable.
+Our Debian and Fedora packaging presents Mosh as a single package.
+Mosh has a Perl dependency that is only required for client use. For
+some platforms, it may make sense to have separate mosh-server and
+mosh-client packages to allow mosh-server usage without Perl.
+
More info
---------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/THANKS new/mosh-1.3.2/THANKS
--- old/mosh-1.3.0/THANKS 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/THANKS 2017-07-22 23:14:53.000000000 +0200
@@ -92,3 +92,7 @@
* HIGUCHI Yuta
* Baruch Siach
+
+* Adrien Destugues
+
+* Giel van Schijndel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/conf/Makefile.in new/mosh-1.3.2/conf/Makefile.in
--- old/mosh-1.3.0/conf/Makefile.in 2017-03-26 21:04:58.000000000 +0200
+++ new/mosh-1.3.2/conf/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -200,7 +200,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/configure new/mosh-1.3.2/configure
--- old/mosh-1.3.0/configure 2017-03-26 21:04:58.000000000 +0200
+++ new/mosh-1.3.2/configure 2017-07-22 23:15:11.000000000 +0200
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for mosh 1.3.0.
+# Generated by GNU Autoconf 2.69 for mosh 1.3.2.
#
# Report bugs to <mosh-devel(a)mit.edu>.
#
@@ -580,8 +580,8 @@
# Identity of this package.
PACKAGE_NAME='mosh'
PACKAGE_TARNAME='mosh'
-PACKAGE_VERSION='1.3.0'
-PACKAGE_STRING='mosh 1.3.0'
+PACKAGE_VERSION='1.3.2'
+PACKAGE_STRING='mosh 1.3.2'
PACKAGE_BUGREPORT='mosh-devel(a)mit.edu'
PACKAGE_URL=''
@@ -631,7 +631,6 @@
BASH_COMPLETION_CFLAGS
protobuf_LIBS
protobuf_CFLAGS
-LIBUTIL
CRYPTO_LDFLAGS
CRYPTO_CPPFLAGS
CRYPTO_LIBS
@@ -1353,7 +1352,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 mosh 1.3.0 to adapt to many kinds of systems.
+\`configure' configures mosh 1.3.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1420,7 +1419,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of mosh 1.3.0:";;
+ short | recursive ) echo "Configuration of mosh 1.3.2:";;
esac
cat <<\_ACEOF
@@ -1565,7 +1564,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-mosh configure 1.3.0
+mosh configure 1.3.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2376,7 +2375,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by mosh $as_me 1.3.0, which was
+It was created by mosh $as_me 1.3.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3239,7 +3238,7 @@
# Define the identity of the package.
PACKAGE='mosh'
- VERSION='1.3.0'
+ VERSION='1.3.2'
cat >>confdefs.h <<_ACEOF
@@ -6085,7 +6084,7 @@
return 0;
}
_ACEOF
-for ac_lib in '' socket; do
+for ac_lib in '' socket network; do
if test -z "$ac_lib"; then
ac_res="none required"
else
@@ -9302,13 +9301,12 @@
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lutil" >&5
-$as_echo_n "checking for forkpty in -lutil... " >&6; }
-if ${ac_cv_lib_util_forkpty+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing forkpty" >&5
+$as_echo_n "checking for library containing forkpty... " >&6; }
+if ${ac_cv_search_forkpty+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lutil $LIBS"
+ ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -9327,24 +9325,39 @@
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_util_forkpty=yes
-else
- ac_cv_lib_util_forkpty=no
+for ac_lib in '' util bsd; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_forkpty=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+ conftest$ac_exeext
+ if ${ac_cv_search_forkpty+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_forkpty+:} false; then :
+
+else
+ ac_cv_search_forkpty=no
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_forkpty" >&5
-$as_echo "$ac_cv_lib_util_forkpty" >&6; }
-if test "x$ac_cv_lib_util_forkpty" = xyes; then :
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_forkpty" >&5
+$as_echo "$ac_cv_search_forkpty" >&6; }
+ac_res=$ac_cv_search_forkpty
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
$as_echo "#define HAVE_FORKPTY /**/" >>confdefs.h
- LIBUTIL="-lutil"
-
fi
@@ -10421,7 +10434,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by mosh $as_me 1.3.0, which was
+This file was extended by mosh $as_me 1.3.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -10487,7 +10500,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-mosh config.status 1.3.0
+mosh config.status 1.3.2
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/mosh-1.3.0/configure.ac new/mosh-1.3.2/configure.ac
--- old/mosh-1.3.0/configure.ac 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/configure.ac 2017-07-22 23:14:53.000000000 +0200
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.61])
-AC_INIT([mosh], [1.3.0], [mosh-devel(a)mit.edu]
+AC_INIT([mosh], [1.3.2], [mosh-devel(a)mit.edu]
AM_INIT_AUTOMAKE([foreign std-options -Wall -Werror])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AC_CONFIG_SRCDIR([src/frontend/mosh-client.cc])
@@ -179,7 +179,7 @@
AC_SEARCH_LIBS([compress], [z], , [AC_MSG_ERROR([Unable to find zlib.])])
-AC_SEARCH_LIBS([socket], [socket])
+AC_SEARCH_LIBS([socket], [socket network])
AC_SEARCH_LIBS([inet_addr], [nsl])
AC_SEARCH_LIBS([clock_gettime], [rt])
@@ -352,10 +352,8 @@
, [[#include <sys/types.h>
#include <libutil.h>]])
-AC_CHECK_LIB([util], [forkpty], [
+AC_SEARCH_LIBS([forkpty], [util bsd], [
AC_DEFINE([HAVE_FORKPTY],, [Define if you have forkpty().])
- LIBUTIL="-lutil"
- AC_SUBST([LIBUTIL])
])
AC_MSG_CHECKING([whether pipe2(..., O_CLOEXEC) is supported])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/man/Makefile.in new/mosh-1.3.2/man/Makefile.in
--- old/mosh-1.3.0/man/Makefile.in 2017-03-26 21:04:58.000000000 +0200
+++ new/mosh-1.3.2/man/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -197,7 +197,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/scripts/Makefile.in new/mosh-1.3.2/scripts/Makefile.in
--- old/mosh-1.3.0/scripts/Makefile.in 2017-03-26 21:04:58.000000000 +0200
+++ new/mosh-1.3.2/scripts/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -194,7 +194,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/scripts/mosh.pl new/mosh-1.3.2/scripts/mosh.pl
--- old/mosh-1.3.0/scripts/mosh.pl 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/scripts/mosh.pl 2017-07-22 23:14:53.000000000 +0200
@@ -30,14 +30,14 @@
# this exception statement from all source files in the program, then
# also delete it here.
-use 5.10.0;
+use 5.8.8;
use warnings;
use strict;
use Getopt::Long;
use IO::Socket;
use Text::ParseWords;
-use Socket qw( IPPROTO_IP IPPROTO_IPV6 IPPROTO_TCP IPPROTO_UDP );
+use Socket qw(IPPROTO_TCP);
use Errno qw(EINTR);
use POSIX qw(_exit);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/Makefile.in new/mosh-1.3.2/src/Makefile.in
--- old/mosh-1.3.0/src/Makefile.in 2017-03-26 21:04:58.000000000 +0200
+++ new/mosh-1.3.2/src/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -224,7 +224,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/crypto/Makefile.in new/mosh-1.3.2/src/crypto/Makefile.in
--- old/mosh-1.3.0/src/crypto/Makefile.in 2017-03-26 21:04:59.000000000 +0200
+++ new/mosh-1.3.2/src/crypto/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -224,7 +224,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/examples/Makefile.am new/mosh-1.3.2/src/examples/Makefile.am
--- old/mosh-1.3.0/src/examples/Makefile.am 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/examples/Makefile.am 2017-07-22 23:14:53.000000000 +0200
@@ -15,16 +15,16 @@
parse_SOURCES = parse.cc
parse_CPPFLAGS = -I$(srcdir)/../terminal -I$(srcdir)/../util
-parse_LDADD = ../terminal/libmoshterminal.a ../util/libmoshutil.a $(LIBUTIL)
+parse_LDADD = ../terminal/libmoshterminal.a ../util/libmoshutil.a
termemu_SOURCES = termemu.cc
termemu_CPPFLAGS = -I$(srcdir)/../terminal -I$(srcdir)/../util -I$(srcdir)/../statesync -I../protobufs
-termemu_LDADD = ../terminal/libmoshterminal.a ../util/libmoshutil.a ../statesync/libmoshstatesync.a ../protobufs/libmoshprotos.a $(LIBUTIL) $(TINFO_LIBS) $(protobuf_LIBS)
+termemu_LDADD = ../terminal/libmoshterminal.a ../util/libmoshutil.a ../statesync/libmoshstatesync.a ../protobufs/libmoshprotos.a $(TINFO_LIBS) $(protobuf_LIBS)
ntester_SOURCES = ntester.cc
ntester_CPPFLAGS = -I$(srcdir)/../util -I$(srcdir)/../statesync -I$(srcdir)/../terminal -I$(srcdir)/../network -I$(srcdir)/../crypto -I../protobufs $(protobuf_CFLAGS)
-ntester_LDADD = ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../network/libmoshnetwork.a ../crypto/libmoshcrypto.a ../protobufs/libmoshprotos.a ../util/libmoshutil.a $(LIBUTIL) -lm $(protobuf_LIBS) $(CRYPTO_LIBS)
+ntester_LDADD = ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../network/libmoshnetwork.a ../crypto/libmoshcrypto.a ../protobufs/libmoshprotos.a ../util/libmoshutil.a -lm $(protobuf_LIBS) $(CRYPTO_LIBS)
benchmark_SOURCES = benchmark.cc
benchmark_CPPFLAGS = -I$(srcdir)/../util -I$(srcdir)/../statesync -I$(srcdir)/../terminal -I../protobufs -I$(srcdir)/../frontend -I$(srcdir)/../crypto -I$(srcdir)/../network $(protobuf_CFLAGS)
-benchmark_LDADD = ../frontend/terminaloverlay.o ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../protobufs/libmoshprotos.a ../network/libmoshnetwork.a ../crypto/libmoshcrypto.a ../util/libmoshutil.a $(STDDJB_LDFLAGS) $(LIBUTIL) -lm $(TINFO_LIBS) $(protobuf_LIBS) $(CRYPTO_LIBS)
+benchmark_LDADD = ../frontend/terminaloverlay.o ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../protobufs/libmoshprotos.a ../network/libmoshnetwork.a ../crypto/libmoshcrypto.a ../util/libmoshutil.a $(STDDJB_LDFLAGS) -lm $(TINFO_LIBS) $(protobuf_LIBS) $(CRYPTO_LIBS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/examples/Makefile.in new/mosh-1.3.2/src/examples/Makefile.in
--- old/mosh-1.3.0/src/examples/Makefile.in 2017-03-26 21:04:59.000000000 +0200
+++ new/mosh-1.3.2/src/examples/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -113,7 +113,7 @@
../protobufs/libmoshprotos.a ../network/libmoshnetwork.a \
../crypto/libmoshcrypto.a ../util/libmoshutil.a \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1)
am_decrypt_OBJECTS = decrypt-decrypt.$(OBJEXT)
decrypt_OBJECTS = $(am_decrypt_OBJECTS)
decrypt_DEPENDENCIES = ../crypto/libmoshcrypto.a $(am__DEPENDENCIES_1)
@@ -126,17 +126,17 @@
../terminal/libmoshterminal.a ../network/libmoshnetwork.a \
../crypto/libmoshcrypto.a ../protobufs/libmoshprotos.a \
../util/libmoshutil.a $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1)
am_parse_OBJECTS = parse-parse.$(OBJEXT)
parse_OBJECTS = $(am_parse_OBJECTS)
parse_DEPENDENCIES = ../terminal/libmoshterminal.a \
- ../util/libmoshutil.a $(am__DEPENDENCIES_1)
+ ../util/libmoshutil.a
am_termemu_OBJECTS = termemu-termemu.$(OBJEXT)
termemu_OBJECTS = $(am_termemu_OBJECTS)
termemu_DEPENDENCIES = ../terminal/libmoshterminal.a \
../util/libmoshutil.a ../statesync/libmoshstatesync.a \
../protobufs/libmoshprotos.a $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -244,7 +244,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
@@ -331,16 +330,16 @@
decrypt_LDADD = ../crypto/libmoshcrypto.a $(CRYPTO_LIBS)
parse_SOURCES = parse.cc
parse_CPPFLAGS = -I$(srcdir)/../terminal -I$(srcdir)/../util
-parse_LDADD = ../terminal/libmoshterminal.a ../util/libmoshutil.a $(LIBUTIL)
+parse_LDADD = ../terminal/libmoshterminal.a ../util/libmoshutil.a
termemu_SOURCES = termemu.cc
termemu_CPPFLAGS = -I$(srcdir)/../terminal -I$(srcdir)/../util -I$(srcdir)/../statesync -I../protobufs
-termemu_LDADD = ../terminal/libmoshterminal.a ../util/libmoshutil.a ../statesync/libmoshstatesync.a ../protobufs/libmoshprotos.a $(LIBUTIL) $(TINFO_LIBS) $(protobuf_LIBS)
+termemu_LDADD = ../terminal/libmoshterminal.a ../util/libmoshutil.a ../statesync/libmoshstatesync.a ../protobufs/libmoshprotos.a $(TINFO_LIBS) $(protobuf_LIBS)
ntester_SOURCES = ntester.cc
ntester_CPPFLAGS = -I$(srcdir)/../util -I$(srcdir)/../statesync -I$(srcdir)/../terminal -I$(srcdir)/../network -I$(srcdir)/../crypto -I../protobufs $(protobuf_CFLAGS)
-ntester_LDADD = ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../network/libmoshnetwork.a ../crypto/libmoshcrypto.a ../protobufs/libmoshprotos.a ../util/libmoshutil.a $(LIBUTIL) -lm $(protobuf_LIBS) $(CRYPTO_LIBS)
+ntester_LDADD = ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../network/libmoshnetwork.a ../crypto/libmoshcrypto.a ../protobufs/libmoshprotos.a ../util/libmoshutil.a -lm $(protobuf_LIBS) $(CRYPTO_LIBS)
benchmark_SOURCES = benchmark.cc
benchmark_CPPFLAGS = -I$(srcdir)/../util -I$(srcdir)/../statesync -I$(srcdir)/../terminal -I../protobufs -I$(srcdir)/../frontend -I$(srcdir)/../crypto -I$(srcdir)/../network $(protobuf_CFLAGS)
-benchmark_LDADD = ../frontend/terminaloverlay.o ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../protobufs/libmoshprotos.a ../network/libmoshnetwork.a ../crypto/libmoshcrypto.a ../util/libmoshutil.a $(STDDJB_LDFLAGS) $(LIBUTIL) -lm $(TINFO_LIBS) $(protobuf_LIBS) $(CRYPTO_LIBS)
+benchmark_LDADD = ../frontend/terminaloverlay.o ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../protobufs/libmoshprotos.a ../network/libmoshnetwork.a ../crypto/libmoshcrypto.a ../util/libmoshutil.a $(STDDJB_LDFLAGS) -lm $(TINFO_LIBS) $(protobuf_LIBS) $(CRYPTO_LIBS)
all: all-am
.SUFFIXES:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/frontend/Makefile.am new/mosh-1.3.2/src/frontend/Makefile.am
--- old/mosh-1.3.0/src/frontend/Makefile.am 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/frontend/Makefile.am 2017-07-22 23:14:53.000000000 +0200
@@ -3,7 +3,7 @@
AM_LDFLAGS = $(HARDEN_LDFLAGS)
LDADD = ../crypto/libmoshcrypto.a ../network/libmoshnetwork.a ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../util/libmoshutil.a ../protobufs/libmoshprotos.a -lm $(TINFO_LIBS) $(protobuf_LIBS) $(CRYPTO_LIBS)
-mosh_server_LDADD = $(LDADD) $(LIBUTIL)
+mosh_server_LDADD = $(LDADD)
bin_PROGRAMS =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/frontend/Makefile.in new/mosh-1.3.2/src/frontend/Makefile.in
--- old/mosh-1.3.0/src/frontend/Makefile.in 2017-03-26 21:04:59.000000000 +0200
+++ new/mosh-1.3.2/src/frontend/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -124,7 +124,7 @@
../terminal/libmoshterminal.a ../util/libmoshutil.a \
../protobufs/libmoshprotos.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-mosh_server_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+mosh_server_DEPENDENCIES = $(am__DEPENDENCIES_2)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -237,7 +237,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
@@ -318,7 +317,7 @@
AM_CXXFLAGS = $(WARNING_CXXFLAGS) $(PICKY_CXXFLAGS) $(HARDEN_CFLAGS) $(MISC_CXXFLAGS)
AM_LDFLAGS = $(HARDEN_LDFLAGS)
LDADD = ../crypto/libmoshcrypto.a ../network/libmoshnetwork.a ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../util/libmoshutil.a ../protobufs/libmoshprotos.a -lm $(TINFO_LIBS) $(protobuf_LIBS) $(CRYPTO_LIBS)
-mosh_server_LDADD = $(LDADD) $(LIBUTIL)
+mosh_server_LDADD = $(LDADD)
mosh_client_SOURCES = mosh-client.cc stmclient.cc stmclient.h terminaloverlay.cc terminaloverlay.h
mosh_server_SOURCES = mosh-server.cc
all: all-am
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/frontend/mosh-server.cc new/mosh-1.3.2/src/frontend/mosh-server.cc
--- old/mosh-1.3.0/src/frontend/mosh-server.cc 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/frontend/mosh-server.cc 2017-07-22 23:14:53.000000000 +0200
@@ -118,7 +118,7 @@
fprintf( stream, "Usage: %s new [-s] [-v] [-i LOCALADDR] [-p PORT[:PORT2]] [-c COLORS] [-l NAME=VALUE] [-- COMMAND...]\n", argv0 );
}
-static void print_motd( void );
+static bool print_motd( const char *filename );
static void chdir_homedir( void );
static bool motd_hushed( void );
static void warn_unattached( const string & ignore_entry );
@@ -554,7 +554,20 @@
chdir_homedir();
if ( with_motd && (!motd_hushed()) ) {
- print_motd();
+ // On illumos motd is printed by /etc/profile.
+#ifndef __sun
+ // For Ubuntu, try and print one of {,/var}/run/motd.dynamic.
+ // This file is only updated when pam_motd is run, but when
+ // mosh-server is run in the usual way with ssh via the script,
+ // this always happens.
+ // XXX Hackish knowledge of Ubuntu PAM configuration.
+ // But this seems less awful than build-time detection with autoconf.
+ if (!print_motd("/run/motd.dynamic")) {
+ print_motd("/var/run/motd.dynamic");
+ }
+ // Always print traditional /etc/motd.
+ print_motd("/etc/motd");
+#endif
warn_unattached( utmp_entry );
}
@@ -877,12 +890,12 @@
}
}
-/* OpenSSH prints the motd on startup, so we will too */
-static void print_motd( void )
+/* Print the motd from a given file, if available */
+static bool print_motd( const char *filename )
{
- FILE *motd = fopen( "/etc/motd", "r" );
+ FILE *motd = fopen( filename, "r" );
if ( !motd ) {
- return; /* don't report error on missing or forbidden motd */
+ return false;
}
const int BUFSIZE = 256;
@@ -900,6 +913,7 @@
}
fclose( motd );
+ return true;
}
static void chdir_homedir( void )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/network/Makefile.in new/mosh-1.3.2/src/network/Makefile.in
--- old/mosh-1.3.0/src/network/Makefile.in 2017-03-26 21:04:59.000000000 +0200
+++ new/mosh-1.3.2/src/network/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -223,7 +223,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/network/network.cc new/mosh-1.3.2/src/network/network.cc
--- old/mosh-1.3.0/src/network/network.cc 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/network/network.cc 2017-07-22 23:14:53.000000000 +0200
@@ -41,6 +41,7 @@
#include <netinet/in.h>
#include <assert.h>
#include <errno.h>
+#include <string.h>
#include <unistd.h>
#include "dos_assert.h"
@@ -326,6 +327,14 @@
throw NetworkException( "Unknown address family", 0 );
}
+ if ( local_addr.sa.sa_family == AF_INET6
+ && memcmp(&local_addr.sin6.sin6_addr, &in6addr_any, sizeof(in6addr_any)) == 0 ) {
+ const int off = 0;
+ if ( setsockopt( sock(), IPPROTO_IPV6, IPV6_V6ONLY, &off, sizeof(off) ) ) {
+ perror( "setsockopt( IPV6_V6ONLY, off )" );
+ }
+ }
+
if ( bind( sock(), &local_addr.sa, local_addr_len ) == 0 ) {
set_MTU( local_addr.sa.sa_family );
return true;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/protobufs/Makefile.in new/mosh-1.3.2/src/protobufs/Makefile.in
--- old/mosh-1.3.0/src/protobufs/Makefile.in 2017-03-26 21:04:59.000000000 +0200
+++ new/mosh-1.3.2/src/protobufs/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -227,7 +227,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/statesync/Makefile.in new/mosh-1.3.2/src/statesync/Makefile.in
--- old/mosh-1.3.0/src/statesync/Makefile.in 2017-03-26 21:04:59.000000000 +0200
+++ new/mosh-1.3.2/src/statesync/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -223,7 +223,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/terminal/Makefile.in new/mosh-1.3.2/src/terminal/Makefile.in
--- old/mosh-1.3.0/src/terminal/Makefile.in 2017-03-26 21:04:59.000000000 +0200
+++ new/mosh-1.3.2/src/terminal/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -226,7 +226,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/terminal/terminaldisplay.cc new/mosh-1.3.2/src/terminal/terminaldisplay.cc
--- old/mosh-1.3.0/src/terminal/terminaldisplay.cc 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/terminal/terminaldisplay.cc 2017-07-22 23:14:53.000000000 +0200
@@ -386,7 +386,7 @@
frame.append_silent_move( frame_y, frame_x - clear_count );
frame.update_rendition( blank_renditions );
bool can_use_erase = has_bce || ( frame.current_rendition == initial_rendition() );
- if ( can_use_erase && has_ech ) {
+ if ( can_use_erase && has_ech && clear_count > 4 ) {
snprintf( tmp, 64, "\033[%dX", clear_count );
frame.append( tmp );
} else {
@@ -436,8 +436,8 @@
frame.append_silent_move( frame_y, frame_x - clear_count );
frame.update_rendition( blank_renditions );
- bool can_use_erase = !wrap_this && ( has_bce || ( frame.current_rendition == initial_rendition() ) );
- if ( can_use_erase ) {
+ bool can_use_erase = has_bce || ( frame.current_rendition == initial_rendition() );
+ if ( can_use_erase && !wrap_this ) {
frame.append( "\033[K" );
} else {
frame.append( clear_count, ' ' );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/terminal/terminalframebuffer.cc new/mosh-1.3.2/src/terminal/terminalframebuffer.cc
--- old/mosh-1.3.0/src/terminal/terminalframebuffer.cc 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/terminal/terminalframebuffer.cc 2017-07-22 23:14:53.000000000 +0200
@@ -119,11 +119,8 @@
{
if ( N >= 0 ) {
delete_line( ds.get_scrolling_region_top_row(), N );
- ds.move_row( -N, true );
} else {
- N = -N;
- insert_line( ds.get_scrolling_region_top_row(), N );
- ds.move_row( N, true );
+ insert_line( ds.get_scrolling_region_top_row(), -N );
}
}
@@ -187,9 +184,13 @@
}
if ( ds.get_cursor_row() + rows > ds.get_scrolling_region_bottom_row() ) {
- scroll( ds.get_cursor_row() + rows - ds.get_scrolling_region_bottom_row() );
+ int N = ds.get_cursor_row() + rows - ds.get_scrolling_region_bottom_row();
+ scroll( N );
+ ds.move_row( -N, true );
} else if ( ds.get_cursor_row() + rows < ds.get_scrolling_region_top_row() ) {
- scroll( ds.get_cursor_row() + rows - ds.get_scrolling_region_top_row() );
+ int N = ds.get_cursor_row() + rows - ds.get_scrolling_region_top_row();
+ scroll( N );
+ ds.move_row( -N, true );
}
ds.move_row( rows, true );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/tests/Makefile.am new/mosh-1.3.2/src/tests/Makefile.am
--- old/mosh-1.3.0/src/tests/Makefile.am 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/tests/Makefile.am 2017-07-22 23:14:53.000000000 +0200
@@ -22,6 +22,7 @@
emulation-back-tab.test \
emulation-cursor-motion.test \
emulation-multiline-scroll.test \
+ emulation-scroll.test \
emulation-wrap-across-frames.test \
network-no-diff.test \
prediction-unicode.test \
@@ -35,7 +36,7 @@
unicode-later-combining.test \
window-resize.test
-check_PROGRAMS = ocb-aes encrypt-decrypt base64 nonce-incr inpty
+check_PROGRAMS = ocb-aes encrypt-decrypt base64 nonce-incr inpty is-utf8-locale
TESTS = ocb-aes encrypt-decrypt base64 nonce-incr local.test $(displaytests)
XFAIL_TESTS = \
e2e-failure.test \
@@ -63,7 +64,11 @@
inpty_SOURCES = inpty.cc
inpty_CPPFLAGS = -I$(srcdir)/../util
-inpty_LDADD = ../util/libmoshutil.a $(LIBUTIL)
+inpty_LDADD = ../util/libmoshutil.a
+
+is_utf8_locale_SOURCES = is-utf8-locale.cc
+is_utf8_locale_CPPFLAGS = -I$(srcdir)/../util
+is_utf8_locale_LDADD = ../util/libmoshutil.a $(LIBUTIL)
clean-local: clean-local-check
.PHONY: clean-local-check
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/tests/Makefile.in new/mosh-1.3.2/src/tests/Makefile.in
--- old/mosh-1.3.0/src/tests/Makefile.in 2017-03-26 21:04:59.000000000 +0200
+++ new/mosh-1.3.2/src/tests/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -86,7 +86,8 @@
PRE_UNINSTALL = :
POST_UNINSTALL = :
check_PROGRAMS = ocb-aes$(EXEEXT) encrypt-decrypt$(EXEEXT) \
- base64$(EXEEXT) nonce-incr$(EXEEXT) inpty$(EXEEXT)
+ base64$(EXEEXT) nonce-incr$(EXEEXT) inpty$(EXEEXT) \
+ is-utf8-locale$(EXEEXT)
TESTS = ocb-aes$(EXEEXT) encrypt-decrypt$(EXEEXT) base64$(EXEEXT) \
nonce-incr$(EXEEXT) local.test $(displaytests)
subdir = src/tests
@@ -118,7 +119,10 @@
../util/libmoshutil.a $(am__DEPENDENCIES_1)
am_inpty_OBJECTS = inpty-inpty.$(OBJEXT)
inpty_OBJECTS = $(am_inpty_OBJECTS)
-inpty_DEPENDENCIES = ../util/libmoshutil.a $(am__DEPENDENCIES_1)
+inpty_DEPENDENCIES = ../util/libmoshutil.a
+am_is_utf8_locale_OBJECTS = is_utf8_locale-is-utf8-locale.$(OBJEXT)
+is_utf8_locale_OBJECTS = $(am_is_utf8_locale_OBJECTS)
+is_utf8_locale_DEPENDENCIES = ../util/libmoshutil.a
am_nonce_incr_OBJECTS = nonce_incr-nonce-incr.$(OBJEXT)
nonce_incr_OBJECTS = $(am_nonce_incr_OBJECTS)
nonce_incr_DEPENDENCIES = ../network/libmoshnetwork.a \
@@ -175,9 +179,11 @@
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(base64_SOURCES) $(encrypt_decrypt_SOURCES) \
- $(inpty_SOURCES) $(nonce_incr_SOURCES) $(ocb_aes_SOURCES)
+ $(inpty_SOURCES) $(is_utf8_locale_SOURCES) \
+ $(nonce_incr_SOURCES) $(ocb_aes_SOURCES)
DIST_SOURCES = $(base64_SOURCES) $(encrypt_decrypt_SOURCES) \
- $(inpty_SOURCES) $(nonce_incr_SOURCES) $(ocb_aes_SOURCES)
+ $(inpty_SOURCES) $(is_utf8_locale_SOURCES) \
+ $(nonce_incr_SOURCES) $(ocb_aes_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -452,7 +458,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
@@ -552,6 +557,7 @@
emulation-back-tab.test \
emulation-cursor-motion.test \
emulation-multiline-scroll.test \
+ emulation-scroll.test \
emulation-wrap-across-frames.test \
network-no-diff.test \
prediction-unicode.test \
@@ -583,7 +589,10 @@
nonce_incr_LDADD = ../network/libmoshnetwork.a ../crypto/libmoshcrypto.a ../util/libmoshutil.a $(CRYPTO_LIBS)
inpty_SOURCES = inpty.cc
inpty_CPPFLAGS = -I$(srcdir)/../util
-inpty_LDADD = ../util/libmoshutil.a $(LIBUTIL)
+inpty_LDADD = ../util/libmoshutil.a
+is_utf8_locale_SOURCES = is-utf8-locale.cc
+is_utf8_locale_CPPFLAGS = -I$(srcdir)/../util
+is_utf8_locale_LDADD = ../util/libmoshutil.a $(LIBUTIL)
CLEANFILES = base64_vector.cc
all: all-am
@@ -634,6 +643,10 @@
@rm -f inpty$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(inpty_OBJECTS) $(inpty_LDADD) $(LIBS)
+is-utf8-locale$(EXEEXT): $(is_utf8_locale_OBJECTS) $(is_utf8_locale_DEPENDENCIES) $(EXTRA_is_utf8_locale_DEPENDENCIES)
+ @rm -f is-utf8-locale$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(is_utf8_locale_OBJECTS) $(is_utf8_locale_LDADD) $(LIBS)
+
nonce-incr$(EXEEXT): $(nonce_incr_OBJECTS) $(nonce_incr_DEPENDENCIES) $(EXTRA_nonce_incr_DEPENDENCIES)
@rm -f nonce-incr$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(nonce_incr_OBJECTS) $(nonce_incr_LDADD) $(LIBS)
@@ -653,6 +666,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encrypt_decrypt-encrypt-decrypt.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encrypt_decrypt-test_utils.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inpty-inpty.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_utf8_locale-is-utf8-locale.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonce_incr-nonce-incr.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ocb_aes-ocb-aes.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ocb_aes-test_utils.Po@am__quote@
@@ -741,6 +755,20 @@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(inpty_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o inpty-inpty.obj `if test -f 'inpty.cc'; then $(CYGPATH_W) 'inpty.cc'; else $(CYGPATH_W) '$(srcdir)/inpty.cc'; fi`
+is_utf8_locale-is-utf8-locale.o: is-utf8-locale.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(is_utf8_locale_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT is_utf8_locale-is-utf8-locale.o -MD -MP -MF $(DEPDIR)/is_utf8_locale-is-utf8-locale.Tpo -c -o is_utf8_locale-is-utf8-locale.o `test -f 'is-utf8-locale.cc' || echo '$(srcdir)/'`is-utf8-locale.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/is_utf8_locale-is-utf8-locale.Tpo $(DEPDIR)/is_utf8_locale-is-utf8-locale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='is-utf8-locale.cc' object='is_utf8_locale-is-utf8-locale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(is_utf8_locale_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o is_utf8_locale-is-utf8-locale.o `test -f 'is-utf8-locale.cc' || echo '$(srcdir)/'`is-utf8-locale.cc
+
+is_utf8_locale-is-utf8-locale.obj: is-utf8-locale.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(is_utf8_locale_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT is_utf8_locale-is-utf8-locale.obj -MD -MP -MF $(DEPDIR)/is_utf8_locale-is-utf8-locale.Tpo -c -o is_utf8_locale-is-utf8-locale.obj `if test -f 'is-utf8-locale.cc'; then $(CYGPATH_W) 'is-utf8-locale.cc'; else $(CYGPATH_W) '$(srcdir)/is-utf8-locale.cc'; fi`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/is_utf8_locale-is-utf8-locale.Tpo $(DEPDIR)/is_utf8_locale-is-utf8-locale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='is-utf8-locale.cc' object='is_utf8_locale-is-utf8-locale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(is_utf8_locale_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o is_utf8_locale-is-utf8-locale.obj `if test -f 'is-utf8-locale.cc'; then $(CYGPATH_W) 'is-utf8-locale.cc'; else $(CYGPATH_W) '$(srcdir)/is-utf8-locale.cc'; fi`
+
nonce_incr-nonce-incr.o: nonce-incr.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nonce_incr_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT nonce_incr-nonce-incr.o -MD -MP -MF $(DEPDIR)/nonce_incr-nonce-incr.Tpo -c -o nonce_incr-nonce-incr.o `test -f 'nonce-incr.cc' || echo '$(srcdir)/'`nonce-incr.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nonce_incr-nonce-incr.Tpo $(DEPDIR)/nonce_incr-nonce-incr.Po
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/tests/e2e-test new/mosh-1.3.2/src/tests/e2e-test
--- old/mosh-1.3.0/src/tests/e2e-test 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/tests/e2e-test 2017-07-22 23:14:53.000000000 +0200
@@ -60,11 +60,22 @@
# Tmux check.
tmux_check()
{
+ # OpenBSD tmux does not have '-V'.
+ if [ "$(uname -s)" = "OpenBSD" ]; then
+ openbsd_major="$(uname -r)"
+ openbsd_major="${openbsd_major%%.*}"
+ if [ "${openbsd_major}" -ge 6 ]; then
+ return 0
+ fi
+ fi
version=$(tmux -V)
if [ $? != 0 ]; then
error "tmux unavailable\n"
return 1
fi
+ if [ "$version" = "tmux master" ]; then
+ return 0
+ fi
version=${version##tmux }
version_major=${version%%.*}
version_minor=${version##*.}
@@ -74,7 +85,8 @@
error "tmux version %s too old\n" "$version"
return 1
fi
- return 0
+ # Finally, check that tmux actually works to some degree.
+ tmux -C new-session true
}
ssh_localhost_check()
@@ -108,10 +120,6 @@
}
# main
-if ! set_locale; then
- test_error "e2e-test: no usable locale\n"
-fi
-
# Set up environment
if [ -z "$srcdir" ]; then
export srcdir=$PWD
@@ -137,10 +145,6 @@
;;
esac
-if ! tmux_check; then
- test_skipped "tmux unavailable\n"
-fi
-
if [ $# -lt 2 ]; then
test_error "not enough args\n"
fi
@@ -153,6 +157,15 @@
test_dir=$(basename "${test_name}").d
test_script="${test_name}"
+tests_dir=$(dirname "${test_name}")
+if ! set_locale "${tests_dir}"; then
+ test_error "e2e-test: no usable locale\n"
+fi
+
+if ! tmux_check; then
+ test_skipped "tmux unavailable\n"
+fi
+
rm -rf "${test_dir}"
mkdir "${test_dir}"
@@ -230,9 +243,13 @@
# XXX tmux 1.8 requires shell command as a single arg; once we move to 2.0, undo these quotes
# XXX this ignores $TMPDIR, because it results in an overlong pathname on OS X
tmux_socket="/tmp/.tmux-mosh-test-$$"
- ${tmux_stdin} tmux -f /dev/null -S "${tmux_socket}" -C new-session "${srcdir}/print-exitstatus ${client_wrapper} ${sut} ${server_wrapper} \"${PWD}/${test_dir}/${run}\" \"${PWD}/${test_script} ${run}\"" > "${test_dir}/${run}.tmux.log"
+ ln -fs "${tmux_socket}" "${test_dir}/tmux-socket"
+ # tmux <= 2.5 ignore -x/-y, but the client sets the session to 80x24.
+ # tmux from 2017-05-27 and later should default to an 80x24 session,
+ # but do use -x/-y on control-master clients.
+ ${tmux_stdin} tmux -f /dev/null -S "${tmux_socket}" -C new-session -x 80 -y 24 "${srcdir}/print-exitstatus ${client_wrapper} ${sut} ${server_wrapper} \"${PWD}/${test_dir}/${run}\" \"${PWD}/${test_script} ${run}\"" > "${test_dir}/${run}.tmux.log"
rv=$?
- rm -f "${tmux_socket}"
+ rm -f "${tmux_socket}" "${test_dir}/tmux-socket"
if [ $rv -ne 0 ]; then
test_error "tmux failure on test %s\n" "$run"
fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/tests/e2e-test-server new/mosh-1.3.2/src/tests/e2e-test-server
--- old/mosh-1.3.0/src/tests/e2e-test-server 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/tests/e2e-test-server 2017-07-22 23:14:53.000000000 +0200
@@ -5,6 +5,29 @@
# then captures screen with `tmux capture-pane`. Captures exitstatus
# of both and returns appropriate errors.
#
+
+# If MOSH_E2E_WAIT is set, then the test will wait for another tmux
+# client to attach to the test session before starting, and will wait
+# for other tmux clients to detach before exiting.
+wait_for_clients()
+{
+ if [ -z "$MOSH_E2E_WAIT" ]; then
+ return
+ fi
+ expected=$1
+ while true; do
+ n=$(tmux list-clients -F . | wc -l)
+ if [ $expected -eq 1 ]; then
+ if [ $n -eq 1 ]; then
+ return
+ fi
+ elif [ $n -ne 1 ]; then
+ return
+ fi
+ sleep 1
+ done
+}
+
export MOSH_SERVER_PID=$PPID
if [ $# -lt 2 ]; then
@@ -26,6 +49,7 @@
printf "not running under tmux\n" >&2
exit 99
fi
+wait_for_clients 2
# run harnessed command
eval "$@"
testret=$?
@@ -37,6 +61,7 @@
# Wait for tmux client screen to become up to date.
sleep 1
printf "@@@ server complete @@@" >&2
+wait_for_clients 1
i=0
while [ $i -lt 60 ]; do
if grep -q "@@@ server complete @@@" "$testname.tmux.log"; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/tests/e2e-test-subrs new/mosh-1.3.2/src/tests/e2e-test-subrs
--- old/mosh-1.3.0/src/tests/e2e-test-subrs 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/tests/e2e-test-subrs 2017-07-22 23:14:53.000000000 +0200
@@ -10,6 +10,12 @@
exit 99
}
+skip()
+{
+ printf "$@" 2>&1
+ exit 77
+}
+
sleepf()
{
(sleep .1 || sleep 1) > /dev/null 2>&1
@@ -60,15 +66,14 @@
set_locale()
{
# Test for a usable locale.
- map=$(locale charmap 2>/dev/null)
- if [ "$map" = "utf-8" ] || [ "$map" = "UTF-8" ]; then
+ if ./is-utf8-locale 2> /dev/null; then
return 0
fi
# Attempt to find/set a usable locale.
+ unset LANG LC_CTYPE LC_COLLATE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LC_ALL
for i in en_US.UTF-8 en_US.utf8 C.UTF-8; do
- map="$(env LANG=$i locale charmap 2>/dev/null)"
- if [ "$map" = "utf-8" ] || [ "$map" = "UTF-8" ]; then
- export LANG=$i LC_ALL=''
+ if env LC_ALL=$i ./is-utf8-locale 2> /dev/null; then
+ export LC_ALL=$i
return 0
fi
done
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/tests/emulation-scroll.test new/mosh-1.3.2/src/tests/emulation-scroll.test
--- old/mosh-1.3.0/src/tests/emulation-scroll.test 1970-01-01 01:00:00.000000000 +0100
+++ new/mosh-1.3.2/src/tests/emulation-scroll.test 2017-07-22 23:14:53.000000000 +0200
@@ -0,0 +1,76 @@
+#!/bin/sh
+
+#
+# This is a regression test for a bug in Mosh: it would move the
+# cursor for the SCROLL UP and SCROLL DOWN commands, though it should
+# not.
+#
+
+# shellcheck source=e2e-test-subrs
+. "$(dirname "$0")/e2e-test-subrs"
+PATH=$PATH:.:$srcdir
+# Top-level wrapper.
+if [ $# -eq 0 ]; then
+ e2e-test "$0" baseline post
+ exit
+fi
+
+# OK, we have arguments, we're one of the test hooks.
+if [ $# -ne 1 ]; then
+ fail "bad arguments %s\n" "$@"
+fi
+
+baseline()
+{
+ # Clear
+ printf '\033[H\033[J'
+ # Fill with sample text
+ for i in $(seq 1 24); do
+ printf '\ntext %s' "$i"
+ done
+ # Scroll up 4 lines
+ printf '\033[4S'
+ # Then down 2
+ printf '\033[2T'
+
+ # The cursor should not have moved and this should print on the
+ # last line, and not overprint 'line 24'
+ printf '\rBad line'
+ # Overprint on line 24
+ printf '\033[24;1HLast line'
+ # and line 1
+ printf '\033[HFirst line\n'
+
+}
+
+post()
+{
+ local capture
+ capture="$(basename "$0").d/baseline.capture"
+ # 'Bad line' should have been overwritten
+ if grep -q '^Bad line$' "$capture"; then
+ exit 1
+ fi
+ # The first four lines should have scrolled off
+ if grep -q '^text [1-4]$' "$capture"; then
+ exit 1
+ fi
+ # The last line should not have scrolled off or been overwritten
+ if ! grep -q '^text 24$' "$capture"; then
+ exit 1
+ fi
+ # 20 lines of the original text should remain
+ if [ "$(grep -c '^text' "$capture")" -ne 20 ]; then
+ exit 1
+ fi
+ exit 0
+}
+
+case $1 in
+ baseline)
+ baseline;;
+ post)
+ post;;
+ *)
+ fail "unknown test argument %s\n" "$1";;
+esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/tests/is-utf8-locale.cc new/mosh-1.3.2/src/tests/is-utf8-locale.cc
--- old/mosh-1.3.0/src/tests/is-utf8-locale.cc 1970-01-01 01:00:00.000000000 +0100
+++ new/mosh-1.3.2/src/tests/is-utf8-locale.cc 2017-07-22 23:14:53.000000000 +0200
@@ -0,0 +1,45 @@
+/*
+ Mosh: the mobile shell
+ Copyright 2012 Keith Winstein
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ In addition, as a special exception, the copyright holders give
+ permission to link the code of portions of this program with the
+ OpenSSL library under certain conditions as described in each
+ individual source file, and distribute linked combinations including
+ the two.
+
+ You must obey the GNU General Public License in all respects for all
+ of the code used other than OpenSSL. If you modify file(s) with this
+ exception, you may extend this exception to your version of the
+ file(s), but you are not obligated to do so. If you do not wish to do
+ so, delete this exception statement from your version. If you delete
+ this exception statement from all source files in the program, then
+ also delete it here.
+*/
+
+#include <stdio.h>
+
+#include "locale_utils.h"
+
+int main( int argc __attribute__(( unused )), char **argv __attribute__(( unused )))
+{
+ set_native_locale();
+ if ( !is_utf8_locale() ) {
+ fprintf( stderr, "not a UTF-8 locale\n" );
+ return 1;
+ }
+ return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/tests/mosh-client new/mosh-1.3.2/src/tests/mosh-client
--- old/mosh-1.3.0/src/tests/mosh-client 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/tests/mosh-client 2017-07-22 23:14:53.000000000 +0200
@@ -60,11 +60,22 @@
# Tmux check.
tmux_check()
{
+ # OpenBSD tmux does not have '-V'.
+ if [ "$(uname -s)" = "OpenBSD" ]; then
+ openbsd_major="$(uname -r)"
+ openbsd_major="${openbsd_major%%.*}"
+ if [ "${openbsd_major}" -ge 6 ]; then
+ return 0
+ fi
+ fi
version=$(tmux -V)
if [ $? != 0 ]; then
error "tmux unavailable\n"
return 1
fi
+ if [ "$version" = "tmux master" ]; then
+ return 0
+ fi
version=${version##tmux }
version_major=${version%%.*}
version_minor=${version##*.}
@@ -74,7 +85,8 @@
error "tmux version %s too old\n" "$version"
return 1
fi
- return 0
+ # Finally, check that tmux actually works to some degree.
+ tmux -C new-session true
}
ssh_localhost_check()
@@ -108,10 +120,6 @@
}
# main
-if ! set_locale; then
- test_error "e2e-test: no usable locale\n"
-fi
-
# Set up environment
if [ -z "$srcdir" ]; then
export srcdir=$PWD
@@ -137,10 +145,6 @@
;;
esac
-if ! tmux_check; then
- test_skipped "tmux unavailable\n"
-fi
-
if [ $# -lt 2 ]; then
test_error "not enough args\n"
fi
@@ -153,6 +157,15 @@
test_dir=$(basename "${test_name}").d
test_script="${test_name}"
+tests_dir=$(dirname "${test_name}")
+if ! set_locale "${tests_dir}"; then
+ test_error "e2e-test: no usable locale\n"
+fi
+
+if ! tmux_check; then
+ test_skipped "tmux unavailable\n"
+fi
+
rm -rf "${test_dir}"
mkdir "${test_dir}"
@@ -230,9 +243,13 @@
# XXX tmux 1.8 requires shell command as a single arg; once we move to 2.0, undo these quotes
# XXX this ignores $TMPDIR, because it results in an overlong pathname on OS X
tmux_socket="/tmp/.tmux-mosh-test-$$"
- ${tmux_stdin} tmux -f /dev/null -S "${tmux_socket}" -C new-session "${srcdir}/print-exitstatus ${client_wrapper} ${sut} ${server_wrapper} \"${PWD}/${test_dir}/${run}\" \"${PWD}/${test_script} ${run}\"" > "${test_dir}/${run}.tmux.log"
+ ln -fs "${tmux_socket}" "${test_dir}/tmux-socket"
+ # tmux <= 2.5 ignore -x/-y, but the client sets the session to 80x24.
+ # tmux from 2017-05-27 and later should default to an 80x24 session,
+ # but do use -x/-y on control-master clients.
+ ${tmux_stdin} tmux -f /dev/null -S "${tmux_socket}" -C new-session -x 80 -y 24 "${srcdir}/print-exitstatus ${client_wrapper} ${sut} ${server_wrapper} \"${PWD}/${test_dir}/${run}\" \"${PWD}/${test_script} ${run}\"" > "${test_dir}/${run}.tmux.log"
rv=$?
- rm -f "${tmux_socket}"
+ rm -f "${tmux_socket}" "${test_dir}/tmux-socket"
if [ $rv -ne 0 ]; then
test_error "tmux failure on test %s\n" "$run"
fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/tests/mosh-server new/mosh-1.3.2/src/tests/mosh-server
--- old/mosh-1.3.0/src/tests/mosh-server 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/tests/mosh-server 2017-07-22 23:14:53.000000000 +0200
@@ -60,11 +60,22 @@
# Tmux check.
tmux_check()
{
+ # OpenBSD tmux does not have '-V'.
+ if [ "$(uname -s)" = "OpenBSD" ]; then
+ openbsd_major="$(uname -r)"
+ openbsd_major="${openbsd_major%%.*}"
+ if [ "${openbsd_major}" -ge 6 ]; then
+ return 0
+ fi
+ fi
version=$(tmux -V)
if [ $? != 0 ]; then
error "tmux unavailable\n"
return 1
fi
+ if [ "$version" = "tmux master" ]; then
+ return 0
+ fi
version=${version##tmux }
version_major=${version%%.*}
version_minor=${version##*.}
@@ -74,7 +85,8 @@
error "tmux version %s too old\n" "$version"
return 1
fi
- return 0
+ # Finally, check that tmux actually works to some degree.
+ tmux -C new-session true
}
ssh_localhost_check()
@@ -108,10 +120,6 @@
}
# main
-if ! set_locale; then
- test_error "e2e-test: no usable locale\n"
-fi
-
# Set up environment
if [ -z "$srcdir" ]; then
export srcdir=$PWD
@@ -137,10 +145,6 @@
;;
esac
-if ! tmux_check; then
- test_skipped "tmux unavailable\n"
-fi
-
if [ $# -lt 2 ]; then
test_error "not enough args\n"
fi
@@ -153,6 +157,15 @@
test_dir=$(basename "${test_name}").d
test_script="${test_name}"
+tests_dir=$(dirname "${test_name}")
+if ! set_locale "${tests_dir}"; then
+ test_error "e2e-test: no usable locale\n"
+fi
+
+if ! tmux_check; then
+ test_skipped "tmux unavailable\n"
+fi
+
rm -rf "${test_dir}"
mkdir "${test_dir}"
@@ -230,9 +243,13 @@
# XXX tmux 1.8 requires shell command as a single arg; once we move to 2.0, undo these quotes
# XXX this ignores $TMPDIR, because it results in an overlong pathname on OS X
tmux_socket="/tmp/.tmux-mosh-test-$$"
- ${tmux_stdin} tmux -f /dev/null -S "${tmux_socket}" -C new-session "${srcdir}/print-exitstatus ${client_wrapper} ${sut} ${server_wrapper} \"${PWD}/${test_dir}/${run}\" \"${PWD}/${test_script} ${run}\"" > "${test_dir}/${run}.tmux.log"
+ ln -fs "${tmux_socket}" "${test_dir}/tmux-socket"
+ # tmux <= 2.5 ignore -x/-y, but the client sets the session to 80x24.
+ # tmux from 2017-05-27 and later should default to an 80x24 session,
+ # but do use -x/-y on control-master clients.
+ ${tmux_stdin} tmux -f /dev/null -S "${tmux_socket}" -C new-session -x 80 -y 24 "${srcdir}/print-exitstatus ${client_wrapper} ${sut} ${server_wrapper} \"${PWD}/${test_dir}/${run}\" \"${PWD}/${test_script} ${run}\"" > "${test_dir}/${run}.tmux.log"
rv=$?
- rm -f "${tmux_socket}"
+ rm -f "${tmux_socket}" "${test_dir}/tmux-socket"
if [ $rv -ne 0 ]; then
test_error "tmux failure on test %s\n" "$run"
fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/tests/unicode-later-combining.test new/mosh-1.3.2/src/tests/unicode-later-combining.test
--- old/mosh-1.3.0/src/tests/unicode-later-combining.test 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/tests/unicode-later-combining.test 2017-07-22 23:14:53.000000000 +0200
@@ -37,6 +37,9 @@
post()
{
export LANG=C
+ if [ "$(tmux -V)" = "tmux 2.4" ]; then
+ skip "tmux 2.4 unicode combining bug breaks this test\n"
+ fi
if grep -q "$(printf '^\302\240\314\202$')" "$(basename "$0").d/baseline.capture"; then
exit 0
fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/util/Makefile.in new/mosh-1.3.2/src/util/Makefile.in
--- old/mosh-1.3.0/src/util/Makefile.in 2017-03-26 21:04:59.000000000 +0200
+++ new/mosh-1.3.2/src/util/Makefile.in 2017-07-22 23:15:12.000000000 +0200
@@ -223,7 +223,6 @@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LIBUTIL = @LIBUTIL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MISC_CXXFLAGS = @MISC_CXXFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosh-1.3.0/src/util/locale_utils.cc new/mosh-1.3.2/src/util/locale_utils.cc
--- old/mosh-1.3.0/src/util/locale_utils.cc 2017-03-26 21:04:29.000000000 +0200
+++ new/mosh-1.3.2/src/util/locale_utils.cc 2017-07-22 23:14:53.000000000 +0200
@@ -88,9 +88,9 @@
/* Verify locale calls for UTF-8 */
if ( strcmp( locale_charset(), "UTF-8" ) != 0 &&
strcmp( locale_charset(), "utf-8" ) != 0 ) {
- return 0;
+ return false;
}
- return 1;
+ return true;
}
void set_native_locale( void ) {
1
0
Hello community,
here is the log from the commit of package dmenu for openSUSE:Factory checked in at 2017-07-28 09:48:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dmenu (Old)
and /work/SRC/openSUSE:Factory/.dmenu.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dmenu"
Fri Jul 28 09:48:06 2017 rev:8 rq:512768 version:4.7
Changes:
--------
--- /work/SRC/openSUSE:Factory/dmenu/dmenu.changes 2015-11-10 10:04:03.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.dmenu.new/dmenu.changes 2017-07-28 09:48:08.284077611 +0200
@@ -1,0 +2,7 @@
+Wed Jul 26 10:12:54 UTC 2017 - sleep_walker(a)opensuse.org
+
+- bump to 4.7
+ for complete list of changes see
+ see http://git.suckless.org/dmenu/log/?h=4.7&qt=range&q=4.6..4.7
+
+-------------------------------------------------------------------
Old:
----
dmenu-4.6.tar.gz
New:
----
dmenu-4.7.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ dmenu.spec ++++++
--- /var/tmp/diff_new_pack.fJPWsV/_old 2017-07-28 09:48:08.772008881 +0200
+++ /var/tmp/diff_new_pack.fJPWsV/_new 2017-07-28 09:48:08.776008318 +0200
@@ -1,7 +1,7 @@
#
# spec file for package dmenu
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: dmenu
-Version: 4.6
+Version: 4.7
Release: 0
Summary: A generic and efficient menu for X
License: MIT
++++++ dmenu-4.6.tar.gz -> dmenu-4.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmenu-4.6/arg.h new/dmenu-4.7/arg.h
--- old/dmenu-4.6/arg.h 2015-11-08 23:42:21.000000000 +0100
+++ new/dmenu-4.7/arg.h 2017-05-02 18:36:47.000000000 +0200
@@ -10,8 +10,8 @@
/* use main(int argc, char *argv[]) */
#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\
- argv[0] && argv[0][1]\
- && argv[0][0] == '-';\
+ argv[0] && argv[0][0] == '-'\
+ && argv[0][1];\
argc--, argv++) {\
char argc_;\
char **argv_;\
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmenu-4.6/config.def.h new/dmenu-4.7/config.def.h
--- old/dmenu-4.6/config.def.h 2015-11-08 23:42:21.000000000 +0100
+++ new/dmenu-4.7/config.def.h 2017-05-02 18:36:47.000000000 +0200
@@ -6,12 +6,18 @@
static const char *fonts[] = {
"monospace:size=10"
};
-static const char *prompt = NULL; /* -p option; prompt to the elft of input field */
-static const char *normbgcolor = "#222222"; /* -nb option; normal background */
-static const char *normfgcolor = "#bbbbbb"; /* -nf option; normal foreground */
-static const char *selbgcolor = "#005577"; /* -sb option; selected background */
-static const char *selfgcolor = "#eeeeee"; /* -sf option; selected foreground */
-static const char *outbgcolor = "#00ffff";
-static const char *outfgcolor = "#000000";
+static const char *prompt = NULL; /* -p option; prompt to the left of input field */
+static const char *colors[SchemeLast][2] = {
+ /* fg bg */
+ [SchemeNorm] = { "#bbbbbb", "#222222" },
+ [SchemeSel] = { "#eeeeee", "#005577" },
+ [SchemeOut] = { "#000000", "#00ffff" },
+};
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
static unsigned int lines = 0;
+
+/*
+ * Characters not considered part of a word while deleting words
+ * for example: " /?\"&[]"
+ */
+static const char worddelimiters[] = " ";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmenu-4.6/config.mk new/dmenu-4.7/config.mk
--- old/dmenu-4.6/config.mk 2015-11-08 23:42:21.000000000 +0100
+++ new/dmenu-4.7/config.mk 2017-05-02 18:36:47.000000000 +0200
@@ -1,5 +1,5 @@
# dmenu version
-VERSION = 4.6
+VERSION = 4.7
# paths
PREFIX = /usr/local
@@ -16,14 +16,14 @@
FREETYPELIBS = -lfontconfig -lXft
FREETYPEINC = /usr/include/freetype2
# OpenBSD (uncomment)
-FREETYPEINC = ${X11INC}/freetype2
+#FREETYPEINC = ${X11INC}/freetype2
# includes and libs
INCS = -I${X11INC} -I${FREETYPEINC}
LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS}
# flags
-CPPFLAGS = -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
+CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
LDFLAGS = -s ${LIBS}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmenu-4.6/dmenu.1 new/dmenu-4.7/dmenu.1
--- old/dmenu-4.6/dmenu.1 2015-11-08 23:42:21.000000000 +0100
+++ new/dmenu-4.7/dmenu.1 2017-05-02 18:36:47.000000000 +0200
@@ -3,13 +3,11 @@
dmenu \- dynamic menu
.SH SYNOPSIS
.B dmenu
-.RB [ \-b ]
-.RB [ \-f ]
-.RB [ \-i ]
+.RB [ \-bfiv ]
.RB [ \-l
+.IR lines ]
.RB [ \-m
.IR monitor ]
-.IR lines ]
.RB [ \-p
.IR prompt ]
.RB [ \-fn
@@ -22,7 +20,8 @@
.IR color ]
.RB [ \-sf
.IR color ]
-.RB [ \-v ]
+.RB [ \-w
+.IR windowid ]
.P
.BR dmenu_run " ..."
.SH DESCRIPTION
@@ -78,6 +77,9 @@
.TP
.B \-v
prints version information to stdout, then exits.
+.TP
+.BI \-w " windowid"
+embed into windowid.
.SH USAGE
dmenu is completely controlled by the keyboard. Items are selected using the
arrow keys, page up, page down, home, and end.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmenu-4.6/dmenu.c new/dmenu-4.7/dmenu.c
--- old/dmenu-4.6/dmenu.c 2015-11-08 23:42:21.000000000 +0100
+++ new/dmenu-4.7/dmenu.c 2017-05-02 18:36:47.000000000 +0200
@@ -22,8 +22,7 @@
#define INTERSECT(x,y,w,h,r) (MAX(0, MIN((x)+(w),(r).x_org+(r).width) - MAX((x),(r).x_org)) \
* MAX(0, MIN((y)+(h),(r).y_org+(r).height) - MAX((y),(r).y_org)))
#define LENGTH(X) (sizeof X / sizeof X[0])
-#define TEXTNW(X,N) (drw_font_getexts_width(drw->fonts[0], (X), (N)))
-#define TEXTW(X) (drw_text(drw, 0, 0, 0, 0, (X), 0) + drw->fonts[0]->h)
+#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
/* enums */
enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */
@@ -35,9 +34,10 @@
};
static char text[BUFSIZ] = "";
+static char *embed;
static int bh, mw, mh;
-static int sw, sh; /* X display screen geometry width, height */
-static int inputw, promptw;
+static int inputw = 0, promptw;
+static int lrpad; /* sum of left and right padding */
static size_t cursor;
static struct item *items = NULL;
static struct item *matches, *matchend;
@@ -46,11 +46,11 @@
static Atom clip, utf8;
static Display *dpy;
-static Window root, win;
+static Window root, parentwin, win;
static XIC xic;
-static ClrScheme scheme[SchemeLast];
static Drw *drw;
+static Clr *scheme[SchemeLast];
#include "config.h"
@@ -94,10 +94,8 @@
size_t i;
XUngrabKey(dpy, AnyKey, AnyModifier, root);
- for (i = 0; i < SchemeLast; i++) {
- drw_clr_free(scheme[i].bg);
- drw_clr_free(scheme[i].fg);
- }
+ for (i = 0; i < SchemeLast; i++)
+ free(scheme[i]);
drw_free(drw);
XSync(dpy, False);
XCloseDisplay(dpy);
@@ -114,89 +112,101 @@
return NULL;
}
+static int
+drawitem(struct item *item, int x, int y, int w)
+{
+ if (item == sel)
+ drw_setscheme(drw, scheme[SchemeSel]);
+ else if (item->out)
+ drw_setscheme(drw, scheme[SchemeOut]);
+ else
+ drw_setscheme(drw, scheme[SchemeNorm]);
+
+ return drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
+}
+
static void
drawmenu(void)
{
- int curpos;
+ unsigned int curpos;
struct item *item;
- int x = 0, y = 0, h = bh, w;
+ int x = 0, y = 0, w;
- drw_setscheme(drw, &scheme[SchemeNorm]);
- drw_rect(drw, 0, 0, mw, mh, 1, 1, 1);
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ drw_rect(drw, 0, 0, mw, mh, 1, 1);
if (prompt && *prompt) {
- drw_setscheme(drw, &scheme[SchemeSel]);
- drw_text(drw, x, 0, promptw, bh, prompt, 0);
- x += promptw;
+ drw_setscheme(drw, scheme[SchemeSel]);
+ x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0);
}
/* draw input field */
w = (lines > 0 || !matches) ? mw - x : inputw;
- drw_setscheme(drw, &scheme[SchemeNorm]);
- drw_text(drw, x, 0, w, bh, text, 0);
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
- if ((curpos = TEXTNW(text, cursor) + bh / 2 - 2) < w) {
- drw_setscheme(drw, &scheme[SchemeNorm]);
- drw_rect(drw, x + curpos + 2, 2, 1, bh - 4, 1, 1, 0);
+ drw_font_getexts(drw->fonts, text, cursor, &curpos, NULL);
+ if ((curpos += lrpad / 2 - 1) < w) {
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0);
}
if (lines > 0) {
/* draw vertical list */
- w = mw - x;
- for (item = curr; item != next; item = item->right) {
- y += h;
- if (item == sel)
- drw_setscheme(drw, &scheme[SchemeSel]);
- else if (item->out)
- drw_setscheme(drw, &scheme[SchemeOut]);
- else
- drw_setscheme(drw, &scheme[SchemeNorm]);
-
- drw_text(drw, x, y, w, bh, item->text, 0);
- }
+ for (item = curr; item != next; item = item->right)
+ drawitem(item, x, y += bh, mw - x);
} else if (matches) {
/* draw horizontal list */
x += inputw;
w = TEXTW("<");
if (curr->left) {
- drw_setscheme(drw, &scheme[SchemeNorm]);
- drw_text(drw, x, 0, w, bh, "<", 0);
- }
- for (item = curr; item != next; item = item->right) {
- x += w;
- w = MIN(TEXTW(item->text), mw - x - TEXTW(">"));
-
- if (item == sel)
- drw_setscheme(drw, &scheme[SchemeSel]);
- else if (item->out)
- drw_setscheme(drw, &scheme[SchemeOut]);
- else
- drw_setscheme(drw, &scheme[SchemeNorm]);
- drw_text(drw, x, 0, w, bh, item->text, 0);
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, lrpad / 2, "<", 0);
}
- w = TEXTW(">");
- x = mw - w;
+ x += w;
+ for (item = curr; item != next; item = item->right)
+ x = drawitem(item, x, 0, MIN(TEXTW(item->text), mw - x - TEXTW(">")));
if (next) {
- drw_setscheme(drw, &scheme[SchemeNorm]);
- drw_text(drw, x, 0, w, bh, ">", 0);
+ w = TEXTW(">");
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0);
}
}
drw_map(drw, win, 0, 0, mw, mh);
}
static void
+grabfocus(void)
+{
+ struct timespec ts = { .tv_sec = 0, .tv_nsec = 10000000 };
+ Window focuswin;
+ int i, revertwin;
+
+ for (i = 0; i < 100; ++i) {
+ XGetInputFocus(dpy, &focuswin, &revertwin);
+ if (focuswin == win)
+ return;
+ XSetInputFocus(dpy, win, RevertToParent, CurrentTime);
+ nanosleep(&ts, NULL);
+ }
+ die("cannot grab focus");
+}
+
+static void
grabkeyboard(void)
{
struct timespec ts = { .tv_sec = 0, .tv_nsec = 1000000 };
int i;
+ if (embed)
+ return;
/* try to grab keyboard, we may have to wait for another process to ungrab */
for (i = 0; i < 1000; i++) {
- if (XGrabKeyboard(dpy, DefaultRootWindow(dpy), True,
- GrabModeAsync, GrabModeAsync, CurrentTime) == GrabSuccess)
+ if (XGrabKeyboard(dpy, DefaultRootWindow(dpy), True, GrabModeAsync,
+ GrabModeAsync, CurrentTime) == GrabSuccess)
return;
nanosleep(&ts, NULL);
}
- die("cannot grab keyboard\n");
+ die("cannot grab keyboard");
}
static void
@@ -214,11 +224,11 @@
/* separate input text into tokens to be matched individually */
for (s = strtok(buf, " "); s; tokv[tokc - 1] = s, s = strtok(NULL, " "))
if (++tokc > tokn && !(tokv = realloc(tokv, ++tokn * sizeof *tokv)))
- die("cannot realloc %u bytes\n", tokn * sizeof *tokv);
+ die("cannot realloc %u bytes:", tokn * sizeof *tokv);
len = tokc ? strlen(tokv[0]) : 0;
matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL;
- textsize = strlen(text);
+ textsize = strlen(text) + 1;
for (item = items; item && item->text; item++) {
for (i = 0; i < tokc; i++)
if (!fstrstr(item->text, tokv[i]))
@@ -314,9 +324,9 @@
insert(NULL, 0 - cursor);
break;
case XK_w: /* delete word */
- while (cursor > 0 && text[nextrune(-1)] == ' ')
+ while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)]))
insert(NULL, nextrune(-1) - cursor);
- while (cursor > 0 && text[nextrune(-1)] != ' ')
+ while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)]))
insert(NULL, nextrune(-1) - cursor);
break;
case XK_y: /* paste selection */
@@ -467,8 +477,9 @@
static void
readstdin(void)
{
- char buf[sizeof text], *p, *maxstr = NULL;
- size_t i, max = 0, size = 0;
+ char buf[sizeof text], *p;
+ size_t i, imax = 0, size = 0;
+ unsigned int tmpmax = 0;
/* read each line from stdin and add it to the item list */
for (i = 0; fgets(buf, sizeof buf, stdin); i++) {
@@ -480,12 +491,15 @@
if (!(items[i].text = strdup(buf)))
die("cannot strdup %u bytes:", strlen(buf) + 1);
items[i].out = 0;
- if (strlen(items[i].text) > max)
- max = strlen(maxstr = items[i].text);
+ drw_font_getexts(drw->fonts, buf, strlen(buf), &tmpmax, NULL);
+ if (tmpmax > inputw) {
+ inputw = tmpmax;
+ imax = i;
+ }
}
if (items)
items[i].text = NULL;
- inputw = maxstr ? TEXTW(maxstr) : 0;
+ inputw = items ? TEXTW(items[imax].text) : 0;
lines = MIN(lines, i);
}
@@ -502,6 +516,11 @@
if (ev.xexpose.count == 0)
drw_map(drw, win, 0, 0, mw, mh);
break;
+ case FocusIn:
+ /* regrab focus from parent window */
+ if (ev.xfocus.window != win)
+ grabfocus();
+ break;
case KeyPress:
keypress(&ev.xkey);
break;
@@ -520,36 +539,34 @@
static void
setup(void)
{
- int x, y;
+ int x, y, i = 0;
+ unsigned int du;
XSetWindowAttributes swa;
XIM xim;
+ Window w, dw, *dws;
+ XWindowAttributes wa;
#ifdef XINERAMA
XineramaScreenInfo *info;
- Window w, pw, dw, *dws;
- XWindowAttributes wa;
- int a, j, di, n, i = 0, area = 0;
- unsigned int du;
+ Window pw;
+ int a, j, di, n, area = 0;
#endif
/* init appearance */
- scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
- scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
- scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
- scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
- scheme[SchemeOut].bg = drw_clr_create(drw, outbgcolor);
- scheme[SchemeOut].fg = drw_clr_create(drw, outfgcolor);
+ scheme[SchemeNorm] = drw_scm_create(drw, colors[SchemeNorm], 2);
+ scheme[SchemeSel] = drw_scm_create(drw, colors[SchemeSel], 2);
+ scheme[SchemeOut] = drw_scm_create(drw, colors[SchemeOut], 2);
clip = XInternAtom(dpy, "CLIPBOARD", False);
utf8 = XInternAtom(dpy, "UTF8_STRING", False);
/* calculate menu geometry */
- bh = drw->fonts[0]->h + 2;
+ bh = drw->fonts->h + 2;
lines = MAX(lines, 0);
mh = (lines + 1) * bh;
#ifdef XINERAMA
- if ((info = XineramaQueryScreens(dpy, &n))) {
+ if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
XGetInputFocus(dpy, &w, &di);
- if (mon != -1 && mon < n)
+ if (mon >= 0 && mon < n)
i = mon;
else if (w != root && w != PointerRoot && w != None) {
/* find top-level window containing current input focus */
@@ -566,7 +583,7 @@
}
}
/* no focused window is on screen, so use pointer location instead */
- if (mon == -1 && !area && XQueryPointer(dpy, root, &dw, &dw, &x, &y, &di, &di, &du))
+ if (mon < 0 && !area && XQueryPointer(dpy, root, &dw, &dw, &x, &y, &di, &di, &du))
for (i = 0; i < n; i++)
if (INTERSECT(x, y, 1, 1, info[i]))
break;
@@ -578,21 +595,23 @@
} else
#endif
{
+ if (!XGetWindowAttributes(dpy, parentwin, &wa))
+ die("could not get embedding window attributes: 0x%lx",
+ parentwin);
x = 0;
- y = topbar ? 0 : sh - mh;
- mw = sw;
+ y = topbar ? 0 : wa.height - mh;
+ mw = wa.width;
}
- promptw = (prompt && *prompt) ? TEXTW(prompt) : 0;
+ promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
inputw = MIN(inputw, mw/3);
match();
/* create menu window */
swa.override_redirect = True;
- swa.background_pixel = scheme[SchemeNorm].bg->pix;
+ swa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask;
- win = XCreateWindow(dpy, root, x, y, mw, mh, 0,
- DefaultDepth(dpy, screen), CopyFromParent,
- DefaultVisual(dpy, screen),
+ win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0,
+ CopyFromParent, CopyFromParent, CopyFromParent,
CWOverrideRedirect | CWBackPixel | CWEventMask, &swa);
/* open input methods */
@@ -601,6 +620,15 @@
XNClientWindow, win, XNFocusWindow, win, NULL);
XMapRaised(dpy, win);
+ if (embed) {
+ XSelectInput(dpy, parentwin, FocusChangeMask);
+ if (XQueryTree(dpy, parentwin, &dw, &w, &dws, &du) && dws) {
+ for (i = 0; i < du && dws[i] != win; ++i)
+ XSelectInput(dpy, dws[i], FocusChangeMask);
+ XFree(dws);
+ }
+ grabfocus();
+ }
drw_resize(drw, mw, mh);
drawmenu();
}
@@ -608,14 +636,15 @@
static void
usage(void)
{
- fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
- " [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr);
+ fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
+ " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr);
exit(1);
}
int
main(int argc, char *argv[])
{
+ XWindowAttributes wa;
int i, fast = 0;
for (i = 1; i < argc; i++)
@@ -642,29 +671,33 @@
else if (!strcmp(argv[i], "-fn")) /* font or font set */
fonts[0] = argv[++i];
else if (!strcmp(argv[i], "-nb")) /* normal background color */
- normbgcolor = argv[++i];
+ colors[SchemeNorm][ColBg] = argv[++i];
else if (!strcmp(argv[i], "-nf")) /* normal foreground color */
- normfgcolor = argv[++i];
+ colors[SchemeNorm][ColFg] = argv[++i];
else if (!strcmp(argv[i], "-sb")) /* selected background color */
- selbgcolor = argv[++i];
+ colors[SchemeSel][ColBg] = argv[++i];
else if (!strcmp(argv[i], "-sf")) /* selected foreground color */
- selfgcolor = argv[++i];
+ colors[SchemeSel][ColFg] = argv[++i];
+ else if (!strcmp(argv[i], "-w")) /* embedding window id */
+ embed = argv[++i];
else
usage();
if (!setlocale(LC_CTYPE, "") || !XSupportsLocale())
fputs("warning: no locale support\n", stderr);
if (!(dpy = XOpenDisplay(NULL)))
- die("cannot open display\n");
+ die("cannot open display");
screen = DefaultScreen(dpy);
root = RootWindow(dpy, screen);
- sw = DisplayWidth(dpy, screen);
- sh = DisplayHeight(dpy, screen);
- drw = drw_create(dpy, screen, root, sw, sh);
- drw_load_fonts(drw, fonts, LENGTH(fonts));
- if (!drw->fontcount)
- die("no fonts could be loaded.\n");
- drw_setscheme(drw, &scheme[SchemeNorm]);
+ if (!embed || !(parentwin = strtol(embed, NULL, 0)))
+ parentwin = root;
+ if (!XGetWindowAttributes(dpy, parentwin, &wa))
+ die("could not get embedding window attributes: 0x%lx",
+ parentwin);
+ drw = drw_create(dpy, screen, root, wa.width, wa.height);
+ if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
+ die("no fonts could be loaded.");
+ lrpad = drw->fonts->h;
if (fast) {
grabkeyboard();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmenu-4.6/drw.c new/dmenu-4.7/drw.c
--- old/dmenu-4.6/drw.c 2015-11-08 23:42:21.000000000 +0100
+++ new/dmenu-4.7/drw.c 2017-05-02 18:36:47.000000000 +0200
@@ -63,9 +63,8 @@
Drw *
drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h)
{
- Drw *drw;
+ Drw *drw = ecalloc(1, sizeof(Drw));
- drw = ecalloc(1, sizeof(Drw));
drw->dpy = dpy;
drw->screen = screen;
drw->root = root;
@@ -73,7 +72,6 @@
drw->h = h;
drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen));
drw->gc = XCreateGC(dpy, root, 0, NULL);
- drw->fontcount = 0;
XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
return drw;
@@ -82,6 +80,9 @@
void
drw_resize(Drw *drw, unsigned int w, unsigned int h)
{
+ if (!drw)
+ return;
+
drw->w = w;
drw->h = h;
if (drw->drawable)
@@ -92,142 +93,157 @@
void
drw_free(Drw *drw)
{
- size_t i;
-
- for (i = 0; i < drw->fontcount; i++)
- drw_font_free(drw->fonts[i]);
XFreePixmap(drw->dpy, drw->drawable);
XFreeGC(drw->dpy, drw->gc);
free(drw);
}
/* This function is an implementation detail. Library users should use
- * drw_font_create instead.
+ * drw_fontset_create instead.
*/
static Fnt *
-drw_font_xcreate(Drw *drw, const char *fontname, FcPattern *fontpattern)
+xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
{
Fnt *font;
XftFont *xfont = NULL;
FcPattern *pattern = NULL;
if (fontname) {
- /* Using the pattern found at font->xfont->pattern does not yield same
- * the same substitution results as using the pattern returned by
+ /* Using the pattern found at font->xfont->pattern does not yield the
+ * same substitution results as using the pattern returned by
* FcNameParse; using the latter results in the desired fallback
- * behaviour whereas the former just results in
- * missing-character-rectangles being drawn, at least with some fonts.
- */
+ * behaviour whereas the former just results in missing-character
+ * rectangles being drawn, at least with some fonts. */
if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fontname))) {
- fprintf(stderr, "error, cannot load font: '%s'\n", fontname);
+ fprintf(stderr, "error, cannot load font from name: '%s'\n", fontname);
return NULL;
}
if (!(pattern = FcNameParse((FcChar8 *) fontname))) {
- fprintf(stderr, "error, cannot load font: '%s'\n", fontname);
+ fprintf(stderr, "error, cannot parse font name to pattern: '%s'\n", fontname);
XftFontClose(drw->dpy, xfont);
return NULL;
}
} else if (fontpattern) {
if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern))) {
- fprintf(stderr, "error, cannot load font pattern.\n");
+ fprintf(stderr, "error, cannot load font from pattern.\n");
return NULL;
}
} else {
- die("no font specified.\n");
+ die("no font specified.");
}
font = ecalloc(1, sizeof(Fnt));
font->xfont = xfont;
font->pattern = pattern;
- font->ascent = xfont->ascent;
- font->descent = xfont->descent;
- font->h = font->ascent + font->descent;
+ font->h = xfont->ascent + xfont->descent;
font->dpy = drw->dpy;
return font;
}
-Fnt*
-drw_font_create(Drw *drw, const char *fontname)
+static void
+xfont_free(Fnt *font)
{
- return drw_font_xcreate(drw, fontname, NULL);
+ if (!font)
+ return;
+ if (font->pattern)
+ FcPatternDestroy(font->pattern);
+ XftFontClose(font->dpy, font->xfont);
+ free(font);
}
-void
-drw_load_fonts(Drw* drw, const char *fonts[], size_t fontcount)
+Fnt*
+drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount)
{
+ Fnt *cur, *ret = NULL;
size_t i;
- Fnt *font;
- for (i = 0; i < fontcount; i++) {
- if (drw->fontcount >= DRW_FONT_CACHE_SIZE) {
- die("Font cache exhausted.\n");
- } else if ((font = drw_font_xcreate(drw, fonts[i], NULL))) {
- drw->fonts[drw->fontcount++] = font;
+ if (!drw || !fonts)
+ return NULL;
+
+ for (i = 1; i <= fontcount; i++) {
+ if ((cur = xfont_create(drw, fonts[fontcount - i], NULL))) {
+ cur->next = ret;
+ ret = cur;
}
}
+ return (drw->fonts = ret);
}
void
-drw_font_free(Fnt *font)
+drw_fontset_free(Fnt *font)
{
- if (!font)
- return;
- if (font->pattern)
- FcPatternDestroy(font->pattern);
- XftFontClose(font->dpy, font->xfont);
- free(font);
+ if (font) {
+ drw_fontset_free(font->next);
+ xfont_free(font);
+ }
}
-Clr *
-drw_clr_create(Drw *drw, const char *clrname)
+void
+drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
{
- Clr *clr;
+ if (!drw || !dest || !clrname)
+ return;
- clr = ecalloc(1, sizeof(Clr));
if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen),
- clrname, &clr->rgb))
- die("error, cannot allocate color '%s'\n", clrname);
- clr->pix = clr->rgb.pixel;
+ clrname, dest))
+ die("error, cannot allocate color '%s'", clrname);
+}
+
+/* Wrapper to create color schemes. The caller has to call free(3) on the
+ * returned color scheme when done using it. */
+Clr *
+drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
+{
+ size_t i;
+ Clr *ret;
- return clr;
+ /* need at least two colors for a scheme */
+ if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor))))
+ return NULL;
+
+ for (i = 0; i < clrcount; i++)
+ drw_clr_create(drw, &ret[i], clrnames[i]);
+ return ret;
}
void
-drw_clr_free(Clr *clr)
+drw_setfontset(Drw *drw, Fnt *set)
{
- free(clr);
+ if (drw)
+ drw->fonts = set;
}
void
-drw_setscheme(Drw *drw, ClrScheme *scheme)
+drw_setscheme(Drw *drw, Clr *scm)
{
- drw->scheme = scheme;
+ if (drw)
+ drw->scheme = scm;
}
void
-drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty, int invert)
+drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert)
{
- if (!drw->scheme)
+ if (!drw || !drw->scheme)
return;
- XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme->bg->pix : drw->scheme->fg->pix);
+ XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme[ColBg].pixel : drw->scheme[ColFg].pixel);
if (filled)
- XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w + 1, h + 1);
- else if (empty)
- XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
+ XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
+ else
+ XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1);
}
int
-drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int invert)
+drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert)
{
char buf[1024];
- int tx, ty, th;
- Extnts tex;
+ int ty;
+ unsigned int ew;
XftDraw *d = NULL;
- Fnt *curfont, *nextfont;
+ Fnt *usedfont, *curfont, *nextfont;
size_t i, len;
- int utf8strlen, utf8charlen, render;
+ int utf8strlen, utf8charlen, render = x || y || w || h;
long utf8codepoint = 0;
const char *utf8str;
FcCharSet *fccharset;
@@ -236,66 +252,67 @@
XftResult result;
int charexists = 0;
- if (!drw->scheme || !drw->fontcount)
+ if (!drw || (render && !drw->scheme) || !text || !drw->fonts)
return 0;
- if (!(render = x || y || w || h)) {
+ if (!render) {
w = ~w;
} else {
- XSetForeground(drw->dpy, drw->gc, invert ?
- drw->scheme->fg->pix : drw->scheme->bg->pix);
+ XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
d = XftDrawCreate(drw->dpy, drw->drawable,
DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen));
+ x += lpad;
+ w -= lpad;
}
- curfont = drw->fonts[0];
+ usedfont = drw->fonts;
while (1) {
utf8strlen = 0;
utf8str = text;
nextfont = NULL;
while (*text) {
utf8charlen = utf8decode(text, &utf8codepoint, UTF_SIZ);
- for (i = 0; i < drw->fontcount; i++) {
- charexists = charexists || XftCharExists(drw->dpy, drw->fonts[i]->xfont, utf8codepoint);
+ for (curfont = drw->fonts; curfont; curfont = curfont->next) {
+ charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint);
if (charexists) {
- if (drw->fonts[i] == curfont) {
+ if (curfont == usedfont) {
utf8strlen += utf8charlen;
text += utf8charlen;
} else {
- nextfont = drw->fonts[i];
+ nextfont = curfont;
}
break;
}
}
- if (!charexists || (nextfont && nextfont != curfont))
+ if (!charexists || nextfont)
break;
else
charexists = 0;
}
if (utf8strlen) {
- drw_font_getexts(curfont, utf8str, utf8strlen, &tex);
+ drw_font_getexts(usedfont, utf8str, utf8strlen, &ew, NULL);
/* shorten text if necessary */
- for (len = MIN(utf8strlen, (sizeof buf) - 1); len && (tex.w > w - drw->fonts[0]->h || w < drw->fonts[0]->h); len--)
- drw_font_getexts(curfont, utf8str, len, &tex);
+ for (len = MIN(utf8strlen, sizeof(buf) - 1); len && ew > w; len--)
+ drw_font_getexts(usedfont, utf8str, len, &ew, NULL);
if (len) {
memcpy(buf, utf8str, len);
buf[len] = '\0';
if (len < utf8strlen)
- for (i = len; i && i > len - 3; buf[--i] = '.');
+ for (i = len; i && i > len - 3; buf[--i] = '.')
+ ; /* NOP */
if (render) {
- th = curfont->ascent + curfont->descent;
- ty = y + (h / 2) - (th / 2) + curfont->ascent;
- tx = x + (h / 2);
- XftDrawStringUtf8(d, invert ? &drw->scheme->bg->rgb : &drw->scheme->fg->rgb, curfont->xfont, tx, ty, (XftChar8 *)buf, len);
+ ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent;
+ XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg],
+ usedfont->xfont, x, ty, (XftChar8 *)buf, len);
}
- x += tex.w;
- w -= tex.w;
+ x += ew;
+ w -= ew;
}
}
@@ -303,26 +320,21 @@
break;
} else if (nextfont) {
charexists = 0;
- curfont = nextfont;
+ usedfont = nextfont;
} else {
/* Regardless of whether or not a fallback font is found, the
- * character must be drawn.
- */
+ * character must be drawn. */
charexists = 1;
- if (drw->fontcount >= DRW_FONT_CACHE_SIZE)
- continue;
-
fccharset = FcCharSetCreate();
FcCharSetAddChar(fccharset, utf8codepoint);
- if (!drw->fonts[0]->pattern) {
- /* Refer to the comment in drw_font_xcreate for more
- * information. */
- die("the first font in the cache must be loaded from a font string.\n");
+ if (!drw->fonts->pattern) {
+ /* Refer to the comment in xfont_create for more information. */
+ die("the first font in the cache must be loaded from a font string.");
}
- fcpattern = FcPatternDuplicate(drw->fonts[0]->pattern);
+ fcpattern = FcPatternDuplicate(drw->fonts->pattern);
FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset);
FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue);
@@ -334,12 +346,14 @@
FcPatternDestroy(fcpattern);
if (match) {
- curfont = drw_font_xcreate(drw, NULL, match);
- if (curfont && XftCharExists(drw->dpy, curfont->xfont, utf8codepoint)) {
- drw->fonts[drw->fontcount++] = curfont;
+ usedfont = xfont_create(drw, NULL, match);
+ if (usedfont && XftCharExists(drw->dpy, usedfont->xfont, utf8codepoint)) {
+ for (curfont = drw->fonts; curfont->next; curfont = curfont->next)
+ ; /* NOP */
+ curfont->next = usedfont;
} else {
- drw_font_free(curfont);
- curfont = drw->fonts[0];
+ xfont_free(usedfont);
+ usedfont = drw->fonts;
}
}
}
@@ -347,34 +361,40 @@
if (d)
XftDrawDestroy(d);
- return x;
+ return x + (render ? w : 0);
}
void
drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h)
{
+ if (!drw)
+ return;
+
XCopyArea(drw->dpy, drw->drawable, win, drw->gc, x, y, w, h, x, y);
XSync(drw->dpy, False);
}
-void
-drw_font_getexts(Fnt *font, const char *text, unsigned int len, Extnts *tex)
+unsigned int
+drw_fontset_getwidth(Drw *drw, const char *text)
{
- XGlyphInfo ext;
-
- XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *)text, len, &ext);
- tex->h = font->h;
- tex->w = ext.xOff;
+ if (!drw || !drw->fonts || !text)
+ return 0;
+ return drw_text(drw, 0, 0, 0, 0, 0, text, 0);
}
-unsigned int
-drw_font_getexts_width(Fnt *font, const char *text, unsigned int len)
+void
+drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h)
{
- Extnts tex;
+ XGlyphInfo ext;
- drw_font_getexts(font, text, len, &tex);
+ if (!font || !text)
+ return;
- return tex.w;
+ XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *)text, len, &ext);
+ if (w)
+ *w = ext.xOff;
+ if (h)
+ *h = font->h;
}
Cur *
@@ -382,7 +402,9 @@
{
Cur *cur;
- cur = ecalloc(1, sizeof(Cur));
+ if (!drw || !(cur = ecalloc(1, sizeof(Cur))))
+ return NULL;
+
cur->cursor = XCreateFontCursor(drw->dpy, shape);
return cur;
@@ -393,6 +415,7 @@
{
if (!cursor)
return;
+
XFreeCursor(drw->dpy, cursor->cursor);
free(cursor);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmenu-4.6/drw.h new/dmenu-4.7/drw.h
--- old/dmenu-4.6/drw.h 2015-11-08 23:42:21.000000000 +0100
+++ new/dmenu-4.7/drw.h 2017-05-02 18:36:47.000000000 +0200
@@ -1,29 +1,19 @@
/* See LICENSE file for copyright and license details. */
-#define DRW_FONT_CACHE_SIZE 32
-
-typedef struct {
- unsigned long pix;
- XftColor rgb;
-} Clr;
typedef struct {
Cursor cursor;
} Cur;
-typedef struct {
+typedef struct Fnt {
Display *dpy;
- int ascent;
- int descent;
unsigned int h;
XftFont *xfont;
FcPattern *pattern;
+ struct Fnt *next;
} Fnt;
-typedef struct {
- Clr *fg;
- Clr *bg;
- Clr *border;
-} ClrScheme;
+enum { ColFg, ColBg }; /* Clr scheme index */
+typedef XftColor Clr;
typedef struct {
unsigned int w, h;
@@ -32,43 +22,36 @@
Window root;
Drawable drawable;
GC gc;
- ClrScheme *scheme;
- size_t fontcount;
- Fnt *fonts[DRW_FONT_CACHE_SIZE];
+ Clr *scheme;
+ Fnt *fonts;
} Drw;
-typedef struct {
- unsigned int w;
- unsigned int h;
-} Extnts;
-
/* Drawable abstraction */
-Drw *drw_create(Display *, int, Window, unsigned int, unsigned int);
-void drw_resize(Drw *, unsigned int, unsigned int);
-void drw_free(Drw *);
+Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h);
+void drw_resize(Drw *drw, unsigned int w, unsigned int h);
+void drw_free(Drw *drw);
/* Fnt abstraction */
-Fnt *drw_font_create(Drw *, const char *);
-void drw_load_fonts(Drw *, const char *[], size_t);
-void drw_font_free(Fnt *);
-void drw_font_getexts(Fnt *, const char *, unsigned int, Extnts *);
-unsigned int drw_font_getexts_width(Fnt *, const char *, unsigned int);
-
-/* Colour abstraction */
-Clr *drw_clr_create(Drw *, const char *);
-void drw_clr_free(Clr *);
+Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount);
+void drw_fontset_free(Fnt* set);
+unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
+void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
+
+/* Colorscheme abstraction */
+void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
+Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
/* Cursor abstraction */
-Cur *drw_cur_create(Drw *, int);
-void drw_cur_free(Drw *, Cur *);
+Cur *drw_cur_create(Drw *drw, int shape);
+void drw_cur_free(Drw *drw, Cur *cursor);
/* Drawing context manipulation */
-void drw_setfont(Drw *, Fnt *);
-void drw_setscheme(Drw *, ClrScheme *);
+void drw_setfontset(Drw *drw, Fnt *set);
+void drw_setscheme(Drw *drw, Clr *scm);
/* Drawing functions */
-void drw_rect(Drw *, int, int, unsigned int, unsigned int, int, int, int);
-int drw_text(Drw *, int, int, unsigned int, unsigned int, const char *, int);
+void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert);
+int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert);
/* Map functions */
-void drw_map(Drw *, Window, int, int, unsigned int, unsigned int);
+void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmenu-4.6/util.c new/dmenu-4.7/util.c
--- old/dmenu-4.6/util.c 2015-11-08 23:42:21.000000000 +0100
+++ new/dmenu-4.7/util.c 2017-05-02 18:36:47.000000000 +0200
@@ -12,7 +12,7 @@
void *p;
if (!(p = calloc(nmemb, size)))
- perror(NULL);
+ die("calloc:");
return p;
}
@@ -27,6 +27,8 @@
if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
fputc(' ', stderr);
perror(NULL);
+ } else {
+ fputc('\n', stderr);
}
exit(1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmenu-4.6/util.h new/dmenu-4.7/util.h
--- old/dmenu-4.6/util.h 2015-11-08 23:42:21.000000000 +0100
+++ new/dmenu-4.7/util.h 2017-05-02 18:36:47.000000000 +0200
@@ -4,5 +4,5 @@
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define BETWEEN(X, A, B) ((A) <= (X) && (X) <= (B))
-void die(const char *errstr, ...);
-void *ecalloc(size_t, size_t);
+void die(const char *fmt, ...);
+void *ecalloc(size_t nmemb, size_t size);
1
0
Hello community,
here is the log from the commit of package coolkey for openSUSE:Factory checked in at 2017-07-28 09:48:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/coolkey (Old)
and /work/SRC/openSUSE:Factory/.coolkey.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "coolkey"
Fri Jul 28 09:48:01 2017 rev:22 rq:512692 version:1.1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/coolkey/coolkey.changes 2016-11-28 15:07:21.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.coolkey.new/coolkey.changes 2017-07-28 09:48:06.384345205 +0200
@@ -1,0 +2,34 @@
+Mon Jul 24 23:02:16 UTC 2017 - jengelh(a)inai.de
+
+- Remove vision statement and development methods from description.
+
+-------------------------------------------------------------------
+Fri Jul 21 14:00:08 CEST 2017 - sbrabec(a)suse.com
+
+- Add nssdb installation scripts.
+- Run spec-cleaner.
+- Drop coolkey-1.1.0-evoandooo.patch: The patch does nothing now.
+ Evolution and LibreOffice changed over time. They moved its
+ directories and they don't use secmod.db any more.
+
+-------------------------------------------------------------------
+Mon Jul 17 20:55:48 CEST 2017 - sbrabec(a)suse.com
+
+- Integrate latest Centos 7 patches [bsc#1049213]
+ (coolkey-fix-token-removal-failure.patch,
+ coolkey-piv-ecc-el7.patch, coolkey-1.1.0-noapplet.patch,
+ coolkey-1.1.0-fix-spurious-event.patch,
+ coolkey-1.1.0-p15.patch, coolkey-1.1.0-p15-coverity.patch,
+ coolkey-1.1.0-more-keys.patch,
+ coolkey-1.1.0-fail-on-bad-mechanisms.patch,
+ coolkey-1.1.0-max-cpu-bug.patch,
+ coolkey-1.1.0-rhel7-alt-cac.patch).
+ * PK15 support.
+ * Fix CAC card support.
+ * Fix card removal issues.
+- Use original tarball
+ (coolkey-1.1.0.tar.bz2 -> coolkey-1.1.0.tar.gz).
+- Drop patch coolkey-null.patch. It is now part of
+ coolkey-piv-ecc-el7.patch.
+
+-------------------------------------------------------------------
Old:
----
coolkey-1.1.0-evoandooo.patch
coolkey-1.1.0.tar.bz2
coolkey-null.patch
coolkey-rpmlintrc
New:
----
coolkey-1.1.0-fail-on-bad-mechanisms.patch
coolkey-1.1.0-fix-spurious-event.patch
coolkey-1.1.0-max-cpu-bug.patch
coolkey-1.1.0-more-keys.patch
coolkey-1.1.0-noapplet.patch
coolkey-1.1.0-p15-coverity.patch
coolkey-1.1.0-p15.patch
coolkey-1.1.0-rhel7-alt-cac.patch
coolkey-1.1.0.tar.gz
coolkey-fix-token-removal-failure.patch
coolkey-piv-ecc-el7.patch
coolkey.rpmlintrc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ coolkey.spec ++++++
--- /var/tmp/diff_new_pack.5zmlSC/_old 2017-07-28 09:48:07.060249997 +0200
+++ /var/tmp/diff_new_pack.5zmlSC/_new 2017-07-28 09:48:07.064249434 +0200
@@ -1,7 +1,7 @@
#
# spec file for package coolkey
#
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,6 +16,8 @@
#
+%define coolkey_module "CoolKey PKCS #11 Module"
+%define nssdb %{_sysconfdir}/pki/nssdb
Name: coolkey
Version: 1.1.0
Release: 0
@@ -23,10 +25,12 @@
License: LGPL-2.1
Group: Productivity/Security
Url: http://directory.fedoraproject.org/wiki/CoolKey
-Source: %{name}-%{version}.tar.bz2
-Source1: %{name}-rpmlintrc
+Source: %{name}-%{version}.tar.gz
+Source1: %{name}.rpmlintrc
Source2: baselibs.conf
-# Patches imported from Fedora:
+# Patches imported from Fedora and CentOS:
+# PATCH-FIX-SECURITY coolkey-cache-dir-move.patch sbrabec(a)suse.cz bnc304180 CVE-2007-4129 -- Fix file and directory permission flaw.
+Patch1: coolkey-cache-dir-move.patch
# PATCH-FIX-FEDORA coolkey-gcc43.patch bnc661643 sbrabec(a)suse.cz -- Fix for gcc-4.3.
Patch2: coolkey-gcc43.patch
# PATCH-FEATURE-FEDORA coolkey-latest.patch bnc661643 sbrabec(a)suse.cz -- The head branch patch.
@@ -41,19 +45,23 @@
Patch7: coolkey-cac-1.patch
# PATCH-FIX-FEDORA coolkey-pcsc-lite-fix.patch bnc661643 sbrabec(a)suse.cz -- Port to the latest pcsc-lite.
Patch8: coolkey-pcsc-lite-fix.patch
-# SUSE specific patches:
-# PATCH-FEATURE-SLES coolkey-1.1.0-evoandooo.patch jberkman(a)novell.com -- Teach pk11install about evolution and openoffice.
-Patch53: coolkey-1.1.0-evoandooo.patch
-# PATCH-FIX-SECURITY coolkey-cache-dir-move.patch sbrabec(a)suse.cz bnc304180 CVE-2007-4129 -- Fix file and directory permission flaw.
-Patch54: coolkey-cache-dir-move.patch
-# PATCH-FIX-UPSTREAM coolkey-null.patch redhat356971 sbrabec(a)suse.cz -- Fix invalid NULL declaration.
-Patch55: coolkey-null.patch
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
+Patch9: coolkey-fix-token-removal-failure.patch
+Patch10: coolkey-piv-ecc-el7.patch
+Patch20: coolkey-1.1.0-noapplet.patch
+Patch21: coolkey-1.1.0-fix-spurious-event.patch
+Patch22: coolkey-1.1.0-p15.patch
+Patch23: coolkey-1.1.0-p15-coverity.patch
+Patch24: coolkey-1.1.0-more-keys.patch
+Patch25: coolkey-1.1.0-fail-on-bad-mechanisms.patch
+Patch26: coolkey-1.1.0-max-cpu-bug.patch
+Patch27: coolkey-1.1.0-rhel7-alt-cac.patch
BuildRequires: gcc-c++
BuildRequires: libtool
BuildRequires: mozilla-nss-devel
+BuildRequires: mozilla-nss-sysinit
+BuildRequires: mozilla-nss-tools
BuildRequires: pcsc-lite-devel
-BuildRequires: pkg-config
+BuildRequires: pkgconfig
BuildRequires: zlib-devel
#Requires: pcsc-lite
# Requires: ifd-egate
@@ -71,14 +79,8 @@
unique for that user by the Red Hat Certificate System. Once the
CoolKey is provisioned, the user can take the key to any system and use
it to login (authenticate), send and receive signed and encrypted
-email, or participate in secure messaging or IRC communication. Using a
-CoolKey should be as easy as starting a car. To accomplish that vision,
-we are focusing on building complete support for CoolKey on exactly one
-token. As the system is built out, we can add token support. CoolKeys
-are based on JavaCard 1.2. We are testing with Axalto Egate Cyberflex
-cards, which are available in both smart card and USB Fob form factors.
-
-
+email, or participate in secure messaging or IRC communication.
+CoolKeys are based on JavaCard 1.2.
%package devel
Summary: CoolKey and CAC PKCS #11 PKI Module for Smart Cards
@@ -97,18 +99,13 @@
Once the CoolKey is provisioned, the user can take the key to any
system and use it to login (authenticate), send and receive signed and
encrypted email, or participate in secure messaging or IRC
-communication. Using a CoolKey should be as easy as starting a car.
-
-To accomplish that vision we are focusing on building complete support
-for CoolKey on exactly one token. As the system is built out, we can
-add token support. CoolKeys are based on JavaCard 1.2. We are testing
-with Axalto Egate Cyberflex cards, which are available in both smart
-card and USB Fob form factors.
-
+communication.
+CoolKeys are based on JavaCard 1.2.
%prep
%setup -q
+%patch1
%patch2
%patch3
%patch4
@@ -116,29 +113,64 @@
%patch6
%patch7
%patch8
-%patch53 -p1
-%patch54
-%patch55
+%patch9 -p1
+%patch10
+%patch20
+%patch21
+%patch22
+%patch23
+%patch24
+%patch25
+%patch26
+%patch27
%build
autoreconf -f -i
-export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
-export CXXFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
+export CFLAGS="%{optflags} -fno-strict-aliasing"
+export CXXFLAGS="%{optflags} -fno-strict-aliasing"
%configure\
- --disable-dependency-tracking \
+ --with-debug\
+ --disable-dependency-tracking\
--enable-pk11install
make %{?_smp_mflags}
%install
-%makeinstall
-ln -s pkcs11/libcoolkeypk11.so $RPM_BUILD_ROOT/%{_libdir}
-
-%post -p /sbin/ldconfig
+%make_install
+ln -s pkcs11/libcoolkeypk11.so %{buildroot}/%{_libdir}
-%postun -p /sbin/ldconfig
+%triggerin -- mozilla-nss-sysinit mozilla-nss-tools
+if [ -x %{_bindir}/pk11install -a -x %{_bindir}/modutil -a -f %{_sysconfdir}/pki/nssdb/pkcs11.txt ]; then
+ isThere=`modutil -rawlist -dbdir dbm:%{nssdb} | grep %{coolkey_module} || echo NO`
+ if [ "$isThere" == "NO" ]; then
+ pk11install -l -p %{nssdb} 'name=%{coolkey_module} library=libcoolkeypk11.so' ||:
+ fi
+ isThere=`modutil -rawlist -dbdir sql:%{nssdb} | grep %{coolkey_module} || echo NO`
+ if [ "$isThere" == "NO" ]; then
+ pk11install -s -p %{nssdb} 'name=%{coolkey_module} library=libcoolkeypk11.so' ||:
+ fi
+fi
+
+%post
+/sbin/ldconfig
+if [ -x %{_bindir}/pk11install -a -x %{_bindir}/modutil -a -f %{_sysconfdir}/pki/nssdb/pkcs11.txt ]; then
+ isThere=`modutil -rawlist -dbdir dbm:%{nssdb} | grep %{coolkey_module} || echo NO`
+ if [ "$isThere" == "NO" ]; then
+ pk11install -l -p %{nssdb} 'name=%{coolkey_module} library=libcoolkeypk11.so' ||:
+ fi
+ isThere=`modutil -rawlist -dbdir sql:%{nssdb} | grep %{coolkey_module} || echo NO`
+ if [ "$isThere" == "NO" ]; then
+ pk11install -s -p %{nssdb} 'name=%{coolkey_module} library=libcoolkeypk11.so' ||:
+ fi
+fi
+
+%postun
+/sbin/ldconfig
+if [ $1 -eq 0 -a -x %{_bindir}/modutil -a -f %{_sysconfdir}/pki/nssdb/pkcs11.txt ]; then
+ modutil -delete %{coolkey_module} -dbdir dbm:%{nssdb} -force || :
+ modutil -delete %{coolkey_module} -dbdir sql:%{nssdb} -force || :
+fi
%files
-%defattr(-,root,root)
%doc ChangeLog LICENSE README
%{_bindir}/pk11install
%{_libdir}/libcoolkeypk11.so
@@ -148,7 +180,6 @@
%dir %{_libdir}/pkcs11
%files devel
-%defattr(-,root,root)
%{_libdir}/libckyapplet.so
%{_libdir}/pkgconfig/*.pc
%{_includedir}/*.h
++++++ coolkey-1.1.0-fail-on-bad-mechanisms.patch ++++++
diff -up ./src/coolkey/coolkey.cpp.fail-on-bad-mechanisms ./src/coolkey/coolkey.cpp
--- ./src/coolkey/coolkey.cpp.fail-on-bad-mechanisms 2016-06-16 14:36:05.934755563 -0700
+++ ./src/coolkey/coolkey.cpp 2016-06-16 14:36:05.945755372 -0700
@@ -77,7 +77,8 @@ rsaMechanismList[] = {
static const MechInfo
ecMechanismList[] = {
- {CKM_ECDSA,{256,521,CKF_HW | CKF_SIGN | CKF_EC_F_P}},{ CKM_ECDSA_SHA1, {256, 521, CKF_HW | CKF_SIGN | CKF_EC_F_P}},{ CKM_ECDH1_DERIVE,{256, 521, CKF_HW | CKF_DERIVE | CKF_EC_F_P} }
+ {CKM_ECDSA,{256,521,CKF_HW | CKF_SIGN | CKF_EC_F_P}},
+ {CKM_ECDH1_DERIVE,{256, 521, CKF_HW | CKF_DERIVE | CKF_EC_F_P} }
};
unsigned int numRSAMechanisms = sizeof(rsaMechanismList)/sizeof(MechInfo);
diff -up ./src/coolkey/slot.cpp.fail-on-bad-mechanisms ./src/coolkey/slot.cpp
--- ./src/coolkey/slot.cpp.fail-on-bad-mechanisms 2016-06-16 14:36:05.943755407 -0700
+++ ./src/coolkey/slot.cpp 2016-06-16 15:07:40.255882660 -0700
@@ -4185,11 +4185,30 @@ Slot::signInit(SessionHandleSuffix suffi
{
refreshTokenState();
SessionIter session = findSession(suffix);
+ PKCS11Object *key = getKeyFromHandle(hKey);
if( session == sessions.end() ) {
throw PKCS11Exception(CKR_SESSION_HANDLE_INVALID);
}
+ if (pMechanism == NULL) {
+ throw PKCS11Exception(CKR_ARGUMENTS_BAD);
+ }
+
+ switch (pMechanism->mechanism) {
+ case CKM_RSA_PKCS:
+ if (key->getKeyType() != Key::rsa) {
+ throw PKCS11Exception(CKR_KEY_TYPE_INCONSISTENT);
+ }
+ break;
+ case CKM_ECDSA:
+ if (key->getKeyType() != Key::ecc) {
+ throw PKCS11Exception(CKR_KEY_TYPE_INCONSISTENT);
+ }
+ break;
+ default:
+ throw PKCS11Exception(CKR_MECHANISM_INVALID);
+ }
- session->signatureState.initialize(getKeyFromHandle(hKey));
+ session->signatureState.initialize(key);
}
void
@@ -4198,11 +4217,24 @@ Slot::decryptInit(SessionHandleSuffix su
{
refreshTokenState();
SessionIter session = findSession(suffix);
+ PKCS11Object *key = getKeyFromHandle(hKey);
if( session == sessions.end() ) {
throw PKCS11Exception(CKR_SESSION_HANDLE_INVALID);
}
+ if (pMechanism == NULL) {
+ throw PKCS11Exception(CKR_ARGUMENTS_BAD);
+ }
+ switch (pMechanism->mechanism) {
+ case CKM_RSA_PKCS:
+ if (key->getKeyType() != Key::rsa) {
+ throw PKCS11Exception(CKR_KEY_TYPE_INCONSISTENT);
+ }
+ break;
+ default:
+ throw PKCS11Exception(CKR_MECHANISM_INVALID);
+ }
- session->decryptionState.initialize(getKeyFromHandle(hKey));
+ session->decryptionState.initialize(key);
}
/**
@@ -5008,8 +5040,23 @@ Slot::derive(SessionHandleSuffix suffix,
ECCKeyAgreementParams params(CryptParams::ECC_DEFAULT_KEY_SIZE);
SessionIter session = findSession(suffix);
+ PKCS11Object *key=getKeyFromHandle(hBaseKey);
- session->keyAgreementState.initialize(getKeyFromHandle(hBaseKey));
+ if (pMechanism == NULL ) {
+ throw PKCS11Exception(CKR_ARGUMENTS_BAD);
+ }
+
+ switch (pMechanism->mechanism) {
+ case CKM_ECDH1_DERIVE:
+ if (key->getKeyType() != Key::ecc) {
+ throw PKCS11Exception(CKR_KEY_TYPE_INCONSISTENT);
+ }
+ break;
+ default:
+ throw PKCS11Exception(CKR_MECHANISM_INVALID);
+ }
+
+ session->keyAgreementState.initialize(key);
deriveECC(suffix, pMechanism, hBaseKey, pTemplate, ulAttributeCount,
phKey, params);
@@ -5018,9 +5065,6 @@ Slot::derive(SessionHandleSuffix suffix,
void Slot::deriveECC(SessionHandleSuffix suffix, CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hBaseKey, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount, CK_OBJECT_HANDLE_PTR phKey, CryptParams& params)
{
- if (pMechanism == NULL ) {
- throw PKCS11Exception(CKR_ARGUMENTS_BAD);
- }
CK_ECDH1_DERIVE_PARAMS *mechParams = NULL;
++++++ coolkey-1.1.0-fix-spurious-event.patch ++++++
diff -up ./src/coolkey/slot.cpp.fix-spurious ./src/coolkey/slot.cpp
--- ./src/coolkey/slot.cpp.fix-spurious 2014-09-26 15:31:17.277958895 -0700
+++ ./src/coolkey/slot.cpp 2014-09-26 15:34:33.218313227 -0700
@@ -1412,6 +1412,7 @@ SlotList::waitForSlotEvent(CK_FLAGS flag
#endif
} while ((status == CKYSUCCESS) ||
(CKYCardContext_GetLastError(context) == SCARD_E_TIMEOUT) ||
+ (CKYCardContext_GetLastError(context) == SCARD_E_UNKNOWN_READER) ||
(CKYCardContext_GetLastError(context) == SCARD_E_READER_UNAVAILABLE) ||
(CKYCardContext_GetLastError(context) == SCARD_E_NO_SERVICE) ||
(CKYCardContext_GetLastError(context) == SCARD_E_SERVICE_STOPPED) );
++++++ coolkey-1.1.0-max-cpu-bug.patch ++++++
diff -up ./src/coolkey/slot.cpp.max-cpu-bug ./src/coolkey/slot.cpp
--- ./src/coolkey/slot.cpp.max-cpu-bug 2016-06-30 14:36:10.502785885 -0700
+++ ./src/coolkey/slot.cpp 2016-06-30 14:36:15.812876256 -0700
@@ -1875,6 +1875,8 @@ SlotList::waitForSlotEvent(CK_FLAGS flag
if (status != CKYSUCCESS) {
if ((CKYCardContext_GetLastError(context) ==
SCARD_E_READER_UNAVAILABLE) ||
+ (CKYCardContext_GetLastError(context) ==
+ SCARD_E_UNKNOWN_READER) ||
(CKYCardContext_GetLastError(context) == SCARD_E_TIMEOUT)) {
OSSleep(timeout*PKCS11_CARD_ERROR_LATENCY);
}
++++++ coolkey-1.1.0-more-keys.patch ++++++
diff -up ./src/coolkey/slot.cpp.more_keys ./src/coolkey/slot.cpp
--- ./src/coolkey/slot.cpp.more_keys 2016-06-16 11:50:01.027432856 -0700
+++ ./src/coolkey/slot.cpp 2016-06-16 11:50:13.267224824 -0700
@@ -32,7 +32,8 @@
#define MIN(x, y) ((x) < (y) ? (x) : (y))
-
+#define MAX_NUM_KEYS 32
+#define MAX_NUM_CERTS 32
#ifdef DEBUG
#define PRINTF(args) printf args
@@ -3458,7 +3459,7 @@ Slot::loadObjects()
} else if( type == 'c' ) {
// cert attribute object. find the DER encoding
unsigned short certnum = getObjectIndex(iter->obj.objectID);
- if( certnum > 9 ) {
+ if( certnum > MAX_NUM_CERTS ) {
//invalid object id
throw PKCS11Exception(CKR_DEVICE_ERROR,
"Invalid object id %08x",iter->obj.objectID);
@@ -4154,7 +4155,7 @@ Slot::objectToKeyNum(const PKCS11Object
throw PKCS11Exception(CKR_KEY_HANDLE_INVALID);
}
unsigned short keyNum = getObjectIndex(id);
- if( keyNum > 9 ) {
+ if( keyNum > MAX_NUM_KEYS ) {
throw PKCS11Exception(CKR_KEY_HANDLE_INVALID);
}
return keyNum & 0xFF;
@@ -4911,7 +4912,6 @@ Slot::generateRandom(SessionHandleSuffix
}
}
-#define MAX_NUM_KEYS 8
unsigned int
Slot::getRSAKeySize(PKCS11Object *key)
{
diff -up ./src/coolkey/slot.h.more_keys ./src/coolkey/slot.h
--- ./src/coolkey/slot.h.more_keys 2016-06-16 11:50:08.627303984 -0700
+++ ./src/coolkey/slot.h 2016-06-16 11:54:08.872153180 -0700
@@ -512,7 +512,17 @@ class Slot {
return (char) (objectID >> 24) & 0xff;
}
unsigned short getObjectIndex(unsigned long objectID) const {
- return (char )((objectID >> 16) & 0xff) - '0';
+ char char_index = (char) ((objectID >> 16) & 0xff);
+ if (char_index >= '0' && char_index <= '9') {
+ return char_index - '0';
+ }
+ if (char_index >= 'A' && char_index <= 'Z') {
+ return char_index - 'A' + 10;
+ }
+ if (char_index >= 'a' && char_index <= 'z') {
+ return char_index - 'a' + 26 + 10;
+ }
+ return 0x0100 + char_index;
}
// actually get the size of a key in bits from the card
++++++ coolkey-1.1.0-noapplet.patch ++++++
diff -up ./src/coolkey/slot.cpp.noapplet ./src/coolkey/slot.cpp
--- ./src/coolkey/slot.cpp.noapplet 2013-09-30 14:30:40.069595018 -0700
+++ ./src/coolkey/slot.cpp 2013-09-30 14:31:27.488595000 -0700
@@ -762,13 +762,7 @@ Slot::connectToToken()
CKYCardConnection_GetLastError(conn));
disconnect();
}
- /* CARD is a PIV card */
- state |= PIV_CARD | APPLET_SELECTABLE | APPLET_PERSONALIZED;
- isVersion1Key = 0;
- needLogin = 1;
- mCoolkey = 0;
- mOldCAC = 0;
- mCACLocalLogin = getPIVLoginType();
+ /* CARD is unknown */
return;
}
state |= CAC_CARD | APPLET_SELECTABLE | APPLET_PERSONALIZED;
++++++ coolkey-1.1.0-p15-coverity.patch ++++++
diff -up ./src/coolkey/object.cpp.p15-coverity ./src/coolkey/object.cpp
--- ./src/coolkey/object.cpp.p15-coverity 2015-07-06 18:02:34.604191118 -0700
+++ ./src/coolkey/object.cpp 2015-07-06 19:06:04.432062377 -0700
@@ -1558,7 +1558,7 @@ unsigned long GetBits(const CKYByte *ent
/* turn the flags into an int */
for (i=0; i < entrySize; i++) {
CKYByte c = rev[entry[i]];
- bits = bits | (c << i*8);
+ bits = bits | (((unsigned long)c) << (i*8));
}
return bits | bitFlag;
}
@@ -1585,8 +1585,8 @@ CKYStatus PK15ObjectPath::setObjectPath(
if (entry == NULL) { return CKYINVALIDDATA; }
tagSize = entry - current;
current += entrySize + tagSize;
+ if (size < (entrySize + tagSize)) { return CKYINVALIDDATA; }
size -= (entrySize +tagSize);
- if (size < 0) { return CKYINVALIDDATA; }
status = CKYBuffer_Replace(&path, 0, entry, entrySize);
if (status != CKYSUCCESS) {
return status;
@@ -1598,8 +1598,8 @@ CKYStatus PK15ObjectPath::setObjectPath(
if (entry == NULL) { return CKYINVALIDDATA; }
tagSize = entry - current;
current += entrySize + tagSize;
+ if (size < (entrySize + tagSize)) { return CKYINVALIDDATA; }
size -= (entrySize +tagSize);
- if (size < 0) { return CKYINVALIDDATA; }
if (entrySize > 5) { return CKYINVALIDDATA; }
for (index = 0, i=0; i < entrySize; i++) {
index = (index << 8) + (unsigned int) entry[i];
@@ -1612,8 +1612,8 @@ CKYStatus PK15ObjectPath::setObjectPath(
if (entry == NULL) { return CKYINVALIDDATA; }
tagSize = entry - current;
current += entrySize + tagSize;
+ if (size < (entrySize + tagSize)) { return CKYINVALIDDATA; }
size -= (entrySize +tagSize);
- if (size < 0) { return CKYINVALIDDATA; }
if (entrySize > 5) { return CKYINVALIDDATA; }
for (length = 0, i=0; i < entrySize; i++) {
length = (length << 8) + (unsigned int) entry[i];
@@ -1741,8 +1741,8 @@ set_key_type:
/* point current to the next section (cass attributes) */
tagSize = commonAttributes - current;
current += commonSize + tagSize;
+ if (currentSize < (commonSize + tagSize)) { return CKYINVALIDDATA; }
currentSize -= (commonSize +tagSize);
- if (currentSize < 0) { return CKYINVALIDDATA; }
/* get the CKA_LABEL */
if (commonAttributes[0] != ASN1_UTF8_STRING) { return CKYINVALIDDATA; }
@@ -1835,8 +1835,8 @@ PK15Object::completeCertObject(const CKY
/* point current to the next section (type attributes) */
tagSize = commonCertAttributes - current;
current += commonSize + tagSize;
+ if (currentSize < (commonSize + tagSize)) { return CKYINVALIDDATA; }
currentSize -= (commonSize +tagSize);
- if (currentSize < 0) { return CKYINVALIDDATA; }
/* get the id */
if (commonCertAttributes[0] != ASN1_OCTET_STRING) { return CKYINVALIDDATA; }
@@ -1907,8 +1907,8 @@ PK15Object::completeAuthObject(const CKY
if (commonAuthAttributes == NULL) { return CKYINVALIDDATA; }
tagSize = commonAuthAttributes - current;
current += commonSize + tagSize;
+ if (currentSize < (commonSize + tagSize)) { return CKYINVALIDDATA; }
currentSize -= (commonSize + tagSize);
- if (currentSize < 0) { return CKYINVALIDDATA; }
if (commonAuthAttributes[0] != ASN1_OCTET_STRING) {
return CKYINVALIDDATA;
}
@@ -1930,8 +1930,8 @@ PK15Object::completeAuthObject(const CKY
if (commonAuthAttributes == NULL) { return CKYINVALIDDATA; }
tagSize = commonAuthAttributes - current;
current += commonSize + tagSize;
- currentSize -= (commonSize +tagSize);
- if (currentSize < 0) { return CKYINVALIDDATA; }
+ if (currentSize < (commonSize + tagSize)) { return CKYINVALIDDATA; }
+ currentSize -= (commonSize + tagSize);
/*
* parse the Pin Auth Attributes
* pinFlags BIT_STRING
@@ -2093,8 +2093,8 @@ PK15Object::completeKeyObject(const CKYB
/* point current to the next section (sublcass attributes) */
tagSize = commonKeyAttributes - current;
current += commonSize + tagSize;
- currentSize -= (commonSize +tagSize);
- if (currentSize < 0) { return CKYINVALIDDATA; }
+ if (currentSize < (commonSize + tagSize)) { return CKYINVALIDDATA; }
+ currentSize -= (commonSize + tagSize);
/* get the id */
if (commonKeyAttributes[0] != ASN1_OCTET_STRING) { return CKYINVALIDDATA; }
@@ -2263,8 +2263,8 @@ CKYStatus PK15Object::completePrivKeyObj
/* point current to the next section (type attributes) */
tagSize = commonPrivKeyAttributes - current;
current += commonSize + tagSize;
+ if (currentSize < (commonSize + tagSize)) { return CKYINVALIDDATA; }
currentSize -= (commonSize +tagSize);
- if (currentSize < 0) { return CKYINVALIDDATA; }
/* subjectName */
if (commonPrivKeyAttributes[0] == ASN1_SEQUENCE) {
@@ -2385,8 +2385,8 @@ PK15Object::completePubKeyObject(const C
/* point current to the next section (type attributes) */
tagSize = commonPubKeyAttributes - current;
current += commonSize + tagSize;
- currentSize -= (commonSize +tagSize);
- if (currentSize < 0) { return CKYINVALIDDATA; }
+ if (currentSize < (commonSize + tagSize)) { return CKYINVALIDDATA; }
+ currentSize -= (commonSize + tagSize);
/* subjectName */
if (commonPubKeyAttributes[0] == ASN1_SEQUENCE) {
@@ -2535,8 +2535,8 @@ PK15Object::completeRawPublicKey(const C
if (entry == NULL) { return CKYINVALIDDATA; }
tagSize = entry - current;
current += entrySize + tagSize;
+ if (size < (entrySize + tagSize)) { return CKYINVALIDDATA; }
size -= (entrySize +tagSize);
- if (size < 0) { return CKYINVALIDDATA; }
if ((entry[0] == 0) && (entrySize > 1)) {
entry++; entrySize--;
}
@@ -2548,8 +2548,8 @@ PK15Object::completeRawPublicKey(const C
if (entry == NULL) { return CKYINVALIDDATA; }
tagSize = entry - current;
current += entrySize + tagSize;
- size -= (entrySize +tagSize);
- if (size < 0) { return CKYINVALIDDATA; }
+ if (size < (entrySize + tagSize)) { return CKYINVALIDDATA; }
+ size -= (entrySize + tagSize);
if ((entry[0] == 0) && (entrySize > 1)) {
entry++; entrySize--;
}
@@ -2682,11 +2682,11 @@ DEREncodedTokenInfo::DEREncodedTokenInfo
if (entry == NULL) return;
tagSize = entry - current;
current += tagSize + entrySize;
+ if (size < tagSize + entrySize) return;
size -= tagSize + entrySize;
if (entrySize < 1) {
version = *entry;
}
- if (size < 0) return;
/* get the serial number */
if (current[0] != ASN1_OCTET_STRING) { return ; }
@@ -2729,6 +2729,8 @@ DEREncodedTokenInfo::DEREncodedTokenInfo
}
/* parsing flags */
+#ifdef notdef
+ /* we arn't using this right now, keep it for future reference */
if (current[0] == ASN1_BIT_STRING) {
/* recordinfo parsing would go here */
unsigned long bits;
@@ -2739,6 +2741,7 @@ DEREncodedTokenInfo::DEREncodedTokenInfo
size -= tagSize + entrySize;
bits = GetBits(entry, entrySize,8,2);
}
+#endif
return;
}
diff -up ./src/coolkey/slot.cpp.p15-coverity ./src/coolkey/slot.cpp
--- ./src/coolkey/slot.cpp.p15-coverity 2015-07-06 18:02:34.606191081 -0700
+++ ./src/coolkey/slot.cpp 2015-07-06 18:02:34.610191006 -0700
@@ -3714,7 +3714,6 @@ void
Slot::attemptP15Login(CK_USER_TYPE user)
{
PinCache *pinCachePtr = userPinCache(user);
- const CKYBuffer *path;
if (user == CKU_USER) {
loggedIn = false;
@@ -3729,7 +3728,6 @@ Slot::attemptP15Login(CK_USER_TYPE user)
"No PKCS #15 auth object for user %d\n", user);
}
- path = auth[user]->getObjectPath().getPath();
status = selectPath(auth[user]->getObjectPath().getPath(), &result);
if( status == CKYSCARDERR ) {
handleConnectionError();
diff -up ./src/libckyapplet/cky_applet.c.p15-coverity ./src/libckyapplet/cky_applet.c
--- ./src/libckyapplet/cky_applet.c.p15-coverity 2015-07-06 18:02:34.606191081 -0700
+++ ./src/libckyapplet/cky_applet.c 2015-07-06 18:02:34.610191006 -0700
@@ -1361,6 +1361,9 @@ P15Applet_SignDecrypt(CKYCardConnection
appendLength = length;
} else {
ret = CKYBuffer_Reserve(&tmp, length);
+ if (ret != CKYSUCCESS) {
+ goto done;
+ }
}
CKYBuffer_AppendBuffer(&tmp, data, offset, appendLength);
pso.chain = 0;
diff -up ./src/libckyapplet/cky_base.c.p15-coverity ./src/libckyapplet/cky_base.c
--- ./src/libckyapplet/cky_base.c.p15-coverity 2015-07-06 18:02:34.607191062 -0700
+++ ./src/libckyapplet/cky_base.c 2015-07-06 18:02:34.610191006 -0700
@@ -736,7 +736,7 @@ CKYAPDU_SetShortReceiveLen(CKYAPDU *apdu
CKYStatus ret;
if (recvlen <= CKYAPDU_MAX_DATA_LEN) {
- return APDU_SetReceiveLen(apdu, (CKYByte)(recvlen & 0xff));
+ return CKYAPDU_SetReceiveLen(apdu, (CKYByte)(recvlen & 0xff));
}
ret = CKYBuffer_Resize(&apdu->apduBuf, CKYAPDU_HEADER_LEN+2);
if (ret != CKYSUCCESS) {
++++++ coolkey-1.1.0-p15.patch ++++++
++++ 4379 lines (skipped)
++++++ coolkey-1.1.0-rhel7-alt-cac.patch ++++++
++++ 858 lines (skipped)
++++++ coolkey-fix-token-removal-failure.patch ++++++
Fix insertion/removal detection
pcsc now errors out of the SCardGetStatusChange call with
SCARD_E_UNKNOWN_READER if any of the passed readers aren't known.
This includes readers that were very recently forgotton about because
a user just disconnected them.
(See
http://anonscm.debian.org/viewvc/pcsclite/trunk/PCSC/src/winscard_clnt.c?r1…
for the change to pcsc)
Unfortunately, this means SECMOD_WaitForAnyTokenEvent will fail with a
SC_NO_EVENT error if a user removes their smartcard at the wrong time.
This patch changes coolkey to detect removed readers before calling
SCardGetStatusChange, so that it can handle the removal itself.
diff -up coolkey-1.1.0/src/coolkey/slot.cpp.fix coolkey-1.1.0/src/coolkey/slot.cpp
--- coolkey-1.1.0/src/coolkey/slot.cpp.fix 2013-05-22 16:23:41.728846957 -0400
+++ coolkey-1.1.0/src/coolkey/slot.cpp 2013-05-22 17:09:59.813958927 -0400
@@ -279,24 +279,22 @@ SlotList::updateReaderList()
* don't recognize.
*/
- /* first though, let's check to see if any previously removed readers have
- * come back from the dead. If the ignored bit has been set, we do not need
- * it any more.
- */
+ /* Iterate through all the readers to see if we need to make unavailable any
+ * freshly removed readers. Also, see if any previously removed
+ * readers have come back from the dead and don't need to be ignored.
+ */
const char *curReaderName = NULL;
unsigned long knownState = 0;
for(int ri = 0 ; ri < numReaders; ri ++) {
-
knownState = CKYReader_GetKnownState(&readerStates[ri]);
- if( !(knownState & SCARD_STATE_IGNORE)) {
- continue;
- }
-
+
curReaderName = CKYReader_GetReaderName(&readerStates[ri]);
if(readerNameExistsInList(curReaderName,&readerNames)) {
CKYReader_SetKnownState(&readerStates[ri], knownState & ~SCARD_STATE_IGNORE);
-
+ } else {
+ if (!(knownState & SCARD_STATE_UNAVAILABLE))
+ CKYReader_SetKnownState(&readerStates[ri], knownState | SCARD_STATE_UNAVAILABLE | SCARD_STATE_CHANGED);
}
}
@@ -1238,6 +1236,32 @@ SlotList::waitForSlotEvent(CK_FLAGS flag
throw;
}
+ /* Before round-tripping to the daemon for the duration of the
+ * timeout, first see if we lost any readers, and pick a slot
+ * from that set to return
+ */
+ for (i=0; i < numReaders; i++) {
+ unsigned long knownState = CKYReader_GetKnownState(&readerStates[i]);
+
+ if ((knownState & SCARD_STATE_UNAVAILABLE) &&
+ (knownState & SCARD_STATE_CHANGED)) {
+ CKYReader_SetKnownState(&readerStates[i], knownState & ~SCARD_STATE_CHANGED);
+ readerListLock.releaseLock();
+ *slotp = slotIndexToID(i);
+ found = TRUE;
+ break;
+ }
+ }
+
+ if (found) {
+ break;
+ }
+
+ if (shuttingDown) {
+ readerListLock.releaseLock();
+ break;
+ }
+
if (myNumReaders != numReaders) {
if (myReaderStates) {
delete [] myReaderStates;
++++++ coolkey-piv-ecc-el7.patch ++++++
++++ 4792 lines (skipped)
++++++ coolkey-rpmlintrc -> coolkey.rpmlintrc ++++++
1
0
Hello community,
here is the log from the commit of package ghc-amazonka-s3-streaming for openSUSE:Factory checked in at 2017-07-28 09:47:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-amazonka-s3-streaming (Old)
and /work/SRC/openSUSE:Factory/.ghc-amazonka-s3-streaming.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-amazonka-s3-streaming"
Fri Jul 28 09:47:54 2017 rev:2 rq:511898 version:0.1.0.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-amazonka-s3-streaming/ghc-amazonka-s3-streaming.changes 2017-04-14 13:39:29.052440245 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-amazonka-s3-streaming.new/ghc-amazonka-s3-streaming.changes 2017-07-28 09:47:55.153927102 +0200
@@ -1,0 +2,5 @@
+Fri Jul 21 16:35:40 UTC 2017 - psimons(a)suse.com
+
+- Fix license tag.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-amazonka-s3-streaming.spec ++++++
--- /var/tmp/diff_new_pack.PTgsKg/_old 2017-07-28 09:47:55.649857246 +0200
+++ /var/tmp/diff_new_pack.PTgsKg/_new 2017-07-28 09:47:55.653856682 +0200
@@ -21,7 +21,7 @@
Version: 0.1.0.4
Release: 0
Summary: Provides conduits to upload data to S3 using the Multipart API
-License: BSD-3-Clause
+License: MIT
Group: Development/Languages/Other
Url: https://hackage.haskell.org/package/%{pkg_name}
Source0: https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{ve…
1
0
Hello community,
here is the log from the commit of package kopano-webapp for openSUSE:Factory checked in at 2017-07-28 09:47:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kopano-webapp (Old)
and /work/SRC/openSUSE:Factory/.kopano-webapp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kopano-webapp"
Fri Jul 28 09:47:52 2017 rev:2 rq:511310 version:3.3.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/kopano-webapp/kopano-webapp.changes 2017-02-16 16:50:13.721858561 +0100
+++ /work/SRC/openSUSE:Factory/.kopano-webapp.new/kopano-webapp.changes 2017-07-28 09:47:54.094076391 +0200
@@ -1,0 +2,50 @@
+Tue Jul 18 19:19:40 UTC 2017 - bosim(a)opensuse.org
+
+- Updated to 3.3.1 final, changelog:
+ * Bugs:
+ * KW-924 - Improve webapp presence cache by making it hash-based
+ * KW-1162 - No ‘save’ notification when applying settings while
+ having a mail pop-out window open
+ * KW-1170 - Php error when adding recurrence to existing calendar
+ item
+ * KW-1198 - Empty body in webapp when parser breaks on minified
+ javascript
+ * KW-1216 - Business card filter can not be applied again when
+ switching back and forth between contact folders
+ * KW-1246 - Mail scroll bar resets when switching tabs
+ * KW-1291 - Php 7.1 fatal error when opening signed or encrypted
+ email
+ * KW-1303 - Suggested contacts folder of shared store not closed
+ even if the entire store is closed
+ * KW-1407 - Rtl direction attribute is removed from html mail
+ * KW-1419 - Original html message removed entirely when pressing
+ enter
+ * KW-1443 - Layout of task request breaks
+ * KW-1469 - [sles12] invalid dirname and filename for italian
+ spellchecker language pack
+ * Improvement:
+ * KW-1241 - “what’s new” dialog in webapp
+ * KW-1319 - Put the unit behind the value for the reload interval
+ when configuring a widget
+ * KW-1342 - Combo list should be the same styling as sub menu
+ * KW-1399 - Improve task request message code so one sentence
+ does not appear as two separate strings for translators
+ * KW-1456 - [intranet plugin] disable the plugin by default
+ * KW-1459 - Php 7.1 throws error when adding a non-numeric value
+ to a string
+
+-------------------------------------------------------------------
+Tue Jul 18 17:08:14 UTC 2017 - bosim(a)opensuse.org
+
+- %prep will modify "version" file so webapp will show actual
+ version instead of "devel".
+
+-------------------------------------------------------------------
+Tue May 30 15:22:02 UTC 2017 - bosim(a)opensuse.org
+
+- Updated to 3.3 final, changelog:
+ https://documentation.kopano.io/kopano_changelog/webapp.html
+ #kopano-webapp-3-3-0-final
+- Ran spec-cleaner
+
+-------------------------------------------------------------------
Old:
----
kopano-webapp-3.2.0.149.tar.xz
New:
----
kopano-webapp-3.3.1.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kopano-webapp.spec ++++++
--- /var/tmp/diff_new_pack.Uex5jD/_old 2017-07-28 09:47:54.833972170 +0200
+++ /var/tmp/diff_new_pack.Uex5jD/_new 2017-07-28 09:47:54.837971606 +0200
@@ -1,6 +1,7 @@
#
# spec file for package kopano-webapp
#
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2016 Kopano B.V.
#
# All modifications and additions to the file contributed by third parties
@@ -12,42 +13,39 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://jira.kopano.io/
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
+
+%define langdir %{_datadir}/%{name}/server/language
+%define plugindir %{_datadir}/%{name}/plugins
Name: kopano-webapp
+Version: 3.3.1
+Release: 0
Summary: Improved WebApp for Kopano
License: AGPL-3.0
Group: Productivity/Networking/Email/Clients
-Version: 3.2.0.149
-Release: 0
Url: https://kopano.io
-
Source: kopano-webapp-%{version}.tar.xz
-
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: ant
+BuildRequires: xz
+Requires: %{name}-lang = %{version}
+Requires: mod_php_any
+Requires: php >= 5.3
+Requires: php-gettext
+Requires: php-mapi
+Requires: php-openssl
+Requires: php-zlib
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+BuildArch: noarch
%if 0%{?suse_version}
BuildRequires: fdupes
%endif
-BuildRequires: php
-BuildRequires: xz
%if 0%{?suse_version} >= 1220
BuildRequires: libxml2-tools
%else
BuildRequires: libxml2
%endif
-BuildArch: noarch
-
-Requires: %name-lang = %version
-
-Requires: php-mapi
-Requires: php-gettext
-Requires: php-zlib
-Requires: php-openssl
-
-%define langdir %_datadir/%name/server/language
-%define plugindir %_datadir/%name/plugins
%description
Provides a web-client written in PHP that makes use of Jason and ExtJS
@@ -55,14 +53,15 @@
through a modern web browser.
%package lang
-Summary: Languages for package %name
+# FIXME: consider using %%lang_package macro
+Summary: Languages for package %{name}
Group: System/Localization
%description lang
-Provides translations to the package %name.
+Provides translations to the package %{name}.
%package contactfax
-Version: 3.2.0.149
+Version: 3.3.1
Release: 0
Summary: Contact fax plugin for kopano-webapp
Group: Productivity/Networking/Email/Clients
@@ -72,7 +71,7 @@
field of the email.
%package folderwidgets
-Version: 3.2.0.149
+Version: 3.3.1
Release: 0
Summary: Folder widgets plugin for kopano-webapp
Group: Productivity/Networking/Email/Clients
@@ -82,7 +81,7 @@
default folders for a user.
%package gmaps
-Version: 3.2.0.149
+Version: 3.3.1
Release: 0
Summary: Google Maps plugin for kopano-webapp
Group: Productivity/Networking/Email/Clients
@@ -91,7 +90,7 @@
Shows contact address on Google Maps.
%package pimfolder
-Version: 3.2.0.149
+Version: 3.3.1
Release: 0
Summary: Plugin for kopano-webapp to quickly move mail into another folder
Group: Productivity/Networking/Email/Clients
@@ -100,7 +99,7 @@
Kopano PIM plugin, allows you to set-up a folder quickly moving your mail to another folder; like "Archive" in GTD
%package quickitems
-Version: 3.2.0.149
+Version: 3.3.1
Release: 0
Summary: Quick Items plugin for kopano-webapp
Group: Productivity/Networking/Email/Clients
@@ -110,7 +109,7 @@
Tasks and Notes.
%package titlecounter
-Version: 3.2.0.149
+Version: 3.3.1
Release: 0
Summary: Title counter plugin for kopano-webapp
Group: Productivity/Networking/Email/Clients
@@ -119,7 +118,7 @@
Plugin to show number of unread messages in the window title.
%package webappmanual
-Version: 3.2.0.149
+Version: 3.3.1
Release: 0
Summary: Manual plugin for kopano-webapp
Group: Productivity/Networking/Email/Clients
@@ -128,137 +127,137 @@
Plugin with manual for Kopano WebApp
%package zdeveloper
-Version: 3.2.0.149
+Version: 3.3.1
Release: 0
Summary: Developer plugin for kopano-webapp
-Group: Development/Debug
+Group: Development/Tools/Debuggers
%description zdeveloper
Shows all available insertion points on the screen.
%prep
%setup -q
-# Hello Ivo....
find . -type f "(" -name "*.js" -o -name "*.php" ")" \
-exec chmod a-x "{}" "+";
+echo "%{version}" > version
%build
ant deploy deploy-plugins;
%install
-b="%buildroot";
-d="$b/%_datadir";
+b="%{buildroot}";
+d="$b/%{_datadir}";
mkdir -p "$d";
-cp -a deploy "$d/%name";
-mkdir -p "$b/%_sysconfdir/apache2/conf.d"
-mv "$d/%name/kopano-webapp.conf" "$b/%_sysconfdir/apache2/conf.d"
-mkdir -p "$b/%_sysconfdir/kopano/webapp"
-mv "$d/%name/config.php.dist" "$b/%_sysconfdir/kopano/webapp/config.php"
-ln -s "%_sysconfdir/kopano/webapp/config.php" \
- "$d/%name/config.php"
-rm "$d/%name/debug.php.dist"
-mkdir -p "$b/var/lib/%name/tmp"
+cp -a deploy "$d/%{name}";
+mkdir -p "$b/%{_sysconfdir}/apache2/conf.d"
+mv "$d/%{name}/kopano-webapp.conf" "$b/%{_sysconfdir}/apache2/conf.d"
+mkdir -p "$b/%{_sysconfdir}/kopano/webapp"
+mv "$d/%{name}/config.php.dist" "$b/%{_sysconfdir}/kopano/webapp/config.php"
+ln -s "%{_sysconfdir}/kopano/webapp/config.php" \
+ "$d/%{name}/config.php"
+rm "$d/%{name}/debug.php.dist"
+mkdir -p "$b%{_localstatedir}/lib/%{name}/tmp"
%if 0%{?fdupes:1}
-%fdupes %buildroot/%_prefix
+%fdupes %{buildroot}/%{_prefix}
%endif
%files
%defattr(-,root,root)
-%_datadir/%name
-%exclude %plugindir/*
-%exclude %langdir
-%dir %_sysconfdir/kopano
-%dir %_sysconfdir/kopano/webapp
-%config(noreplace) %_sysconfdir/kopano/webapp/config.php
-%dir %_sysconfdir/apache2
-%dir %_sysconfdir/apache2/conf.d
-%config(noreplace) %_sysconfdir/apache2/conf.d/kopano-webapp.conf
-%dir /var/lib/kopano-webapp
-%dir %attr(0775, wwwrun, www) /var/lib/kopano-webapp/tmp
+%{_datadir}/%{name}
+%exclude %{plugindir}/*
+%exclude %{langdir}
+%dir %{_sysconfdir}/kopano
+%dir %{_sysconfdir}/kopano/webapp
+%config(noreplace) %{_sysconfdir}/kopano/webapp/config.php
+%dir %{_sysconfdir}/apache2
+%dir %{_sysconfdir}/apache2/conf.d
+%config(noreplace) %{_sysconfdir}/apache2/conf.d/kopano-webapp.conf
+%dir %{_localstatedir}/lib/kopano-webapp
+%dir %attr(0775, wwwrun, www) %{_localstatedir}/lib/kopano-webapp/tmp
%files lang
%defattr(-,root,root)
-%dir %langdir
+%dir %{langdir}
#lang(bg_BG) %langdir/bg_BG.UTF-8
-%lang(ca_ES) %langdir/ca_ES.UTF-8
-%lang(cs_CZ) %langdir/cs_CZ.UTF-8
-%lang(da_DK) %langdir/da_DK.UTF-8
-%lang(de_DE) %langdir/de_DE.UTF-8
-%lang(el_GR) %langdir/el_GR.UTF-8
-%lang(en_US) %langdir/en_US.UTF-8
-%lang(es_CA) %langdir/es_CA.UTF-8
-%lang(es_ES) %langdir/es_ES.UTF-8
-%lang(et_EE) %langdir/et_EE.UTF-8
-%lang(fa_IR) %langdir/fa_IR.UTF-8
-%lang(fi_FI) %langdir/fi_FI.UTF-8
-%lang(fr_FR) %langdir/fr_FR.UTF-8
-%lang(gl_ES) %langdir/gl_ES.UTF-8
-%lang(he_IL) %langdir/he_IL.UTF-8
-%lang(hr_HR) %langdir/hr_HR.UTF-8
-%lang(hu_HU) %langdir/hu_HU.UTF-8
-%lang(it_IT) %langdir/it_IT.UTF-8
-%lang(ja_JP) %langdir/ja_JP.UTF-8
-%lang(ko_KR) %langdir/ko_KR.UTF-8
-%lang(lt_LT) %langdir/lt_LT.UTF-8
-%lang(nb_NO) %langdir/nb_NO.UTF-8
-%lang(nl_NL) %langdir/nl_NL.UTF-8
-%lang(pl_PL) %langdir/pl_PL.UTF-8
-%lang(pt_BR) %langdir/pt_BR.UTF-8
-%lang(pt_PT) %langdir/pt_PT.UTF-8
-%lang(ru_RU) %langdir/ru_RU.UTF-8
-%lang(sl_SI) %langdir/sl_SI.UTF-8
-%lang(sv_SE) %langdir/sv_SE.UTF-8
-%lang(tr_TR) %langdir/tr_TR.UTF-8
-%lang(uk_UA) %langdir/uk_UA.UTF-8
-%lang(zh_CN) %langdir/zh_CN.UTF-8
-%lang(zh_TW) %langdir/zh_TW.UTF-8
+%lang(ca_ES) %{langdir}/ca_ES.UTF-8
+%lang(cs_CZ) %{langdir}/cs_CZ.UTF-8
+%lang(da_DK) %{langdir}/da_DK.UTF-8
+%lang(de_DE) %{langdir}/de_DE.UTF-8
+%lang(el_GR) %{langdir}/el_GR.UTF-8
+%lang(en_US) %{langdir}/en_US.UTF-8
+%lang(es_CA) %{langdir}/es_CA.UTF-8
+%lang(es_ES) %{langdir}/es_ES.UTF-8
+%lang(et_EE) %{langdir}/et_EE.UTF-8
+%lang(fa_IR) %{langdir}/fa_IR.UTF-8
+%lang(fi_FI) %{langdir}/fi_FI.UTF-8
+%lang(fr_FR) %{langdir}/fr_FR.UTF-8
+%lang(gl_ES) %{langdir}/gl_ES.UTF-8
+%lang(he_IL) %{langdir}/he_IL.UTF-8
+%lang(hr_HR) %{langdir}/hr_HR.UTF-8
+%lang(hu_HU) %{langdir}/hu_HU.UTF-8
+%lang(it_IT) %{langdir}/it_IT.UTF-8
+%lang(ja_JP) %{langdir}/ja_JP.UTF-8
+%lang(ko_KR) %{langdir}/ko_KR.UTF-8
+%lang(lt_LT) %{langdir}/lt_LT.UTF-8
+%lang(nb_NO) %{langdir}/nb_NO.UTF-8
+%lang(nl_NL) %{langdir}/nl_NL.UTF-8
+%lang(pl_PL) %{langdir}/pl_PL.UTF-8
+%lang(pt_BR) %{langdir}/pt_BR.UTF-8
+%lang(pt_PT) %{langdir}/pt_PT.UTF-8
+%lang(ru_RU) %{langdir}/ru_RU.UTF-8
+%lang(sl_SI) %{langdir}/sl_SI.UTF-8
+%lang(sv_SE) %{langdir}/sv_SE.UTF-8
+%lang(tr_TR) %{langdir}/tr_TR.UTF-8
+%lang(uk_UA) %{langdir}/uk_UA.UTF-8
+%lang(zh_CN) %{langdir}/zh_CN.UTF-8
+%lang(zh_TW) %{langdir}/zh_TW.UTF-8
%files contactfax
%defattr(-,root,root)
-%dir %_datadir/%name
-%dir %plugindir
-%plugindir/contactfax
+%dir %{_datadir}/%{name}
+%dir %{plugindir}
+%{plugindir}/contactfax
%files folderwidgets
%defattr(-,root,root)
-%dir %_datadir/%name
-%dir %plugindir
-%plugindir/folderwidgets
+%dir %{_datadir}/%{name}
+%dir %{plugindir}
+%{plugindir}/folderwidgets
%files gmaps
%defattr(-,root,root)
-%dir %_datadir/%name
-%dir %plugindir
-%plugindir/gmaps
+%dir %{_datadir}/%{name}
+%dir %{plugindir}
+%{plugindir}/gmaps
%files pimfolder
%defattr(-,root,root)
-%dir %_datadir/%name
-%dir %plugindir
-%plugindir/pimfolder
+%dir %{_datadir}/%{name}
+%dir %{plugindir}
+%{plugindir}/pimfolder
%files quickitems
%defattr(-,root,root)
-%dir %_datadir/%name
-%dir %plugindir
-%plugindir/quickitems
+%dir %{_datadir}/%{name}
+%dir %{plugindir}
+%{plugindir}/quickitems
%files titlecounter
%defattr(-,root,root)
-%dir %_datadir/%name
-%dir %plugindir
-%plugindir/titlecounter
+%dir %{_datadir}/%{name}
+%dir %{plugindir}
+%{plugindir}/titlecounter
%files webappmanual
%defattr(-,root,root)
-%dir %_datadir/%name
-%dir %plugindir
-%plugindir/webappmanual
+%dir %{_datadir}/%{name}
+%dir %{plugindir}
+%{plugindir}/webappmanual
%files zdeveloper
%defattr(-,root,root)
-%dir %_datadir/%name
-%dir %plugindir
-%plugindir/zdeveloper
+%dir %{_datadir}/%{name}
+%dir %{plugindir}
+%{plugindir}/zdeveloper
%changelog
++++++ _service ++++++
--- /var/tmp/diff_new_pack.Uex5jD/_old 2017-07-28 09:47:54.869967100 +0200
+++ /var/tmp/diff_new_pack.Uex5jD/_new 2017-07-28 09:47:54.873966537 +0200
@@ -1,15 +1,15 @@
<services>
- <service name="tar_scm" mode="localonly">
+ <service name="tar_scm" mode="disabled">
<param name="scm">git</param>
<param name="url">https://stash.kopano.io/scm/kw/kopano-webapp.git</param>
- <param name="revision">master</param>
+ <param name="revision">v3.3.1</param>
<param name="filename">kopano-webapp</param>
- <param name="parent-tag">v3.2.0-beta.1</param>
- <param name="versionformat">3.2.0.@TAG_OFFSET@</param>
+ <param name="parent-tag">v3.3.0</param>
+ <param name="versionformat">3.3.1</param>
</service>
- <service name="recompress" mode="localonly">
+ <service name="recompress" mode="disabled">
<param name="file">*.tar</param>
<param name="compression">xz</param>
</service>
- <service name="set_version" mode="localonly"/>
+ <service name="set_version" mode="disabled"/>
</services>
++++++ kopano-webapp-3.2.0.149.tar.xz -> kopano-webapp-3.3.1.tar.xz ++++++
/work/SRC/openSUSE:Factory/kopano-webapp/kopano-webapp-3.2.0.149.tar.xz /work/SRC/openSUSE:Factory/.kopano-webapp.new/kopano-webapp-3.3.1.tar.xz differ: char 25, line 1
1
0
Hello community,
here is the log from the commit of package rubygem-public_suffix for openSUSE:Factory checked in at 2017-07-28 09:47:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-public_suffix (Old)
and /work/SRC/openSUSE:Factory/.rubygem-public_suffix.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-public_suffix"
Fri Jul 28 09:47:15 2017 rev:1 rq:501535 version:2.0.5
Changes:
--------
New Changes file:
--- /dev/null 2017-07-20 07:30:00.335470106 +0200
+++ /work/SRC/openSUSE:Factory/.rubygem-public_suffix.new/rubygem-public_suffix.changes 2017-07-28 09:47:17.971164556 +0200
@@ -0,0 +1,5 @@
+-------------------------------------------------------------------
+Tue Jan 24 16:51:52 UTC 2017 - dkang(a)suse.com
+
+- Initial package
+
New:
----
public_suffix-2.0.5.gem
rubygem-public_suffix.changes
rubygem-public_suffix.spec
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-public_suffix.spec ++++++
#
# spec file for package rubygem-public_suffix
#
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
Name: rubygem-public_suffix
Version: 2.0.5
Release: 0
%define mod_name public_suffix
%define mod_full_name %{mod_name}-%{version}
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: %{rubygem gem2rpm}
BuildRequires: %{ruby >= 2.0}
BuildRequires: ruby-macros >= 5
Url: https://simonecarletti.com/code/publicsuffix-ruby
Source: https://rubygems.org/gems/%{mod_full_name}.gem
Summary: Domain name parser based on the Public Suffix List
License: MIT
Group: Development/Languages/Ruby
%description
PublicSuffix can parse and decompose a domain name into top level domain,
domain and subdomains.
%prep
%build
%install
%gem_install \
--doc-files="CHANGELOG.md LICENSE.txt README.md" \
-f
%gem_packages
%changelog
1
0
Hello community,
here is the log from the commit of package rubygem-gyoku for openSUSE:Factory checked in at 2017-07-28 09:46:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-gyoku (Old)
and /work/SRC/openSUSE:Factory/.rubygem-gyoku.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-gyoku"
Fri Jul 28 09:46:55 2017 rev:1 rq:501531 version:1.3.1
Changes:
--------
New Changes file:
--- /dev/null 2017-07-20 07:30:00.335470106 +0200
+++ /work/SRC/openSUSE:Factory/.rubygem-gyoku.new/rubygem-gyoku.changes 2017-07-28 09:46:58.537901839 +0200
@@ -0,0 +1,69 @@
+-------------------------------------------------------------------
+Sun Apr 5 04:38:58 UTC 2015 - coolo(a)suse.com
+
+- updated to version 1.3.1
+
+-------------------------------------------------------------------
+Thu Apr 2 04:34:03 UTC 2015 - coolo(a)suse.com
+
+- updated to version 1.3.0
+
+-------------------------------------------------------------------
+Fri Mar 13 05:30:20 UTC 2015 - coolo(a)suse.com
+
+- updated to version 1.2.3
+
+-------------------------------------------------------------------
+Fri Feb 6 18:18:15 UTC 2015 - coolo(a)suse.com
+
+- updated to version 1.2.2
+ * Fixed a bug introduced by making Gyoku threadsafe. Who knew that `$1` and the block variable that `#gsub` provides are not the same?
+
+ ## 1.2.1 (2014-09-22)
+ * Fix : [#46](https://github.com/savonrb/gyoku/pull/46) Fixed an issue where Gyoku was not threadsafe. Gyoku should now be relatively more threadsafe due to less usage of global variables.
+
+ ## 1.2.0 (2014-09-18)
+ * Feature: [#44](https://git
+
+-------------------------------------------------------------------
+Sun Jan 5 14:39:52 UTC 2014 - coolo(a)suse.com
+
+- updated to version 1.1.1
+ * Feature: [#38](https://github.com/savonrb/gyoku/pull/38) support for building nested Arrays
+ * Feature: [#36](https://github.com/savonrb/gyoku/pull/36) allow setting any objects content with :content!
+ * Deprecation: Support for ree and ruby 1.8.7 will be going away soon.
+
+-------------------------------------------------------------------
+Tue Jul 30 18:46:51 UTC 2013 - coolo(a)suse.com
+
+- updated to version 1.1.0
+ * Feature: [#30](https://github.com/savonrb/gyoku/pull/30) support for building Arrays
+ of parent tags using @attributes.
+ * Fix: [#21](https://github.com/savonrb/gyoku/pull/21) stop modifying the original Hash.
+ The original issue is [savonrb/savon#410](https://github.com/savonrb/savon/issues/410).
+
+-------------------------------------------------------------------
+Mon Dec 24 12:30:41 UTC 2012 - coolo(a)suse.com
+
+- updated to version 1.0.0
+
+ * Refactoring: Removed the global configuration. This should really only affect the
+ `Gyoku.convert_symbols_to` shortcut which was removed as well. If you're using Gyoku
+ with Savon 2.0, there's now an option for that. If you're using Gyoku on itself,
+ you can pass it the `:key_converter` option instead.
+
+ Feature: [#19](https://github.com/savonrb/gyoku/pull/19) adds support for explicit XML attributes.
+
+ Feature: [#17](https://github.com/savonrb/gyoku/pull/17) adds an `:upcase` formula.
+
+
+-------------------------------------------------------------------
+Thu Jul 21 13:08:28 UTC 2011 - cmessel(a)novell.com
+
+- Use version 3.0.0 of builder
+
+-------------------------------------------------------------------
+Thu Jul 21 12:53:38 UTC 2011 - cmessel(a)novell.com
+
+- Package version 0.4.4
+
New:
----
gem2rpm.yml
gyoku-1.3.1.gem
rubygem-gyoku.changes
rubygem-gyoku.spec
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-gyoku.spec ++++++
#
# spec file for package rubygem-gyoku
#
# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
#
# This file was generated with a gem2rpm.yml and not just plain gem2rpm.
# All sections marked as MANUAL, license headers, summaries and descriptions
# can be maintained in that file. Please consult this file before editing any
# of those fields
#
Name: rubygem-gyoku
Version: 1.3.1
Release: 0
%define mod_name gyoku
%define mod_full_name %{mod_name}-%{version}
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: %{ruby >= 1.9.2}
BuildRequires: %{rubygem gem2rpm}
BuildRequires: ruby-macros >= 5
Url: https://github.com/savonrb/gyoku
Source: http://rubygems.org/gems/%{mod_full_name}.gem
Source1: gem2rpm.yml
Summary: Translates Ruby Hashes to XML
License: MIT
Group: Development/Languages/Ruby
%description
Gyoku translates Ruby Hashes to XML.
%prep
%build
%install
%gem_install \
--doc-files="CHANGELOG.md MIT-LICENSE README.md" \
-f
%gem_packages
%changelog
++++++ gem2rpm.yml ++++++
# ---
# ## used by gem2rpm
# :summary: this is a custom summary
# ## used by gem2rpm
# :description: |-
# this is a custom description
#
# it can be multiline
# ## used by gem2rpm
# :license: MIT or Ruby
# ## used by gem2rpm and gem_packages
# :version_suffix: -x_y
# ## used by gem2rpm and gem_packages
# :disable_docs: true
# ## used by gem2rpm
# :disable_automatic_rdoc_dep: true
# ## used by gem2rpm
# :preamble: |-
# BuildRequires: foobar
# Requires: foobar
# ## used by gem2rpm
# :patches:
# foo.patch: -p1
# bar.patch:
# ## used by gem2rpm
:sources:
# - foo.desktop
# - bar.desktop
# :gem_install_args: '....'
# ## used by gem2rpm
# :pre_install: |-
# %if 0%{?use_system_libev}
# export USE_VENDORED_LIBEV="no"
# %endif
# ## used by gem2rpm
# :post_install: |-
# # delete custom files here or do other fancy stuff
# install -D -m 0644 %{S:1} %{buildroot}%{_bindir}/gem2rpm-opensuse
# ## used by gem2rpm
# :testsuite_command: |-
# (pushd %{buildroot}%{gem_base}/gems/%{mod_full_name} && rake test)
# ## used by gem2rpm
# :filelist: |-
# /usr/bin/gem2rpm-opensuse
# ## used by gem2rpm
# :scripts:
# :post: |-
# /bin/echo foo
# ## used by gem_packages
# :main:
# :preamble: |-
# Requires: util-linux
# Recommends: pwgen
# :filelist: |-
# /usr/bin/gem2rpm-opensuse
# ## used by gem_packages
# :custom:
# apache:
# :preamble: |-
# Requires: .....
# :filelist: |-
# /etc/apache2/conf.d/passenger.conf
# :summary: Custom summary is optional
# :description: |-
# Custom description is optional
#
# bar
# :post: |-
# /bin/echo foo
#
1
0
Hello community,
here is the log from the commit of package xdmbgrd for openSUSE:Factory checked in at 2017-07-28 09:45:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xdmbgrd (Old)
and /work/SRC/openSUSE:Factory/.xdmbgrd.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xdmbgrd"
Fri Jul 28 09:45:40 2017 rev:20 rq:512735 version:0.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/xdmbgrd/xdmbgrd.changes 2014-11-04 17:28:16.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.xdmbgrd.new/xdmbgrd.changes 2017-07-28 09:45:40.904836698 +0200
@@ -1,0 +2,6 @@
+Thu Jul 27 05:07:21 UTC 2017 - bwiedemann(a)suse.com
+
+- Update xdmbgrd-piggyback.dif to not include PID in piggyback
+ temp filenames to generate reproducible output
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xdmbgrd.spec ++++++
--- /var/tmp/diff_new_pack.DU42hj/_old 2017-07-28 09:45:41.508751636 +0200
+++ /var/tmp/diff_new_pack.DU42hj/_new 2017-07-28 09:45:41.512751073 +0200
@@ -1,7 +1,7 @@
#
# spec file for package xdmbgrd
#
-# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
++++++ xdmbgrd-piggyback.dif ++++++
--- /var/tmp/diff_new_pack.DU42hj/_old 2017-07-28 09:45:41.564743750 +0200
+++ /var/tmp/diff_new_pack.DU42hj/_new 2017-07-28 09:45:41.568743187 +0200
@@ -2,8 +2,21 @@
piggyback | 4 ++++
1 file changed, 4 insertions(+)
---- piggyback
-+++ piggyback 2007-10-04 20:08:05.000000000 +0000
+Index: piggyback
+===================================================================
+--- piggyback.orig
++++ piggyback
+@@ -37,8 +37,8 @@ if test -z "$head" ; then
+ head=${file%%.o}.h
+ fi
+
+-tmpfile=$$piggy.gz
+-tmplink=$$piggy.lnk
++tmpfile=${fname}piggy.gz
++tmplink=${fname}piggy.lnk
+ trap "rm -rf $tmpfile $tmplink" 0 1 2 3 5 9 10 13 15
+
+ arch=$(uname -m)
@@ -47,6 +47,10 @@ case $arch in
ld_m=elf64alpha
ld_b=elf64-alpha
1
0
Hello community,
here is the log from the commit of package k3b for openSUSE:Factory checked in at 2017-07-28 09:45:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/k3b (Old)
and /work/SRC/openSUSE:Factory/.k3b.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "k3b"
Fri Jul 28 09:45:24 2017 rev:74 rq:512731 version:17.04.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/k3b/k3b.changes 2017-07-25 11:26:58.006132814 +0200
+++ /work/SRC/openSUSE:Factory/.k3b.new/k3b.changes 2017-07-28 09:45:39.661011892 +0200
@@ -1,0 +2,10 @@
+Wed Jul 26 15:41:52 UTC 2017 - wbauer(a)tmo.at
+
+- Add Don-t-suggest-to-install-libburn.patch to not suggest to the
+ user to install libburn on startup. The message is actually
+ misleading as k3b would actually use cdrskin which is packaged
+ separately in openSUSE. But let's stick to prefer the proven
+ cdrecord for now, people can still install cdrskin if they'd
+ prefer to use it. (boo#1050715)
+
+-------------------------------------------------------------------
New:
----
Don-t-suggest-to-install-libburn.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ k3b.spec ++++++
--- /var/tmp/diff_new_pack.AbpMOc/_old 2017-07-28 09:45:40.604878948 +0200
+++ /var/tmp/diff_new_pack.AbpMOc/_new 2017-07-28 09:45:40.608878384 +0200
@@ -32,6 +32,8 @@
Source: %{name}-%{version}.tar.xz
# PATCH-FIX-OPENSUSE
Patch: Re-enable-transcode-support.patch
+# PATCH-FIX-OPENSUSE
+Patch1: Don-t-suggest-to-install-libburn.patch
BuildRequires: extra-cmake-modules
BuildRequires: fdupes
@@ -119,6 +121,7 @@
%prep
%setup -q
%patch -p1
+%patch1 -p1
%build
CXXFLAGS="%{optflags} -fno-strict-aliasing"
++++++ Don-t-suggest-to-install-libburn.patch ++++++
>From 8cf4e9d0da6fd3ad794928faad8619aa66c3ddd3 Mon Sep 17 00:00:00 2001
From: Wolfgang Bauer <wbauer(a)tmo.at>
Date: Wed, 26 Jul 2017 17:34:21 +0200
Subject: [PATCH] Don't suggest to install libburn
The message is actually misleading because k3b uses cdrskin which is
packaged separately to libburn in openSUSE.
Let's stick to prefer cdrecord for now.
People who want to use cdrskin instead can still install it.
(boo#1050715)
---
src/k3bsystemproblemdialog.cpp | 6 ------
1 file changed, 6 deletions(-)
diff --git a/src/k3bsystemproblemdialog.cpp b/src/k3bsystemproblemdialog.cpp
index 126ad3120..9897903e0 100644
--- a/src/k3bsystemproblemdialog.cpp
+++ b/src/k3bsystemproblemdialog.cpp
@@ -288,12 +288,6 @@ void K3b::SystemProblemDialog::checkSystem( QWidget* parent, NotificationLevel l
#endif
}
- if (!k3bcore->externalBinManager()->foundBin("cdrskin")) {
- problems.append(K3b::SystemProblem(K3b::SystemProblem::CRITICAL,
- i18n("Unable to find %1 executable", QString("cdrskin")),
- i18n("K3b uses cdrskin in place of cdrecord."),
- i18n("Install the libburn package which contains cdrskin")));
- }
}
--
2.13.1
1
0