#include <eim.h> int eimListAccess(EimHandle * eim, enum EimAccessType accessType, char * registryName, unsigned int lengthOfListData, EimList * listData, EimRC * eimrc)Service Program Name: QSYS/QSYEIM
The eimListAccess() function lists the users that have the specified EIM access type.
The list returned contains only the information that the user has authority to access.
EIM_ACCESS_ADMIN (0) | Administrative authority to the entire EIM domain. |
EIM_ACCESS_REG_ADMIN (1) | Administrative authority to all registries in the EIM domain. |
EIM_ACCESS_REGISTRY (2) | Administrative authority to the registry specified in the registryName parameter. |
EIM_ACCESS_IDENTIFIER_ADMIN (3) | Administrative authority to all of the identifiers in the EIM domain. |
EIM_ACCESS_MAPPING_LOOKUP (4) | Authority to perform mapping lookup operations. |
EIM_ACCESS_CREDENTIAL_DATA (5) | Authority to retrieve credential data. |
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 EimAccess structures. firstEntry is used to get to the first EimAccess 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;
EimAccess structure:
typedef struct EimAccess { unsigned int nextEntry; /* Displacement to next entry. This byte offset is relative to the start of this structure */ EimListData user; /* User with access. This data will be in the format of the dn for for access id. */ } EimAccess;
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_ACCESS_TYPE_INVAL (2) | Access type is not valid. |
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_REG_MUST_BE_NULL (55) | Registry name must be NULL when access type is not EIM_ACCESS_REGISTRY. |
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. |
The following example lists all users with the specified access.
Note: By using the code examples, you agree to the terms of the Code license and disclaimer information.
#include <eim.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> void printListResults(EimList * list); void printListData(char * fieldName, void * entry, int offset); int main(int argc, char *argv[]) { int rc; char eimerr[100]; EimRC * err; EimHandle * handle; char listData[5000]; 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; /* List all users with this access */ if (0 != (rc = eimListAccess(handle, EIM_ACCESS_ADMIN, NULL, 5000, list, err))) { printf("List access error = %d", rc); return -1; } /* Print the results */ printListResults(list); return 0; } void printListResults(EimList * list) { int i; EimAccess * 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 = (EimAccess *)((char *)list + list->firstEntry); for (i = 0; i < list->entriesReturned; i++) { printf("\n"); printf("===============\n"); printf("Entry %d.\n", i); /* Print out results */ printListData("Access user", entry, offsetof(EimAccess, user)); /* advance to next entry */ entry = (EimAccess *)((char *)entry + entry->nextEntry); } printf("\n"); } 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"); }
[ Back to top | Security APIs | APIs by category ]