/*
- Copyright 2015 IoT.bzh
+ Copyright 2015, 2016, 2017 IoT.bzh
+
+ author: José Bollo <jose.bollo@iot.bzh>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
#include <unistd.h>
#include <limits.h>
#include <errno.h>
-#include <syslog.h>
#include <getopt.h>
#include <sys/stat.h>
#include <fcntl.h>
-#include "wgtpkg.h"
+#include <libxml/tree.h>
+
+#include "verbose.h"
+#include "wgtpkg-files.h"
+#include "wgtpkg-workdir.h"
+#include "wgtpkg-digsig.h"
+#include "wgtpkg-xmlsec.h"
#if !defined(MAXCERT)
#define MAXCERT 20
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 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"
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, "hfak:c:d:", options, NULL);
+ i = getopt_long(ac, av, "hfqvak: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;
case 'f': force = 1; continue;
case 'a': author = 1; continue;
case 'h': usage(); return 0;
+ case 'q':
+ if (verbosity)
+ verbosity--;
+ break;
+ case 'v':
+ 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;
/* 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;
}
/* 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;
}
/* 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())
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);