UNIX에 해당
authxapi_GetObjectListValue 함수는 데이터베이스에 저장된 개체의 속성에 할당된 값의 목록을 검색합니다. 단일 값이 있는 속성은 이 함수로 검색할 수 없습니다. 단일 값 속성은 authxapi_GetObjectProperty로 검색하십시오.
이 함수는 성공하면 0을 반환합니다. 실패할 경우에는 전역 변수 errno를 설정하고 다음 오류 코드 중 하나를 반환합니다.
|
반환 값 |
ERRNO |
의미 |
|---|---|---|
|
AUTHXAPI_E_EINVAL |
EINVAL |
잘못된(NULL) 포인터입니다. |
|
AUTHXAPI_E_INVOBJ |
EINVAL |
잘못된 개체 설명자입니다. |
|
AUTHXAPI_E_INVPROP |
EINVAL |
잘못된 속성 설명자입니다. |
|
AUTHXAPI_E_NOCLASS |
ENOENT |
필요한 클래스를 찾을 수 없습니다. |
|
AUTHXAPI_E_NOOBJ |
ENOENT |
필요한 개체를 찾을 수 없습니다. |
|
AUTHXAPI_E_NOPROP |
ENOENT |
필요한 속성을 찾을 수 없습니다. |
|
AUTHXAPI_E_PTYPE |
EINVAL |
속성 유형이 목록입니다. |
|
AUTHXAPI_E_DBERROR |
EIO |
데이터베이스 손상이 의심됩니다. |
|
AUTHXAPI_E_NOVAL |
ENOENT |
이 개체와 연결된 속성 값이 없습니다. |
int authxapi_GetObjectListValue (const char *szClass,
const char *szObj,
SEOSDB_ODF *p_odf,
const char *szProp,
SEOSDB_PDF *p_pdf,
void ***val,
unsigned int *psize,
unsigned int *count);
리소스가 속한 클래스의 이름입니다.
속성 값을 검색할 해당 개체의 이름입니다.
이 함수로 가져오거나 이전에 종료 API get 함수를 호출할 때 호출자가 제공한 개체 설명자에 대한 포인터입니다.
값을 검색할 해당 속성의 이름입니다.
이 함수로 가져오거나 이전에 종료 API get 함수를 호출할 때 호출자가 제공한 속성 설명자에 대한 포인터입니다.
포인터 배열의 메모리 주소가 할당된 변수에 대한 포인터입니다. 포인터 배열은 검색할 데이터 값을 가리킵니다. authxapi_GetObjectListValue 함수는 여기에 사용된 메모리를 할당합니다.
값 목록의 각 요소에 할당된 메모리의 영역 크기(바이트)입니다.
값 목록에 있는 요소의 수입니다. 요소가 없는 경우 0일 수 있습니다.
참고:
개체 이름을 사용할 때보다 개체 설명자를 사용할 때 더욱 빠르지만 개체 설명자를 전역 변수에 저장한 후 이 함수에 대한 이후 호출에 사용하는 방법은 안전하지 않습니다. 이는 데이터베이스의 업데이트로 인해 이러한 개체가 삭제될 수 있기 때문입니다.
seosd 데몬이 활성 상태인 동안에도 속성 정의는 변경에 영향을 받지 않으므로 속성 설명자를 전역 변수에 저장한 후 이 함수에 대한 이후 호출에 사용할 수 있습니다.
authxapi_GetObjectListValue 함수는 void 포인터의 벡터를 할당하며, 각 포인터는 값 목록의 단일 요소를 포함하는 할당된 버퍼를 가리킵니다. int **와 같은 포인터에 대한 포인터로 모든 유형의 list 변수를 선언해야 합니다. 그러면 이 list 변수에 대한 포인터가 (void ***)와 같은 typecast로 authxapi_GetObjectListValue에 전달됩니다. 예를 들면 다음과 같습니다.
{
int **list;
unsigned int psize, count;
int rc;
...
rc = authxapi_GetObjectListValue(szClass,
szObj, &odf, szProp, &pdf,
(void ***)&list, &psize, &count);
...
}
authxapi_GetObjectListValue가 결과를 반환할 때 list 변수는 0부터 count까지 각 목록 항목을 가리키는 포인터가 순서대로 저장된 새로 할당된 메모리 영역을 가리킵니다. 그러나 각 목록 항목은 서로 다른 새 할당 메모리 영역에 저장됩니다. authxapi_GetObjectListValue에 의해 할당된 모든 메모리를 해제하려면 authxapi_FreeListValues를 사용해야 합니다.
예를 들어 N개의 데이터 요소 목록이 있는 경우 다음과 같이 메모리가 할당됩니다.
|
인수 |
설명 |
|
[elem0] |
첫 번째 데이터 요소 |
|
[elem1] |
두 번째 데이터 요소 |
|
[elemN] |
N+1번째 데이터 요소 |
예제: 속성 리소스의 값 목록 검색
다음 종료 API 함수는 데이터베이스에 있는 리소스의 목록 유형 속성에서 값 목록을 검색한 후 값 목록 전체에 대해 루프를 실행합니다. 검색된 정보를 실제로 사용하는 코드는 이 예제에 나와 있지 않습니다.
#include stdio.h #include authxapi.h #include seostype.h
int MyExitFunction(void *exit_data, SEOS_EXITRES *result)
{
SEOS_EXITGENR *genr_data;
SEOSDB_ODF odf;
SEOSDB_PDF pdf;
SEOS_ACL **access_list, *acl_element;
int rc;
unsigned int psize, count, counter;
genr_data = (SEOS_EXITGENR *)exit_data;
/* Ignore any class that is not of interest */
if (strcmp(genr_data‑>szClass, "MyResClass"))
return 0;
/* Fetch the information for the ACL property of the */
/* resource being accessed. */
rc = authxapi_GetObjectListValue("MyResClass", genr_data‑>szRes
&odf, "ACL", &pdf, (void ***)access_list, &psize, &count);
if (rc == 0)
{
/* We have the ACL now. Lets just see a demonstration */
/* of looping through the list. */
for (counter = 0; counter < count; counter++)
{
acl_element = access_list[counter];
/*
* > > > User Code Here < < <
*/
}
authxapi_FreeListValues((void ***) &access_list, &count);
}
return 0;
}
|
Copyright © 2013 CA.
All rights reserved.
|
|