#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/QSYEIMThe 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).
| 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 |