#include <eim.h> int eimListRegistries(EimHandle * eim, char * registryName, char * registryType, enum EimRegistryKind registryKind, unsigned int lengthOfListData, EimList * listData, EimRC * eimrc)Service Program Name: QSYS/QSYEIM
The eimListRegistries() function lists the user registries participating in the EIM domain. The following parameters can be used to filter the results returned: registryType, registryName and registryKind.
The list returned contains only the information that the user has authority to access.
EIM_ALL_REGISTRIES (0) | System, application, and group registries will be returned. |
EIM_SYSTEM_REGISTRY (1) | Return system registries. |
EIM_APPLICATION_REGISTRY (2) | Return application registries. |
EIM_GROUP_REGISTRY (3) | Return group registries. |
The EimList structure contains information about the returned data. The API will return as much data as space has been provided. The data returned is a linked list of EimRegistry structures. firstEntry is used to get to the first EimRegistry structure in the linked list.
EimList structure:
typedef struct EimList { unsigned int bytesReturned; /* Number of bytes actually returned by the API */ unsigned int bytesAvailable; /* Number of bytes of available data that could have been returned by the API */ unsigned int entriesReturned; /* Number of entries actually returned by the API */ unsigned int entriesAvailable; /* Number of entries available to be returned by the API */ unsigned int firstEntry; /* Displacement to the first linked list entry. This byte offset is relative to the start of the EimList structure. */ } EimList;
EimRegistry structure:
typedef struct EimRegistry { unsigned int nextEntry; /* Displacement to next entry. This byte offset is relative to the start of this structure */ enum EimRegistryKind kind; /* Kind of registry */ EimListData name; /* Registry name */ EimListData type; /* Registry type */ EimListData description; /* Description */ EimListData entryUUID; /* Entry UUID */ EimListData URI; /* URI */ EimListData systemRegistryName; /* System registry name */ EimSubList registryAlias; /* EimRegistryAlias sublist */ enum EimStatus mappingLookup; /* Mapping lookup attribute */ enum EimStatus policyAssociations; /* Policy associations attribute */ EimSubList registryMembers; /* EimRegistryName sublist */ EimSubList registryGroups; /* EimRegistryName sublist */ } EimRegistry;
Registries may have a number of aliases defined. In the EimRegistry structure, the registryAlias EimSubList gives addressability to the first EimRegistryAlias structure.
EimRegistryAlias structure:
typedef struct EimRegistryAlias { unsigned int nextEntry; /* Displacement to next entry. This byte offset is relative to the start of this structure */ EimListData type; /* Alias type */ EimListData value; /* Alias value */ } EimRegistryAlias;
Group registries may have a number of members defined. In the EimRegistry structure, the registryMembers EimSubList gives addressability to the first EimRegistryName structure. Registry members will only exist for registries that have a type of group registry.
Registries may have a number of group registries of which they are a member. In the EimRegistry structure, the registryGroups EimSubList gives addressability to the first EimRegistryName structure. Registry groups will only exist for registries that are not group registries.
EimRegistryName structure:
typedef struct EimRegistryName { unsigned int nextEntry; /* Displacement to next entry. This byte offset is relative to the start of this structure */ EimListData name; /* Name. */ } EimRegistryName;
EimSubList structure:
typedef struct EimSubList { unsigned int listNum; /* Number of entries in the list */ unsigned int disp; /* Displacement to sublist. This byte offset is relative to the start of the parent structure; that is, the structure containing this structure. */ } EimSubList;
EimListData structure:
typedef struct EimListData { unsigned int length; /* Length of data */ unsigned int disp; /* Displacement to data. This byte offset is relative to the start of the parent structure; that is, the structure containing this structure. */ } EimListData;
The return value from the API. Following each return value is the list of possible values for the messageCatalogMessageID field in the eimrc parameter for that value.
EIMERR_ACCESS (1) | Insufficient access to EIM data. |
EIMERR_NOLOCK (26) | Unable to allocate internal system object. |
EIMERR_DATA_CONVERSION (13) | Error occurred when converting data between code pages. |
EIMERR_EIMLIST_SIZE (16) | Length of EimList is not valid. EimList must be at least 20 bytes in length. |
EIMERR_HANDLE_INVAL (17) | EimHandle is not valid. |
EIMERR_PARM_REQ (34) | Missing required parameter. Please check API documentation. |
EIMERR_PTR_INVAL (35) | Pointer parameter is not valid. |
EIMERR_REGKIND_INVAL (38) | Requested registry kind is not valid. |
EIMERR_SPACE (41) | Unexpected error accessing parameter. |
EIMERR_NOMEM (27) | No memory available. Unable to allocate required space. |
EIMERR_NOT_CONN (31) | Not connected to LDAP. Use eimConnect() API and try the request again. |
EIMERR_LDAP_ERR (23) | Unexpected LDAP error. %s |
EIMERR_UNKNOWN (44) | Unknown error or unknown system state. |
See Code disclaimer information for information pertaining to code examples.
The following example lists all registries found.
#include <eim.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> void printRegistryKind(int kind); void printListResults(EimList * list); void printListData(char * fieldName, void * entry, int offset); void printAliasSubList(void * entry, int offset); void printNameSubList(void * entry, int offset); int main (int argc, char *argv[]) { int rc; char eimerr[100]; EimRC * err; EimHandle * handle; char listData[1000]; EimList * list = (EimList * ) listData; /* Get eim handle from input arg. */ /* This handle is already connected to EIM. */ handle = (EimHandle *)argv[1]; /* Set up error structure. */ memset(eimerr,0x00,100); err = (EimRC *)eimerr; err->memoryProvidedByCaller = 100; /* Get all registries */ if (0 != (rc = eimListRegistries(handle, NULL, NULL, EIM_ALL_REGISTRIES, 1000, list, err))) { printf("List registries error = %d", rc); return -1; } /* Print the results */ printListResults(list); return 0; } void printListResults(EimList * list) { int i; EimRegistry * entry; printf("___________\n"); printf(" bytesReturned = %d\n", list->bytesReturned); printf(" bytesAvailable = %d\n", list->bytesAvailable); printf(" entriesReturned = %d\n", list->entriesReturned); printf(" entriesAvailable = %d\n", list->entriesAvailable); printf("\n"); entry = (EimRegistry *)((char *)list + list->firstEntry); for (i = 0; i < list->entriesReturned; i++) { printf("\n"); printf("===============\n"); printf("Entry %d.\n", i); /* Registry kind */ printRegistryKind(entry->kind); /* Print out results */ printListData("Registry Name", entry, offsetof(EimRegistry, name)); printListData("Registry Type", entry, offsetof(EimRegistry, type)); printListData("description", entry, offsetof(EimRegistry, description)); printListData("entryUUID", entry, offsetof(EimRegistry, entryUUID)); printListData("URI", entry, offsetof(EimRegistry, URI)); printListData("system registry name", entry, offsetof(EimRegistry, systemRegistryName)); printAliasSubList(entry, offsetof(EimRegistry, registryAlias)); printf("List of member registries:\n"); printNameSubList(entry, offsetof(EimRegistry, registryMembers)); printf("List of group registries:\n"); printNameSubList(entry, offsetof(EimRegistry, registryGroups)); /* advance to next entry */ entry = (EimRegistry *)((char *)entry + entry->nextEntry); } printf("\n"); } void printRegistryKind(int kind) { switch(kind) { case EIM_SYSTEM_REGISTRY: printf(" System Registry.\n"); break; case EIM_APPLICATION_REGISTRY: printf("Application Registry.\n"); break; case EIM_GROUP_REGISTRY: printf("Group Registry.\n"); break; default: printf("ERROR - unknown registry kind.\n"); break; } } void printListData(char * fieldName, void * entry, int offset) { EimListData * listData; char * data; int dataLength; printf(" %s = ",fieldName); /* Address the EimListData object */ listData = (EimListData *)((char *)entry + offset); /* Print out results */ data = (char *)entry + listData->disp; dataLength = listData->length; if (dataLength > 0) printf("%.*s\n",dataLength, data); else printf("Not found.\n"); } void printAliasSubList(void * entry, int offset) { int i; EimSubList * subList; EimRegistryAlias * subentry; /* Address the EimSubList object */ subList = (EimSubList *)((char *)entry + offset); if (subList->listNum > 0) { subentry = (EimRegistryAlias *)((char *)entry + subList->disp); for (i = 0; i < subList->listNum; i++) { /* Print out results */ printListData("Registry alias type", subentry, offsetof(EimRegistryAlias, type)); printListData("Registry alias value", subentry, offsetof(EimRegistryAlias, value)); /* advance to next entry */ subentry = (EimRegistryAlias *)((char *)subentry + subentry->nextEntry); } } } void printNameSubList(void * entry, int offset) { int i; EimSubList * subList; EimRegistryName * subentry; /* Address the EimSubList object */ subList = (EimSubList *)((char *)entry + offset); if (subList->listNum > 0) { subentry = (EimRegistryName *)((char *)entry + subList->disp); for (i = 0; i < subList->listNum; i++) { /* Print out results */ printListData("Registry name", subentry, offsetof(EimRegistryName, name)); /* advance to next entry */ subentry = (EimRegistryName *)((char *)subentry + subentry->nextEntry); } } }
Top | Security APIs | APIs by category |