[Gpg4win-commits] [git] Gpg4win - branch, master, updated. gpg4win-2.2.4-9-g72f939b

by Andre Heinecke cvs at cvs.gnupg.org
Fri Jun 5 12:26:05 CEST 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG for Windows".

The branch, master has been updated
       via  72f939b4ce5a1f4e64c9ae355ec2f17b70765831 (commit)
       via  e37f88bbc30f61b0256d52007287cfc495687f68 (commit)
       via  fc9dc46dfe28c0dd928eff3f812a0ce96b070c3b (commit)
       via  7b11c55fcadd51196bfc3c2c19007aa9dca12ccb (commit)
       via  a8db5492263320d6cfd7b47cba05e587b1ae6d5b (commit)
       via  8ef938c1cce5fc72ea31fbd8db2955985426484d (commit)
       via  8a18b24e825d9881a32d298872e36de28045ddd2 (commit)
      from  a2f4f950dfb43c53f2271bf23f3f35bc02d25d18 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 72f939b4ce5a1f4e64c9ae355ec2f17b70765831
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Jun 5 12:23:24 2015 +0200

    Enable build on Debian Jessie
    
    * Makefile.am (EXTRA_DIST): Add new patches.
    * patches/gnutls-2.12.23/25_updatedgdocfrommaster.patch,
    patches/scute-1.4.0/workaround-broken-libtool.patch,
    patches/w32pth-2.0.5/workaround-broken-libtool.patch: New.
    
    --
    The gnutls patch fixes building of doc. Taken from debian.
    The two other patches workaround the libtool problem.

diff --git a/Makefile.am b/Makefile.am
index 954509a..3cc8bff 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -51,10 +51,13 @@ EXTRA_DIST = autogen.sh README.GIT ONEWS \
         patches/gnutls-2.12.23/07-cve-2015-0294.patch \
         patches/gnutls-2.12.23/fix-gcrypt-private-api-usage.patch \
         patches/gnutls-2.12.23/gnulib-mingw-w64-fix.patch \
+		patches/gnutls-2.12.23/25_updatedgdocfrommaster.patch \
         patches/gtkhtml2_viewer-0.34/80-src-makefile.postcfg-build \
         patches/libtasn1-2.14/gnulib-mingw-w64-fix.patch \
         patches/pthreads-w32-2-8-0-release/01-make.patch \
-        patches/pthreads-w32-2-8-0-release/02-mingw_w64_timespec_compatibility.patch
+        patches/pthreads-w32-2-8-0-release/02-mingw_w64_timespec_compatibility.patch \
+		patches/w32pth-2.0.5/workaround-broken-libtool.patch \
+		patches/scute-1.4.0/workaround-broken-libtool.patch
 
 copy-news:
 	cp NEWS doc/website/NEWS.last
