Merge "afm-user-daemon: Remove it by default"
[src/app-framework-main.git] / src / wgtpkg-certs.c
index b4b45fd..66e425e 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.
 */
 
 
-#include <syslog.h>
 #include <openssl/x509.h>
 
-#include "wgtpkg.h"
+#include "verbose.h"
+#include "wgtpkg-certs.h"
+#include "wgtpkg-base64.h"
 
 struct x509l {
-       int count;
+       unsigned count;
        X509 **certs;
 };
 
@@ -29,9 +32,10 @@ static struct x509l certificates = { .count = 0, .certs = NULL };
 
 static int add_certificate_x509(X509 *x)
 {
-       X509 **p = realloc(certificates.certs, (certificates.count + 1) * sizeof(X509*));
+       X509 **p = realloc(certificates.certs,
+                       (certificates.count + 1) * sizeof(X509*));
        if (!p) {
-               syslog(LOG_ERR, "reallocation failed for certificate");
+               ERROR("reallocation failed for certificate");
                return -1;
        }
        certificates.certs = p;
@@ -39,7 +43,7 @@ static int add_certificate_x509(X509 *x)
        return 0;
 }
 
-static int add_certificate_bin(const char *bin, int len)
+static int add_certificate_bin(const char *bin, size_t len)
 {
        int rc;
        const char *b, *e;
@@ -48,7 +52,7 @@ static int add_certificate_bin(const char *bin, int len)
        while (b < e) {
                X509 *x =  d2i_X509(NULL, (const unsigned char **)&b, e-b);
                if (x == NULL) {
-                       syslog(LOG_ERR, "d2i_X509 failed");
+                       ERROR("d2i_X509 failed");
                        return -1;
                }
                rc = add_certificate_x509(x);
@@ -63,12 +67,15 @@ static int add_certificate_bin(const char *bin, int len)
 int add_certificate_b64(const char *b64)
 {
        char *d;
-       int l = base64dec(b64, &d);
-       if (l > 0) {
-               l = add_certificate_bin(d, l);
+       ssize_t l = base64dec(b64, &d);
+       int rc;
+       if (l < 0)
+               rc = -1;
+       else {
+               rc = add_certificate_bin(d, (size_t)l);
                free(d);
        }
-       return l;
+       return rc;
 }
 
 void clear_certificates()