On Fri, Sep 14, 2018 at 07:22:06PM +1000, Mike McCormack wrote:
> On 13/09/18 17:47, Koen Vandeputte wrote:
> > 
> > As it mostly works, but only sometimes fail, it looks like a race
> > condition.
> > 
> > Does anyone have any clue?
> 
> Hi Koen,
> 
> I think I hit something similar... sometimes usign only spits out 16
> characters rather than 17, so ucert fails.
> The attached patch worked around the problem for me, but may not be the best
> fix.

For now, this is acceptable. In the long run we should store keys in
their native fixed-length binary representation rather than using
usign's base64 encoded text strings -- however, that requires changes
to usign as well, so for now fixing ucert to work with usign ascii i/o
is the way to go.

Please resend you patch including a patch description and SoB line, so
it can be merged.

Cheers


Daniel

> 
> Mike
> 

> From fafbf7b74da96ae0cfe20ed4fb8a5294b644444a Mon Sep 17 00:00:00 2001
> From: Mike McCormack <m...@atratus.org>
> Date: Sat, 18 Aug 2018 16:04:57 +1000
> Subject: [PATCH] Add patch to fix ucert
> 
> ---
>  package/system/ucert/patches/0001-Fix-cert-length.patch | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>  create mode 100644 package/system/ucert/patches/0001-Fix-cert-length.patch
> 
> diff --git a/package/system/ucert/patches/0001-Fix-cert-length.patch 
> b/package/system/ucert/patches/0001-Fix-cert-length.patch
> new file mode 100644
> index 0000000000..8ccf4561fb
> --- /dev/null
> +++ b/package/system/ucert/patches/0001-Fix-cert-length.patch
> @@ -0,0 +1,15 @@
> +--- a/usign-exec.c   2018-08-09 03:48:11.000000000 +1000
> ++++ b/usign-exec.c   2018-08-18 16:03:41.393546235 +1000
> +@@ -156,9 +156,10 @@
> +             waitpid(pid, &status, 0);
> +             status = WEXITSTATUS(status);
> +             if (fingerprint && !WEXITSTATUS(status)) {
> ++                    ssize_t r;
> +                     memset(fingerprint, 0, 17);
> +-                    read(fds[0], fingerprint, 17);
> +-                    if (fingerprint[16] != '\n')
> ++                    r = read(fds[0], fingerprint, 17);
> ++                    if (r < 16)
> +                             status = -1;
> + 
> +                     fingerprint[16] = '\0';
> -- 
> 2.11.0
> 

> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to