X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwgtpkg-sign.c;h=76abce1e94f84013f6364c3a38e3bfa9fca0d446;hb=refs%2Ftags%2Fhalibut%2F8.0.3;hp=c4faf290fd00bb77bc78a614e8a4415113292426;hpb=f3d64b7c741677cd28e2a11deed67196cd02b46a;p=src%2Fapp-framework-main.git diff --git a/src/wgtpkg-sign.c b/src/wgtpkg-sign.c index c4faf29..76abce1 100644 --- a/src/wgtpkg-sign.c +++ b/src/wgtpkg-sign.c @@ -1,5 +1,7 @@ /* - Copyright 2015 IoT.bzh + Copyright (C) 2015-2019 IoT.bzh + + author: José Bollo Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,13 +23,17 @@ #include #include #include -#include #include #include #include +#include + #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-files.h" +#include "wgtpkg-workdir.h" +#include "wgtpkg-digsig.h" +#include "wgtpkg-xmlsec.h" #if !defined(MAXCERT) #define MAXCERT 20 @@ -48,16 +54,30 @@ static unsigned int get_number(const char *value) val = strtoul(value, &end, 10); if (*end || 0 == val || val >= UINT_MAX || *value == '-') { - syslog(LOG_ERR, "bad number value %s", value); + ERROR("bad number value %s", value); exit(1); } return (unsigned int)val; } +static void version() +{ + printf( + "\n" + " %s version="AFM_VERSION"\n" + "\n" + " Copyright (C) 2015-2019 \"IoT.bzh\"\n" + " AFB comes with ABSOLUTELY NO WARRANTY.\n" + " Licence Apache 2\n" + "\n", + appname + ); +} + static void usage() { printf( - "usage: %s [-f] [-k keyfile] [-c certfile]... [-o wgtfile] [-d number | -a] directory\n" + "usage: %s [-f] [-k keyfile] [-c certfile]... [-d number | -a] directory\n" "\n" " -k keyfile the private key to use for author signing\n" " -c certfile the certificate(s) to use for author signing\n" @@ -66,6 +86,7 @@ static void usage() " -f force overwriting\n" " -q quiet\n" " -v verbose\n" + " -V version\n" "\n", appname ); @@ -80,6 +101,7 @@ static struct option options[] = { { "help", no_argument, NULL, 'h' }, { "quiet", no_argument, NULL, 'q' }, { "verbose", no_argument, NULL, 'v' }, + { "version", no_argument, NULL, 'V' }, { NULL, 0, NULL, 0 } }; @@ -91,19 +113,19 @@ int main(int ac, char **av) char *keyfile, *certfiles[MAXCERT+1], *directory, **x; struct stat s; - openlog(appname, LOG_PERROR, LOG_USER); + LOGUSER(appname); force = ncert = author = 0; number = UINT_MAX; keyfile = directory = NULL; for (;;) { - i = getopt_long(ac, av, "hfqvak:c:d:", options, NULL); + i = getopt_long(ac, av, "hfqvVak:c:d:", options, NULL); if (i < 0) break; switch (i) { case 'c': if (ncert == MAXCERT) { - syslog(LOG_ERR, "maximum count of certificates reached"); + ERROR("maximum count of certificates reached"); return 1; } certfiles[ncert++] = optarg; @@ -113,6 +135,7 @@ int main(int ac, char **av) case 'f': force = 1; continue; case 'a': author = 1; continue; case 'h': usage(); return 0; + case 'V': version(); return 0; case 'q': if (verbosity) verbosity--; @@ -121,14 +144,14 @@ int main(int ac, char **av) verbosity++; break; case ':': - syslog(LOG_ERR, "missing argument"); + ERROR("missing argument"); return 1; default: - syslog(LOG_ERR, "unrecognized option"); + ERROR("unrecognized option"); return 1; } if (*x != NULL) { - syslog(LOG_ERR, "option set twice"); + ERROR("option set twice"); return 1; } *x = optarg; @@ -136,12 +159,12 @@ int main(int ac, char **av) /* remaining arguments and final checks */ if (optind >= ac) { - syslog(LOG_ERR, "no directory set"); + ERROR("no directory set"); return 1; } directory = av[optind++]; if (optind < ac) { - syslog(LOG_ERR, "extra parameters found"); + ERROR("extra parameters found"); return 1; } @@ -153,20 +176,20 @@ int main(int ac, char **av) /* check values */ if (stat(directory, &s)) { - syslog(LOG_ERR, "can't find directory %s", directory); + ERROR("can't find directory %s", directory); return 1; } if (!S_ISDIR(s.st_mode)) { - syslog(LOG_ERR, "%s isn't a directory", directory); + ERROR("%s isn't a directory", directory); return 1; } if (access(keyfile, R_OK) != 0) { - syslog(LOG_ERR, "can't access private key %s", keyfile); + ERROR("can't access private key %s", keyfile); return 1; } for(i = 0 ; i < ncert ; i++) if (access(certfiles[i], R_OK) != 0) { - syslog(LOG_ERR, "can't access certificate %s", certfiles[i]); + ERROR("can't access certificate %s", certfiles[i]); return 1; } @@ -176,14 +199,14 @@ int main(int ac, char **av) /* compute absolutes paths */ -#define rp(x) do { char *p = realpath(x, NULL); if (p != NULL) x = p; else { syslog(LOG_ERR, "realpath failed for %s",x); return 1; } } while(0) +#define rp(x) do { char *p = realpath(x, NULL); if (p != NULL) x = p; else { ERROR("realpath failed for %s",x); return 1; } } while(0) rp(keyfile); for(i = 0 ; i < ncert ; i++) rp(certfiles[i]); #undef rp /* set and enter the workdir */ - if (set_workdir(directory, 0) || enter_workdir(0)) + if (set_workdir(directory, 0)) return 1; if (fill_files()) @@ -195,11 +218,11 @@ int main(int ac, char **av) for (number = 1; get_signature(number) != NULL ; number++); if (!force && get_signature(number) != NULL) { - syslog(LOG_ERR, "can't overwrite existing signature %s", get_signature(number)->name); + ERROR("can't overwrite existing signature %s", get_signature(number)->name); return 1; } - notice("-- SIGNING content of directory %s for number %u", directory, number); + NOTICE("-- SIGNING content of directory %s for number %u", directory, number); certfiles[ncert] = NULL; return !!create_digsig(number, keyfile, (const char**)certfiles);