Update date in copyrights
[src/app-framework-main.git] / src / wgtpkg-info.c
index 1a7724b..f32b265 100644 (file)
@@ -1,5 +1,7 @@
 /*
- Copyright 2015 IoT.bzh
+ Copyright (C) 2015-2019 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.
  limitations under the License.
 */
 
-#define _BSD_SOURCE /* see readdir */
-
 #include <stdlib.h>
 #include <stdio.h>
 #include <dirent.h>
 #include <unistd.h>
 #include <limits.h>
 #include <errno.h>
-#include <syslog.h>
 #include <getopt.h>
 
+#include <libxml/tree.h>
+
 #include "verbose.h"
-#include "wgtpkg.h"
+#include "wgtpkg-workdir.h"
+#include "wgtpkg-files.h"
+#include "wgtpkg-zip.h"
+#include "wgtpkg-digsig.h"
+#include "wgtpkg-xmlsec.h"
 #include "wgt.h"
 #include "wgt-info.h"
 
@@ -34,13 +39,28 @@ static const char appname[] = "wgtpkg-info";
 
 static void show(const char *wgtfile);
 
+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] [-q] [-v] wgtfile...\n"
+               "usage: %s [-q] [-v] wgtfile...\n"
                "\n"
                "   -q            quiet\n"
                "   -v            verbose\n"
+               "   -V            version\n"
                "\n",
                appname
        );
@@ -50,6 +70,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 }
 };
 
@@ -59,12 +80,12 @@ int main(int ac, char **av)
        int i;
        char *wpath;
 
-       openlog(appname, LOG_PERROR, LOG_USER);
+       LOGUSER(appname);
 
        xmlsec_init();
 
        for (;;) {
-               i = getopt_long(ac, av, "hqv", options, NULL);
+               i = getopt_long(ac, av, "hqvV", options, NULL);
                if (i < 0)
                        break;
                switch (i) {
@@ -78,11 +99,14 @@ int main(int ac, char **av)
                case 'v':
                        verbosity++;
                        break;
+               case 'V':
+                       version();
+                       return 0;
                case ':':
-                       syslog(LOG_ERR, "missing argument value");
+                       ERROR("missing argument value");
                        return 1;
                default:
-                       syslog(LOG_ERR, "unrecognized option");
+                       ERROR("unrecognized option");
                        return 1;
                }
        }
@@ -92,7 +116,7 @@ int main(int ac, char **av)
        for (i = 0 ; av[i] != NULL ; i++) {
                wpath = realpath(av[i], NULL);
                if (wpath == NULL) {
-                       syslog(LOG_ERR, "error while getting realpath of %dth widget: %s", i+1, av[i]);
+                       ERROR("error while getting realpath of %dth widget: %s", i+1, av[i]);
                        return 1;
                }
                av[i] = wpath;
@@ -105,76 +129,37 @@ int main(int ac, char **av)
        return 0;
 }
 
-static struct wgt *wgt_at_workdir()
-{
-       int rc, wfd;
-       struct wgt *wgt;
-
-       wfd = workdirfd();
-       if (wfd < 0)
-               return NULL;
-
-       wgt = wgt_create();
-       if (!wgt) {
-               syslog(LOG_ERR, "failed to allocate wgt");
-               close(wfd);
-               return NULL;
-       }
-
-       rc = wgt_connectat(wgt, wfd, NULL);
-       if (rc) {
-               syslog(LOG_ERR, "failed to connect wgt to workdir");
-               close(wfd);
-               wgt_unref(wgt);
-               return NULL;
-       }
-
-       return wgt;
-}
-
-
 static int check_and_show()
 {
-       struct wgt *wgt;
        struct wgt_info *ifo;
 
-       wgt = wgt_at_workdir();
-       if (!wgt)
+       ifo = wgt_info_createat(workdirfd, NULL, 1, 1, 1);
+       if (!ifo)
                return -1;
-
-       ifo = wgt_info_get(wgt, 1, 1, 1);
-       if (!ifo) {
-               wgt_unref(wgt);
-               return -1;
-       }
        wgt_info_dump(ifo, 1, "");
        wgt_info_unref(ifo);
-       wgt_unref(wgt);
        return 0;
 }
 
 /* install the widget of the file */
 static void show(const char *wgtfile)
 {
-       notice("-- INFO for widget %s --", wgtfile);
+       NOTICE("-- INFO for widget %s --", wgtfile);
 
        /* workdir */
-       if (make_workdir_base("/tmp", "UNPACK", 0)) {
-               syslog(LOG_ERR, "failed to create a working directory");
+       if (make_workdir("/tmp", "UNPACK", 0)) {
+               ERROR("failed to create a working directory");
                return;
        }
 
-       if (enter_workdir(0))
-               goto error2;
-
        if (zread(wgtfile, 0))
                goto error2;
 
-       if (check_all_signatures())
+       if (check_all_signatures(1)) /* info even on WGT without signature */
                goto error2;
 
        check_and_show();
-       
+
 error2:
        remove_workdir();
        return;