diff options
Diffstat (limited to 'src/account/Cura_AccountOnSystemProvider.c')
-rw-r--r-- | src/account/Cura_AccountOnSystemProvider.c | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/src/account/Cura_AccountOnSystemProvider.c b/src/account/Cura_AccountOnSystemProvider.c new file mode 100644 index 0000000..0b1a051 --- /dev/null +++ b/src/account/Cura_AccountOnSystemProvider.c @@ -0,0 +1,272 @@ +#include <konkret/konkret.h> +#include "Cura_AccountOnSystem.h" +#include "Cura_Account.h" +#include "CIM_ComputerSystem.h" + +#include <glib.h> + +#include <libuser/entity.h> +#include <libuser/user.h> + +#include "aux_lu.h" +#include "macros.h" +#include "globals.h" + +static const CMPIBroker* _cb; + +static void Cura_AccountOnSystemInitialize() +{ +} + +static CMPIStatus Cura_AccountOnSystemCleanup( + CMPIInstanceMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus Cura_AccountOnSystemEnumInstanceNames( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + return KDefaultEnumerateInstanceNames( + _cb, mi, cc, cr, cop); +} + +static CMPIStatus Cura_AccountOnSystemEnumInstances( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char** properties) +{ + Cura_AccountRef laref; + CIM_ComputerSystemRef lcsref; + Cura_AccountOnSystem laos; + + CMPIObjectPath *computerSystemOP = NULL; + CMPIStatus rc; + + struct lu_context *luc = NULL; + struct lu_error *error = NULL; + GPtrArray *accounts = NULL; + struct lu_ent *lue = NULL; + + size_t i; + const char *nameSpace = KNameSpace(cop); + const char *hostname = get_system_name(); + + CIM_ComputerSystemRef_Init(&lcsref, _cb, nameSpace); + CIM_ComputerSystemRef_Set_Name(&lcsref, hostname); + CIM_ComputerSystemRef_Set_CreationClassName(&lcsref, + get_system_creation_class_name()); + + computerSystemOP = CIM_ComputerSystemRef_ToObjectPath(&lcsref, &rc); + computerSystemOP->ft->setClassName(computerSystemOP, + get_system_creation_class_name()); + + 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); + } + + accounts = lu_users_enumerate_full(luc, "*", &error); + for (i = 0; (accounts != NULL) && (i < accounts->len); i++) + { + lue = g_ptr_array_index(accounts, i); + + Cura_AccountRef_Init(&laref, _cb, nameSpace); + Cura_AccountRef_Set_SystemCreationClassName(&laref, get_system_creation_class_name()); + Cura_AccountRef_Set_SystemName(&laref, hostname); + Cura_AccountRef_Set_CreationClassName(&laref, + Cura_Account_ClassName); + Cura_AccountRef_Set_Name(&laref, aux_lu_get_str(lue, LU_USERNAME)); + + Cura_AccountOnSystem_Init(&laos, _cb, nameSpace); + Cura_AccountOnSystem_SetObjectPath_GroupComponent(&laos, + computerSystemOP); + Cura_AccountOnSystem_Set_PartComponent(&laos, &laref); + + KReturnInstance(cr, laos); + lu_ent_free(lue); + } /* for */ + + if (accounts) + { + g_ptr_array_free(accounts, TRUE); + } + + lu_end(luc); + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus Cura_AccountOnSystemGetInstance( + 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_AccountOnSystemCreateInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const CMPIInstance* ci) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus Cura_AccountOnSystemModifyInstance( + 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_AccountOnSystemDeleteInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus Cura_AccountOnSystemExecQuery( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* lang, + const char* query) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus Cura_AccountOnSystemAssociationCleanup( + CMPIAssociationMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus Cura_AccountOnSystemAssociators( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole, + const char** properties) +{ + return KDefaultAssociators( + _cb, + mi, + cc, + cr, + cop, + Cura_AccountOnSystem_ClassName, + assocClass, + resultClass, + role, + resultRole, + properties); +} + +static CMPIStatus Cura_AccountOnSystemAssociatorNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole) +{ + return KDefaultAssociatorNames( + _cb, + mi, + cc, + cr, + cop, + Cura_AccountOnSystem_ClassName, + assocClass, + resultClass, + role, + resultRole); +} + +static CMPIStatus Cura_AccountOnSystemReferences( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role, + const char** properties) +{ + return KDefaultReferences( + _cb, + mi, + cc, + cr, + cop, + Cura_AccountOnSystem_ClassName, + assocClass, + role, + properties); +} + +static CMPIStatus Cura_AccountOnSystemReferenceNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role) +{ + return KDefaultReferenceNames( + _cb, + mi, + cc, + cr, + cop, + Cura_AccountOnSystem_ClassName, + assocClass, + role); +} + +CMInstanceMIStub( + Cura_AccountOnSystem, + Cura_AccountOnSystem, + _cb, + Cura_AccountOnSystemInitialize()) + +CMAssociationMIStub( + Cura_AccountOnSystem, + Cura_AccountOnSystem, + _cb, + Cura_AccountOnSystemInitialize()) + +KONKRET_REGISTRATION( + "root/cimv2", + "Cura_AccountOnSystem", + "Cura_AccountOnSystem", + "instance association") |