summaryrefslogtreecommitdiffstats
path: root/src/sssd/LMI_SSSDDomainProvider.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sssd/LMI_SSSDDomainProvider.c')
-rw-r--r--src/sssd/LMI_SSSDDomainProvider.c81
1 files changed, 75 insertions, 6 deletions
diff --git a/src/sssd/LMI_SSSDDomainProvider.c b/src/sssd/LMI_SSSDDomainProvider.c
index 1c4d036..a6e0c4b 100644
--- a/src/sssd/LMI_SSSDDomainProvider.c
+++ b/src/sssd/LMI_SSSDDomainProvider.c
@@ -1,10 +1,14 @@
#include <konkret/konkret.h>
+#include <sss_dbus.h>
#include "LMI_SSSDDomain.h"
+#include "utils.h"
+#include "sssd_domains.h"
static const CMPIBroker* _cb = NULL;
-static void LMI_SSSDDomainInitialize()
+static void LMI_SSSDDomainInitialize(const CMPIContext *ctx)
{
+ lmi_init(PROVIDER_NAME, _cb, ctx, NULL);
}
static CMPIStatus LMI_SSSDDomainCleanup(
@@ -32,7 +36,39 @@ static CMPIStatus LMI_SSSDDomainEnumInstances(
const CMPIObjectPath* cop,
const char** properties)
{
- CMReturn(CMPI_RC_OK);
+ LMI_SSSDDomain instance;
+ const char *namespace = KNameSpace(cop);
+ sss_dbus_ctx *dbus_ctx = NULL;
+ sss_dbus_error error;
+ char **paths = NULL;
+ sssd_method_error mret;
+ CMPIrc ret;
+ int i;
+
+ error = sss_dbus_init(&dbus_ctx);
+ check_sss_dbus_error(error, ret, CMPI_RC_ERR_FAILED, done);
+
+ error = sss_dbus_invoke_list(dbus_ctx, SSSD_DBUS_LIST_DOMAINS, &paths,
+ DBUS_TYPE_INVALID);
+ check_sss_dbus_error(error, ret, CMPI_RC_ERR_FAILED, done);
+
+ for (i = 0; paths[i] != NULL; i++) {
+ mret = sssd_domain_set_instance(dbus_ctx, paths[i], _cb, namespace,
+ &instance);
+ if (mret != SSSD_METHOD_ERROR_OK) {
+ ret = CMPI_RC_ERR_FAILED;
+ goto done;
+ }
+
+ KReturnInstance(cr, instance);
+ }
+
+ ret = CMPI_RC_OK;
+
+done:
+ sss_dbus_free_string_array(dbus_ctx, &paths);
+ sss_dbus_free(&dbus_ctx);
+ CMReturn(ret);
}
static CMPIStatus LMI_SSSDDomainGetInstance(
@@ -42,8 +78,41 @@ static CMPIStatus LMI_SSSDDomainGetInstance(
const CMPIObjectPath* cop,
const char** properties)
{
- return KDefaultGetInstance(
- _cb, mi, cc, cr, cop, properties);
+ LMI_SSSDDomain instance;
+ LMI_SSSDDomainRef ref;
+ const char *namespace = KNameSpace(cop);
+ sss_dbus_ctx *dbus_ctx = NULL;
+ sss_dbus_error error;
+ const char *name = NULL;
+ char *path = NULL;
+ sssd_method_error mret;
+ CMPIrc ret;
+
+ LMI_SSSDDomainRef_InitFromObjectPath(&ref, _cb, cop);
+ name = ref.Name.chars;
+
+ error = sss_dbus_init(&dbus_ctx);
+ check_sss_dbus_error(error, ret, CMPI_RC_ERR_FAILED, done);
+
+ error = sss_dbus_invoke_find(dbus_ctx, SSSD_DBUS_FIND_DOMAIN, &path,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_INVALID);
+ check_sss_dbus_error(error, ret, CMPI_RC_ERR_FAILED, done);
+
+ mret = sssd_domain_set_instance(dbus_ctx, path, _cb, namespace,
+ &instance);
+ if (mret != SSSD_METHOD_ERROR_OK) {
+ ret = CMPI_RC_ERR_FAILED;
+ goto done;
+ }
+
+ KReturnInstance(cr, instance);
+ ret = CMPI_RC_OK;
+
+done:
+ sss_dbus_free_string(dbus_ctx, &path);
+ sss_dbus_free(&dbus_ctx);
+ CMReturn(ret);
}
static CMPIStatus LMI_SSSDDomainCreateInstance(
@@ -91,7 +160,7 @@ CMInstanceMIStub(
LMI_SSSDDomain,
LMI_SSSDDomain,
_cb,
- LMI_SSSDDomainInitialize())
+ LMI_SSSDDomainInitialize(ctx))
static CMPIStatus LMI_SSSDDomainMethodCleanup(
CMPIMethodMI* mi,
@@ -118,7 +187,7 @@ CMMethodMIStub(
LMI_SSSDDomain,
LMI_SSSDDomain,
_cb,
- LMI_SSSDDomainInitialize())
+ LMI_SSSDDomainInitialize(ctx))
KONKRET_REGISTRATION(
"root/cimv2",