Skip to contentSkip to conversation

gnutls fixes for master

PATCH In review Paul Eggleton 3 participants 7 messages Mar 5, 2014

lore
Share & tools
lore
#0 lore raw

cover gnutls fixes for master

Turns out we're using the same old version of gnutls in master as in dylan and dora, and we need a fix for a compile failure.

The following changes since commit 82c773e88aaefd9321481ad297554d5b4a3ae0b2:

Revert "ncurses: use ln -r to generate relative symlink" (2014-03-03 15:52:26 +0000)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib paule/gnutls
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=paule/gnutls

Karl Hiramoto (2):
gnutls: CVE-2014-0092 correct return codes
gnutls: Fixed bug that prevented the rejection of v1 intermediate CA
certificates.

Paul Eggleton (1):
gnutls: fix failure during do_compile

 .../gnutls/gnutls/25_updatedgdocfrommaster.diff    | 636 +++++++++++++++++++++
 .../CVE-2014-0092-corrected-return-codes.patch     | 106 ++++
 ...14-1959-rejection-of-v1-intermediate-cert.patch |  33 ++
 meta/recipes-support/gnutls/gnutls_2.12.23.bb      |   3 +
 4 files changed, 778 insertions(+)
 create mode 100644 meta/recipes-support/gnutls/gnutls/25_updatedgdocfrommaster.diff
 create mode 100644 meta/recipes-support/gnutls/gnutls/CVE-2014-0092-corrected-return-codes.patch
 create mode 100644 meta/recipes-support/gnutls/gnutls/CVE-2014-1959-rejection-of-v1-intermediate-cert.patch
Signature · 1 line
1.8.5.3
#1 lore raw

PATCH 1/3 gnutls: CVE-2014-0092 correct return codes

From: Karl Hiramoto <[email protected]>

This patch is for the OE-Core master branch - it comes from upstream:

git://gitorious.org/gnutls/gnutls.git

branch: gnutls_2_12_x
commit: 6aa26f78150ccbdf0aec1878a41c17c41d358a3b
Author: Nikos Mavrogiannopoulos <[email protected]>
Date:   Thu Feb 27 19:42:26 2014 +0100

For more info see:
http://www.gnutls.org/security.html#GNUTLS-SA-2014-2
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0092
https://www.gitorious.org/gnutls/gnutls/commit/6aa26f78150ccbdf0aec1878a41c17c41d358a3b

---
 .../CVE-2014-0092-corrected-return-codes.patch     | 106 +++++++++++++++++++++
 meta/recipes-support/gnutls/gnutls_2.12.23.bb      |   1 +
 2 files changed, 107 insertions(+)
 create mode 100644 meta/recipes-support/gnutls/gnutls/CVE-2014-0092-corrected-return-codes.patch
