FriBID forum

FriBID är ett fritt program för e-legitimation med BankID.

You are not logged in.

#1 2014-04-14 10:20:34

Hellqvio
Member
Registered: 2014-04-06

Test av bsd make

Har testat den nya mastern configure / make med bsd make det gick bra så länge inte  --with-gtk=2 är satt  i configure steget.

detta ger
"
Package 'gtk+-2.0 was not found in the pkg-config search path
Package >= was not found in the pkg-config search path
Package 2.18' was not found in the pkg-config search path
backend.c:29:18: error: glib.h: No such file or directory
"
Jag tror att försöket till versionstestet i raden:
"
gtk2libs=$([ "x`getconfig WITH_GTK2`" = "x1" ] && echo "'gtk+-2.0 >= 2.18' gdk-2.0")
"
är överflödigt.
versionstest körs ändå på rad: 206.
föreslår därför nedanstående patch:

$ diff -bu configure.bu configure
--- configure.bu        Mon Apr 14 08:40:32 2014
+++ configure   Mon Apr 14 10:59:12 2014
@@ -203,7 +203,7 @@
         ;;
     --internal--get-pc-cflags|--internal--get-pc-libs)
         [ ! -r "$basedir/common/config.h" ] && exit 1
-        gtk2libs=$([ "x`getconfig WITH_GTK2`" = "x1" ] && echo "'gtk+-2.0 >= 2.18' gdk-2.0")
+        gtk2libs=$([ "x`getconfig WITH_GTK2`" = "x1" ] && echo "gtk+-2.0")
         gtk3libs=$([ "x`getconfig WITH_GTK3`" = "x1" ] && echo "gtk+-3.0")
         pkcs11libs=$([ "x`getconfig ENABLE_PKCS11`" = "x1" ] && echo "libp11")
         if [ "x$flag" = "x--internal--get-pc-cflags" ]; then

Fick också nedanstående varningar under kompilering:

*** Warning in /home/ole/Downloads/fribid-master/client: "../configure --internal--list-extra-objects" returned non-zero status (Makefile:39)

xmldsig.o(.text+0x10b): In function `xmldsig_sign':
: warning: sprintf() is often misused, please use snprintf()
/Ole

Offline

#2 2014-04-14 10:34:46

samuellb
Administratör
Registered: 2010-02-15
Website

Re: Test av bsd make

Tack för ännu en BSD-bugfix! smile Fixade även varningen om non-zero return från configure (tror jag iaf, testa gärna). Båda fixarna är pushade till GIT-repositoryna.

Den sista varningen är lite knepigare. Det verkar inte vara något fel eftersom längden för sprintf()s buffert beräknas innan, men det är klart att det vore trevligt om man kunde slippa den varningen också.

Offline

#3 2014-04-14 13:05:46

Hellqvio
Member
Registered: 2014-04-06

Re: Test av bsd make

Tackar
körde om hela proceduren,  det gick bra!

angående:
"
warning: sprintf() is often misused, please use snprintf()
"
hackade jag om den enl OpenBSD man page för sprintf 3.

se patch:

 $ diff -bu  client/xmldsig.c.orig  client/xmldsig.c 
  --- client/xmldsig.c.orig       Mon Apr 14 11:29:20 2014
  +++ client/xmldsig.c    Mon Apr 14 13:29:06 2014
  @@ -100,7 +100,7 @@
     
     char *keyend = keyinfoInner;
     for (size_t i = 0; i < certCount; i++) {
-        keyend += sprintf(keyend, cert_template, certs[i]);
+       keyend += snprintf(keyend, sizeof(keyend), cert_template, certs[i]);
        free(certs[i]);
     }
     free(certs);

för referens se: http://www.openbsd.org/cgi-bin/man.cgi
titta gärna på  strlcpy också där utreds ärendet ytterligare.
på  http://stackoverflow.com/questions/7315 … ore-secure
finns mer diskussioner...

Offline

#4 2014-04-14 13:50:58

samuellb
Administratör
Registered: 2010-02-15
Website

Re: Test av bsd make

Fast sizeof(keyend) blir storleken på pekaren (alltså alltid 4 eller 8 bytes) , så det kommer inte fungera.

Offline

#5 2014-04-21 19:22:36

Hellqvio
Member
Registered: 2014-04-06

Re: Test av bsd make

Ursäkta det pinsamma misstaget med sizeof ...
Har gjort ett nytt försök,
se diffen :

$ diff -bu  client/xmldsig.c.orig client/xmldsig.c
--- client/xmldsig.c.orig       Mon Apr 14 11:29:20 2014
+++ client/xmldsig.c    Mon Apr 21 18:47:22 2014
@@ -81,7 +81,7 @@
     char **certs = NULL;
     char *keyinfo = NULL, *signedinfo = NULL;
     char *complete = NULL;
-    size_t certCount;
+    size_t certCount, tmp;
     
     // Keyinfo
     if (!token_getBase64Chain(token, &certs, &certCount)) goto error;
@@ -99,8 +99,15 @@
     keyinfoInner[0] = '\0';
     
     char *keyend = keyinfoInner;
+    certsLength += strlen( cert_template);
     for (size_t i = 0; i < certCount; i++) {
-        keyend += sprintf(keyend, cert_template, certs[i]);
+       tmp = snprintf(keyend, certsLength, cert_template, certs[i]);
+       keyend += tmp;
+       if ( certsLength >= tmp)
+           certsLength -= tmp;
+       else
+           break;
+       certsLength += strlen( cert_template);
        free(certs[i]);
     }
     free(certs);

Den kanske är överarbetad och stjälper mer än den hjälper.
Har iallafall provat den skarpt en gång.
funderar också på om  "breaket" skulle ersättas med ett "goto error".

Offline

Board footer

Powered by FluxBB