summaryrefslogtreecommitdiffstats
path: root/src/sssd/LMI_SSSDBackendProvider.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sssd/LMI_SSSDBackendProvider.c')
-rw-r--r--src/sssd/LMI_SSSDBackendProvider.c107
1 files changed, 85 insertions, 22 deletions
diff --git a/src/sssd/LMI_SSSDBackendProvider.c b/src/sssd/LMI_SSSDBackendProvider.c
index fbef1af..7c390af 100644
--- a/src/sssd/LMI_SSSDBackendProvider.c
+++ b/src/sssd/LMI_SSSDBackendProvider.c
@@ -1,10 +1,14 @@
#include <konkret/konkret.h>
+#include <sss_dbus.h>
#include "LMI_SSSDBackend.h"
+#include "utils.h"
+#include "sssd_components.h"
static const CMPIBroker* _cb = NULL;
-static void LMI_SSSDBackendInitialize()
+static void LMI_SSSDBackendInitialize(const CMPIContext *ctx)
{
+ lmi_init(PROVIDER_NAME, _cb, ctx, NULL);
}
static CMPIStatus LMI_SSSDBackendCleanup(
@@ -32,7 +36,39 @@ static CMPIStatus LMI_SSSDBackendEnumInstances(
const CMPIObjectPath* cop,
const char** properties)
{
- CMReturn(CMPI_RC_OK);
+ LMI_SSSDBackend 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_BACKENDS, &paths,
+ DBUS_TYPE_INVALID);
+ check_sss_dbus_error(error, ret, CMPI_RC_ERR_FAILED, done);
+
+ for (i = 0; paths[i] != NULL; i++) {
+ mret = sssd_backend_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_SSSDBackendGetInstance(
@@ -42,8 +78,41 @@ static CMPIStatus LMI_SSSDBackendGetInstance(
const CMPIObjectPath* cop,
const char** properties)
{
- return KDefaultGetInstance(
- _cb, mi, cc, cr, cop, properties);
+ LMI_SSSDBackend instance;
+ LMI_SSSDBackendRef 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_SSSDBackendRef_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_BACKEND, &path,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_INVALID);
+ check_sss_dbus_error(error, ret, CMPI_RC_ERR_FAILED, done);
+
+ mret = sssd_backend_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_SSSDBackendCreateInstance(
@@ -91,7 +160,7 @@ CMInstanceMIStub(
LMI_SSSDBackend,
LMI_SSSDBackend,
_cb,
- LMI_SSSDBackendInitialize())
+ LMI_SSSDBackendInitialize(ctx))
static CMPIStatus LMI_SSSDBackendMethodCleanup(
CMPIMethodMI* mi,
@@ -118,7 +187,7 @@ CMMethodMIStub(
LMI_SSSDBackend,
LMI_SSSDBackend,
_cb,
- LMI_SSSDBackendInitialize())
+ LMI_SSSDBackendInitialize(ctx))
KUint32 LMI_SSSDBackend_SetDebugLevelPermanently(
const CMPIBroker* cb,
@@ -128,10 +197,9 @@ KUint32 LMI_SSSDBackend_SetDebugLevelPermanently(
const KUint16* debug_level,
CMPIStatus* status)
{
- KUint32 result = KUINT32_INIT;
-
- KSetStatus(status, ERR_NOT_SUPPORTED);
- return result;
+ return sssd_component_set_debug_permanently(self->Name.chars,
+ SSSD_COMPONENT_BACKEND,
+ debug_level, status);
}
KUint32 LMI_SSSDBackend_SetDebugLevelTemporarily(
@@ -142,10 +210,9 @@ KUint32 LMI_SSSDBackend_SetDebugLevelTemporarily(
const KUint16* debug_level,
CMPIStatus* status)
{
- KUint32 result = KUINT32_INIT;
-
- KSetStatus(status, ERR_NOT_SUPPORTED);
- return result;
+ return sssd_component_set_debug_temporarily(self->Name.chars,
+ SSSD_COMPONENT_BACKEND,
+ debug_level, status);
}
KUint32 LMI_SSSDBackend_Enable(
@@ -155,10 +222,8 @@ KUint32 LMI_SSSDBackend_Enable(
const LMI_SSSDBackendRef* self,
CMPIStatus* status)
{
- KUint32 result = KUINT32_INIT;
-
- KSetStatus(status, ERR_NOT_SUPPORTED);
- return result;
+ return sssd_component_enable(self->Name.chars, SSSD_COMPONENT_BACKEND,
+ status);
}
KUint32 LMI_SSSDBackend_Disable(
@@ -168,10 +233,8 @@ KUint32 LMI_SSSDBackend_Disable(
const LMI_SSSDBackendRef* self,
CMPIStatus* status)
{
- KUint32 result = KUINT32_INIT;
-
- KSetStatus(status, ERR_NOT_SUPPORTED);
- return result;
+ return sssd_component_disable(self->Name.chars, SSSD_COMPONENT_BACKEND,
+ status);
}
KONKRET_REGISTRATION(