#include <eim.h> int eimListRegistryAssociations(EimHandle * eim, enum EimAssociationType associationType, char * registryName, char * registryUserName, unsigned int lengthOfListData, EimList * listData, EimRC * eimrc)Service Program Name: QSYS/QSYEIM
The eimListRegistryAssociations() function lists association information for the registry or domain.
The list returned contains only the information that the user has authority to access.
EIM version 2 must be supported by the local EIM APIs to specify a policy association type (see eimGetVersion()--Get EIM Version).
Valid values are:EIM_ALL_ASSOC (0) | List all associations. |
EIM_TARGET (1) | List target associations. |
EIM_SOURCE (2) | List source associations. |
EIM_SOURCE_AND_TARGET (3) | List source and target associations. |
EIM_ADMIN (4) | List administrative associations. |
EIM_ALL_POLICY_ASSOC (5) | List all policy associations. |
EIM_CERT_FILTER_POLICY (6) | List certificate filter policy associations. |
EIM_DEFAULT_REG_POLICY (7) | List default registry policy associations. |
EIM_DEFAULT_DOMAIN_POLICY (8) | List default domain policy associations. |
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 EimRegistryAssociation structures. firstEntry is used to get to the first EimRegistryAssociation 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;
EimRegistryAssociation structure:
typedef struct EimRegistryAssociation { unsigned int nextEntry; /* Displacement to next entry. This byte offset is relative to the start of this structure */ enum EimAssociationType type; /* Type of association. */ EimListData registryName; /* Registry name the association is defined to. */ EimListData registryUserName; /* Registry user name the association is defined to. */ EimListData identifier; /* Unique name for eim identifier */ EimListData sourceRegistry; /* Source registry name the association is defined for. */ EimListData filterValue; /* Filter value */ enum EimStatus domainPolicyAssocStatus; /* Policy association status for the domain: 0 = not enabled 1 = enabled */ enum EimStatus sourceMappingLookupStatus; /* Mapping lookup status for the source registry: 0 = not enabled 1 = enabled */ enum EimStatus targetMappingLookupStatus; /* Mapping lookup status for the target registry: 0 = not enabled 1 = enabled */ enum EimStatus targetPolicyAssocStatus; /* Policy association status for the target registry: 0 = not enabled 1 = enabled */ } EimRegistryAssociation;
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;
If the type field is EIM_TARGET (1), then the following fields will be returned:
If the type field is EIM_SOURCE (2), then the following fields will be returned:
If the type field is EIM_ADMIN (4), then the following fields will be returned:
If the type field is EIM_CERT_FILTER_POLICY (6), then the following fields will be returned:
If the type field is EIM_DEFAULT_REG_POLICY (7), then the following fields will be returned:
If the type field is EIM_DEFAULT_DOMAIN_POLICY (8), then the following fields will be returned:
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_NOREG (28) | EIM Registry not found or 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_ASSOC_TYPE_INVAL (4) | Association 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_SPACE (41) | Unexpected error accessing parameter. |
EIMERR_FUNCTION_NOT_ SUPPORTED (70) | The specified function is not supported by the EIM version. |
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. |
EIMERR_UNEXP_OBJ_ VIOLATION (56) | Unexpected object violation. |
See Code disclaimer information for information pertaining to code examples.
The following example lists the default registry policies for a registry.
#include <eim.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> void printAssociationType(int type); void printStatus(int status); 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[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 source registry policies */ if (0 != (rc = eimListRegistryAssociations(handle, EIM_DEFAULT_REG_POLICY, "MySourceRegistry", NULL, 1000, list, err))) { printf("List EIM Registry Associations error = %d", rc); return -1; } /* Print the results */ printListResults(list); return 0; } void printListResults(EimList * list) { int i; EimRegistryAssociation * 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 = (EimRegistryAssociation *)((char *)list + list->firstEntry); for (i = 0; i < list->entriesReturned; i++) { printf("\n"); printf("===============\n"); printf("Entry %d.\n", i); /* Print out results */ printAssociationType(entry->type); printListData("Registry Name", entry, offsetof(EimRegistryAssociation, registryName)); printListData("Registry User Name", entry, offsetof(EimRegistryAssociation, registryUserName)); printListData("EIM identifier", entry, offsetof(EimRegistryAssociation, identifier)); printListData("Source Registry", entry, offsetof(EimRegistryAssociation, sourceRegistry)); printListData("Filter Value", entry, offsetof(EimRegistryAssociation, filterValue)); printStatus("Domain policy association status",entry->domainPolicyAssocStatus); printStatus("Source registry mapping lookup status",entry->sourceMappingLookupStatus); printStatus("Target registry mapping lookup status",entry->targetMappingLookupStatus); printStatus("Target registry policy association status",entry->targetPolicyAssocStatus); /* advance to next entry */ entry = (EimRegistryAssociation *)((char *)entry + entry->nextEntry); } printf("\n"); } void printAssociationType(int type) { switch(type) { case EIM_TARGET: printf(" Target Association.\n"); break; case EIM_SOURCE: printf(" Source Association.\n"); break; case EIM_ADMIN: printf(" Administrative Association.\n"); break; case EIM_CERT_FILTER_POLICY: printf(" Certificate Filter Policy Association.\n"); break; case EIM_DEFAULT_REG_POLICY: printf(" Default Registry Policy Association.\n"); break; case EIM_DEFAULT_DOMAIN_POLICY: printf(" Default Domain Policy Association.\n"); break; default: printf("ERROR - unknown association type.\n"); break; } } void printStatus(char * fieldName, int status) { printf(" %s = ",fieldName); switch(status) { case EIM_STATUS_NOT_ENABLED: printf(" Not enabled.\n"); break; case EIM_STATUS_ENABLED: printf(" Enabled.\n"); break; default: printf("ERROR - unknown status value.\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"); }
Top | Security APIs | APIs by category |