]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: use glib base64 encoding/decoding APIs
authorDaniel P. Berrangé <berrange@redhat.com>
Mon, 16 Sep 2019 12:29:20 +0000 (13:29 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Mon, 14 Oct 2019 09:54:42 +0000 (10:54 +0100)
Replace use of the gnulib base64 module with glib's own base64 API family.

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
13 files changed:
bootstrap.conf
configure.ac
src/conf/virsecretobj.c
src/libvirt_private.syms
src/libxl/libxl_conf.c
src/qemu/qemu_agent.c
src/qemu/qemu_command.c
src/qemu/qemu_domain.c
src/secret/secret_driver.c
src/storage/storage_backend_rbd.c
src/util/virstring.c
src/util/virstring.h
tools/virsh-secret.c

index 7e264b63ad44725db409c1b10573287a33e2d33a..bb40e978aaedd4adca76156942b0067a3c79cf30 100644 (file)
@@ -20,7 +20,6 @@
 gnulib_modules='
 accept
 areadlink
-base64
 bind
 byteswap
 c-ctype
index 424f10719424d1c2b926ec4c7f68c8e37e0fc200..8b53b6ada93345480a0d5bd69afe0c6f9d3aa819 100644 (file)
@@ -899,11 +899,6 @@ test "x$lv_cv_static_analysis" = xyes && t=1
 AC_DEFINE_UNQUOTED([STATIC_ANALYSIS], [$t],
   [Define to 1 when performing static analysis.])
 
-# Some GNULIB base64 symbols clash with a kerberos library
-AC_DEFINE_UNQUOTED([isbase64],[libvirt_gl_isbase64],[Hack to avoid symbol clash])
-AC_DEFINE_UNQUOTED([base64_encode],[libvirt_gl_base64_encode],[Hack to avoid symbol clash])
-AC_DEFINE_UNQUOTED([base64_encode_alloc],[libvirt_gl_base64_encode_alloc],[Hack to avoid symbol clash])
-
 GNUmakefile=GNUmakefile
 m4_if(m4_version_compare([2.61a.100],
         m4_defn([m4_PACKAGE_VERSION])), [1], [],
index aeae82332bb221f2f5fefddcc314e54d6a01101d..5bd84d82edbf83868f547d25cd4acc01dc07d86e 100644 (file)
@@ -31,7 +31,6 @@
 #include "virhash.h"
 #include "virlog.h"
 #include "virstring.h"
-#include "base64.h"
 
 #define VIR_FROM_THIS VIR_FROM_SECRET
 
@@ -698,8 +697,7 @@ virSecretObjSaveData(virSecretObjPtr obj)
     if (!obj->value)
         return 0;
 
-    if (!(base64 = virStringEncodeBase64(obj->value, obj->value_size)))
-        return -1;
+    base64 = g_base64_encode(obj->value, obj->value_size);
 
     if (virFileRewriteStr(obj->base64File, S_IRUSR | S_IWUSR, base64) < 0)
         return -1;
@@ -825,8 +823,6 @@ virSecretLoadValue(virSecretObjPtr obj)
     int ret = -1, fd = -1;
     struct stat st;
     g_autofree char *contents = NULL;
-    char *value = NULL;
-    size_t value_size;
 
     if ((fd = open(obj->base64File, O_RDONLY)) == -1) {
         if (errno == ENOENT) {
@@ -851,7 +847,7 @@ virSecretLoadValue(virSecretObjPtr obj)
         goto cleanup;
     }
 
-    if (VIR_ALLOC_N(contents, st.st_size) < 0)
+    if (VIR_ALLOC_N(contents, st.st_size + 1) < 0)
         goto cleanup;
 
     if (saferead(fd, contents, st.st_size) != st.st_size) {
@@ -859,29 +855,15 @@ virSecretLoadValue(virSecretObjPtr obj)
                              obj->base64File);
         goto cleanup;
     }
+    contents[st.st_size] = '\0';
 
     VIR_FORCE_CLOSE(fd);
 
-    if (!base64_decode_alloc(contents, st.st_size, &value, &value_size)) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("invalid base64 in '%s'"),
-                       obj->base64File);
-        goto cleanup;
-    }
-    if (value == NULL)
-        goto cleanup;
-
-    obj->value = (unsigned char *)value;
-    value = NULL;
-    obj->value_size = value_size;
+    obj->value = g_base64_decode(contents, &obj->value_size);
 
     ret = 0;
 
  cleanup:
-    if (value != NULL) {
-        memset(value, 0, value_size);
-        VIR_FREE(value);
-    }
     if (contents != NULL)
         memset(contents, 0, st.st_size);
     VIR_FORCE_CLOSE(fd);
index ecfbfc8d7f624295fbf5aa9685122b07d4e4b285..7d62df8086165940d2ebeddb57f130df397c0b8f 100644 (file)
@@ -3068,7 +3068,6 @@ virSkipSpacesBackwards;
 virStrcpy;
 virStrdup;
 virStringBufferIsPrintable;
-virStringEncodeBase64;
 virStringFilterChars;
 virStringHasCaseSuffix;
 virStringHasChars;
index c0d4861753910960822c66946746e62b4e04235e..443c6fb1142d945f44fb72ab0bf09bb88f29beb0 100644 (file)
@@ -1004,8 +1004,7 @@ libxlMakeNetworkDiskSrc(virStorageSourcePtr src, char **srcstr)
             goto cleanup;
 
         /* RBD expects an encoded secret */
-        if (!(base64secret = virStringEncodeBase64(secret, secretlen)))
-            goto cleanup;
+        base64secret = g_base64_encode(secret, secretlen);
     }
 
     if (!(*srcstr = libxlMakeNetworkDiskSrcStr(src, username, base64secret)))
index 34e1a85d6490ef3c64846f1ac93158b400a8d508..0ef8b563f59aea9778a99f96909f9936d748a26d 100644 (file)
@@ -39,7 +39,6 @@
 #include "virtime.h"
 #include "virobject.h"
 #include "virstring.h"
-#include "base64.h"
 #include "virenum.h"
 
 #define VIR_FROM_THIS VIR_FROM_QEMU