meta/recipes-support/gnutls/gnutls/CVE-2014-0092-corrected-return-codes.patch new file +106 -0
new file mode 100644
index 0000000..68ee5bc
@@ -0,0 +1,106 @@
+From 6aa26f78150ccbdf0aec1878a41c17c41d358a3b Mon Sep 17 00:00:00 2001
+From: Nikos Mavrogiannopoulos <[email protected]>
+Date: Thu, 27 Feb 2014 19:42:26 +0100
+Subject: [PATCH 1/3] corrected return codes
+
+Upstream-Status: Backport
+
+Signed-off-by: Karl Hiramoto <[email protected]>
+
+---
+ lib/x509/verify.c | 16 ++++++++++------
+ 1 file changed, 10 insertions(+), 6 deletions(-)
+
+diff --git a/lib/x509/verify.c b/lib/x509/verify.c
+index c9a6b0d..eef85a8 100644
+--- a/lib/x509/verify.c
++++ b/lib/x509/verify.c
+@@ -141,7 +141,7 @@ check_if_ca (gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer,
+   if (result < 0)
+     {
+       gnutls_assert ();
+-      goto cleanup;
++      goto fail;
+     }
+ 
+   result =
+@@ -150,7 +150,7 @@ check_if_ca (gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer,
+   if (result < 0)
+     {
+       gnutls_assert ();
+-      goto cleanup;
++      goto fail;
+     }
+ 
+   result =
+@@ -158,7 +158,7 @@ check_if_ca (gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer,
+   if (result < 0)
+     {
+       gnutls_assert ();
+-      goto cleanup;
++      goto fail;
+     }
+ 
+   result =
+@@ -166,7 +166,7 @@ check_if_ca (gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer,
+   if (result < 0)
+     {
+       gnutls_assert ();
+-      goto cleanup;
++      goto fail;
+     }
+ 
+   /* If the subject certificate is the same as the issuer
+@@ -206,6 +206,7 @@ check_if_ca (gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer,
+   else
+     gnutls_assert ();
+ 
++fail:
+   result = 0;
+ 
+ cleanup:
+@@ -330,7 +331,7 @@ _gnutls_verify_certificate2 (gnutls_x509_crt_t cert,
+   gnutls_datum_t cert_signed_data = { NULL, 0 };
+   gnutls_datum_t cert_signature = { NULL, 0 };
+   gnutls_x509_crt_t issuer = NULL;
+-  int issuer_version, result;
++  int issuer_version, result = 0;
+ 
+   if (output)
+     *output = 0;
+@@ -363,7 +364,7 @@ _gnutls_verify_certificate2 (gnutls_x509_crt_t cert,
+   if (issuer_version < 0)
+     {
+       gnutls_assert ();
+-      return issuer_version;
++      return 0;
+     }
+ 
+   if (!(flags & GNUTLS_VERIFY_DISABLE_CA_SIGN) &&
+@@ -385,6 +386,7 @@ _gnutls_verify_certificate2 (gnutls_x509_crt_t cert,
+   if (result < 0)
+     {
+       gnutls_assert ();
++      result = 0;
+       goto cleanup;
+     }
+ 
+@@ -393,6 +395,7 @@ _gnutls_verify_certificate2 (gnutls_x509_crt_t cert,
+   if (result < 0)
+     {
+       gnutls_assert ();
++      result = 0;
+       goto cleanup;
+     }
+ 
+@@ -410,6 +413,7 @@ _gnutls_verify_certificate2 (gnutls_x509_crt_t cert,
+   else if (result < 0)
+     {
+       gnutls_assert();
++      result = 0;
+       goto cleanup;
+     }
+ 
+-- 
+1.8.3.2
+
meta/recipes-support/gnutls/gnutls_2.12.23.bb +1 -0
index 1575d2c..e26b154 100644
@@ -6,6 +6,7 @@ SRC_URI += "file://gnutls-openssl.patch \
             file://correct_rpl_gettimeofday_signature.patch \
             file://configure-fix.patch \
             file://avoid_AM_PROG_MKDIR_P_warning_error_with_automake_1.12.patch \
+	    file://CVE-2014-0092-corrected-return-codes.patch \
             ${@['', 'file://fix-gettext-version.patch'][bb.data.inherits_class('native', d) or (not ((d.getVar("INCOMPATIBLE_LICENSE", True) or "").find("GPLv3") != -1))]} \
            "
 
Signature · 1 line
1.8.5.3
#2 lore raw

PATCH 2/3 gnutls: Fixed bug that prevented the rejection of v1 intermediate CA certificates.

In reply to Paul Eggleton

From: Karl Hiramoto <[email protected]>

This patch is for the OE-Core master branch - it comes from upstream:

From 467478d8ff08a3cb4be3034ff04c9d08a0ceba3e
From: Nikos Mavrogiannopoulos <[email protected]>
Date: Wed, 12 Feb 2014 16:41:33 +0100

For more info see:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1959
http://www.gnutls.org/security.html#GNUTLS-SA-2014-1
https://www.gitorious.org/gnutls/gnutls/commit/467478d8ff08a3cb4be3034ff04c9d08a0ceba3e

---
 ...14-1959-rejection-of-v1-intermediate-cert.patch | 33 ++++++++++++++++++++++
 meta/recipes-support/gnutls/gnutls_2.12.23.bb      |  3 +-
 2 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-support/gnutls/gnutls/CVE-2014-1959-rejection-of-v1-intermediate-cert.patch
meta/recipes-support/gnutls/gnutls/CVE-2014-1959-rejection-of-v1-intermediate-cert.patch new file +33 -0
new file mode 100644
index 0000000..6567257
@@ -0,0 +1,33 @@
+From 467478d8ff08a3cb4be3034ff04c9d08a0ceba3e Mon Sep 17 00:00:00 2001
+From: Nikos Mavrogiannopoulos <[email protected]>
+Date: Wed, 12 Feb 2014 16:41:33 +0100
+Subject: [PATCH 1/5] Fixed bug that prevented the rejection of v1 intermediate
+ CA certificates.
+
+Upstream-Status: Backport
+
+Signed-off-by: Karl Hiramoto <[email protected]>
+
+---
+ lib/x509/verify.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/lib/x509/verify.c b/lib/x509/verify.c
+index 2efcebf..c9a6b0d 100644
+--- a/lib/x509/verify.c
++++ b/lib/x509/verify.c
+@@ -645,7 +645,10 @@ _gnutls_x509_verify_certificate (const gnutls_x509_crt_t * certificate_list,
+        * certificates can exist in a supplied chain.
+        */
+       if (!(flags & GNUTLS_VERIFY_ALLOW_ANY_X509_V1_CA_CRT))
+-        flags &= ~(GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT);
++        {
++          flags &= ~(GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT);
++          flags |= GNUTLS_VERIFY_DO_NOT_ALLOW_X509_V1_CA_CRT;
++        }
+       if ((ret =
+            _gnutls_verify_certificate2 (certificate_list[i - 1],
+                                         &certificate_list[i], 1, flags,
+-- 
+1.8.3.2
+
meta/recipes-support/gnutls/gnutls_2.12.23.bb +2 -1
index e26b154..04605dd 100644
@@ -6,7 +6,8 @@ SRC_URI += "file://gnutls-openssl.patch \
             file://correct_rpl_gettimeofday_signature.patch \
             file://configure-fix.patch \
             file://avoid_AM_PROG_MKDIR_P_warning_error_with_automake_1.12.patch \
-	    file://CVE-2014-0092-corrected-return-codes.patch \
+            file://CVE-2014-1959-rejection-of-v1-intermediate-cert.patch \
+            file://CVE-2014-0092-corrected-return-codes.patch \
             ${@['', 'file://fix-gettext-version.patch'][bb.data.inherits_class('native', d) or (not ((d.getVar("INCOMPATIBLE_LICENSE", True) or "").find("GPLv3") != -1))]} \
            "
 
Signature · 1 line
1.8.5.3
#3 lore raw

PATCH 3/3 gnutls: fix failure during do_compile

In reply to Paul Eggleton

Add a Debian patch to fix a load of errors building the documentation within do_compile e.g.:

| ./x509-api.texi:15: misplaced {
| ./x509-api.texi:15: misplaced }

---
 .../gnutls/gnutls/25_updatedgdocfrommaster.diff    | 636 +++++++++++++++++++++
 meta/recipes-support/gnutls/gnutls_2.12.23.bb      |   1 +
 2 files changed, 637 insertions(+)
 create mode 100644 meta/recipes-support/gnutls/gnutls/25_updatedgdocfrommaster.diff
meta/recipes-support/gnutls/gnutls/25_updatedgdocfrommaster.diff new file +636 -0
new file mode 100644
index 0000000..76108a0
@@ -0,0 +1,636 @@
+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!
+
+Bug-Debian: http://bugs.debian.org/724167
+
+Upstream-Status: Backport
+
+Signed-off-by: Paul Eggleton <[email protected]>
+
+--- 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>" );
++@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}" );
++@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}" );
++@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>" );
++@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" );
++@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" );
++@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;
++@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;
++	    }
++    
+ 	}
+     }
+ }
meta/recipes-support/gnutls/gnutls_2.12.23.bb +1 -0
index 04605dd..2218242 100644
@@ -8,6 +8,7 @@ SRC_URI += "file://gnutls-openssl.patch \
             file://avoid_AM_PROG_MKDIR_P_warning_error_with_automake_1.12.patch \
             file://CVE-2014-1959-rejection-of-v1-intermediate-cert.patch \
             file://CVE-2014-0092-corrected-return-codes.patch \
+            file://25_updatedgdocfrommaster.diff \
             ${@['', 'file://fix-gettext-version.patch'][bb.data.inherits_class('native', d) or (not ((d.getVar("INCOMPATIBLE_LICENSE", True) or "").find("GPLv3") != -1))]} \
            "
 
Signature · 1 line
1.8.5.3
#4 lore raw
In reply to Paul Eggleton
Quoted 13 lines · Paul Eggleton

Turns out we're using the same old version of gnutls in master as in dylan and dora, and we need a fix for a compile failure.

The following changes since commit 82c773e88aaefd9321481ad297554d5b4a3ae0b2:

Revert "ncurses: use ln -r to generate relative symlink" (2014-03-03 15:52:26 +0000)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib paule/gnutls
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=paule/gnutls

Quoted 7 lines

Karl Hiramoto (2):
gnutls: CVE-2014-0092 correct return codes
gnutls: Fixed bug that prevented the rejection of v1 intermediate CA
certificates.

Paul Eggleton (1):
gnutls: fix failure during do_compile

Any specific reasons why we still have the old gnuTLS-2.12.23 ?

Br,
David

#5 lore raw

Hi David,

Quoted 5 lines · On Wednesday 05 March 2014 13:34:41 David Nyström wrote:
Quoted 4 lines · Paul Eggleton

Turns out we're using the same old version of gnutls in master as in dylan and dora, and we need a fix for a compile failure.

The following changes since commit

82c773e88aaefd9321481ad297554d5b4a3ae0b2:

Quoted 10 lines
Quoted 10 lines

Revert "ncurses: use ln -r to generate relative symlink" (2014-03-03 15:52:26 +0000)>
are available in the git repository at:
git://git.openembedded.org/openembedded-core-contrib paule/gnutls
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=
paule/gnutls>
Karl Hiramoto (2):
gnutls: CVE-2014-0092 correct return codes
gnutls: Fixed bug that prevented the rejection of v1 intermediate CA

Quoted 6 lines
Quoted 4 lines

certificates.

Paul Eggleton (1):
gnutls: fix failure during do_compile

Any specific reasons why we still have the old gnuTLS-2.12.23 ?

I'm not sure - there's no NO_UPGRADE_REASON set in our inc files to suggest why. Googling turned this up:

https://wiki.debian.org/gnutls3

Valentin, Saul - we probably ought to have NO_UPGRADE_REASON set for gnutls if we have a good reason for staying with 2.12.x.

Cheers,
Paul

Signature · 2 lines
Paul Eggleton
Intel Open Source Technology Centre
#6 lore raw
Quoted 27 lines · Paul Eggleton

Hi David,

Quoted 5 lines · On Wednesday 05 March 2014 13:34:41 David Nyström wrote:
Quoted 4 lines · Paul Eggleton

Turns out we're using the same old version of gnutls in master as in dylan and dora, and we need a fix for a compile failure.

The following changes since commit

82c773e88aaefd9321481ad297554d5b4a3ae0b2:

Quoted 10 lines
Quoted 10 lines

Revert "ncurses: use ln -r to generate relative symlink" (2014-03-03 15:52:26 +0000)>
are available in the git repository at:
git://git.openembedded.org/openembedded-core-contrib paule/gnutls
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=
paule/gnutls>
Karl Hiramoto (2):
gnutls: CVE-2014-0092 correct return codes
gnutls: Fixed bug that prevented the rejection of v1 intermediate CA

Quoted 5 lines
Quoted 4 lines

certificates.

Paul Eggleton (1):
gnutls: fix failure during do_compile

Any specific reasons why we still have the old gnuTLS-2.12.23 ?

I'm not sure - there's no NO_UPGRADE_REASON set in our inc files to suggest why. Googling turned this up:

Quoted 8 lines

https://wiki.debian.org/gnutls3

Valentin, Saul - we probably ought to have NO_UPGRADE_REASON set for gnutls if we have a good reason for staying with 2.12.x.

Cheers,
Paul

There is no valid regex for gnutls at the moment. I'll update it. As for the recommended version Saul or Ross might know more.