Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
src/libvirt_private.syms | 1 +
src/util/viridentity.c | 21 +++++++++++++++++++++
src/util/viridentity.h | 1 +
3 files changed, 23 insertions(+)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index c5f6c90365..90ca52c95c 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2410,6 +2410,7 @@ virIdentityGetUNIXUserID;
virIdentityGetUserName;
virIdentityGetX509DName;
virIdentityNew;
+virIdentityNewCopy;
virIdentitySetCurrent;
virIdentitySetGroupName;
virIdentitySetParameters;
diff --git a/src/util/viridentity.c b/src/util/viridentity.c
index 83044a3de1..3b523d7a2d 100644
--- a/src/util/viridentity.c
+++ b/src/util/viridentity.c
@@ -332,6 +332,27 @@ virIdentity *virIdentityNew(void)
}
+/**
+ * virIdentityNewCopy:
+ *
+ * Creates a new identity object that is a deep copy of an
+ * existing identity.
+ *
+ * Returns: a copy of the source identity
+ */
+virIdentity *virIdentityNewCopy(virIdentity *src)
+{
+ g_autoptr(virIdentity) ident = virIdentityNew();
+
+ if (virTypedParamsCopy(&ident->params, src->params, src->nparams) <
0)
+ return NULL;
+ ident->nparams = src->nparams;
+ ident->maxparams = src->nparams;
+
+ return g_steal_pointer(&ident);
+}
+
+
static void virIdentityFinalize(GObject *object)
{
virIdentity *ident = VIR_IDENTITY(object);
diff --git a/src/util/viridentity.h b/src/util/viridentity.h
index 640a7ba2e4..512bca286d 100644
--- a/src/util/viridentity.h
+++ b/src/util/viridentity.h
@@ -33,6 +33,7 @@ int virIdentitySetCurrent(virIdentity *ident);
virIdentity *virIdentityGetSystem(void);
virIdentity *virIdentityNew(void);
+virIdentity *virIdentityNewCopy(virIdentity *src);
int virIdentityGetUserName(virIdentity *ident,
const char **username);
--
2.31.1