@@ -2518,9 +2517,8 @@ qemuAgentSetUserPassword(qemuAgentPtr mon,
     virJSONValuePtr reply = NULL;
     char *password64 = NULL;
 
-    if (!(password64 = virStringEncodeBase64((unsigned char *)password,
-                                             strlen(password))))
-        goto cleanup;
+    password64 = g_base64_encode((unsigned char *)password,
+                                 strlen(password));
 
     if (!(cmd = qemuAgentMakeCommand("guest-set-user-password",
                                      "b:crypted", crypted,
index 50cc3bdf7c8aa153d86b86ca3203df1c2994c2b5..0f1625d401a1fbe694985d826a145894d361dcc8 100644 (file)
@@ -837,9 +837,8 @@ qemuBuildRBDSecinfoURI(virBufferPtr buf,
 
     switch ((qemuDomainSecretInfoType) secinfo->type) {
     case VIR_DOMAIN_SECRET_INFO_TYPE_PLAIN:
-        if (!(base64secret = virStringEncodeBase64(secinfo->s.plain.secret,
-                                                   secinfo->s.plain.secretlen)))
-            return -1;
+        base64secret = g_base64_encode(secinfo->s.plain.secret,
+                                       secinfo->s.plain.secretlen);
         virBufferEscape(buf, '\\', ":", ":id=%s", secinfo->s.plain.username);
         virBufferEscape(buf, '\\', ":",
                         ":key=%s:auth_supported=cephx\\;none",
index dc7568fe18985ab7f6c300b70fa57fe152ae5380..35067c851fd574f48eef3e929c9474f5db6d527f 100644 (file)
@@ -1470,8 +1470,7 @@ qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
         goto cleanup;
 
     /* Encode the IV and save that since qemu will need it */
-    if (!(secinfo->s.aes.iv = virStringEncodeBase64(raw_iv, ivlen)))
-        goto cleanup;
+    secinfo->s.aes.iv = g_base64_encode(raw_iv, ivlen);
 
     /* Grab the unencoded secret */
     if (virSecretGetSecretString(conn, seclookupdef, usageType,
@@ -1488,9 +1487,8 @@ qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
     memset(secret, 0, secretlen);
 
     /* Now encode the ciphertext and store to be passed to qemu */
-    if (!(secinfo->s.aes.ciphertext = virStringEncodeBase64(ciphertext,
-                                                            ciphertextlen)))
-        goto cleanup;
+    secinfo->s.aes.ciphertext = g_base64_encode(ciphertext,
+                                                ciphertextlen);
 
     ret = 0;
 
index ed3bd3c75198b0d6dd4bf9fe61ddd502a01cb529..13f75ee4fa8b87723ca200e355468ecb64119f51 100644 (file)
@@ -25,7 +25,6 @@
 #include <unistd.h>
 
 #include "internal.h"
-#include "base64.h"
 #include "datatypes.h"
 #include "driver.h"
 #include "virlog.h"
index c4781debd882b8bb28743c02b845d0ad628b11f7..b10ca1503d56d288e5cba8cf9471417dad98fe3b 100644 (file)
@@ -28,7 +28,6 @@
 #include "storage_conf.h"
 #include "viralloc.h"
 #include "virlog.h"
-#include "base64.h"
 #include "viruuid.h"
 #include "virstring.h"
 #include "virrandom.h"
@@ -218,8 +217,7 @@ virStorageBackendRBDOpenRADOSConn(virStorageBackendRBDStatePtr ptr,
                                      &secret_value, &secret_value_size) < 0)
             goto cleanup;
 
-        if (!(rados_key = virStringEncodeBase64(secret_value, secret_value_size)))
-            goto cleanup;
+        rados_key = g_base64_encode(secret_value, secret_value_size);
 
         if (virStorageBackendRBDRADOSConfSet(ptr->cluster,
                                              "key", rados_key) < 0)
index 6b2b6ed24efd76e87faa052830e111c1c2fbc462..0abdcd8b044125e06f0a2c84706e67718513fb51 100644 (file)
@@ -22,7 +22,6 @@
 #include <regex.h>
 #include <locale.h>
 
-#include "base64.h"
 #include "c-ctype.h"
 #include "virstring.h"
 #include "virthread.h"
@@ -1438,26 +1437,6 @@ virStringBufferIsPrintable(const uint8_t *buf,
 }
 
 
-/**
- * virStringEncodeBase64:
- * @buf: buffer of bytes to encode
- * @buflen: number of bytes to encode
- *
- * Encodes @buf to base 64 and returns the resulting string. The caller is
- * responsible for freeing the result.
- */
-char *
-virStringEncodeBase64(const uint8_t *buf, size_t buflen)
-{
-    char *ret;
-
-    base64_encode_alloc((const char *) buf, buflen, &ret);
-    if (!ret)
-        abort();
-
-    return ret;
-}
-
 /**
  * virStringTrimOptionalNewline:
  * @str: the string to modify in-place
index 3ffe51f7b8f6543bae5e6f44e71e21b5145ad828..af6e234d836b16fa71022ea748ffb56df525e41d 100644 (file)
@@ -291,8 +291,6 @@ void virStringFilterChars(char *str, const char *valid);
 bool virStringIsPrintable(const char *str);
 bool virStringBufferIsPrintable(const uint8_t *buf, size_t buflen);
 
-char *virStringEncodeBase64(const uint8_t *buf, size_t buflen);
-
 void virStringTrimOptionalNewline(char *str);
 
 int virStringParsePort(const char *str,
index b34ae12bbedbec9949a9bc3367102e2269c26a7e..48058bea05f958ec91de63194edf95757a3881cd 100644 (file)
@@ -22,7 +22,6 @@
 #include "virsh-secret.h"
 
 #include "internal.h"
-#include "base64.h"
 #include "virbuffer.h"
 #include "viralloc.h"
 #include "virfile.h"
@@ -192,7 +191,7 @@ cmdSecretSetValue(vshControl *ctl, const vshCmd *cmd)
     virSecretPtr secret;
     size_t value_size;
     const char *base64 = NULL;
-    char *value;
+    unsigned char *value;
     int res;
     bool ret = false;
 
@@ -202,16 +201,9 @@ cmdSecretSetValue(vshControl *ctl, const vshCmd *cmd)
     if (vshCommandOptStringReq(ctl, cmd, "base64", &base64) < 0)
         goto cleanup;
 
-    if (!base64_decode_alloc(base64, strlen(base64), &value, &value_size)) {
-        vshError(ctl, "%s", _("Invalid base64 data"));
-        goto cleanup;
-    }
-    if (value == NULL) {
-        vshError(ctl, "%s", _("Failed to allocate memory"));
-        goto cleanup;
-    }
+    value = g_base64_decode(base64, &value_size);
 
-    res = virSecretSetValue(secret, (unsigned char *)value, value_size, 0);
+    res = virSecretSetValue(secret, value, value_size, 0);
     memset(value, 0, value_size);
     VIR_FREE(value);
 
@@ -267,8 +259,7 @@ cmdSecretGetValue(vshControl *ctl, const vshCmd *cmd)
     if (value == NULL)
         goto cleanup;
 
-    if (!(base64 = virStringEncodeBase64(value, value_size)))
-        goto cleanup;
+    base64 = g_base64_encode(value, value_size);
 
     vshPrint(ctl, "%s", base64);
     ret = true;