diff --git a/patches/gnutls-2.12.23/25_updatedgdocfrommaster.patch b/patches/gnutls-2.12.23/25_updatedgdocfrommaster.patch
new file mode 100755
index 0000000..2f77d3b
--- /dev/null
+++ b/patches/gnutls-2.12.23/25_updatedgdocfrommaster.patch
@@ -0,0 +1,637 @@
+#! /bin/sh
+patch -p1 -l -f $* < $0
+exit $?
+
+Description: Update gdoc script from gnutls master.
+ This includes bef38b98c0536d81c0e4b2e78a9182e1df1d451c among other fixes:
+ .
+ [PATCH] Avoid depending on hash order in gdoc.
+ .
+ Previously, gdoc had a hash of regexp replacements for each output
+ format, and applied the replacements in the order that "keys" returned
+ for the hash. However, not all orders are safe -- and now that Perl 5.18
+ randomises hash order per-process, it only worked sometimes!
+Origin: upstream
+Bug-Debian: http://bugs.debian.org/724167
+Forwarded: not-needed
+
+--- gnutls26-2.12.23.orig/doc/scripts/gdoc
++++ gnutls26-2.12.23/doc/scripts/gdoc
+@@ -1,4 +1,6 @@
+-#!/usr/bin/perl
++eval '(exit $?0)' && eval 'exec perl "$0" ${1+"$@"}'
++  & eval 'exec perl "$0" $argv:q'
++    if 0;
+
+ ## Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Simon Josefsson
+ ##                    added -texinfo, -listfunc, -pkg-name
+@@ -7,6 +9,8 @@
+ ## Copyright (c) 2001, 2002 Nikos Mavrogiannopoulos
+ ##                    added -tex
+ ## Copyright (c) 1998 Michael Zucchi
++## Copyright (c) 2013 Adam Sampson
++##                    made highlighting not depend on hash order, for Perl 5.18
+
+ # 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
+@@ -132,57 +136,59 @@
+ use POSIX qw(strftime);
+
+ # match expressions used to find embedded type information
+-$type_constant = "((?<!\")\\\%(\\w+))";
+-$type_func = "(\\w+\\(\\))";
+-$type_param = "\\\@(\\w+)";
+-$type_struct = "\\\#(\\w+)";
+-$type_env = "(\\\$\\w+)";
++$type_constant = "\\\%([A-Za-z0-9_]+)";
++$type_func = "([A-Za-z0-9_]+\\(\\))";
++$type_param = '\@([A-Za-z0-9_]+)\s*';
++$type_struct = "\\\#([A-Za-z0-9_]+)";
++$type_env = "(\\\$[A-Za-z0-9_]+)";
+
+
+ # Output conversion substitutions.
+ #  One for each output format
+
+ # these work fairly well
+-%highlights_html = ( $type_constant, "<i>\$2</i>",
+-		     $type_func, "<b>\$1</b>",
+-		     $type_struct, "<i>\$1</i>",
+-		     $type_param, "<tt><b>\$1</b></tt>" );
++ at highlights_html = ( [$type_constant, '"<i>$1</i>"'],
++		     [$type_func, '"<b>$1</b>"'],
++		     [$type_struct, '"<i>$1</i>"'],
++		     [$type_param, '" <tt><b>$1</b></tt> "'] );
+ $blankline_html = "<p>";
+
+-%highlights_texinfo = ( $type_constant, "\\\@code{\$2}",
+-			$type_func, "\\\@code{\$1}",
+-			$type_struct, "\\\@code{\$1}",
+-			$type_param, "\\\@code{\$1}" );
++ at highlights_texinfo = ( [$type_param, '" \@code{$1} "'],
++			[$type_constant, '"\@code{$1} "'],
++			[$type_func, '"\@code{$1} "'],
++			[$type_struct, '"\@code{$1} "'],
++			 );
+ $blankline_texinfo = "";
+
+-%highlights_tex = ( $type_constant, "{\\\\it \$2}",
+-		     $type_func, "{\\\\bf \$1}",
+-		     $type_struct, "{\\\\it \$1}",
+-		     $type_param, "{\\\\bf \$1}" );
++ at highlights_tex = ( [$type_param, '" {\\\bf $1} "'],
++		[$type_constant, '"{\\\it $1}"'],
++		[$type_func, '"{\\\bf $1}"'],
++		[$type_struct, '"{\\\it $1}"'],
++		      );
+ $blankline_tex = "\\\\";
+
+ # sgml, docbook format
+-%highlights_sgml = ( $type_constant, "<replaceable class=\"option\">\$2</replaceable>",
+-		     $type_func, "<function>\$1</function>",
+-		     $type_struct, "<structname>\$1</structname>",
+-		     $type_env, "<envar>\$1</envar>",
+-		     $type_param, "<parameter>\$1</parameter>" );
++ at highlights_sgml = ( [$type_constant, '"<replaceable class=\"option\">$1</replaceable>"'],
++		     [$type_func, '"<function>$1</function>"'],
++		     [$type_struct, '"<structname>$1</structname>"'],
++		     [$type_env, '"<envar>$1</envar>"'],
++		     [$type_param, '" <parameter>$1</parameter> "'] );
+ $blankline_sgml = "</para><para>\n";
+
+ # these are pretty rough
+-%highlights_man = ( $type_constant, "\\\\fB\$2\\\\fP",
+-		    $type_func, "\\\\fB\$1\\\\fP",
+-		    $type_struct, "\\\\fB\$1\\\\fP",
+-		    $type_param, "\\\\fI\$1\\\\fP" );
++ at highlights_man = ( [$type_constant, '"\\\fB$1\\\fP"'],
++		    [$type_func, '"\\\fB$1\\\fP"'],
++		    [$type_struct, '"\\\fB$1\\\fP"'],
++		    [$type_param, '" \\\fI$1\\\fP "'] );
+ $blankline_man = "";
+
+ # text-mode
+-%highlights_text = ( $type_constant, "\$2",
+-		     $type_func, "\$1",
+-		     $type_struct, "\$1",
+-		     $type_param, "\$1" );
++ at highlights_text = ( [$type_constant, '"$1"'],
++		     [$type_func, '"$1"'],
++		     [$type_struct, '"$1"'],
++		     [$type_param, '"$1 "'] );
+ $blankline_text = "";
+-
++my $lineprefix = "";
+
+ sub usage {
+     print "Usage: $0 [ -v ] [ -docbook | -html | -text | -man | -tex | -texinfo  -listfunc ]\n";
+@@ -201,7 +207,7 @@ if ($#ARGV==-1) {
+
+ $verbose = 0;
+ $output_mode = "man";
+-%highlights = %highlights_man;
++ at highlights = @highlights_man;
+ $blankline = $blankline_man;
+ $modulename = "API Documentation";
+ $sourceversion = strftime "%Y-%m-%d", localtime;
+@@ -210,27 +216,27 @@ while ($ARGV[0] =~ m/^-(.*)/) {
+     $cmd = shift @ARGV;
+     if ($cmd eq "-html") {
+	$output_mode = "html";
+-	%highlights = %highlights_html;
++	@highlights = @highlights_html;
+	$blankline = $blankline_html;
+     } elsif ($cmd eq "-man") {
+	$output_mode = "man";
+-	%highlights = %highlights_man;
++	@highlights = @highlights_man;
+	$blankline = $blankline_man;
+     } elsif ($cmd eq "-tex") {
+	$output_mode = "tex";
+-	%highlights = %highlights_tex;
++	@highlights = @highlights_tex;
+	$blankline = $blankline_tex;
+     } elsif ($cmd eq "-texinfo") {
+	$output_mode = "texinfo";
+-	%highlights = %highlights_texinfo;
++	@highlights = @highlights_texinfo;
+	$blankline = $blankline_texinfo;
+     } elsif ($cmd eq "-text") {
+	$output_mode = "text";
+-	%highlights = %highlights_text;
++	@highlights = @highlights_text;
+	$blankline = $blankline_text;
+     } elsif ($cmd eq "-docbook") {
+	$output_mode = "sgml";
+-	%highlights = %highlights_sgml;
++	@highlights = @highlights_sgml;
+	$blankline = $blankline_sgml;
+     } elsif ($cmd eq "-listfunc") {
+	$output_mode = "listfunc";
+@@ -270,6 +276,8 @@ sub dump_section {
+     my $name = shift @_;
+     my $contents = join "\n", @_;
+
++    $name = " $name";
++
+     if ($name =~ m/$type_constant/) {
+	$name = $1;
+ #	print STDERR "constant section '$1' = '$contents'\n";
+@@ -280,6 +288,7 @@ sub dump_section {
+	$parameters{$name} = $contents;
+     } else {
+ #	print STDERR "other section '$name' = '$contents'\n";
++	$name =~ tr/ //d;
+	$sections{$name} = $contents;
+	push @sectionlist, $name;
+     }
+@@ -296,35 +305,15 @@ sub dump_section {
+ #  sections => %descriont descriptions
+ #
+
+-sub repstr {
+-    $pattern = shift;
+-    $repl = shift;
+-    $match1 = shift;
+-    $match2 = shift;
+-    $match3 = shift;
+-    $match4 = shift;
+-
+-    $output = $repl;
+-    $output =~ s,\$1,$match1,g;
+-    $output =~ s,\$2,$match2,g;
+-    $output =~ s,\$3,$match3,g;
+-    $output =~ s,\$4,$match4,g;
+-
+-    eval "\$return = qq/$output/";
+-
+-#    print "pattern $pattern matched 1=$match1 2=$match2 3=$match3 4=$match4 replace $repl yielded $output interpolated $return\n";
+-
+-    $return;
+-}
+-
+ sub just_highlight {
+     my $contents = join "\n", @_;
+     my $line;
+     my $ret = "";
+
+-    foreach $pattern (keys %highlights) {
+-#	print "scanning pattern $pattern ($highlights{$pattern})\n";
+-	$contents =~ s:$pattern:repstr($pattern, $highlights{$pattern}, $1, $2, $3, $4):gse;
++    foreach $highlight (@highlights) {
++	my ($pattern, $replace) = @$highlight;
++	#print "scanning pattern $pattern ($replace)\n";
++	$contents =~ s/$pattern/$replace/gees;
+     }
+     foreach $line (split "\n", $contents) {
+	if ($line eq ""){
+@@ -370,13 +359,45 @@ sub output_texinfo {
+	}
+     }
+     foreach $section (@{$args{'sectionlist'}}) {
++	$section =~ s/\@//g;
+	print "\n\@strong{$section:} " if $section ne $section_default;
+-	$args{'sections'}{$section} =~ s:([{}]):\@\1:gs;
++	$args{'sections'}{$section} =~ s:([{}]):\@$1:gs;
+	output_highlight($args{'sections'}{$section});
+     }
+     print "\@end deftypefun\n\n";
+ }
+
++sub output_enum_texinfo {
++    my %args = %{$_[0]};
++    my ($parameter, $section);
++    my $count;
++    my $name = $args{'enum'};
++    my $param;
++    my $param2;
++    my $sec;
++    my $check;
++    my $type;
++
++    print "\n\@c $name\n";
++    print "\@table \@code\n";
++
++    $check=0;
++    foreach $parameter (@{$args{'parameterlist'}}) {
++        $param1 = $parameter;
++	$param1 =~ s/_/_\@-/g;
++
++	$check = 1;
++	print "\@item ".$param1."\n";
++#	print "\n";
++
++        $param2 = $args{'parameters'}{$parameter};
++	$out = just_highlight($param2);
++	chomp $out;
++	print $out . "\n";
++    }
++    print "\@end table\n";
++}
++
+ # output in html
+ sub output_html {
+     my %args = %{$_[0]};
+@@ -428,7 +449,9 @@ sub output_tex {
+
+     $func =~ s/_/\\_/g;
+
+-    print "\n\n\\subsection{". $func . "}\n\\label{" . $args{'function'} . "}\n";
++    print "\n\n\\begin{function}\n";
++    print "\\functionTitle{". $func . "}\n";
++    print "\\index{". $func . "}\n";
+
+     $type = $args{'functiontype'};
+     $type =~ s/_/\\_/g;
+@@ -451,9 +474,8 @@ sub output_tex {
+     }
+     print ")\n";
+
+-    print "\n{\\large{Arguments}}\n";
++    print "\n\\begin{functionArguments}\n";
+
+-    print "\\begin{itemize}\n";
+     $check=0;
+     foreach $parameter (@{$args{'parameterlist'}}) {
+         $param1 = $args{'parametertypes'}{$parameter};
+@@ -462,11 +484,12 @@ sub output_tex {
+	$param2 =~ s/_/\\_/g;
+
+	$check = 1;
+-	print "\\item {\\it ".$param1."} {\\bf ".$param2."}: \n";
++	print "\\functionArgument {\\it ".$param1."} {\\bf ".$param2."}: \n";
+ #	print "\n";
+
+	$param3 = $args{'parameters'}{$parameter};
+-	$param3 =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
++	$param3 =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
++	$param3 =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;
+
+	$out = just_highlight($param3);
+	$out =~ s/_/\\_/g;
+@@ -475,31 +498,72 @@ sub output_tex {
+     if ($check==0) {
+	print "\\item void\n";
+     }
+-    print "\\end{itemize}\n";
++    print "\\end{functionArguments}\n";
+
+     foreach $section (@{$args{'sectionlist'}}) {
+	$sec = $section;
+	$sec =~ s/_/\\_/g;
+-	$sec =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
++	$sec =~ s/#([a-zA-Z\_]+)/{\\it $1}/g;
+
+-	print "\n{\\large{$sec}}\\\\\n";
+-	print "\\begin{rmfamily}\n";
++	print "\n\\begin{function${sec}}\n";
++	$out = $args{'sections'}{$section};
+
+-	$sec = $args{'sections'}{$section};
+-	$sec =~ s/\\:/:/g;
+-	$sec =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
+-	$sec =~ s/->/\$\\rightarrow\$/g;
+-	$sec =~ s/([0-9]+)\^([0-9]+)/\$\{\1\}\^\{\2\}\$/g;
+-
+-	$out = just_highlight($sec);
+-	$out =~ s/_/\\_/g;
++	$out =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
++	$out =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;
++	$out =~ s/\@([a-zA-Z\_]+)/{\\bf $1}/g;
++	$out =~ s/_/\\_\\-/g;
++        $out =~ s/\$/\\\$/g;
++	$out =~ s/#/\\#/g;
++	$out =~ s/\n\n/\n/g;
++	$out =~ s/\\:/:/g;
++	$out =~ s/\-\>/\$\\rightarrow\$/g;
++	$out =~ s/([0-9]+)\^([0-9]+)/\$\{$1\}\^\{$2\}\$/g;
+
+	print $out;
+-	print "\\end{rmfamily}\n";
++	print "\\end{function${sec}}\n";
+     }
+-    print "\n";
++    print "\\end{function}\n\n";
+ }
+
++sub output_enum_tex {
++    my %args = %{$_[0]};
++    my ($parameter, $section);
++    my $count;
++    my $name = $args{'enum'};
++    my $param;
++    my $param2;
++    my $sec;
++    my $check;
++    my $type;
++
++    print "\n\n\\begin{enum}\n";
++    $name =~ s/_/\\_/g;
++    print "\\enumTitle{". $name . "}\n";
++    print "\\index{". $name . "}\n";
++
++    print "\n\\begin{enumList}\n";
++
++    $check=0;
++    foreach $parameter (@{$args{'parameterlist'}}) {
++        $param1 = $parameter;
++	$param1 =~ s/_/\\_\\-/g;
++
++	$check = 1;
++	print "\\enumElement{".$param1."}{";
++#	print "\n";
++
++        $param2 = $args{'parameters'}{$parameter};
++	$param2 =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
++	$param2 =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;
++	$out = just_highlight($param2);
++	$out =~ s/_/\\_/g;
++	chomp $out;
++	print $out . "}\n";
++    }
++    print "\\end{enumList}\n";
++
++    print "\\end{enum}\n\n";
++}
+
+ # output in sgml DocBook
+ sub output_sgml {
+@@ -639,11 +703,14 @@ sub output_man {
+     if ($args{'bugsto'}) {
+	print ".SH \"REPORTING BUGS\"\n";
+	print "Report bugs to <". $args{'bugsto'} . ">.\n";
++        print ".br\n";
++	print "General guidelines for reporting bugs: http://www.gnu.org/gethelp/\n";
++        print ".br\n";
+	if ($args{'pkgname'}) {
+	    print $args{'pkgname'} . " home page: " .
+		"http://www.gnu.org/software/" . $args{'module'} . "/\n";
+	}
+-	print "General help using GNU software: http://www.gnu.org/gethelp/\n";
++	print "\n";
+     }
+
+     if ($args{'copyright'}) {
+@@ -670,6 +737,10 @@ sub output_man {
+	print ".B info " . $args{'seeinfo'} . "\n";
+	print ".PP\n";
+	print "should give you access to the complete manual.\n";
++	print "As an alternative you may obtain the manual from:\n";
++	print ".IP\n";
++	print ".B http://www.gnu.org/software/" . $args{'module'} . "/manual/\n";
++	print ".PP\n";
+     }
+ }
+
+@@ -705,6 +776,10 @@ sub output_function {
+     eval "output_".$output_mode."(\@_);";
+ }
+
++sub output_enum {
++    eval "output_enum_".$output_mode."(\@_);";
++}
++
+
+ ##
+ # takes a function prototype and spits out all the details
+@@ -744,7 +819,7 @@ sub dump_function {
+ #	    print STDERR " :> @args\n";
+	    $type = join " ", @args;
+
+-	    if ($parameters{$param} eq "" && $param != "void") {
++	    if ((!defined($parameters{$param}) || $parameters{$param} eq "") && $param ne "void") {
+		$parameters{$param} = "-- undescribed --";
+		print STDERR "warning: $lineno: Function parameter '$param' not described in '$function_name'\n";
+	    }
+@@ -781,6 +856,56 @@ sub dump_function {
+     }
+ }
+
++sub dump_enum {
++    my $prototype = shift @_;
++
++    if (($prototype =~ m/^\s*typedef\s+enum\s*[a-zA-Z0-9_~:]*\s*\{([\-a-zA-Z0-9_~=,:\s\(\)\<]+)\s*\}\s*([a-zA-Z0-9_]+);.*/)) {
++#        || $prototype =~ m/^\s*enum\s+([a-zA-Z0-9_~:]+).*/) {
++        $args = $1;
++	$name = $2;
++
++	foreach $arg (split ',', $args) {
++	    # strip leading/trailing spaces
++	    $arg =~ s/^\s*//;
++	    $arg =~ s/\s*$//;
++	    $arg =~ s/([A-Za-z0-9_]+)\s*=.*/$1/g;
++#	    print STDERR "SCAN ARG: '$arg'\n";
++
++            next if $arg eq '';
++	    if ((!defined($parameters{$arg}) || $parameters{$arg} eq "")) {
++		$parameters{$arg} = "-- undescribed --";
++		print STDERR "warning: $lineno: Enumeration parameter '$arg' not described in '$name'\n";
++	    }
++
++	    push @parameterlist, $arg;
++
++#	    print STDERR "param = '$arg'\n";
++	}
++    } else {
++#	print STDERR "warning: $lineno: Cannot understand enumeration: '$prototype'\n";
++	return;
++    }
++
++    output_enum({'enum' => $name,
++			 'module' => $modulename,
++			 'sourceversion' => $sourceversion,
++			 'include' => $include,
++			 'includefuncprefix' => $includefuncprefix,
++			 'bugsto' => $bugsto,
++			 'pkgname' => $pkgname,
++			 'copyright' => $copyright,
++			 'verbatimcopying' => $verbatimcopying,
++			 'seeinfo' => $seeinfo,
++			 'functiontype' => $return_type,
++			 'parameterlist' => \@parameterlist,
++			 'parameters' => \%parameters,
++			 'parametertypes' => \%parametertypes,
++			 'sectionlist' => \@sectionlist,
++			 'sections' => \%sections,
++			 'purpose' => $function_purpose
++			 });
++}
++
+ ######################################################################
+ # main
+ # states
+@@ -797,7 +922,7 @@ $doc_start = "^/\\*\\*\$";
+ $doc_end = "\\*/";
+ $doc_com = "\\s*\\*\\s*";
+ $doc_func = $doc_com."(\\w+):?";
+-$doc_sect = $doc_com."([".$doc_special."[:upper:]][\\w ]+):\\s*(.*)";
++$doc_sect = $doc_com."([".$doc_special."[:upper:]][\\w]+):\\s*(.*)";
+ $doc_content = $doc_com."(.*)";
+
+ %constants = ();
+@@ -809,6 +934,7 @@ $doc_content = $doc_com."(.*)";
+ $contents = "";
+ $section_default = "Description";	# default section
+ $section = $section_default;
++$enum = 0;
+
+ $lineno = 0;
+ foreach $file (@ARGV) {
+@@ -816,18 +942,21 @@ foreach $file (@ARGV) {
+	print STDERR "Error: Cannot open file $file\n";
+	next;
+     }
+-    while (<IN>) {
++    while ($line = <IN>) {
+	$lineno++;
+
+	if ($state == 0) {
+-	    if (/$doc_start/o) {
++	    if ($line =~ /$doc_start/o) {
+		$state = 1;		# next line is always the function name
++#	    print STDERR "XXX: start of doc comment\n";
+	    }
+	} elsif ($state == 1) {	# this line is the function name (always)
+-	    if (/$doc_func/o) {
++	    if ($line =~ /$doc_func/o) {
+		$function = $1;
+		$state = 2;
+-		if (/-\s*(.*)/) {
++#	    print STDERR "XXX: start of doc comment, looking for prototype\n";
++
++		if ($line =~ /-\s*(.*)/) {
+		    $function_purpose = $1;
+		} else {
+		    $function_purpose = "";
+@@ -841,11 +970,11 @@ foreach $file (@ARGV) {
+		$state = 0;
+	    }
+	} elsif ($state == 2) {	# look for head: lines, and include content
+-	    if (/$doc_sect/o) {
++	    if ($line =~ /$doc_sect/o) {
+		$newsection = $1;
+		$newcontents = $2;
+
+-		if ($contents ne "") {
++		if ($contents ne '') {
+		    dump_section($section, $contents);
+		    $section = $section_default;
+		}
+@@ -855,7 +984,7 @@ foreach $file (@ARGV) {
+		    $contents .= "\n";
+		}
+		$section = $newsection;
+-	    } elsif (/$doc_end/) {
++	    } elsif ($line =~ /$doc_end/) {
+
+		if ($contents ne "") {
+		    dump_section($section, $contents);
+@@ -863,13 +992,12 @@ foreach $file (@ARGV) {
+		    $contents = "";
+		}
+
+-#	    print STDERR "end of doc comment, looking for prototype\n";
+		$prototype = "";
+		$state = 3;
+-	    } elsif (/$doc_content/) {
++	    } elsif ($line =~ /$doc_content/) {
+		# miguel-style comment kludge, look for blank lines after
+		# @parameter line to signify start of description
+-		if ($1 eq "" && $section =~ m/^@/) {
++		if ($1 eq '' && $section =~ m/^@/) {
+		    dump_section($section, $contents);
+		    $section = $section_default;
+		    $contents = "";
+@@ -881,13 +1009,16 @@ foreach $file (@ARGV) {
+		print STDERR "warning: $lineno: Bad line: $_";
+	    }
+	} elsif ($state == 3) {	# scanning for function { (end of prototype)
+-	    if (m#\s*/\*\s+MACDOC\s*#io) {
++	    if ($line =~ m#\s*/\*\s+MACDOC\s*#io) {
+	      # do nothing
+	    }
+-	    elsif (/([^\{]*)/) {
++	    elsif ($enum == 1 && $line =~ /(^\s*\{).*/) {
++		$prototype .= "{";
++	    }
++	    elsif ($line =~ /([^\{]*)/) {
+		$prototype .= $1;
+	    }
+-	    if (/\{/) {
++	    if ($enum == 0 && $line =~ /\{/) {
+		$prototype =~ s@/\*.*?\*/@@gos;	# strip comments.
+		$prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
+		$prototype =~ s@^ +@@gos; # strip leading spaces
+@@ -901,9 +1032,32 @@ foreach $file (@ARGV) {
+		%sections = ();
+		@sectionlist = ();
+		$prototype = "";
++		$enum = 0;
+
+		$state = 0;
+	    }
++	    elsif ($enum == 1 && $line =~ /\}/) {
++		$prototype =~ s@/\*.*?\*/@@gos;	# strip comments.
++		$prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
++		$prototype =~ s@^ +@@gos; # strip leading spaces
++		dump_enum($prototype);
++
++		$function = "";
++		%constants = ();
++		%parameters = ();
++		%parametertypes = ();
++		@parameterlist = ();
++		%sections = ();
++		@sectionlist = ();
++		$prototype = "";
++		$enum = 0;
++
++		$state = 0;
++	    }
++	    elsif ($line =~ /([a-zA-Z\s]+)enum(.*)$/) {
++	        $enum = 1;
++	    }
++
+	}
+     }
+ }
diff --git a/patches/scute-1.4.0/workaround-broken-libtool.patch b/patches/scute-1.4.0/workaround-broken-libtool.patch
new file mode 100755
index 0000000..90dc776
--- /dev/null
+++ b/patches/scute-1.4.0/workaround-broken-libtool.patch
@@ -0,0 +1,40 @@
+#! /bin/sh
+patch -p1 -f $* < $0
+exit $?
+
+diff -Nru scute-1.4.0.orig/src/scute.def scute-1.4.0/src/scute.def
+--- scute-1.4.0.orig/src/scute.def	2015-06-05 11:56:03.876727509 +0200
++++ scute-1.4.0/src/scute.def	2015-06-05 11:56:23.572873320 +0200
+@@ -1,32 +1,3 @@
+-; scute.def - List of symbols to export.
+-; Copyright (C) 2005, 2006 g10 Code GmbH
+-;
+-; This file is part of Scute.
+-;
+-; Scute 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 2 of the License, or
+-; (at your option) any later version.
+-;
+-; Scute 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 Scute; if not, write to the Free Software Foundation,
+-; Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+-;
+-; In addition, as a special exception, g10 Code GmbH gives permission
+-; to link this library: with the Mozilla Fondations's code for
+-; Mozilla (or with modified versions of it that use the same license
+-; as the "Mozilla" code), and distribute the linked executables.  You
+-; must obey the GNU General Public License in all respects for all of
+-; the code used other than "Mozilla".  If you modify this file, you
+-; may extend this exception to your version of the file, but you are
+-; not obligated to do so.  If you do not wish to do so, delete this
+-; exception statement from your version.
+-
+ EXPORTS
+     C_CancelFunction			@1
+     C_CloseAllSessions			@2
diff --git a/patches/w32pth-2.0.5/workaround-broken-libtool.patch b/patches/w32pth-2.0.5/workaround-broken-libtool.patch
new file mode 100755
index 0000000..d434383
--- /dev/null
+++ b/patches/w32pth-2.0.5/workaround-broken-libtool.patch
@@ -0,0 +1,32 @@
+#! /bin/sh
+patch -p1 -f $* < $0
+exit $?
+
+diff -u w32pth-2.0.5.orig/libw32pth.def w32pth-2.0.5/libw32pth.def
+--- w32pth-2.0.5.orig/libw32pth.def	2015-06-05 11:43:26.691158210 +0200
++++ w32pth-2.0.5/libw32pth.def	2015-06-05 11:44:49.883769708 +0200
+@@ -1,23 +1,3 @@
+-;; libw32pth.def - Exported symbols for W32PTH          -*- asm -*-
+-;;      Copyright (C) 2007 g10 Code GmbH
+-;;
+-;; This file is part of W32PTH.
+-;;
+-;; W32PTH is free software; you can redistribute it and/or modify it
+-;; under the terms of the GNU Lesser General Public License as
+-;; published by the Free Software Foundation; either version 2.1 of
+-;; the License, or (at your option) any later version.
+-;; W32PTH 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
+-;; Lesser General Public License for more details.
+-;;
+-;; You should have received a copy of the GNU Lesser General Public
+-;; License along with this program; if not, write to the Free Software
+-;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+-;; 02110-1301, USA.
+-
+-
+ EXPORTS
+       pth_init  @1
+       pth_kill  @2
+Common subdirectories: w32pth-2.0.5.orig/m4 and w32pth-2.0.5/m4

commit e37f88bbc30f61b0256d52007287cfc495687f68
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Jun 5 11:29:10 2015 +0200

    Update gnupg and its libraries
    
    * patches/pinentry-0.9.0/fix-wrong-moc-files.patch: Removed.
    * patches/gnupg2-2.0.27/
    0003-gpgtar-Fix-extracting-files-with-size-512.patch: Removed.
    * patches/gnupg2-2.0.27: moved to patches/gnugp2-2.28.
    * Makefile.am (EXTRA_DIST): Update patches.
    * src/packages.current (libgpg-error, libksba, libassuan)
      (gnupg, pinentry): Updated.

diff --git a/Makefile.am b/Makefile.am
index fa073c5..954509a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -37,10 +37,9 @@ EXTRA_DIST = autogen.sh README.GIT ONEWS \
         patches/claws-mail-3.9.1/80-src-makefile.postcfg-build \
         patches/dirmngr-1.1.1/dirmngr-pth.patch \
         patches/glib-2.41.5/01-socket.patch \
-        patches/gnupg2-2.0.27/0001-Enable-wildcard-expansion-with-mingw-w64.patch \
-        patches/gnupg2-2.0.27/0002-Let-wchar_to_native-convert-to-console-codepage.patch \
-        patches/gnupg2-2.0.27/0003-gpgtar-Fix-extracting-files-with-size-512.patch \
-        patches/gnupg2-2.0.27/0005-Fix-gpgtar-8-bit-encoding-handling-on-Win32.patch \
+        patches/gnupg2-2.0.28/0001-Enable-wildcard-expansion-with-mingw-w64.patch \
+        patches/gnupg2-2.0.28/0002-Let-wchar_to_native-convert-to-console-codepage.patch \
+        patches/gnupg2-2.0.28/0005-Fix-gpgtar-8-bit-encoding-handling-on-Win32.patch \
         patches/gnupg2/01-version.patch \
         patches/gnupg2/01-version.patch.in \
         patches/gnutls-2.12.23/01-openssl-wincrypt.patch \
@@ -54,7 +53,6 @@ EXTRA_DIST = autogen.sh README.GIT ONEWS \
         patches/gnutls-2.12.23/gnulib-mingw-w64-fix.patch \
         patches/gtkhtml2_viewer-0.34/80-src-makefile.postcfg-build \
         patches/libtasn1-2.14/gnulib-mingw-w64-fix.patch \
-        patches/pinentry-0.9.0/fix-wrong-moc-files.patch \
         patches/pthreads-w32-2-8-0-release/01-make.patch \
         patches/pthreads-w32-2-8-0-release/02-mingw_w64_timespec_compatibility.patch
 
diff --git a/NEWS b/NEWS
index 5bf00ba..987a069 100644
--- a/NEWS
+++ b/NEWS
@@ -5,8 +5,14 @@
 Noteworthy changes in version 2.2.5 (unreleased)
 ------------------------------------------------
 
+(en) GnuPG has been updated to version 2.0.28. See release notes on
+     www.gnupg.org for details.
+
+(de) GnuPG wurde auf Version 2.0.28 aktualisiert. Details zu dieser
+     Version finden sich unter www.gnupg.org
+
 ~~~~~~~~~~~~~~~
-GnuPG:          2.0.27
+GnuPG:          2.0.28
 Kleopatra:      2.2.0-git945878c
 GPA:            0.9.7
 GpgOL:          1.2.1
diff --git a/packages/packages.current b/packages/packages.current
index f869433..8dd65e1 100644
--- a/packages/packages.current
+++ b/packages/packages.current
@@ -408,38 +408,40 @@ chk  6e38be3377340a21a1f13ff84b5e6adce97cd1d4
 # D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
 server ftp://ftp.gnupg.org/gcrypt
 
-# checked: 2014-07-16 ah - updated
-file libgpg-error/libgpg-error-1.13.tar.bz2
-chk  50fbff11446a7b0decbf65a6e6b0eda17b5139fb
+# last-changed: 2015-06-05
+# by: ah
+file libgpg-error/libgpg-error-1.19.tar.bz2
+chk  4997951ab058788de48b989013668eb3df1e6939
 
 # last changed: 2015-03-09
 # by: ah
 file libgcrypt/libgcrypt-1.6.3.tar.bz2
 chk  9456e7b64db9df8360a1407a38c8c958da80bbf1
 
-# checked: 2014-11-25 ah
-file libksba/libksba-1.3.2.tar.bz2
-chk  37d0893a587354af2b6e49f6ae701ca84f52da67
+# last-changed: 2015-06-05
+# by: ah
+file libksba/libksba-1.3.3.tar.bz2
+chk  86fe0436f3c8c394d32e142ee410a9f9560173fb
 
-# last changed: 2015-03-09
+# last-changed: 2015-06-05
 # by: ah
-file libassuan/libassuan-2.2.0.tar.bz2
-chk  7cf0545955ce414044bb99b871d324753dd7b2e5
+file libassuan/libassuan-2.2.1.tar.bz2
+chk  c21b86482f6a3624c2b46b91e20f8415f244233a
 
-# last changed: 2015-02-18
+# last changed: 2015-06-05
 # by: ah
-name gnupg2-2.0.27.tar.bz2
-file gnupg/gnupg-2.0.27.tar.bz2
-chk  d065be185f5bac8ea07b210ab7756e79b83b63d4
+name gnupg2-2.0.28.tar.bz2
+file gnupg/gnupg-2.0.28.tar.bz2
+chk  9a1050f72b6c9afe2b4a0a3f2e9dca2abba8e4ef
 
 # checked: 2014-07-16 ah
 file dirmngr/dirmngr-1.1.1.tar.bz2
 chk  e708d4aa5ce852f4de3f4b58f4e4f221f5e5c690
 
-# last changed: 2015-03-09
+# last changed: 2015-06-05
 # by: ah
-file pinentry/pinentry-0.9.0.tar.bz2
-chk  f8e5c774c35fbb91d84e82559baf76f6b4513236
+file pinentry/pinentry-0.9.3.tar.bz2
+chk  5551fdb62dc268dee8861b50ff93f6741b8eec8a
 
 # checked: 2014-07-16 ah
 file scute/scute-1.4.0.tar.bz2
diff --git a/patches/gnupg2-2.0.27/0003-gpgtar-Fix-extracting-files-with-size-512.patch b/patches/gnupg2-2.0.27/0003-gpgtar-Fix-extracting-files-with-size-512.patch
deleted file mode 100755
index ddde7df..0000000
--- a/patches/gnupg2-2.0.27/0003-gpgtar-Fix-extracting-files-with-size-512.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
-From 0ed2cfcf054e286b238d4ddbbb3e929482849a47 Mon Sep 17 00:00:00 2001
-From: Andre Heinecke <aheinecke at intevation.de>
-Date: Tue, 17 Mar 2015 10:48:09 +0100
-Subject: [PATCH 1/4] gpgtar: Fix extracting files with !(size % 512)
-
-* tools/gpgtar-extract.c (extract_regular): Handle size multiples
-  of RECORDSIZE.
-
---
-  If a hdr->size was a multiple of 512 the last record would
-  not have been written and the files corrupted accordingly.
-
-GnuPG-bug-id: 1926
-
-Signed-off-by: Andre Heinecke <aheinecke at intevation.de>
-
-Changed to use only if-else.
-
-Signed-off-by: Werner Koch <wk at gnupg.org>
-(cherry picked from commit 6cbbb0bec98e1acefc4c7163cc41a507469db920)
----
- tools/gpgtar-extract.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/tools/gpgtar-extract.c b/tools/gpgtar-extract.c
-index 736c7fc..b0d31e0 100644
---- a/tools/gpgtar-extract.c
-+++ b/tools/gpgtar-extract.c
-@@ -73,7 +73,11 @@ extract_regular (estream_t stream, const char *dirname,
-       if (err)
-         goto leave;
-       n++;
--      nbytes = (n < hdr->nrecords)? RECORDSIZE : (hdr->size % RECORDSIZE);
-+      if (n < hdr->nrecords || (hdr->size && !(hdr->size % RECORDSIZE)))
-+        nbytes = RECORDSIZE;
-+      else
-+        nbytes = (hdr->size % RECORDSIZE);
-+
-       nwritten = es_fwrite (record, 1, nbytes, outfp);
-       if (nwritten != nbytes)
-         {
---
-1.9.1
diff --git a/patches/gnupg2-2.0.27/0001-Enable-wildcard-expansion-with-mingw-w64.patch b/patches/gnupg2-2.0.28/0001-Enable-wildcard-expansion-with-mingw-w64.patch
similarity index 100%
rename from patches/gnupg2-2.0.27/0001-Enable-wildcard-expansion-with-mingw-w64.patch
rename to patches/gnupg2-2.0.28/0001-Enable-wildcard-expansion-with-mingw-w64.patch
diff --git a/patches/gnupg2-2.0.27/0002-Let-wchar_to_native-convert-to-console-codepage.patch b/patches/gnupg2-2.0.28/0002-Let-wchar_to_native-convert-to-console-codepage.patch
similarity index 100%
rename from patches/gnupg2-2.0.27/0002-Let-wchar_to_native-convert-to-console-codepage.patch
rename to patches/gnupg2-2.0.28/0002-Let-wchar_to_native-convert-to-console-codepage.patch
diff --git a/patches/gnupg2-2.0.27/0005-Fix-gpgtar-8-bit-encoding-handling-on-Win32.patch b/patches/gnupg2-2.0.28/0005-Fix-gpgtar-8-bit-encoding-handling-on-Win32.patch
similarity index 100%
rename from patches/gnupg2-2.0.27/0005-Fix-gpgtar-8-bit-encoding-handling-on-Win32.patch
rename to patches/gnupg2-2.0.28/0005-Fix-gpgtar-8-bit-encoding-handling-on-Win32.patch

commit fc9dc46dfe28c0dd928eff3f812a0ce96b070c3b
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Jun 5 11:17:01 2015 +0200

    Update gnupg libraries and pinentry
    
    * patches/pinentry-0.9.0/fix-wrong-moc-files.patch: Removed.
    * Makefile.am (EXTRA_DIST): Removed obsolete patch.
    * src/packages.current (libgpg-error, libksba, libassuan)
      (pinentry): Updated.

diff --git a/patches/pinentry-0.9.0/fix-wrong-moc-files.patch b/patches/pinentry-0.9.0/fix-wrong-moc-files.patch
deleted file mode 100755
index 029fbb2..0000000
--- a/patches/pinentry-0.9.0/fix-wrong-moc-files.patch
+++ /dev/null
@@ -1,515 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
---- a/qt4/pinentryconfirm.moc
-+++ /dev/null
-@@ -1,93 +0,0 @@
--/****************************************************************************
--** Meta object code from reading C++ file 'pinentryconfirm.h'
--**
--** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)
--**
--** WARNING! All changes made in this file will be lost!
--*****************************************************************************/
--
--#include "../../../s/pinentry/qt4/pinentryconfirm.h"
--#if !defined(Q_MOC_OUTPUT_REVISION)
--#error "The header file 'pinentryconfirm.h' doesn't include <QObject>."
--#elif Q_MOC_OUTPUT_REVISION != 63
--#error "This file was generated using the moc from 4.8.6. It"
--#error "cannot be used with the include files from this version of Qt."
--#error "(The moc has changed too much.)"
--#endif
--
--QT_BEGIN_MOC_NAMESPACE
--static const uint qt_meta_data_PinentryConfirm[] = {
--
-- // content:
--       6,       // revision
--       0,       // classname
--       0,    0, // classinfo
--       1,   14, // methods
--       0,    0, // properties
--       0,    0, // enums/sets
--       0,    0, // constructors
--       0,       // flags
--       0,       // signalCount
--
-- // slots: signature, parameters, type, tag, flags
--      17,   16,   16,   16, 0x08,
--
--       0        // eod
--};
--
--static const char qt_meta_stringdata_PinentryConfirm[] = {
--    "PinentryConfirm\0\0slotTimeout()\0"
--};
--
--void PinentryConfirm::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
--{
--    if (_c == QMetaObject::InvokeMetaMethod) {
--        Q_ASSERT(staticMetaObject.cast(_o));
--        PinentryConfirm *_t = static_cast<PinentryConfirm *>(_o);
--        switch (_id) {
--        case 0: _t->slotTimeout(); break;
--        default: ;
--        }
--    }
--    Q_UNUSED(_a);
--}
--
--const QMetaObjectExtraData PinentryConfirm::staticMetaObjectExtraData = {
--    0,  qt_static_metacall
--};
--
--const QMetaObject PinentryConfirm::staticMetaObject = {
--    { &QMessageBox::staticMetaObject, qt_meta_stringdata_PinentryConfirm,
--      qt_meta_data_PinentryConfirm, &staticMetaObjectExtraData }
--};
--
--#ifdef Q_NO_DATA_RELOCATION
--const QMetaObject &PinentryConfirm::getStaticMetaObject() { return staticMetaObject; }
--#endif //Q_NO_DATA_RELOCATION
--
--const QMetaObject *PinentryConfirm::metaObject() const
--{
--    return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
--}
--
--void *PinentryConfirm::qt_metacast(const char *_clname)
--{
--    if (!_clname) return 0;
--    if (!strcmp(_clname, qt_meta_stringdata_PinentryConfirm))
--        return static_cast<void*>(const_cast< PinentryConfirm*>(this));
--    return QMessageBox::qt_metacast(_clname);
--}
--
--int PinentryConfirm::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
--{
--    _id = QMessageBox::qt_metacall(_c, _id, _a);
--    if (_id < 0)
--        return _id;
--    if (_c == QMetaObject::InvokeMetaMethod) {
--        if (_id < 1)
--            qt_static_metacall(this, _c, _id, _a);
--        _id -= 1;
--    }
--    return _id;
--}
--QT_END_MOC_NAMESPACE
---- a/qt4/pinentrydialog.moc
-+++ /dev/null
-@@ -1,135 +0,0 @@
--/****************************************************************************
--** Meta object code from reading C++ file 'pinentrydialog.h'
--**
--** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)
--**
--** WARNING! All changes made in this file will be lost!
--*****************************************************************************/
--
--#include "../../../s/pinentry/qt4/pinentrydialog.h"
--#if !defined(Q_MOC_OUTPUT_REVISION)
--#error "The header file 'pinentrydialog.h' doesn't include <QObject>."
--#elif Q_MOC_OUTPUT_REVISION != 63
--#error "This file was generated using the moc from 4.8.6. It"
--#error "cannot be used with the include files from this version of Qt."
--#error "(The moc has changed too much.)"
--#endif
--
--QT_BEGIN_MOC_NAMESPACE
--static const uint qt_meta_data_PinEntryDialog[] = {
--
-- // content:
--       6,       // revision
--       0,       // classname
--       0,    0, // classinfo
--       2,   14, // methods
--       4,   24, // properties
--       0,    0, // enums/sets
--       0,    0, // constructors
--       0,       // flags
--       0,       // signalCount
--
-- // slots: signature, parameters, type, tag, flags
--      16,   15,   15,   15, 0x0a,
--      42,   15,   15,   15, 0x0a,
--
-- // properties: name, type, flags
--      64,   56, 0x0a095103,
--      76,   56, 0x0a095103,
--      93,   82, 0x0009510b,
--      97,   56, 0x0a095103,
--
--       0        // eod
--};
--
--static const char qt_meta_stringdata_PinEntryDialog[] = {
--    "PinEntryDialog\0\0updateQuality(secqstring)\0"
--    "slotTimeout()\0QString\0description\0"
--    "error\0secqstring\0pin\0prompt\0"
--};
--
--void PinEntryDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
--{
--    if (_c == QMetaObject::InvokeMetaMethod) {
--        Q_ASSERT(staticMetaObject.cast(_o));
--        PinEntryDialog *_t = static_cast<PinEntryDialog *>(_o);
--        switch (_id) {
--        case 0: _t->updateQuality((*reinterpret_cast< const secqstring(*)>(_a[1]))); break;
--        case 1: _t->slotTimeout(); break;
--        default: ;
--        }
--    }
--}
--
--const QMetaObjectExtraData PinEntryDialog::staticMetaObjectExtraData = {
--    0,  qt_static_metacall
--};
--
--const QMetaObject PinEntryDialog::staticMetaObject = {
--    { &QDialog::staticMetaObject, qt_meta_stringdata_PinEntryDialog,
--      qt_meta_data_PinEntryDialog, &staticMetaObjectExtraData }
--};
--
--#ifdef Q_NO_DATA_RELOCATION
--const QMetaObject &PinEntryDialog::getStaticMetaObject() { return staticMetaObject; }
--#endif //Q_NO_DATA_RELOCATION
--
--const QMetaObject *PinEntryDialog::metaObject() const
--{
--    return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
--}
--
--void *PinEntryDialog::qt_metacast(const char *_clname)
--{
--    if (!_clname) return 0;
--    if (!strcmp(_clname, qt_meta_stringdata_PinEntryDialog))
--        return static_cast<void*>(const_cast< PinEntryDialog*>(this));
--    return QDialog::qt_metacast(_clname);
--}
--
--int PinEntryDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
--{
--    _id = QDialog::qt_metacall(_c, _id, _a);
--    if (_id < 0)
--        return _id;
--    if (_c == QMetaObject::InvokeMetaMethod) {
--        if (_id < 2)
--            qt_static_metacall(this, _c, _id, _a);
--        _id -= 2;
--    }
--#ifndef QT_NO_PROPERTIES
--      else if (_c == QMetaObject::ReadProperty) {
--        void *_v = _a[0];
--        switch (_id) {
--        case 0: *reinterpret_cast< QString*>(_v) = description(); break;
--        case 1: *reinterpret_cast< QString*>(_v) = error(); break;
--        case 2: *reinterpret_cast< secqstring*>(_v) = pin(); break;
--        case 3: *reinterpret_cast< QString*>(_v) = prompt(); break;
--        }
--        _id -= 4;
--    } else if (_c == QMetaObject::WriteProperty) {
--        void *_v = _a[0];
--        switch (_id) {
--        case 0: setDescription(*reinterpret_cast< QString*>(_v)); break;
--        case 1: setError(*reinterpret_cast< QString*>(_v)); break;
--        case 2: setPin(*reinterpret_cast< secqstring*>(_v)); break;
--        case 3: setPrompt(*reinterpret_cast< QString*>(_v)); break;
--        }
--        _id -= 4;
--    } else if (_c == QMetaObject::ResetProperty) {
--        _id -= 4;
--    } else if (_c == QMetaObject::QueryPropertyDesignable) {
--        _id -= 4;
--    } else if (_c == QMetaObject::QueryPropertyScriptable) {
--        _id -= 4;
--    } else if (_c == QMetaObject::QueryPropertyStored) {
--        _id -= 4;
--    } else if (_c == QMetaObject::QueryPropertyEditable) {
--        _id -= 4;
--    } else if (_c == QMetaObject::QueryPropertyUser) {
--        _id -= 4;
--    }
--#endif // QT_NO_PROPERTIES
--    return _id;
--}
--QT_END_MOC_NAMESPACE
---- a/qt4/qsecurelineedit.moc
-+++ /dev/null
-@@ -1,274 +0,0 @@
--/****************************************************************************
--** Meta object code from reading C++ file 'qsecurelineedit.h'
--**
--** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)
--**
--** WARNING! All changes made in this file will be lost!
--*****************************************************************************/
--
--#include "../../../s/pinentry/qt4/qsecurelineedit.h"
--#if !defined(Q_MOC_OUTPUT_REVISION)
--#error "The header file 'qsecurelineedit.h' doesn't include <QObject>."
--#elif Q_MOC_OUTPUT_REVISION != 63
--#error "This file was generated using the moc from 4.8.6. It"
--#error "cannot be used with the include files from this version of Qt."
--#error "(The moc has changed too much.)"
--#endif
--
--QT_BEGIN_MOC_NAMESPACE
--static const uint qt_meta_data_QSecureLineEdit[] = {
--
-- // content:
--       6,       // revision
--       0,       // classname
--       0,    0, // classinfo
--      17,   14, // methods
--      16,   99, // properties
--       1,  163, // enums/sets
--       0,    0, // constructors
--       0,       // flags
--       6,       // signalCount
--
-- // signals: signature, parameters, type, tag, flags
--      17,   16,   16,   16, 0x05,
--      41,   16,   16,   16, 0x05,
--      66,   64,   16,   16, 0x05,
--      97,   16,   16,   16, 0x05,
--     113,   16,   16,   16, 0x05,
--     131,   16,   16,   16, 0x05,
--
-- // slots: signature, parameters, type, tag, flags
--     150,   16,   16,   16, 0x0a,
--     170,   16,   16,   16, 0x0a,
--     178,   16,   16,   16, 0x0a,
--     190,   16,   16,   16, 0x0a,
--     197,   16,   16,   16, 0x0a,
--     204,   16,   16,   16, 0x0a,
--     210,   16,   16,   16, 0x0a,
--     217,   16,   16,   16, 0x0a,
--     225,   16,   16,   16, 0x08,
--     247,   16,   16,   16, 0x08,
--     273,   16,   16,   16, 0x08,
--
-- // properties: name, type, flags
--     301,  293, 0x0a095103,
--     322,  311, 0x0059510b,
--     331,  327, 0x02095103,
--     346,  341, 0x01095103,
--     361,  352, 0x00095009,
--     370,  311, 0x00095009,
--     382,  327, 0x02095103,
--     411,  397, 0x0009510b,
--     421,  341, 0x01094103,
--     430,  341, 0x01095001,
--     446,  311, 0x00095009,
--     459,  341, 0x01095103,
--     471,  341, 0x01095103,
--     480,  341, 0x01095001,
--     494,  341, 0x01095001,
--     508,  341, 0x01095001,
--
-- // properties: notify_signal_id
--       0,
--       0,
--       0,
--       0,
--       0,
--       0,
--       0,
--       0,
--       0,
--       0,
--       0,
--       0,
--       0,
--       0,
--       0,
--       0,
--
-- // enums: name, flags, count, data
--     352, 0x0,    4,  167,
--
-- // enum data: key, value
--     524, uint(QSecureLineEdit::Normal),
--     531, uint(QSecureLineEdit::NoEcho),
--     538, uint(QSecureLineEdit::Password),
--     547, uint(QSecureLineEdit::PasswordEchoOnEdit),
--
--       0        // eod
--};
--
--static const char qt_meta_stringdata_QSecureLineEdit[] = {
--    "QSecureLineEdit\0\0textChanged(secqstring)\0"
--    "textEdited(secqstring)\0,\0"
--    "cursorPositionChanged(int,int)\0"
--    "returnPressed()\0editingFinished()\0"
--    "selectionChanged()\0setText(secqstring)\0"
--    "clear()\0selectAll()\0undo()\0redo()\0"
--    "cut()\0copy()\0paste()\0_q_clipboardChanged()\0"
--    "_q_handleWindowActivate()\0_q_deleteSelected()\0"
--    "QString\0inputMask\0secqstring\0text\0int\0"
--    "maxLength\0bool\0frame\0EchoMode\0echoMode\0"
--    "displayText\0cursorPosition\0Qt::Alignment\0"
--    "alignment\0modified\0hasSelectedText\0"
--    "selectedText\0dragEnabled\0readOnly\0"
--    "undoAvailable\0redoAvailable\0acceptableInput\0"
--    "Normal\0NoEcho\0Password\0PasswordEchoOnEdit\0"
--};
--
--void QSecureLineEdit::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
--{
--    if (_c == QMetaObject::InvokeMetaMethod) {
--        Q_ASSERT(staticMetaObject.cast(_o));
--        QSecureLineEdit *_t = static_cast<QSecureLineEdit *>(_o);
--        switch (_id) {
--        case 0: _t->textChanged((*reinterpret_cast< const secqstring(*)>(_a[1]))); break;
--        case 1: _t->textEdited((*reinterpret_cast< const secqstring(*)>(_a[1]))); break;
--        case 2: _t->cursorPositionChanged((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
--        case 3: _t->returnPressed(); break;
--        case 4: _t->editingFinished(); break;
--        case 5: _t->selectionChanged(); break;
--        case 6: _t->setText((*reinterpret_cast< const secqstring(*)>(_a[1]))); break;
--        case 7: _t->clear(); break;
--        case 8: _t->selectAll(); break;
--        case 9: _t->undo(); break;
--        case 10: _t->redo(); break;
--        case 11: _t->cut(); break;
--        case 12: _t->copy(); break;
--        case 13: _t->paste(); break;
--        case 14: _t->d_func()->_q_clipboardChanged(); break;
--        case 15: _t->d_func()->_q_handleWindowActivate(); break;
--        case 16: _t->d_func()->_q_deleteSelected(); break;
--        default: ;
--        }
--    }
--}
--
--const QMetaObjectExtraData QSecureLineEdit::staticMetaObjectExtraData = {
--    0,  qt_static_metacall
--};
--
--const QMetaObject QSecureLineEdit::staticMetaObject = {
--    { &QWidget::staticMetaObject, qt_meta_stringdata_QSecureLineEdit,
--      qt_meta_data_QSecureLineEdit, &staticMetaObjectExtraData }
--};
--
--#ifdef Q_NO_DATA_RELOCATION
--const QMetaObject &QSecureLineEdit::getStaticMetaObject() { return staticMetaObject; }
--#endif //Q_NO_DATA_RELOCATION
--
--const QMetaObject *QSecureLineEdit::metaObject() const
--{
--    return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
--}
--
--void *QSecureLineEdit::qt_metacast(const char *_clname)
--{
--    if (!_clname) return 0;
--    if (!strcmp(_clname, qt_meta_stringdata_QSecureLineEdit))
--        return static_cast<void*>(const_cast< QSecureLineEdit*>(this));
--    return QWidget::qt_metacast(_clname);
--}
--
--int QSecureLineEdit::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
--{
--    _id = QWidget::qt_metacall(_c, _id, _a);
--    if (_id < 0)
--        return _id;
--    if (_c == QMetaObject::InvokeMetaMethod) {
--        if (_id < 17)
--            qt_static_metacall(this, _c, _id, _a);
--        _id -= 17;
--    }
--#ifndef QT_NO_PROPERTIES
--      else if (_c == QMetaObject::ReadProperty) {
--        void *_v = _a[0];
--        switch (_id) {
--        case 0: *reinterpret_cast< QString*>(_v) = inputMask(); break;
--        case 1: *reinterpret_cast< secqstring*>(_v) = text(); break;
--        case 2: *reinterpret_cast< int*>(_v) = maxLength(); break;
--        case 3: *reinterpret_cast< bool*>(_v) = hasFrame(); break;
--        case 4: *reinterpret_cast< EchoMode*>(_v) = echoMode(); break;
--        case 5: *reinterpret_cast< secqstring*>(_v) = displayText(); break;
--        case 6: *reinterpret_cast< int*>(_v) = cursorPosition(); break;
--        case 7: *reinterpret_cast< Qt::Alignment*>(_v) = alignment(); break;
--        case 8: *reinterpret_cast< bool*>(_v) = isModified(); break;
--        case 9: *reinterpret_cast< bool*>(_v) = hasSelectedText(); break;
--        case 10: *reinterpret_cast< secqstring*>(_v) = selectedText(); break;
--        case 11: *reinterpret_cast< bool*>(_v) = dragEnabled(); break;
--        case 12: *reinterpret_cast< bool*>(_v) = isReadOnly(); break;
--        case 13: *reinterpret_cast< bool*>(_v) = isUndoAvailable(); break;
--        case 14: *reinterpret_cast< bool*>(_v) = isRedoAvailable(); break;
--        case 15: *reinterpret_cast< bool*>(_v) = hasAcceptableInput(); break;
--        }
--        _id -= 16;
--    } else if (_c == QMetaObject::WriteProperty) {
--        void *_v = _a[0];
--        switch (_id) {
--        case 0: setInputMask(*reinterpret_cast< QString*>(_v)); break;
--        case 1: setText(*reinterpret_cast< secqstring*>(_v)); break;
--        case 2: setMaxLength(*reinterpret_cast< int*>(_v)); break;
--        case 3: setFrame(*reinterpret_cast< bool*>(_v)); break;
--        case 6: setCursorPosition(*reinterpret_cast< int*>(_v)); break;
--        case 7: setAlignment(*reinterpret_cast< Qt::Alignment*>(_v)); break;
--        case 8: setModified(*reinterpret_cast< bool*>(_v)); break;
--        case 11: setDragEnabled(*reinterpret_cast< bool*>(_v)); break;
--        case 12: setReadOnly(*reinterpret_cast< bool*>(_v)); break;
--        }
--        _id -= 16;
--    } else if (_c == QMetaObject::ResetProperty) {
--        _id -= 16;
--    } else if (_c == QMetaObject::QueryPropertyDesignable) {
--        _id -= 16;
--    } else if (_c == QMetaObject::QueryPropertyScriptable) {
--        _id -= 16;
--    } else if (_c == QMetaObject::QueryPropertyStored) {
--        _id -= 16;
--    } else if (_c == QMetaObject::QueryPropertyEditable) {
--        _id -= 16;
--    } else if (_c == QMetaObject::QueryPropertyUser) {
--        _id -= 16;
--    }
--#endif // QT_NO_PROPERTIES
--    return _id;
--}
--
--// SIGNAL 0
--void QSecureLineEdit::textChanged(const secqstring & _t1)
--{
--    void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
--    QMetaObject::activate(this, &staticMetaObject, 0, _a);
--}
--
--// SIGNAL 1
--void QSecureLineEdit::textEdited(const secqstring & _t1)
--{
--    void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
--    QMetaObject::activate(this, &staticMetaObject, 1, _a);
--}
--
--// SIGNAL 2
--void QSecureLineEdit::cursorPositionChanged(int _t1, int _t2)
--{
--    void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)), const_cast<void*>(reinterpret_cast<const void*>(&_t2)) };
--    QMetaObject::activate(this, &staticMetaObject, 2, _a);
--}
--
--// SIGNAL 3
--void QSecureLineEdit::returnPressed()
--{
--    QMetaObject::activate(this, &staticMetaObject, 3, 0);
--}
--
--// SIGNAL 4
--void QSecureLineEdit::editingFinished()
--{
--    QMetaObject::activate(this, &staticMetaObject, 4, 0);
--}
--
--// SIGNAL 5
--void QSecureLineEdit::selectionChanged()
--{
--    QMetaObject::activate(this, &staticMetaObject, 5, 0);
--}
--QT_END_MOC_NAMESPACE

commit 7b11c55fcadd51196bfc3c2c19007aa9dca12ccb
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Jun 5 10:59:04 2015 +0200

    Update gpgex and package Polish translation
    
    * NEWS: Update gpgex version.
    * packages.current (gpgex): Update.
    * src/inst-gpgex.nsi, src/uninst-gpgex.nsi: Package Polish translation

diff --git a/NEWS b/NEWS
index f10c7d8..5bf00ba 100644
--- a/NEWS
+++ b/NEWS
@@ -10,7 +10,7 @@ GnuPG:          2.0.27
 Kleopatra:      2.2.0-git945878c
 GPA:            0.9.7
 GpgOL:          1.2.1
-GpgEX:          1.0.1
+GpgEX:          1.0.2
 Claws-Mail:     3.9.1
 Kompendium DE:  3.0.0
 Kompendium EN:  3.0.0
diff --git a/packages/packages.current b/packages/packages.current
index 962c0c2..f869433 100644
--- a/packages/packages.current
+++ b/packages/packages.current
@@ -373,9 +373,11 @@ chk  4cf226bc452ffefbce82abada99d23f72a9f1e0e
 #
 server ftp://ftp.g10code.com/g10code/gpgex
 
-# checked: 2014-07-30 ah
-file gpgex-1.0.1.tar.bz2
-chk  eb54767fd8e3728e8d14c7c158e0841b67c714a6
+# last-changed: 2015-06-05 ah
+# by: ah
+# verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
+file gpgex-1.0.2.tar.bz2
+chk  8892dafc405255731b82a0c299960a5da59d3191
 
 
 #
diff --git a/src/inst-gpgex.nsi b/src/inst-gpgex.nsi
index 9ba3996..6d09cdb 100644
--- a/src/inst-gpgex.nsi
+++ b/src/inst-gpgex.nsi
@@ -72,6 +72,8 @@ ${MementoSection} "GpgEX" SEC_gpgex
   File ${prefix}/share/locale/ru/LC_MESSAGES/gpgex.mo
   SetOutPath "$INSTDIR\share\locale\pt\LC_MESSAGES"
   File ${prefix}/share/locale/pt/LC_MESSAGES/gpgex.mo
+  SetOutPath "$INSTDIR\share\locale\pl\LC_MESSAGES"
+  File ${prefix}/share/locale/pl/LC_MESSAGES/gpgex.mo
 
   SetOutPath "$INSTDIR\share\doc\gpgex"
   File ${prefix}/share/doc/gpgex/gpgex-en.html
diff --git a/src/uninst-gpgex.nsi b/src/uninst-gpgex.nsi
index b0d0acb..505b477 100644
--- a/src/uninst-gpgex.nsi
+++ b/src/uninst-gpgex.nsi
@@ -50,6 +50,9 @@ Section "-un.gpgex"
   Delete "$INSTDIR\share\locale\pt\LC_MESSAGES\gpgex.mo"
   RMDir "$INSTDIR\share\locale\pt\LC_MESSAGES"
   RMDir "$INSTDIR\share\locale\pt"
+  Delete "$INSTDIR\share\locale\pl\LC_MESSAGES\gpgex.mo"
+  RMDir "$INSTDIR\share\locale\pl\LC_MESSAGES"
+  RMDir "$INSTDIR\share\locale\pl"
   RMDir "$INSTDIR\share\locale"
   RMDir "$INSTDIR\share"
 

commit a8db5492263320d6cfd7b47cba05e587b1ae6d5b
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Jun 5 10:48:06 2015 +0200

    Update third party libraries
    
    * Makefile.am (EXTRA_DIST): Remove patch thats no longer necessary.
    * packages/packages.current (curl, libxml, glib, gtk+): Update.

diff --git a/Makefile.am b/Makefile.am
index e3c1e8a..fa073c5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -36,8 +36,7 @@ EXTRA_DIST = autogen.sh README.GIT ONEWS \
         patches/claws-mail-3.9.1/51-version-file.patch \
         patches/claws-mail-3.9.1/80-src-makefile.postcfg-build \
         patches/dirmngr-1.1.1/dirmngr-pth.patch \
-        patches/glib-2.41.0/01-socket.patch \
-        patches/glib-2.41.0/03-remove-rand_s.patch \
+        patches/glib-2.41.5/01-socket.patch \
         patches/gnupg2-2.0.27/0001-Enable-wildcard-expansion-with-mingw-w64.patch \
         patches/gnupg2-2.0.27/0002-Let-wchar_to_native-convert-to-console-codepage.patch \
         patches/gnupg2-2.0.27/0003-gpgtar-Fix-extracting-files-with-size-512.patch \
diff --git a/packages/packages.current b/packages/packages.current
index e07e6ed..962c0c2 100644
--- a/packages/packages.current
+++ b/packages/packages.current
@@ -83,22 +83,22 @@ chk    d7195498005d340ccd82e183de19163d16e56ec2
 
 server http://curl.haxx.se/download
 
-# checked: 2014-06-20 ah - updated
+# checked: 2015-06-05 ah - updated
 # verified with key 914C 533D F9B2 ADA2 204F  586D 78E1 1C6B 279D 5C91
-file  curl-7.37.0.tar.bz2
-chk   3bde6fb2e599197e9579c0735ad255c1ddbd914d
+file  curl-7.42.1.tar.bz2
+chk   f65708915875b8cb35edb51d8dd31440dc02fbd3
 
 
 #
 # libxml2 for Claws plugins
 
-# checked: 2014-06-20 ah - updated
-# checked checksum with linuxfromscratch handbook and mxe repository
-
+# last-changed: 2015-06-05
+# by: ah
+# verified: Sig C744 15BA 7C9C 7F78 F02E  1DC3 4606 B8A5 DE95 BC1F
 server ftp://xmlsoft.org/libxml2
 
-file   libxml2-2.9.1.tar.gz
-chk    eb3e2146c6d68aea5c2a4422ed76fe196f933c21
+file   libxml2-2.9.2.tar.gz
+chk    f46a37ea6d869f702e03f393c376760f3cbee673
 
 #
 # regex for Claws
@@ -165,7 +165,7 @@ server ftp://sources.redhat.com/pub
 # checked: 2013-04-29 wk - There is a 2.9.1 but the release notes
 #                          don't tell anything about security critical
 #                          bugs.  Thus we stay with 2.8.0 for now.
-#          2014-06-20 ah - ^ still applies
+#          2015-06-05 ah - ^ still applies
 file pthreads-win32/pthreads-w32-2-8-0-release.tar.gz
 chk  da8371cb20e8e238f96a1d0651212f154d84a9ac
 
@@ -183,19 +183,24 @@ chk  da8371cb20e8e238f96a1d0651212f154d84a9ac
 #
 server http://ftp.gnome.org/pub/gnome/sources/glib/2.41
 
-# checked: 2014-06-20 ah - updated
-# compared checksum with debian experimental version. Signed with key:
-# 3D0E FB95 E7B5 237F 16E8  2258 E352 D5C5 1C50 41D4
-file glib-2.41.0.tar.xz
-chk  d3b119707786f84496c366f143e6e70e95370d32
+# last-changed: 2015-06-05
+# Latest minor release is 2.45 but 2.41 works for us.
+# by: ah
+# compared checksum with debian experimental version.
+# https://lists.debian.org/debian-experimental-changes/2014/09/msg00182.html
+# verified: Sig 3D0E FB95 E7B5 237F 16E8  2258 E352 D5C5 1C50 41D4
+file glib-2.41.5.tar.xz
+chk  31de819181dd8abc25d89484ff6a4e60f032e8fc
 
 #
 # GDK-PIXBUF
 #
 server http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/2.30/
 
-# checked: 2014-06-20 ah - updated
-# verified with linuxfromscratch and frugalware checksums
+# checked: 2015-06-05
+# by: ah
+# There is a 2.31 series but afaik no security problems with 2.30
+# verified: with linuxfromscratch and frugalware checksums
 file gdk-pixbuf-2.30.8.tar.xz
 chk  6277b4e5b5e334b3669f15ae0376e184be9e8cd8
 
@@ -312,11 +317,11 @@ chk  2e9189c6c6d1dac847a47c537c7a5e9dffd91992
 #
 server http://ftp.gnome.org/pub/gnome/sources/gtk+/2.24
 
-# checked: 2014-07-16 ah - updated from 2.24.17
-# verified checksum with https://download.gnome.org/core/3.13/3.13.3/sources/
-# sha1 and linuxfromscratch md5sum
-file gtk+-2.24.24.tar.xz
-chk  c43eb248b3d30c6b49937692b4c4bfa10b96201e
+# last-changed: 2015-06-05
+# by: ah
+# verified: chk from https://download.gnome.org/core/3.17/3.17.2/sources/SHA256SUMS-for-xz
+file gtk+-2.24.28.tar.xz
+chk  f3c2f1a3728ed51d08054f6b4c7384fbf99477c0
 
 #
 # GIMP stuff for W32
diff --git a/patches/glib-2.41.0/03-remove-rand_s.patch b/patches/glib-2.41.0/03-remove-rand_s.patch
deleted file mode 100755
index 2ee3cdb..0000000
--- a/patches/glib-2.41.0/03-remove-rand_s.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-#! /bin/sh
-patch -p1 -R -f $* < $0
-exit $?
-
-From 0e1924a66c642d4aa4a30b97cff509903f972435 Mon Sep 17 00:00:00 2001
-From: Ryan Lortie <desrt at desrt.ca>
-Date: Fri, 25 Oct 2013 12:22:42 -0400
-Subject: win32: use real random data for seed on win32
-
-We can get cryptographically secure data from rand_s().
-
-https://bugzilla.gnome.org/show_bug.cgi?id=710738
-
-diff --git a/glib/grand.c b/glib/grand.c
-index 9b2c0f8..56e443d 100644
---- a/glib/grand.c
-+++ b/glib/grand.c
-@@ -37,6 +37,7 @@
-  */
-
- #include "config.h"
-+#define _CRT_RAND_S
-
- #include <math.h>
- #include <errno.h>
-@@ -56,7 +57,7 @@
- #include "gthread.h"
-
- #ifdef G_OS_WIN32
--#include <process.h>		/* For getpid() */
-+#include <stdlib.h>
- #endif
-
- /**
-@@ -219,9 +221,9 @@ GRand*
- g_rand_new (void)
- {
-   guint32 seed[4];
--  GTimeVal now;
- #ifdef G_OS_UNIX
-   static gboolean dev_urandom_exists = TRUE;
-+  GTimeVal now;
-
-   if (dev_urandom_exists)
-     {
-@@ -253,9 +255,6 @@ g_rand_new (void)
-       else
-	dev_urandom_exists = FALSE;
-     }
--#else
--  static gboolean dev_urandom_exists = FALSE;
--#endif
-
-   if (!dev_urandom_exists)
-     {
-@@ -263,12 +262,14 @@ g_rand_new (void)
-       seed[0] = now.tv_sec;
-       seed[1] = now.tv_usec;
-       seed[2] = getpid ();
--#ifdef G_OS_UNIX
-       seed[3] = getppid ();
--#else
--      seed[3] = 0;
--#endif
-     }
-+#else /* G_OS_WIN32 */
-+  gint i;
-+
-+  for (i = 0; i < G_N_ELEMENTS (seed); i++)
-+    rand_s (&seed[i]);
-+#endif
-
-   return g_rand_new_with_seed_array (seed, 4);
- }
---
-cgit v0.10.1
diff --git a/patches/glib-2.41.0/01-socket.patch b/patches/glib-2.41.5/01-socket.patch
similarity index 100%
rename from patches/glib-2.41.0/01-socket.patch
rename to patches/glib-2.41.5/01-socket.patch

commit 8ef938c1cce5fc72ea31fbd8db2955985426484d
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Jun 5 10:03:13 2015 +0200

    Add gnutls patches for new CVE's
    
    * src/Makefile.am (EXTRA_DIST): Include patches.
    * patches/gnutls-2.12.23/06-cve-2015-0282.patch,
    patches/gnutls-2.12.23/07-cve-2015-0294.patch: New.

diff --git a/Makefile.am b/Makefile.am
index 8a4026b..e3c1e8a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -49,6 +49,8 @@ EXTRA_DIST = autogen.sh README.GIT ONEWS \
         patches/gnutls-2.12.23/03-cve-2014-1959.patch \
         patches/gnutls-2.12.23/04-cve-2014-0092.patch \
         patches/gnutls-2.12.23/05-cve-2014-3466.patch \
+        patches/gnutls-2.12.23/06-cve-2015-0282.patch \
+        patches/gnutls-2.12.23/07-cve-2015-0294.patch \
         patches/gnutls-2.12.23/fix-gcrypt-private-api-usage.patch \
         patches/gnutls-2.12.23/gnulib-mingw-w64-fix.patch \
         patches/gtkhtml2_viewer-0.34/80-src-makefile.postcfg-build \
diff --git a/patches/gnutls-2.12.23/06-cve-2015-0282.patch b/patches/gnutls-2.12.23/06-cve-2015-0282.patch
new file mode 100755
index 0000000..a12dd6a
--- /dev/null
+++ b/patches/gnutls-2.12.23/06-cve-2015-0282.patch
@@ -0,0 +1,484 @@
+#! /bin/sh
+patch -p1 -l -f $* < $0
+exit $?
+
+From d326f81daed5a1a06476d66a81584f8c7b71141d Mon Sep 17 00:00:00 2001
+From: Nikos Mavrogiannopoulos <nmav at redhat.com>
+Date: Mon, 23 Feb 2015 10:03:47 +0100
+Subject: [PATCH] Added fix for GNUTLS-SA-2015-1
+
+---
+ lib/gnutls_algorithms.c |  8 ++++++++
+ lib/gnutls_algorithms.h |  1 +
+ lib/gnutls_pubkey.c     |  4 ++--
+ lib/gnutls_sig.c        | 14 ++++++++------
+ lib/x509/common.h       |  2 +-
+ lib/x509/crq.c          | 49 ++++++++++++++++++++++++++++++++++++++++++++++++-
+ lib/x509/privkey.c      |  3 ++-
+ lib/x509/verify.c       | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
+ lib/x509/x509.c         |  4 ++--
+ lib/x509/x509_int.h     |  7 ++++---
+ 10 files changed, 127 insertions(+), 42 deletions(-)
+
+Index: gnutls26-2.12.23/lib/gnutls_algorithms.c
+===================================================================
+--- gnutls26-2.12.23.orig/lib/gnutls_algorithms.c	2015-03-20 09:07:52.587827857 -0400
++++ gnutls26-2.12.23/lib/gnutls_algorithms.c	2015-03-20 09:07:52.579827744 -0400
+@@ -2056,6 +2056,14 @@
+   return ret;
+ }
+
++int
++_gnutls_sign_get_hash (gnutls_sign_algorithm_t algorithm)
++{
++  GNUTLS_SIGN_LOOP (if (p->id == algorithm) return p->mac);
++
++  return GNUTLS_MAC_UNKNOWN;
++}
++
+ gnutls_sign_algorithm_t
+ _gnutls_x509_oid2sign_algorithm (const char *oid)
+ {
+Index: gnutls26-2.12.23/lib/gnutls_algorithms.h
+===================================================================
+--- gnutls26-2.12.23.orig/lib/gnutls_algorithms.h	2015-03-20 09:07:52.587827857 -0400
++++ gnutls26-2.12.23/lib/gnutls_algorithms.h	2015-03-20 09:07:52.583827801 -0400
+@@ -105,6 +105,7 @@
+ enum encipher_type _gnutls_kx_encipher_type (gnutls_kx_algorithm_t algorithm);
+
+ /* Functions for sign algorithms. */
++int _gnutls_sign_get_hash (gnutls_sign_algorithm_t algorithm);
+ gnutls_sign_algorithm_t _gnutls_x509_oid2sign_algorithm (const char *oid);
+ gnutls_sign_algorithm_t _gnutls_x509_pk_to_sign (gnutls_pk_algorithm_t pk,
+                                                  gnutls_mac_algorithm_t mac);
+Index: gnutls26-2.12.23/lib/gnutls_pubkey.c
+===================================================================
+--- gnutls26-2.12.23.orig/lib/gnutls_pubkey.c	2015-03-20 09:07:52.587827857 -0400
++++ gnutls26-2.12.23/lib/gnutls_pubkey.c	2015-03-20 09:07:52.583827801 -0400
+@@ -1048,7 +1048,7 @@
+       return GNUTLS_E_INVALID_REQUEST;
+     }
+
+-  ret = pubkey_verify_sig( data, NULL, signature, pubkey->pk_algorithm,
++  ret = pubkey_verify_sig(GNUTLS_MAC_UNKNOWN, data, NULL, signature, pubkey->pk_algorithm,
+     pubkey->params, pubkey->params_size);
+   if (ret < 0)
+     {
+@@ -1086,7 +1086,7 @@
+     }
+
+   ret =
+-    pubkey_verify_sig (NULL, hash, signature, key->pk_algorithm,
++    pubkey_verify_sig (GNUTLS_MAC_UNKNOWN, NULL, hash, signature, key->pk_algorithm,
+                        key->params, key->params_size);
+
+   return ret;
+Index: gnutls26-2.12.23/lib/gnutls_sig.c
+===================================================================
+--- gnutls26-2.12.23.orig/lib/gnutls_sig.c	2015-03-20 09:07:52.587827857 -0400
++++ gnutls26-2.12.23/lib/gnutls_sig.c	2015-03-20 09:07:52.583827801 -0400
+@@ -273,7 +273,8 @@
+ verify_tls_hash (gnutls_session_t session, gnutls_protocol_t ver, gnutls_cert * cert,
+                     const gnutls_datum_t * hash_concat,
+                     gnutls_datum_t * signature, size_t sha1pos,
+-                    gnutls_pk_algorithm_t pk_algo)
++                    gnutls_pk_algorithm_t pk_algo,
++                    int hashalg)
+ {
+   int ret;
+   gnutls_datum_t vdata;
+@@ -309,7 +310,7 @@
+         ret = _gnutls_rsa_verify (&vdata, signature, cert->params,
+                                      cert->params_size, 1);
+       else
+-        ret = pubkey_verify_sig( NULL, &vdata, signature, pk_algo,
++        ret = pubkey_verify_sig(hashalg, NULL, &vdata, signature, pk_algo,
+           cert->params, cert->params_size);
+
+       if (ret < 0)
+@@ -324,7 +325,7 @@
+       vdata.data = &hash_concat->data[sha1pos];
+       vdata.size = hash_concat->size - sha1pos;
+
+-      ret = pubkey_verify_sig( NULL, &vdata, signature, pk_algo,
++      ret = pubkey_verify_sig(hashalg, NULL, &vdata, signature, pk_algo,
+         cert->params, cert->params_size);
+       /* verify signature */
+       if (ret < 0)
+@@ -428,7 +429,8 @@
+   ret = verify_tls_hash (session, ver, cert, &dconcat, signature,
+                             dconcat.size -
+                             _gnutls_hash_get_algo_len (hash_algo),
+-                            _gnutls_sign_get_pk_algorithm (algo));
++                            _gnutls_sign_get_pk_algorithm (algo),
++                            hash_algo);
+   if (ret < 0)
+     {
+       gnutls_assert ();
+@@ -491,7 +493,7 @@
+
+   ret =
+     verify_tls_hash (session, ver, cert, &dconcat, signature, 0,
+-                        cert->subject_pk_algorithm);
++                        cert->subject_pk_algorithm, hash_algo);
+   if (ret < 0)
+     {
+       gnutls_assert ();
+@@ -582,7 +584,7 @@
+
+   ret =
+     verify_tls_hash (session, ver, cert, &dconcat, signature, 16,
+-                        cert->subject_pk_algorithm);
++                        cert->subject_pk_algorithm, GNUTLS_MAC_UNKNOWN);
+   if (ret < 0)
+     {
+       gnutls_assert ();
+Index: gnutls26-2.12.23/lib/x509/common.h
+===================================================================
+--- gnutls26-2.12.23.orig/lib/x509/common.h	2015-03-20 09:07:52.587827857 -0400
++++ gnutls26-2.12.23/lib/x509/common.h	2015-03-20 09:07:52.583827801 -0400
+@@ -151,7 +151,7 @@
+ void _asnstr_append_name (char *name, size_t name_size, const char *part1,
+                           const char *part2);
+
+-int pubkey_verify_sig (const gnutls_datum_t * tbs,
++int pubkey_verify_sig (int hashalg, const gnutls_datum_t * tbs,
+                        const gnutls_datum_t * hash,
+                        const gnutls_datum_t * signature,
+                        gnutls_pk_algorithm_t pk, bigint_t * issuer_params,
+Index: gnutls26-2.12.23/lib/x509/crq.c
+===================================================================
+--- gnutls26-2.12.23.orig/lib/x509/crq.c	2015-03-20 09:07:52.587827857 -0400
++++ gnutls26-2.12.23/lib/x509/crq.c	2015-03-20 09:07:52.583827801 -0400
+@@ -2540,6 +2540,7 @@
+ gnutls_datum signature = { NULL, 0 };
+ bigint_t params[MAX_PUBLIC_PARAMS_SIZE];
+ int ret, params_size = 0, i;
++int hashalg, sigalg;
+
+   ret =
+     _gnutls_x509_get_signed_data (crq->crq, "certificationRequestInfo", &data);
+@@ -2565,7 +2566,10 @@
+       goto cleanup;
+     }
+
+-  ret = pubkey_verify_sig(&data, NULL, &signature,
++  sigalg = gnutls_x509_crq_get_signature_algorithm (crq);
++  hashalg = _gnutls_sign_get_hash(sigalg);
++
++  ret = pubkey_verify_sig(hashalg, &data, NULL, &signature,
+                           gnutls_x509_crq_get_pk_algorithm (crq, NULL),
+     params, params_size);
+   if (ret < 0)
+@@ -2588,5 +2592,48 @@
+   return ret;
+ }
+
++/**
++ * gnutls_x509_crq_get_signature_algorithm:
++ * @crl: should contain a #gnutls_x509_crl_t structure
++ *
++ * This function will return a value of the #gnutls_sign_algorithm_t
++ * enumeration that is the signature algorithm.
++ *
++ * Returns: On success, %GNUTLS_E_SUCCESS is returned, otherwise a
++ *   negative error value.
++ **/
++int
++gnutls_x509_crq_get_signature_algorithm (gnutls_x509_crq_t crq)
++{
++  int result;
++  gnutls_datum_t sa;
++
++  if (crq == NULL)
++    {
++      gnutls_assert ();
++      return GNUTLS_E_INVALID_REQUEST;
++    }
++
++  /* Read the signature algorithm. Note that parameters are not
++   * read. They will be read from the issuer's certificate if needed.
++   */
++
++  result =
++    _gnutls_x509_read_value (crq->crq, "signatureAlgorithm.algorithm",
++                             &sa, 0);
++
++  if (result < 0)
++    {
++      gnutls_assert ();
++      return result;
++    }
++
++  result = _gnutls_x509_oid2sign_algorithm ((const char *) sa.data);
++
++  _gnutls_free_datum (&sa);
++
++  return result;
++}
++
+ #endif /* ENABLE_PKI */
+
+Index: gnutls26-2.12.23/lib/x509/privkey.c
+===================================================================
+--- gnutls26-2.12.23.orig/lib/x509/privkey.c	2015-03-20 09:07:52.587827857 -0400
++++ gnutls26-2.12.23/lib/x509/privkey.c	2015-03-20 09:07:52.583827801 -0400
+@@ -1828,7 +1828,8 @@
+       return GNUTLS_E_INVALID_REQUEST;
+     }
+
+-  result = _gnutls_x509_privkey_verify_signature (data, signature, key);
++  result = _gnutls_x509_privkey_verify_signature (GNUTLS_MAC_UNKNOWN, data, signature, key);
++
+   if (result < 0)
+     {
+       gnutls_assert ();
+Index: gnutls26-2.12.23/lib/x509/verify.c
+===================================================================
+--- gnutls26-2.12.23.orig/lib/x509/verify.c	2015-03-20 09:07:52.587827857 -0400
++++ gnutls26-2.12.23/lib/x509/verify.c	2015-03-20 09:07:52.587827857 -0400
+@@ -332,6 +332,7 @@
+   gnutls_datum_t cert_signature = { NULL, 0 };
+   gnutls_x509_crt_t issuer = NULL;
+   int issuer_version, result = 0;
++  int sigalg, hashalg;
+
+   if (output)
+     *output = 0;
+@@ -399,8 +400,18 @@
+       goto cleanup;
+     }
+
++  sigalg = gnutls_x509_crt_get_signature_algorithm (cert);
++  hashalg = _gnutls_sign_get_hash(sigalg);
++
++  if (hashalg == GNUTLS_MAC_UNKNOWN)
++    {
++      gnutls_assert();
++      result = 0;
++      goto cleanup;
++    }
++
+   result =
+-    _gnutls_x509_verify_signature (&cert_signed_data, NULL, &cert_signature,
++    _gnutls_x509_verify_signature (hashalg, &cert_signed_data, NULL, &cert_signature,
+                                    issuer);
+   if (result == GNUTLS_E_PK_SIG_VERIFY_FAILED)
+     {
+@@ -423,10 +434,6 @@
+    */
+   if (is_issuer (cert, cert) == 0)
+     {
+-      int sigalg;
+-
+-      sigalg = gnutls_x509_crt_get_signature_algorithm (cert);
+-
+       if (((sigalg == GNUTLS_SIGN_RSA_MD2) &&
+            !(flags & GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD2)) ||
+           ((sigalg == GNUTLS_SIGN_RSA_MD5) &&
+@@ -749,12 +756,12 @@
+  * params[1] is public key
+  */
+ static int
+-_pkcs1_rsa_verify_sig (const gnutls_datum_t * text,
+-                       const gnutls_datum_t * prehash,
+-                       const gnutls_datum_t * signature, bigint_t * params,
+-                       int params_len)
++_pkcs1_rsa_verify_sig (gnutls_mac_algorithm_t hash, const gnutls_datum_t * text,
++		       const gnutls_datum_t * prehash,
++		       const gnutls_datum_t * signature, bigint_t * params,
++		       int params_len)
+ {
+-  gnutls_mac_algorithm_t hash = GNUTLS_MAC_UNKNOWN;
++  gnutls_mac_algorithm_t phash = GNUTLS_MAC_UNKNOWN;
+   int ret;
+   opaque digest[MAX_HASH_SIZE], md[MAX_HASH_SIZE], *cmp;
+   int digest_size;
+@@ -774,7 +781,7 @@
+
+   digest_size = sizeof (digest);
+   if ((ret =
+-       decode_ber_digest_info (&decrypted, &hash, digest, &digest_size)) != 0)
++       decode_ber_digest_info (&decrypted, &phash, digest, &digest_size)) != 0)
+     {
+       gnutls_assert ();
+       _gnutls_free_datum (&decrypted);
+@@ -783,6 +790,15 @@
+
+   _gnutls_free_datum (&decrypted);
+
++  if (hash != GNUTLS_MAC_UNKNOWN && hash != phash)
++    {
++      gnutls_assert();
++      return GNUTLS_E_PK_SIG_VERIFY_FAILED;
++    }
++  else
++    hash = phash;
++
++
+   if (digest_size != _gnutls_hash_get_algo_len (hash))
+     {
+       gnutls_assert ();
+@@ -878,11 +894,11 @@
+  * not verified, or 1 otherwise.
+  */
+ int
+-pubkey_verify_sig (const gnutls_datum_t * tbs,
+-                   const gnutls_datum_t * hash,
+-                   const gnutls_datum_t * signature,
+-                   gnutls_pk_algorithm_t pk, bigint_t * issuer_params,
+-                   int issuer_params_size)
++pubkey_verify_sig (int hashalg, const gnutls_datum_t * tbs,
++	    const gnutls_datum_t * hash,
++	    const gnutls_datum_t * signature,
++	    gnutls_pk_algorithm_t pk, bigint_t * issuer_params,
++	    int issuer_params_size)
+ {
+
+   switch (pk)
+@@ -890,7 +906,7 @@
+     case GNUTLS_PK_RSA:
+
+       if (_pkcs1_rsa_verify_sig
+-          (tbs, hash, signature, issuer_params, issuer_params_size) != 0)
++          (hashalg, tbs, hash, signature, issuer_params, issuer_params_size) != 0)
+         {
+           gnutls_assert ();
+           return GNUTLS_E_PK_SIG_VERIFY_FAILED;
+@@ -1021,7 +1037,7 @@
+  * 'signature' is the signature!
+  */
+ int
+-_gnutls_x509_verify_signature (const gnutls_datum_t * tbs,
++_gnutls_x509_verify_signature (int hashalg, const gnutls_datum_t * tbs,
+                                const gnutls_datum_t * hash,
+                                const gnutls_datum_t * signature,
+                                gnutls_x509_crt_t issuer)
+@@ -1041,7 +1057,7 @@
+     }
+
+   ret =
+-    pubkey_verify_sig (tbs, hash, signature,
++    pubkey_verify_sig (hashalg, tbs, hash, signature,
+                        gnutls_x509_crt_get_pk_algorithm (issuer, NULL),
+                        issuer_params, issuer_params_size);
+   if (ret < 0)
+@@ -1066,13 +1082,13 @@
+  * 'signature' is the signature!
+  */
+ int
+-_gnutls_x509_privkey_verify_signature (const gnutls_datum_t * tbs,
++_gnutls_x509_privkey_verify_signature (int hashalg, const gnutls_datum_t * tbs,
+                                        const gnutls_datum_t * signature,
+                                        gnutls_x509_privkey_t issuer)
+ {
+   int ret;
+
+-  ret = pubkey_verify_sig (tbs, NULL, signature, issuer->pk_algorithm,
++  ret = pubkey_verify_sig (hashalg, tbs, NULL, signature, issuer->pk_algorithm,
+                            issuer->params, issuer->params_size);
+   if (ret < 0)
+     {
+@@ -1293,6 +1309,7 @@
+   gnutls_datum_t crl_signature = { NULL, 0 };
+   gnutls_x509_crt_t issuer;
+   int result;
++  int sigalg, hashalg;
+
+   if (output)
+     *output = 0;
+@@ -1334,6 +1351,7 @@
+   if (result < 0)
+     {
+       gnutls_assert ();
++      result = 0;
+       goto cleanup;
+     }
+
+@@ -1341,11 +1359,21 @@
+   if (result < 0)
+     {
+       gnutls_assert ();
++      result = 0;
++      goto cleanup;
++    }
++
++  sigalg = gnutls_x509_crl_get_signature_algorithm (crl);
++  hashalg = _gnutls_sign_get_hash(sigalg);
++  if (hashalg == GNUTLS_MAC_UNKNOWN)
++    {
++      gnutls_assert();
++      result = 0;
+       goto cleanup;
+     }
+
+   result =
+-    _gnutls_x509_verify_signature (&crl_signed_data, NULL, &crl_signature,
++    _gnutls_x509_verify_signature (hashalg, &crl_signed_data, NULL, &crl_signature,
+                                    issuer);
+   if (result == GNUTLS_E_PK_SIG_VERIFY_FAILED)
+     {
+@@ -1358,14 +1386,11 @@
+   else if (result < 0)
+     {
+       gnutls_assert ();
++      result = 0;
+       goto cleanup;
+     }
+
+   {
+-    int sigalg;
+-
+-    sigalg = gnutls_x509_crl_get_signature_algorithm (crl);
+-
+     if (((sigalg == GNUTLS_SIGN_RSA_MD2) &&
+          !(flags & GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD2)) ||
+         ((sigalg == GNUTLS_SIGN_RSA_MD5) &&
+Index: gnutls26-2.12.23/lib/x509/x509.c
+===================================================================
+--- gnutls26-2.12.23.orig/lib/x509/x509.c	2015-03-20 09:07:52.587827857 -0400
++++ gnutls26-2.12.23/lib/x509/x509.c	2015-03-20 09:07:52.587827857 -0400
+@@ -2714,7 +2714,7 @@
+       return GNUTLS_E_INVALID_REQUEST;
+     }
+
+-  result = _gnutls_x509_verify_signature (data, NULL, signature, crt);
++  result = _gnutls_x509_verify_signature (GNUTLS_MAC_UNKNOWN, data, NULL, signature, crt);
+   if (result < 0)
+     {
+       gnutls_assert ();
+@@ -2752,7 +2752,7 @@
+       return GNUTLS_E_INVALID_REQUEST;
+     }
+
+-  result = _gnutls_x509_verify_signature (NULL, hash, signature, crt);
++  result = _gnutls_x509_verify_signature (GNUTLS_MAC_UNKNOWN, NULL, hash, signature, crt);
+   if (result < 0)
+     {
+       gnutls_assert ();
+Index: gnutls26-2.12.23/lib/x509/x509_int.h
+===================================================================
+--- gnutls26-2.12.23.orig/lib/x509/x509_int.h	2015-03-20 09:07:52.587827857 -0400
++++ gnutls26-2.12.23/lib/x509/x509_int.h	2015-03-20 09:07:52.587827857 -0400
+@@ -187,11 +187,11 @@
+                                bigint_t * issuer_params,
+                                unsigned int issuer_params_size);
+
+-int _gnutls_x509_verify_signature (const gnutls_datum_t * tbs,
++int _gnutls_x509_verify_signature (int sigalg, const gnutls_datum_t * tbs,
+                                    const gnutls_datum_t * hash,
+                                    const gnutls_datum_t * signature,
+                                    gnutls_x509_crt_t issuer);
+-int _gnutls_x509_privkey_verify_signature (const gnutls_datum_t * tbs,
++int _gnutls_x509_privkey_verify_signature (int sigalg, const gnutls_datum_t * tbs,
+                                            const gnutls_datum_t * signature,
+                                            gnutls_x509_privkey_t issuer);
+
+@@ -390,5 +390,6 @@
+                                     const char *ext_id,
+                                     const gnutls_datum_t * ext_data,
+                                     unsigned int critical);
+-
++int
++gnutls_x509_crq_get_signature_algorithm (gnutls_x509_crq_t crq);
+ #endif
diff --git a/patches/gnutls-2.12.23/07-cve-2015-0294.patch b/patches/gnutls-2.12.23/07-cve-2015-0294.patch
new file mode 100755
index 0000000..2983fec
--- /dev/null
+++ b/patches/gnutls-2.12.23/07-cve-2015-0294.patch
@@ -0,0 +1,74 @@
+#! /bin/sh
+patch -p1 -l -f $* < $0
+exit $?
+
+From 2458d6d158fd523418e331e50abb35cd334bb795 Mon Sep 17 00:00:00 2001
+From: Nikos Mavrogiannopoulos <nmav at redhat.com>
+Date: Mon, 23 Feb 2015 10:41:56 +0100
+Subject: [PATCH] added fix for certificate algorithm consistency check
+
+---
+ lib/x509/x509.c | 34 +++++++++++++++++++++++++++++++++-
+ 1 file changed, 33 insertions(+), 1 deletion(-)
+
+diff --git a/lib/x509/x509.c b/lib/x509/x509.c
+index 6db574c..f51ba3b 100644
+--- a/lib/x509/x509.c
++++ b/lib/x509/x509.c
+@@ -165,7 +165,7 @@ gnutls_x509_crt_import (gnutls_x509_crt_t cert,
+                         gnutls_x509_crt_fmt_t format)
+ {
+   int result = 0, need_free = 0;
+-  gnutls_datum_t _data;
++  gnutls_datum_t _data, sa1 = {NULL, 0}, sa2 = {NULL, 0};
+
+   if (cert == NULL)
+     {
+@@ -233,6 +233,36 @@ gnutls_x509_crt_import (gnutls_x509_crt_t cert,
+       goto cleanup;
+     }
+
++  result =
++    _gnutls_x509_read_value (cert->cert, "tbsCertificate.signature.algorithm",
++			     &sa1, 0);
++  if (result != ASN1_SUCCESS)
++    {
++      result = _gnutls_asn2err (result);
++      gnutls_assert ();
++      goto cleanup;
++    }
++
++  result =
++    _gnutls_x509_read_value (cert->cert, "signatureAlgorithm.algorithm",
++			     &sa2, 0);
++  if (result != ASN1_SUCCESS)
++    {
++      result = _gnutls_asn2err (result);
++      gnutls_assert ();
++      goto cleanup;
++    }
++
++  if (sa1.size != sa2.size || sa1.size == 0 || strcmp(sa1.data, sa2.data) != 0)
++    {
++      result = GNUTLS_E_CERTIFICATE_ERROR;
++      gnutls_assert ();
++      goto cleanup;
++    }
++
++  _gnutls_free_datum (&sa1);
++  _gnutls_free_datum (&sa2);
++
+   /* Since we do not want to disable any extension
+    */
+   cert->use_extensions = 1;
+@@ -242,6 +272,8 @@ gnutls_x509_crt_import (gnutls_x509_crt_t cert,
+   return 0;
+
+ cleanup:
++  _gnutls_free_datum (&sa1);
++  _gnutls_free_datum (&sa2);
+   if (need_free)
+     _gnutls_free_datum (&_data);
+   return result;
+--
+libgit2 0.21.4

commit 8a18b24e825d9881a32d298872e36de28045ddd2
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Thu Apr 16 10:47:16 2015 +0200

    Document dependency to texlive-lang-german
    
    * README: Document texlive-lang-german dependency.
    
    --
    Depending on your distribution (jessie for me) and installation
    prefferences (no install recommends) this is not installed
    automatically with the other packages.

diff --git a/README b/README
index a9b13a4..837a9c9 100644
--- a/README
+++ b/README
@@ -59,6 +59,7 @@ to be installed:
  docbook-utils, ghostscript (claws-mail manual)
  texlive (you need most modules)
  texlive-latex-extra
+ texlive-lang-german
  latex-xcolor (for the compendium)
  libqt4-dev-bin (in case pinentry-qt needs moc)
 

-----------------------------------------------------------------------

Summary of changes:
 Makefile.am                                        |  18 +-
 NEWS                                               |  10 +-
 README                                             |   1 +
 packages/packages.current                          |  89 +--
 patches/glib-2.41.0/03-remove-rand_s.patch         |  76 ---
 .../{glib-2.41.0 => glib-2.41.5}/01-socket.patch   |   0
 ...gpgtar-Fix-extracting-files-with-size-512.patch |  47 --
 ...-Enable-wildcard-expansion-with-mingw-w64.patch |   0
 ...har_to_native-convert-to-console-codepage.patch |   0
 ...x-gpgtar-8-bit-encoding-handling-on-Win32.patch |   0
 patches/gnutls-2.12.23/06-cve-2015-0282.patch      | 484 ++++++++++++++++
 patches/gnutls-2.12.23/07-cve-2015-0294.patch      |  74 +++
 .../gnutls-2.12.23/25_updatedgdocfrommaster.patch  | 637 +++++++++++++++++++++
 patches/pinentry-0.9.0/fix-wrong-moc-files.patch   | 515 -----------------
 .../scute-1.4.0/workaround-broken-libtool.patch    |  40 ++
 .../w32pth-2.0.5/workaround-broken-libtool.patch   |  32 ++
 src/inst-gpgex.nsi                                 |   2 +
 src/uninst-gpgex.nsi                               |   3 +
 18 files changed, 1340 insertions(+), 688 deletions(-)
 delete mode 100755 patches/glib-2.41.0/03-remove-rand_s.patch
 rename patches/{glib-2.41.0 => glib-2.41.5}/01-socket.patch (100%)
 delete mode 100755 patches/gnupg2-2.0.27/0003-gpgtar-Fix-extracting-files-with-size-512.patch
 rename patches/{gnupg2-2.0.27 => gnupg2-2.0.28}/0001-Enable-wildcard-expansion-with-mingw-w64.patch (100%)
 rename patches/{gnupg2-2.0.27 => gnupg2-2.0.28}/0002-Let-wchar_to_native-convert-to-console-codepage.patch (100%)
 rename patches/{gnupg2-2.0.27 => gnupg2-2.0.28}/0005-Fix-gpgtar-8-bit-encoding-handling-on-Win32.patch (100%)
 create mode 100755 patches/gnutls-2.12.23/06-cve-2015-0282.patch
 create mode 100755 patches/gnutls-2.12.23/07-cve-2015-0294.patch
 create mode 100755 patches/gnutls-2.12.23/25_updatedgdocfrommaster.patch
 delete mode 100755 patches/pinentry-0.9.0/fix-wrong-moc-files.patch
 create mode 100755 patches/scute-1.4.0/workaround-broken-libtool.patch
 create mode 100755 patches/w32pth-2.0.5/workaround-broken-libtool.patch


hooks/post-receive
-- 
GnuPG for Windows
http://git.gnupg.org



More information about the Gpg4win-commits mailing list