#include <eim.h>
int eimListAccess(EimHandle * eim,
enum EimAccessType accessType,
char * registryName,
unsigned int lengthOfListData,
EimList * listData,
EimRC * eimrc)
Service Program Name: QSYS/QSYEIMThe 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 ]