diff options
Diffstat (limited to 'src/account/Cura_IdentityProvider.c')
-rw-r--r-- | src/account/Cura_IdentityProvider.c | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/src/account/Cura_IdentityProvider.c b/src/account/Cura_IdentityProvider.c new file mode 100644 index 0000000..9277239 --- /dev/null +++ b/src/account/Cura_IdentityProvider.c @@ -0,0 +1,190 @@ +#include <konkret/konkret.h> +#include "Cura_Identity.h" + +#include <libuser/entity.h> +#include <libuser/user.h> + +#include "macros.h" +#include "globals.h" +#include "aux_lu.h" + +static const CMPIBroker* _cb = NULL; + +static void Cura_IdentityInitialize() +{ +} + +static CMPIStatus Cura_IdentityCleanup( + CMPIInstanceMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus Cura_IdentityEnumInstanceNames( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + return KDefaultEnumerateInstanceNames( + _cb, mi, cc, cr, cop); +} + +static CMPIStatus Cura_IdentityEnumInstances( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char** properties) +{ + Cura_Identity li; + struct lu_context *luc = NULL; + struct lu_error *error = NULL; + GPtrArray *accounts = NULL; + struct lu_ent *lue = NULL; + char *instanceid = NULL; + unsigned int i = 0; + const char *nameSpace = KNameSpace(cop); + + luc = lu_start(NULL, lu_user, NULL, NULL, lu_prompt_console_quiet, NULL, &error); + if (!luc) + { + fprintf(stderr, "Error initializing: %s\n", lu_strerror(error)); + exit(1); + } + + instanceid = malloc(256 * sizeof(char)); + + /* USERS */ + accounts = lu_users_enumerate_full(luc, "*", &error); + for (i = 0; (accounts != NULL) && (i < accounts->len); i++) + { + lue = g_ptr_array_index(accounts, i); + Cura_Identity_Init(&li, _cb, nameSpace); + + /* Need to convert long int UID to the string */ + snprintf(instanceid, 255, ORGID":UID:%ld", + aux_lu_get_long(lue, LU_UIDNUMBER)); + Cura_Identity_Set_InstanceID(&li, instanceid); + Cura_Identity_Set_ElementName(&li, aux_lu_get_str(lue, LU_GECOS)); + KReturnInstance(cr, li); + } + + /* GOUPRS */ + accounts = lu_groups_enumerate_full(luc, "*", &error); + for (i = 0; (accounts != NULL) && (i < accounts->len); i++) + { + lue = g_ptr_array_index(accounts, i); + Cura_Identity_Init(&li, _cb, nameSpace); + + /* Need to convert long int UID to the string */ + snprintf(instanceid, 255, ORGID":GID:%ld", + aux_lu_get_long(lue, LU_GIDNUMBER)); + Cura_Identity_Set_InstanceID(&li, instanceid); + Cura_Identity_Set_ElementName(&li, aux_lu_get_str(lue, LU_GROUPNAME)); + KReturnInstance(cr, li); + lu_ent_free(lue); + } + + free(instanceid); + if (accounts) + { + g_ptr_array_free(accounts, TRUE); + } + lu_end(luc); + + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus Cura_IdentityGetInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char** properties) +{ + return KDefaultGetInstance( + _cb, mi, cc, cr, cop, properties); +} + +static CMPIStatus Cura_IdentityCreateInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const CMPIInstance* ci) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus Cura_IdentityModifyInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const CMPIInstance* ci, + const char** properties) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus Cura_IdentityDeleteInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus Cura_IdentityExecQuery( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* lang, + const char* query) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +CMInstanceMIStub( + Cura_Identity, + Cura_Identity, + _cb, + Cura_IdentityInitialize()) + +static CMPIStatus Cura_IdentityMethodCleanup( + CMPIMethodMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus Cura_IdentityInvokeMethod( + CMPIMethodMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* meth, + const CMPIArgs* in, + CMPIArgs* out) +{ + return Cura_Identity_DispatchMethod( + _cb, mi, cc, cr, cop, meth, in, out); +} + +CMMethodMIStub( + Cura_Identity, + Cura_Identity, + _cb, + Cura_IdentityInitialize()) + +KONKRET_REGISTRATION( + "root/cimv2", + "Cura_Identity", + "Cura_Identity", + "instance method") |