데이터베이스의 정보는 클래스로 구성됩니다. 클래스의 정의에는 해당 클래스의 모든 레코드 또는 개체에 일반적인 정보가 포함됩니다. 동일한 클래스에 속하는 레코드는 의미가 유사합니다. 예를 들어 USER 클래스의 모든 레코드는 사용자를 나타내고, GROUP 클래스의 모든 레코드는 사용자 그룹을 나타내며, TERMINAL 클래스의 모든 레코드는 사용자가 현재 호스트에 액세스할 수 있는 터미널을 나타냅니다. 모든 클래스에는 클래스에 속한 레코드에 할당할 수 있는 속성 목록이 포함된 속성 정의 테이블이 포함되어 있습니다.
레코드는 클래스의 인스턴스를 나타내는 단일 엔터티입니다. 예를 들어 USER 클래스의 레코드는 개별 사용자를 나타냅니다. 각 클래스에는 해당 클래스와 관련된 속성 또는 필드가 포함되어 있습니다. 속성에 값을 할당하면 해당 정보가 레코드에 저장됩니다. 속성 정의에는 데이터가 데이터베이스에 저장되는 방식을 정의하는 데이터 및 특성의 레이아웃에 대한 정보가 포함됩니다. 레코드의 모든 속성에 값을 할당할 수 있습니다. 레코드 클래스의 정의는 레코드에 할당할 수 있는 속성과 각 속성에 할당할 수 있는 값을 결정합니다.
데이터베이스의 구조를 효과적으로 설명할 수 있는 예를 들어 봅시다. USER 클래스의 경우 모든 레코드는 시스템의 사용자를 나타냅니다. USER 클래스의 속성 정의 테이블에는 사용자 레코드에 할당할 수 있는 속성의 목록이 포함되어 있습니다. 이 목록의 속성 중 일부는 FULL_NAME, ORGANIZATION 및 GROUPS입니다. 데이터베이스의 레코드로 표시되는 모든 사용자에 이러한 속성의 값을 할당할 수 있습니다. 예를 들어 FULL_NAME 속성은 사용자의 전체 이름을 저장하고, ORGANIZATION 속성은 사용자가 속한 조직에 대한 정보를 저장하며, GROUPS 속성은 사용자가 속한 그룹의 목록을 포함합니다. 레코드의 속성은 데이터베이스 레코드의 필드와 유사합니다. 속성의 형식은 속성 정의에 따라 달라질 수 있습니다. 이 예제에서 FULL_NAME 및 ORGANIZATION 속성에는 단일 값만 있는 반면, GROUPS 속성은 가변적인 개수의 반복적 요소로 구성된 목록입니다. 사용자는 무제한의 그룹에 속할 수 있습니다.
데이터베이스의 각 클래스에는 이름 및 해당 이름과 연결된 ID가 있습니다. 데이터베이스 엔진은 클래스 ID를 내부적으로 사용하여 성능을 향상시키고 데이터베이스 파일 크기를 작게 줄입니다. 클래스 ID는 내부적으로만 사용되며 각 데이터베이스에서 다를 수 있습니다. 따라서 클래스 이름을 사용하고 클래스 ID는 사용하지 마십시오.
데이터베이스에 있는 클래스의 각 속성에는 이름 및 속성 이름과 연결된 ID가 있습니다. 데이터베이스 엔진은 속성 ID를 내부적으로 사용하여 성능을 향상시키고 데이터베이스 파일 크기를 작게 줄입니다. 모든 클래스에는 고유한 속성 정의 테이블이 있으므로 속성 이름이 둘 이상의 클래스에 표시되고 속성의 특성이 각 클래스에서 다를 수 있습니다. 속성은 해당 이름 및 속성이 있는 클래스의 이름이나 고유한 속성 ID로 식별됩니다.
데이터베이스의 모든 레코드에는 이름이 있으며 클래스에 속합니다. 서로 다른 클래스의 레코드 이름이 동일할 수 있습니다. 데이터베이스의 각 레코드는 레코드 ID와 연결됩니다. 레코드 ID는 데이터베이스의 각 레코드에서 고유한 32 비트 숫자입니다. CA ControlMinder는 레코드 ID를 내부적으로 사용합니다. 레코드를 참조할 때 레코드 이름이나 레코드 ID를 사용할 수 있습니다.
데이터베이스의 모든 레코드에는 해당 속성에 할당된 값이 있을 수 있습니다. 일부 속성은 CA ControlMinder가 자동으로 설정하고 일부 속성은 사용자가 명시적으로 설정합니다. 보안 관리자나 위임된 책임자는 CA ControlMinder에 포함된 도구를 사용하여 대부분의 속성을 설정합니다.
참고: 각 클래스가 지원하는 속성에 대한 자세한 내용은 selang 참조 안내서를 참조하십시오.
데이터베이스는 다음과 같은 데이터 파일로 구성됩니다.
클래스 정의 테이블이 포함된 클래스 설명 파일입니다.
레코드 정의 테이블이 포함된 개체 설명 파일입니다.
속성 정의 테이블이 포함된 속성 설명 파일입니다.
모든 CA ControlMinder 속성에 할당된 값이 포함된 속성 값 파일입니다.
데이터 파일은 관리 API에 표시되지 않으므로 여기에서 언급하지 않는 인덱스 파일도 데이터 파일에 있습니다.
클래스 설명 파일에는 CA ControlMinder에 정의된 모든 클래스에 대한 정보가 저장됩니다. 이 파일에 저장된 정보에는 클래스의 이름, 클래스 ID 및 CA ControlMinder가 내부적으로 사용하는 기타 플래그가 포함됩니다. 클래스 정보는 SEOSDB_CDF라는 구조에 저장됩니다.
속성 설명 파일에는 CA ControlMinder에 정의된 각 속성에 대한 정보가 저장됩니다. 속성 정보에는 다음이 포함됩니다.
일부 속성은 단일 값으로 정의되고 다른 속성은 목록 값으로 정의됩니다. 속성 설명 정보는 SEOSDB_PDF라는 구조에 저장됩니다.
개체 설명 파일에는 CA ControlMinder에 정의된 각 레코드에 대한 기본 정보가 저장됩니다. 개체 설명 파일에는 다음 데이터가 저장됩니다.
개체 설명 정보는 SEOSDB_ODF라는 구조에 저장됩니다.
속성 값 파일에는 데이터베이스에 정의된 모든 레코드의 모든 속성에 할당된 값이 포함됩니다. 각 항목은 다음 요소로 구성됩니다.
무결성 검사에 사용되는 정보도 속성 값 파일에 저장되지만 이 정보는 관리 API를 사용하여 액세스할 수 없습니다.
이 단원에서는 데이터베이스에 있는 다양한 목록 유형에 대해 설명합니다.
사용자 레코드와 그룹 레코드 모두에는 사용자와 그룹의 연결을 정의하는 데이터가 포함됩니다.
사용자 레코드에는 사용자가 속한 그룹의 목록이 포함됩니다. 사용자 레코드에는 저장되는 정보는 다음과 같습니다.
그룹 레코드에는 그룹에 연결된 사용자의 목록이 포함됩니다. 이 목록에는 사용자의 레코드 ID만 포함됩니다.
그룹에 사용자를 연결하려면 사용자에 연결된 그룹의 목록과 그룹에 연결된 사용자의 목록을 업데이트해야 합니다. 사용자가 그룹에 연결되면 CA ControlMinder는 두 목록을 모두 자동으로 업데이트합니다. 사용자가 이후에 데이터베이스에서 삭제되더라도 해당 사용자의 ID를 포함하는 모든 그룹 레코드에서 해당 사용자를 삭제할 수 없습니다. 따라서 일부 그룹 레코드에는 데이터베이스에 더 이상 존재하지 않는 사용자의 사용자 ID가 포함되어 있을 수 있습니다. CA ControlMinder는 데이터베이스의 수명 기간 내에 개체에 ID를 두 번 이상 할당할 수 없도록 하는 방식으로 새 개체 ID를 생성합니다. 그룹 레코드에 사용되지 않는 사용자 ID가 포함되어 있어도 보안 위협이 발생하지 않습니다.
리소스와 리소스 그룹의 연결은 사용자와 그룹의 연결과 마찬가지로 리소스 레코드와 리소스 그룹 레코드 모두에 저장됩니다. 리소스 레코드에는 해당 리소스가 연결된 리소스 그룹을 식별하는 레코드 ID의 목록이 포함됩니다. 리소스 그룹 레코드에는 해당 리소스 그룹에 연결된 리소스를 식별하는 리소스 ID의 목록이 포함됩니다. 리소스와 리소스 그룹은 리소스가 리소스 그룹에 연결될 때마다 자동으로 업데이트됩니다.
ACL(액세스 제어 목록)은 리소스 레코드에 있는 0개 이상의 항목으로 구성된 목록입니다. ACL의 각 항목은 데이터베이스의 접근자 개체가 리소스에 대해 갖는 액세스 권한을 정의합니다. 각 ACL 항목은 다음 요소로 구성됩니다.
이 항목은 리소스 레코드가 나타내는 리소스에 대해 접근자가 수행할 수 있는 작업을 결정합니다.
CA ControlMinder는 일반 ACL과 유사하며 조건부 ACL이라고도 하는 PACL(프로그램 액세스 제어 목록)도 제공합니다. PACL 항목을 구성하는 요소로는 접근자의 레코드 ID와 접근자의 권한 수준 외에도 프로그램 레코드 ID가 포함됩니다.
규칙에 따라 CA ControlMinder는 어떤 개체에도 개체 ID 0을 할당하지 않습니다. ACL과 PACL에서 개체 ID 0은 CA ControlMinder의 정의된 모든 사용자(*)를 나타냅니다.
참고: ACL에 대한 자세한 내용은 selang 참조 안내서의 권한 부여 명령 부분을 참조하십시오.
CA ControlMinder는 각 사용자가 시스템에 로그인할 때 사용자에게 ACEE(Accessor Environment Element)를 할당합니다. ACEE는 사용자의 자격 증명과 다양한 보안 매개 변수의 정의를 포함하는 데이터 구조입니다. 로그인 프로세스에 의해 생성된 모든 프로세스는 부모 프로세스의 ACEE를 상속합니다. ACEE는 프로세스가 시스템의 su 유틸리티나 sesu 유틸리티를 실행하여 사용자를 대체하는 경우에도 유지됩니다.
각 ACEE에는 모든 시점에서 프로세스 자격 증명과 기타 정보를 고유하게 식별하는 핸들이 있습니다. ACEE와 관련 핸들은 해당 항목을 생성한 로그인 세션이 종료될 때까지 존재합니다.
관리 API와 모든 CA ControlMinder 권한 부여 프로세스는 ACEE 핸들을 사용하여 요청하는 사용자를 식별하고 설명합니다.
관리 API에는 사용자의 ACEE 또는 ACEE 핸들을 가져오는 함수가 포함되어 있습니다. UNIX에서는 이러한 함수로 가져온 정보를 sewhoami 유틸리티에서 적절한 옵션을 사용하여 볼 수 있습니다.
참고: sewhoami 유틸리티에 대한 자세한 내용은 참조 안내서를 참조하십시오.
관리 API는 성능에 부정적인 영향을 주지 않기 위해 CA ControlMinder 언어 인터프리터보다 단순한 보안 범위 방법을 사용합니다.
관리 API는 사용자의 USER 레코드에 설정된 특성을 사용하지만 소유권, 그룹 특성 및 ADMIN 클래스를 사용하는 다른 권한은 무시합니다. 따라서 사용자가 selang, selangx, CA ControlMinder Administrator(seadm) 또는 정책 관리자를 사용하여 수행할 수 있는 작업 중 일부는 관리 API를 사용하여 수행할 수 없습니다. 예를 들어 selang에서 사용자는 자신이 소유하는 개체를 표시하거나 업데이트할 수 있습니다. 하지만 관리 API는 개체 소유자라도 ADMIN 특성이 없으면 자신의 개체를 업데이트할 수 없도록 합니다.
관리 API는 다음과 같은 규칙을 따릅니다.
이 API를 사용하려면 소스 코드에 헤더 파일과 프로토타입 및 구조 정의를 포함해야 합니다. 모든 프로토타입은 seadmapi.h 파일에 있는 반면, 대부분의 데이터 형식은 다른 헤더에 있습니다. seostype.h 헤더 파일은 데이터베이스에 저장된 모든 데이터의 구조 정의를 제공합니다. 감사 및 오류 로깅 레코드의 구조 정의는 헤더 파일 selogtype.h에 있습니다.
이 단원에서는 이 API와 함께 사용해야 하는 라이브러리에 대해 설명합니다.
seadmapi는 단일 라이브러리 파일인 seadmapi.a로 구성되며 이 파일은 이 API를 사용하는 모든 컴파일된 소스 파일과 연결해야 합니다.
CA ControlMinder에는 libseadmapi.xx라는 이 API의 공유 라이브러리 버전이 포함되어 있습니다. 여기서 xx는 공유 라이브러리 이름에 대한 표준 운영 체제 규칙(일반적으로 so 또는 sl)입니다. sample_TermOwn.c와 같은 공유 라이브러리를 사용하는 프로그램을 실행하기 전에 환경 변수가 공유 라이브러리의 경로를 가리키는지 확인하십시오. 환경이 공유 경로를 가리키도록 하려면 다음을 입력하십시오.
setenv LD_LIBRARY_PATH /opt/CA/AccessControl/lib
seadmapi 함수를 사용하여 프로그램을 컴파일하고 연결하려면 링크 경로에 정적 라이브러리 seadmapi.lib를 포함해야 합니다. 이 라이브러리는 일반적으로 ACDir\lib에 있습니다. 여기서 ACDir는 CA ControlMinder를 설치한 디렉터리(기본값: C:\Program Files\CA\Access Control)입니다.
이 라이브러리를 사용하는 프로그램을 실행하기 전에 환경 변수가 이 라이브러리의 경로를 가리키는지 확인하십시오.
seadmapi를 사용하여 컴파일하는 데는 특별한 플래그가 필요하지 않습니다. 반면 연결 작업에는 추가 설정이 필요할 수 있습니다. 이러한 플래그는 컴퓨터 및 운영 체제에 따라 다릅니다. 이 API의 샘플과 함께 제공되는 메이크파일을 사용하고 해당 샘플에서 최신 정보를 확인하십시오.
중요! 교착 상태를 방지하려면 seosd exit 내부에서 어떠한 관리 API 함수도 사용하지 마십시오.
이 API가 제공하는 모든 함수는 스레드로부터 안전합니다. 스레드로부터 안전하지 않은 함수의 경우에는 함수의 참고 부분에 해당 내용이 언급됩니다.
참고: seadmapi 라이브러리에서 다른 함수를 호출하려면 먼저 seadmapi_init 또는 seadmapi_IsSeOSSyscallLoaded 함수를 호출해야 합니다.
관리 API에 포함된 함수는 다음과 같이 분류됩니다.
다음 함수는 CA ControlMinder 클래스에 대해 작동합니다.
데이터베이스에서 특정 클래스를 검색합니다.
데이터베이스에서 첫 번째 클래스를 검색합니다.
데이터베이스에서 다음 클래스를 검색합니다.
다음 함수는 속성에 대해 작동합니다.
특정 속성에 대한 설명을 검색합니다.
클래스의 첫 번째 속성 설명을 검색합니다.
클래스의 다음 속성 설명을 검색합니다.
다음 함수는 개체에 대해 작동합니다.
ObjInClassList로 검색한 개체의 목록을 해제합니다.
특정 개체에 대한 정보를 검색합니다.
클래스의 첫 번째 개체에 대한 정보를 검색합니다.
개체 ID가 지정된 개체 ID보다 크거나 같은 개체에 대한 정보를 검색합니다.
클래스의 다음 개체에 대한 정보를 검색합니다.
지정된 클래스의 개체 목록을 검색합니다.
다음 함수는 값에 대해 작동합니다.
목록 유형 속성의 값을 가져옵니다.
단일 값 속성의 값을 가져옵니다.
FetchListPropVal로 가져온 값 목록을 해제합니다.
단일 속성 값 유형의 값을 설정합니다.
다음 함수는 쿼리를 수행합니다.
이전에 초기화된 엔터티 규칙을 사용하여 전체 개체 및 해당 속성 값을 검색합니다.
이전에 초기화된 엔터티 규칙을 사용하여 개체 및 클래스 이름을 포함한 전체 개체 및 해당 속성 값을 검색합니다.
사용자에 대한 유예 정보를 검색합니다.
GetEntity 및 GetExEntity 작업에 사용되는 엔터티 쿼리 버퍼를 초기화합니다.
InitEntityRuler 함수에 의해 엔터티 스타일 쿼리에 할당된 메모리를 해제합니다.
MakePDFList 함수에 의해 할당된 속성 설명자의 목록을 해제합니다.
속성 이름 목록을 사용하여 속성 설명자 목록을 생성합니다.
개체 ID를 개체 이름으로 변환합니다.
다음 함수는 로그 파일에 대해 작동합니다.
ADMIN 감사 레코드를 제출합니다.
감사 레코드를 제출하기 위한 인터페이스를 제공합니다.
서비스 연결 리소스 감사 레코드를 제출합니다.
오류 로그에 대한 기록을 제출합니다.
일반 리소스 감사 레코드를 제출합니다.
TCP/IP 감사 레코드를 제출합니다.
로그인 감사 레코드를 제출합니다.
종료에 대한 감사 레코드를 제출합니다.
시작에 대한 감사 레코드를 제출합니다.
사용자 감사 레코드를 제출합니다.
watchdog 감사 레코드를 제출합니다.
ADMIN 알림 레코드를 제출합니다.
서비스 연결 리소스 알림 레코드를 제출합니다.
일반 리소스 알림 레코드를 제출합니다.
TCP/IP 알림 레코드를 제출합니다.
로그인 알림 레코드를 제출합니다.
종료에 대한 알림 레코드를 제출합니다.
시작에 대한 알림 레코드를 제출합니다.
사용자 알림 레코드를 제출합니다.
watchdog 알림 레코드를 제출합니다.
다음 함수는 콘솔 작업을 제공합니다.
시스템에 대한 모든 로그인을 비활성화합니다.
시스템에 대한 모든 로그인을 활성화합니다.
전역 로그인 제어의 상태를 가져옵니다.
CA ControlMinder 추적 기능으로 메시지를 보냅니다.
IP 주소 확인을 위해 호스트 이름을 새로 고칩니다.
런타임 통계 정보를 가져옵니다.
CA ControlMinder를 종료합니다.
추적 파일을 지웁니다.
CA ControlMinder 추적을 비활성화합니다.
CA ControlMinder 추적을 활성화합니다.
CA ControlMinder 추적의 상태를 반환합니다.
CA ControlMinder 추적을 전환합니다.
사용자 ID의 로그인을 비활성화합니다.
사용자 ID의 로그인을 활성화합니다.
UID 동시 로그인 상태를 가져옵니다.
다음 함수는 앞의 어떤 범주에도 해당되지 않는 기능을 수행합니다.
seadmapi_GetACEE 함수에 의해 할당된 메모리를 해제합니다.
현재 프로세스 사용자의 ACEE를 검색합니다.
CA ControlMinder 메시지 파일을 사용하여 지정된 오류 코드에서 오류 문자열을 검색합니다.
현재 프로세스의 사용자 유형에 대한 정보를 검색합니다.
CA ControlMinder와의 통신 채널을 초기화합니다.
CA ControlMinder 시스템 호출이 로드되었는지 확인합니다.
현재 프로세스에 대한 제어 기능을 제공합니다.
현재 프로세스에 대한 정보를 검색합니다.
사용자에 대한 특성 정보를 검색합니다.
사용자 암호를 새 암호로 바꿉니다.
이 함수는 데이터베이스에 정의된 클래스에 대한 정보를 검색합니다.
데이터베이스의 모든 클래스를 검색하려면 먼저 seadmapi_ClassGetFirst 함수를 호출한 다음 이후의 각 클래스에 대해 seadmapi_ClassGetNext 함수를 호출하십시오.
이러한 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.
Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_ClassGetEqual(const char *szClass, \
SEOS_CID cid, \
SEOSDB_CDF *p_seclass);
int seadmapi_ClassGetFirst(SEOSDB_CDF *p_seclass);
int seadmapi_ClassGetNext(SEOSDB_CDF *p_seclass);
관련 정보를 검색할 클래스의 이름입니다. cid 매개 변수에 클래스 ID를 지정할 경우에는 이 매개 변수를 NULL로 설정하십시오.
관련 정보를 검색할 클래스의 클래스 ID입니다. szClass 매개 변수에 클래스 이름을 지정할 경우에는 이 매개 변수를 ‑1로 설정하십시오.
이 함수로 검색된 정보를 포함할 구조에 대한 포인터입니다. seadmapi_ClassGetNext의 경우 이 데이터 구조는 이전에 ClassGetNext 함수나 ClassGetFirst 함수를 호출하여 얻은 값을 포함해야 합니다.
예제
/*=========================================================
Project : eTrust
Module : eTrust Version: 8.0
File : sample_ListClass.c
Purpose : Sample seadmapi: List class names.
===========================================================
Copyright :
Copyright 2004 Computer Associates International, Inc.
===========================================================*/
#include <ctype.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <seadmapi.h>
int main (void)
{ SEOSDB_CDF cdf;
int rv;
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Get the first class from the database. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_ClassGetFirst(&cdf);
if ( rv )
{ printf("seadmapi_ClassGetFirst returned 0x%04x\n", rv );
return 1;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* If successful, continue looping for all the classes. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
while (!rv)
{ printf( "%s\n", cdf.szCName );
rv = seadmapi_ClassGetNext(&cdf);
}
return 0;
}
이 함수는 데이터베이스에 정의된 하나 이상의 속성에 대한 정보를 검색합니다.
특정 클래스의 모든 속성을 검색하려면 먼저 seadmapi_PropGetFirstInClass 함수를 호출한 다음 이후의 각 속성에 대해 seadmapi_PropGetNextInClass 함수를 호출하십시오.
이러한 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.
Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다. 모든 프로세스가 모든 속성에 대해 seadmapi_PropGetEqual 요청을 보낼 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_PropGetEqual(const char *szClass,
SEOSDB_CDF *p_seclass,
const char *szProp,
SEOS_PID pid,
SEOSDB_PDF *p_seprop);
int seadmapi_PropGetFirstInClass(const char *szClass,
SEOSDB_CDF *p_seclass,
SEOSDB_PDF *p_seprop);
int seadmapi_PropGetNextInClass(SEOSDB_PDF *p_seprop);
클래스 이름입니다. 클래스 이름 대신 클래스 설명을 지정하려면 이 매개 변수를 NULL로 설정하십시오.
클래스 설명입니다. 클래스 설명 대신 클래스 이름을 지정하려면 이 매개 변수를 NULL로 설정하십시오. 이 매개 변수가 NULL일 경우 szClass는 NULL이 아니어야 합니다.
속성 이름입니다. 속성 이름 대신 속성 ID를 지정하려면 이 매개 변수를 NULL로 설정하십시오.
속성 ID입니다. 속성 ID 대신 속성 이름을 지정하려면 이 매개 변수를 ‑1로 설정하십시오.
이 함수로 검색된 정보를 포함할 데이터 구조에 대한 포인터입니다.
예제
다음 예제에서는 seadmapi_PropGetFirstInClass와 seadmapi_PropGetNextInClass를 사용하여 클래스의 속성 값을 검색하는 방법을 보여 줍니다.
/*=========================================================
Project : eTrust
Module : eTrust Version: 8.0
File : sample_ListProp.c
Purpose : List properties of a specific class.
===========================================================
Copyright :
Copyright 2004 Computer Associates International, Inc.
===========================================================*/
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <seadmapi.h>
static int ErrorMessage( int rv );
int main(int argc, char *argv[])
{ SEOSDB_CDF cdf; /* Class Description */
SEOSDB_PDF prop; /* Property Description */
char Class[CNAME_SIZE+1];
unsigned props_cnt = 0;
int rv;
if ( argc < 2 )
{ fprintf(stderr, "Required parameter (class name) is
missing.\n");
return 1;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Set class name by specified parameter. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
strcpy(Class, argv[1]);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Clear property descriptor. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
memset( &prop, 0, sizeof(prop) );
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Check if class exists by getting the class descriptor. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_ClassGetEqual(Class, 0, &cdf);
if (rv) return ErrorMessage(rv);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Set the class ID in the property descriptor. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
prop.sCId = cdf.sCId;
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Loop for all the properties in the class.
*/
/* Check for rv 0 or 1 to find all */
/* the properties that are equal to or greater than */
/* the supplied property, which is 0. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_PropGetFirstInClass( NULL, &cdf, &prop );
while ( (rv == 0) || (rv == 1) )
{ if ( prop.sCId == cdf.sCId )
{ props_cnt++;
printf("%s %s\n", Class, prop.szPName);
}
rv = seadmapi_PropGetNextInClass( &prop );
}
if ( props_cnt == 0 )
printf("Class %s, does not contain this property.\n",
Class);
return 0;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Display error message. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
static int ErrorMessage( int rv )
{
char msg_buff[1024];
seadmapi_GetMessage(rv, sizeof(msg_buff), msg_buff);
fprintf(stderr, "%s.\n", msg_buff);
return rv;
}
이 함수는 데이터베이스의 개체(레코드)에 대한 정보를 검색합니다.
클래스의 모든 개체를 순차적으로 검색하려면 먼저 seadmapi_ObjGetFirstInClass를 호출한 다음 이후의 각 개체에 대해 seadmapi_ObjGetNextInClass를 호출하십시오.
이러한 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.
Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.
seadmapi_ObjGetGreaterEqual 함수는 다음 값 중 하나를 반환합니다.
이 함수가 지정된 개체와 같은 개체 ID를 갖는 개체에 대한 정보를 검색했습니다.
이 함수가 지정된 개체보다 큰 개체 ID를 갖는 개체에 대한 정보를 검색했습니다.
함수가 실패했습니다.
나머지 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_ObjGetEqual(const char *szClass,
SEOSDB_CDF *p_seclass,
const char *szObj,
SEOS_OID
oid,
SEOSDB_ODF *p_seobj);
int seadmapi_ObjGetFirstInClass(const char *szClass,
SEOSDB_CDF *p_seclass,
SEOSDB_ODF *p_seobj);
int seadmapi_ObjGetNextInClass(SEOSDB_ODF *p_seobj);
int seadmapi_ObjGetGreaterEqual(const char *szClass,
SEOSDB_CDF *p_seclass,
const char *szObj,
SEOS_OID oid,
EOSDB_ODF *p_seobj);
개체가 속한 클래스의 이름을 지정합니다. p_seclass 매개 변수를 사용하여 클래스를 지정할 경우에는 이 매개 변수를 NULL로 설정하십시오.
클래스 설명자를 포함하는 구조에 대한 포인터입니다. szClass 매개 변수를 지정할 경우에는 이 매개 변수를 NULL로 설정하십시오.
값을 가져올 해당 개체의 이름입니다. 개체 이름 대신 개체 ID를 지정할 경우에는 이 매개 변수를 NULL로 설정하십시오.
관련 정보를 검색할 개체의 개체 ID입니다. 개체 ID 대신 개체 이름을 지정할 경우에는 이 매개 변수를 ‑2로 설정하십시오.
이 함수로 검색된 정보를 포함할 구조에 대한 포인터입니다.
예제
다음 예제에서는 seadmi_ObjGetFirstInClass와 seadmi_ObjGetNextInClass를 사용하여 특정 클래스의 모든 개체를 검색하는 방법을 보여 줍니다.
/*=========================================================
Project : eTrust
Module : eTrust Version: 8.0
File : sample_ListObjs.c
Purpose : Display the objects in a class.
===========================================================
Copyright :
Copyright 2004 Computer Associates International, Inc.
===========================================================*/
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <seadmapi.h>
static int ErrorMessage( int rv );
int main(int argc, char *argv[])
{ SEOSDB_ODF odf; /* Current ODF in loop */
SEOSDB_CDF cdf; /* Class Description */
char Class[CNAME_SIZE+1];
unsigned ents = 0;
int rv;
if ( argc < 2 )
{ fprintf(stderr, "Required parameter missing.\n");
fprintf(stderr, "Usage: '%s CLASS_NAME'\n", argv[0]);
return 1;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Set class name by specified parameter. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
strcpy(Class, argv[1]);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Clear object descriptor. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
memset( &odf, 0, sizeof(odf) );
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Check if class exists by getting the class descriptor. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_ClassGetEqual(Class, 0, &cdf);
if (rv) return ErrorMessage(rv);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Set the class ID in the object descriptor. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
odf.sCId = cdf.sCId;
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Loop for all the objects in the class. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_ObjGetFirstInClass( NULL, &cdf, &odf );
while ( (rv == 0) || (rv == 1) )
{ if ( odf.sCId == cdf.sCId )
{ ents++;
printf("%s %s\n", Class, odf.szOName);
}
rv = seadmapi_ObjGetNextInClass( &odf );
}
if ( ents > 0 )
printf("Total of %d objects found in Class=%s\n", ents,
Class);
else
printf("Class %s, does not have any object.\n", Class);
return 0;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Display error message from security daemon. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
static int ErrorMessage( int rv )
{ char msg_buff[1024];
seadmapi_GetMessage(rv, sizeof(msg_buff), msg_buff);
fprintf(stderr, "%s.\n", msg_buff);
return rv;
}
seadmapi_ObjInClassList 함수는 지정된 클래스의 개체 목록을 검색합니다.
SEADMAPI_MAXOBJSLIST 필드는 한 번 호출하여 검색할 수 있는 항목 수에 대한 제한을 지정합니다.
이 함수를 호출한 후에는 seadmapi_FreeObjList 함수를 호출하여 쿼리에 할당된 메모리를 해제해야 합니다. 이 함수에서 반환된 ptr 인수를 사용하십시오.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_ObjInClassList (SEOSDB_CDF *pcdf,
char *start,
void **ptr,
char **names,
int *count);
클래스 설명에 대한 포인터입니다.
목록의 처음에 오는 개체 이름을 나타내는 문자열입니다.
목록 쿼리에 할당된 메모리를 해제하는 데 사용되는 "void *"에 대한 포인터입니다.
문자 포인터의 벡터에 대한 포인터입니다. 각 요소는 개체 이름을 가리킵니다.
입력 값일 경우 벡터의 크기입니다. 반환 값일 경우 벡터의 항목 수입니다.
seadmapi_FreeObjList 함수는 seadmapi_ObjInClassList 함수가 할당한 메모리를 해제합니다.
이 함수는 *ptr에 NULL을 할당합니다.
반환 값은 없습니다.
int seadmapi_FreeObjList (void **ptr);
가장 최근에 seadmapi_ObjInClassList 함수를 호출하여 얻은 포인터입니다.
seadmapi_FetchListPropVal 함수는 목록을 포함하는 속성의 값을 검색합니다. 이 함수는 단일 값 속성의 값은 검색할 수 없습니다. 이 경우에는 seadmapi_FetchSinglePropVal 함수를 대신 사용하십시오.
이 함수는 void 포인터의 벡터를 할당하며, 각 포인터는 목록의 단일 요소를 포함하는 할당된 버퍼를 가리킵니다. 호출자는 void ** 유형이나 포인터에 대한 포인터(int **)인 다른 유형의 변수를 정의해야 합니다. 호출자는 다음 예제에 표시된 것과 같이 이 변수에 대한 포인터를 보냅니다.
{ int **list;
unsigned int psize, count;
int rc;
...
rc = seadmapi_FetchListPropVal(..,
(void ***)&list, &psize, &count);
호출 후 메모리 레이아웃은 다음과 같습니다.
|
인수 |
설명 |
|
[elem0] |
첫 번째 데이터 요소 |
|
[elem1] |
두 번째 데이터 요소 |
|
[elemN] |
N+1번째 데이터 요소 |
여기서 elemN은 count 변수에 저장됩니다.
이 함수가 가져온 모든 데이터는 할당되어 있으며, 이를 해제해야 합니다. 데이터를 해제하려면 seadmapi_FreeListPropVal 함수를 호출하십시오.
이 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.
Watchdog과 에이전트도 이 함수를 사용할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_FetchListPropVal(const char *szClass,
SEOSDB_CDF *p_seclass,
const char *szObj,
SEOSDB_ODF *p_seobj,
const char *szProp,
SEOSDB_PDF *p_seprop,
void ***val,
unsigned int *psize,
unsigned int *count);
개체가 속한 클래스의 이름을 지정합니다. p_seclass 매개 변수를 사용하여 클래스를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.
클래스 설명을 포함하는 구조에 대한 포인터입니다. szClass 매개 변수를 사용하여 클래스를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.
속성 값을 가져올 해당 레코드의 이름입니다. p_seobj 매개 변수를 사용하여 개체를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.
개체 설명을 포함하는 구조에 대한 포인터입니다. szObj 매개 변수를 사용하여 개체를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.
값을 가져올 해당 속성의 이름입니다. p_seprop 매개 변수를 사용하여 속성을 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.
속성 설명을 포함하는 구조에 대한 포인터입니다. szProp 매개 변수를 사용하여 속성을 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.
가져온 값 유형의 3중 포인터(포인터에 대한 포인터에 대한 포인터)입니다. 자세한 내용은 이 목록 다음에 나오는 설명을 참조하십시오.
가져온 값의 크기입니다.
할당된 벡터에 있는 요소의 수입니다.
예제
다음 예제에서는 seadmapi_FetchListPropVal 함수를 사용하여 목록을 포함하는 속성의 값을 검색하는 방법을 보여 줍니다. 이 예제에서는 seadmapi_gconn 구조를 사용하여 사용자가 연결된 모든 그룹을 표시하는 방법도 보여 줍니다.
/*=========================================================
Project : eTrust
Module : eTrust Version: 8.0
File : sample_FetchList.c
Purpose : Sample for seadmapi, Display a property that
contains a list. Display list of groups user is
connected to.
===========================================================
Copyright :
Copyright 2004 Computer Associates International, Inc.
===========================================================*/
#include <stdio.h>
#include <string.h>
#include <seadmapi.h>
static int ErrorMessage( int rv );
int main(int argc, char *argv[])
{ SEOSDB_ODF odf;
SEOS_GCONN **list;
char Object[ONAME_SIZE+1];
unsigned int elem_size;
unsigned int list_cnt;
int rv;
int cnt;
if ( argc < 2 )
{ fprintf(stderr, "Required parameter (User Name)
missing.\n");
return 1;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Set object name by specified parameter. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
strcpy(Object, argv[1]);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* Get the list for class=USER, property=GROUPS, */
/* object=Specified_Parm */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
rv = seadmapi_FetchListPropVal("USER", NULL,
Object, NULL,
"GROUPS", NULL,
(void ***)&list,
&elem_size, &list_cnt);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Exit with error message in case we fail to get the list. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
if ( rv != 0 ) return ErrorMessage(rv);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Display all groups from the list in a loop. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
for(cnt=0; cnt<list_cnt; cnt++)
{ rv = seadmapi_ObjGetEqual("GROUP", NULL, NULL,
list[cnt]‑>oidGroup, &odf);
if ( rv == 0 )
{ printf("Group Name: %‑10s (id=%6ld)", odf.szOName,
list[cnt]‑>oidGroup);
if ( list[cnt]‑>ugmUserMode
{ printf(", Group");
if ( list[cnt]‑>ugmUserMode & SEOS_UGMODE_AUDITOR )
printf(" auditor");
if ( list[cnt]‑>ugmUserMode & SEOS_UGMODE_PWMANAGER )
printf(" pwmanager");
if ( list[cnt]‑>ugmUserMode & SEOS_UGMODE_ADMIN )
printf(" administrator");
}
else
printf(", Regular");
printf(".\n");
}
else
printf("Group id: %ld, no longer exits in database.\n",
list[cnt]‑>oidGroup);
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* Free the list. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
seadmapi_FreeListPropVal((void ***)&list, &list_cnt);
return 0;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Display an error message from the security daemon. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
static int ErrorMessage( int rv )
{ char msg_buff[1024];
seadmapi_GetMessage(rv, sizeof(msg_buff), msg_buff);
fprintf(stderr, "%s.\n", msg_buff);
return rv;
}
seadmapi_FetchSinglePropVal 함수는 단일 값을 포함하는 속성의 값을 검색합니다. 이 함수를 사용하여 목록을 검색할 수는 없습니다. 목록을 포함하는 속성의 경우에는 seadmapi_FetchListPropVal 함수를 사용하십시오. 속성의 데이터를 저장하려면 호출하는 프로그램이 val 변수가 가리키는 메모리에 공간을 할당해야 합니다. 필요한 크기를 확인하려면 속성 설명자 sPVSize 구성원이나 다른 수단을 사용하십시오.
seadmapi_FetchSinglePropVal 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.
Watchdog과 에이전트는 이 함수를 사용할 수 있습니다.
이 함수는 전용 데이터를 보려는 모든 사용자가 사용할 수 있습니다. 값은 사용자의 레코드에 해당하는 값으로 설정됩니다.
이 함수는 모든 사용자가 SUDO 클래스나 SEOS 클래스의 레코드에 대한 값을 검색하는 데 사용할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_FetchSinglePropVal(const char *szClass,
SEOSDB_CDF *p_seclass,
const char *szObj,
SEOSDB_ODF *p_seobj,
const char *szProp,
SEOSDB_PDF *p_seprop,
void *val,
int *size);
개체가 속한 클래스의 이름을 지정합니다. p_seclass 매개 변수를 사용하여 클래스를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.
클래스 설명을 포함하는 구조에 대한 포인터입니다. szClass 매개 변수를 사용하여 클래스를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.
속성 값을 가져올 해당 레코드의 이름입니다. p_seobj 매개 변수를 사용하여 레코드를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.
개체 설명을 포함하는 구조에 대한 포인터입니다. szObj 매개 변수를 사용하여 개체를 식별할 경우에는 이 변수를 NULL로 설정하십시오.
가져올 속성의 이름입니다. p_seprop 매개 변수를 사용하여 속성을 식별할 경우에는 이 변수를 NULL로 설정하십시오.
속성 설명을 포함하는 구조에 대한 포인터입니다. sz_Prop 매개 변수를 사용하여 속성을 식별할 경우에는 이 변수를 NULL로 설정하십시오.
결과를 저장할 메모리 내의 위치에 대한 포인터입니다.
입력 값일 경우 val 매개 변수가 가리키는 메모리 영역의 크기입니다. 반환 값일 경우 메모리 영역에 저장된 데이터의 크기입니다.
UNIX 예제
다음 예제에서는 UNIX에서 seadmapi_FetchSinglePropVal을 사용하여 단일 속성의 값을 검색하는 방법을 보여 줍니다.
/*=========================================================
Project : eTrust
Module : eTrust Version: 8.0
File : sample_FetchSingle.c
Purpose : Sample for seadmapi, List the value for a given
property in a specific object in a specific class
in a UNIX system.
===========================================================
Copyright :
Copyright 2004 Computer Associates International, Inc.
===========================================================*/
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <seadmapi.h>
static int ErrorMessage( int rv );
int main(int argc, char *argv[])
{ SEOSDB_PDF prop; /* Property Description */
char Class[CNAME_SIZE+1];
char Object[ONAME_SIZE+1];
char Property[PNAME_SIZE+1];
char *prop_val;
int data_size;
int rv;
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Check if SeOS_syscall is loaded. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_IsSeOSSyscallLoaded();
if ( rv != 0 )
{ fprintf(stderr, "Database server is not running.\n");
return 1;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Check if the user supplied all required parameters. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
if ( argc < 4 )
{ fprintf(stderr, "Required parameter(s) missing.\n");
fprintf(stderr, "Usage: '%s CLASS_NAME PROPERTY_NAME
OBJECT_NAME'\n", argv[0]);
return 1;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Set the class, property, and object fields. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
strcpy(Class, argv[1]);
strcpy(Property, argv[2]);
strcpy(Object, argv[3]);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Clear the property and object fields. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
memset( &prop, 0, sizeof(prop) );
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Get the property descriptor. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_PropGetEqual( Class, NULL, Property, 0, &prop );
if (rv) return ErrorMessage(rv);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Check for string type. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
if ( prop.cPType != SEOSDB_PTYPE_STR )
{ fprintf(stderr, "This sample can display only character
values.\n");
return 1;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Allocate memory for the value's data according to the */
/* property size */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
prop_val = (char *)malloc( (size_t)prop.sPVSize );
if ( prop_val == NULL )
{ fprintf(stderr, "Failed to allocate required memory for
property value.\n");
return 1;
}
data_size = prop.sPVSize;
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Get the requested property value. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_FetchSinglePropVal(Class, NULL,
Object, NULL,
NULL, &prop,
prop_val, &data_size);
if (rv)
{ free(prop_val);
return ErrorMessage(rv);
}
printf("%s\n", prop_val);
free(prop_val);
return 0;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Display error message from security daemon. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
static int ErrorMessage( int rv )
{ char msg_buff[1024];
seadmapi_GetMessage(rv, sizeof(msg_buff), msg_buff);
fprintf(stderr, "%s.\n", msg_buff);
return rv;
}
Windows 예제
다음 예제에서는 Windows에서 seadmapi_FetchSinglePropVal을 사용하여 단일 속성의 값을 검색하는 방법을 보여 줍니다.
/*=========================================================
Project : eTrust
Module : eTrust Version: 4.10
File : sample_FetchSingle.c
Purpose : Sample for seadmapi, List the value for a given
property in a specific object in a specific class.
===========================================================
Copyright :
Copyright 2004 Computer Associates International, Inc.
===========================================================*/
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <seadmapi.h>
static int ErrorMessage( int rv );
int main(int argc, char *argv[])
{ SEOSDB_PDF prop; /* Property Description */
char Class[CNAME_SIZE+1];
char Object[ONAME_SIZE+1];
char Property[PNAME_SIZE+1];
char *prop_val;
int data_size;
int rv;
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Check if the user supplied all required parameters. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
if ( argc < 4 )
{ fprintf(stderr, "Required parameter(s) missing.\n");
fprintf(stderr, "Usage: '%s CLASS_NAME PROPERTY_NAME
OBJECT_NAME'\n", argv[0]);
return 1;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Set the class, property, and object fields. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
strcpy(Class, argv[1]);
strcpy(Property, argv[2]);
strcpy(Object, argv[3]);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Clear the property and object fields. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
memset( &prop, 0, sizeof(prop) );
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Get the property descriptor. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_PropGetEqual( Class, NULL, Property, 0, &prop );
if (rv) return ErrorMessage(rv);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Check for string type. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
if ( prop.cPType != SEOSDB_PTYPE_STR )
{ fprintf(stderr, "This sample can display only character
values.\n");
return 1;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Allocate memory for the value's data according to the */
/* property size */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
prop_val = (char *)malloc( (size_t)prop.sPVSize );
if ( prop_val == NULL )
{ fprintf(stderr, "Failed to allocate required memory for
property value.\n");
return 1;
}
data_size = prop.sPVSize;
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Get the requested property value. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_FetchSinglePropVal(Class, NULL,
Object, NULL,
NULL, &prop,
prop_val, &data_size);
if (rv)
{ free(prop_val);
return ErrorMessage(rv);
}
printf("%s\n", prop_val);
free(prop_val);
return 0;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Display error message from security daemon. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
static int ErrorMessage( int rv )
{ char msg_buff[1024];
seadmapi_GetMessage(rv, sizeof(msg_buff), msg_buff);
fprintf(stderr, "%s.\n", msg_buff);
return rv;
}
seadmapi_FreeListPropVal 함수는 seadmapi_FetchListPropVal 함수를 사용하여 목록 값을 가져오고 해당 값에 대해 할당된 메모리를 해제한 후에 사용해야 합니다. 이 함수에 제공된 매개 변수는 seadmapi_FetchListPropVal 함수에 제공된 매개 변수와 동일해야 합니다.
모든 프로세스가 이 함수를 호출할 수 있습니다.
반환 값은 없습니다.
void seadmapi_FreeListPropVal(void ***list, unsigned int *count);
seadmapi_FetchListPropVal 함수가 할당한 벡터에 대한 포인터입니다.
할당된 벡터에 있는 요소의 수에 대한 포인터입니다.
seadmapi_SetSinglePropVal 함수는 단일 값 속성의 값을 설정합니다. 이 함수는 Watchdog 및 에이전트가 사용합니다. 데이터베이스가 손상되는 것을 방지하기 위해 다른 프로세스는 이 함수를 사용할 수 없습니다.
seadmapi_SetSinglePropVal 함수는 Watchdog 및 에이전트만 사용할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_SetSinglePropVal(const char *szClass, const char *szObj, const char *szProp, void *val, int size);
레코드가 속한 클래스의 이름입니다.
속성을 설정할 해당 레코드의 이름입니다.
값을 설정할 해당 속성의 이름입니다.
속성에 할당할 값입니다.
값의 크기(바이트)입니다.
seadmapi_MakePDFList 함수는 지정된 클래스의 전체 속성 목록을 검색합니다. 이 함수는 속성 벡터에 대한 메모리를 할당합니다.
seadmapi_MakePDFList 함수를 사용한 후 seadmapi_KillPDFList 함수를 사용하여 할당된 메모리를 해제하십시오.
이러한 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.
Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.
seadmapi_MakePDFList 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
void seadmapi_KillPDFList(SEOSDB_PDF **ppPdf, unsigned int nCount); int seadmapi_MakePDFList(const char *szClass, SEOSDB_PDF **ppPdf, unsigned int *nCount);
클래스 이름입니다.
속성 벡터를 포함하는 할당된 메모리 영역을 가리키는 SEOSDB_PDF 포인터에 대한 포인터입니다.
벡터에 있는 속성의 수입니다.
seadmapi_GetEntity 및 seadmapi_GetExEntity 함수는 데이터베이스 개체의 모든 속성 값을 ObjPVs 벡터로 가져옵니다.
이러한 함수는 CA ControlMinder 유틸리티에서 사용되며, 이를 통해 데이터베이스의 정보를 손쉽게 가져올 수 있습니다. 이러한 함수를 사용하려면 먼저 seadmapi_InitEntityRuler 함수를 호출하여 호출자가 원하는 속성 목록을 초기화하십시오. 그런 다음 seadmapi_GetEntity 또는 seadmapi_GetExEntity 함수를 호출하여 단일 개체에 대한 정보를 가져오십시오.
참고: rdbdump 유틸리티에 대한 자세한 내용은 참조 안내서를 참조하십시오.
seadmapi_GetEntity 함수를 사용할 경우 벡터는 속성에 대한 모든 정보(속성 설명)와 속성 값을 받습니다. 모든 속성은 목록 속성 값의 경우와 동일하게 검색되고 저장됩니다. 단일 값 속성도 항목이 하나인 목록으로 저장됩니다.
seadmapi_GetExEntity 함수를 사용할 경우 벡터는 위와 동일한 정보를 받지만 다른 개체의 ID를 포함하는 모든 속성 값이 확장된다는 차이점이 있습니다. 예를 들어 소유자의 ID를 받는 대신 이 함수는 ID와 소유자의 클래스 및 이름을 포함하는 확장된 OID를 받습니다.
정보를 사용한 후에는 seadmapi_KillEntityMem 또는 seadmapi_KillExEntityMem 함수를 호출하여 작업에 필요한 모든 메모리를 해제하십시오.
이전에 seadmapi_MakePDFList 함수를 호출하여 얻은 ObjPVs 벡터를 초기화할 수 있습니다. ObjPVs 매개 변수가 가리키는 벡터는 속성 이름이 NULL로 설정된 마지막 요소를 포함해야 합니다. 함수는 이 방법을 사용하여 벡터의 크기를 결정합니다.
SEOSDB_ENTDAT, SEOS_X_OID, SEOS_X_GCONN, SEOS_X_ACL 및 SEOS_X_PACL 구조는 seostypes.h 헤더 파일에 정의되어 있습니다.
seadmapi_GetEntity 또는 seadmapi_GetExEntity를 호출한 후에는 항상 seadmapi_KillEntityMem 또는 seadmapi_KillExEntityMem을 호출하여 seadmapi_GetEntity 또는 seadmapi_GetExEntity 함수가 할당한 메모리를 해제하십시오.
이러한 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.
Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_GetEntity(const char *szCName,
const char *szOName,
SEOSDB_ODF *podf,
SEOSDB_ENTDAT *ObjPVs);
int seadmapi_GetExEntity(const char *szCName,
const char *szOName,
SEOSDB_ODF *podf,
SEOSDB_ENTDAT *ObjPVs);
int seadmapi_InitEntityRuler(const char *szCName, SEOSDB_ENTDAT *ObjPvs);
void seadmapi_KillEntityMem(SEOSDB_ENTDAT *ObjPVs);
void seadmapi_KillExEntityMem(SEOSDB_ENTDAT *ObjPVs);
클래스 이름입니다.
개체 이름입니다.
개체 설명으로 채울 메모리 영역에 대한 포인터입니다.
속성 설명과 값 목록을 모두 포함하는 벡터에 대한 포인터입니다.
예제
다음 예제에서는 seadmapi_InitEntityRuler 및 seadmapi_GetExEntity 함수의 사용 방법을 보여 줍니다.
/*=========================================================
Project : eTrust
Module : eTrust Version: 8.0
File : sample_TermOwn.c
Purpose : Display terminal's owner.
===========================================================
Copyright :
Copyright 2004 Computer Associates International, Inc.
===========================================================*/
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑
When working in UNIX, remember to point an environment
variable to the shared library path by entering the command
setenv LD_LIBRARY_PATH/opt/CA/eTrustAccessControl/lib/
‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
#include <ctype.h>
#include <stdio.h>
#include <sys/types.h>
#include <memory.h>
#include <seadmapi.h>
static int ErrorMessage( int rv );
int main(int argc, char *argv[])
{ SEOSDB_ODF odf; /* Object definition */
SEOSDB_ENTDAT entdat[2]; /* Entity data */
SEOS_X_OID *owner;
int rv;
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Check if user specified the terminal name.
*/
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
if ( argc == 1 )
{ printf("Usage: '%s terminal_name'\n", argv[0]);
return 1;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Initialize entity data.
*/
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
memset(entdat, 0, sizeof(entdat));
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Set the ruler for the database request.
*/
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
entdat[0].szPName = "OWNER"; /* Owner */
entdat[1].szPName = NULL; /* Null terminator */
rv = seadmapi_InitEntityRuler("TERMINAL", entdat);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Exit with error message in case we fail to set the ruler.*/
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
if ( rv != 0 ) return ErrorMessage(rv);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Get all data.
*/
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_GetExEntity("TERMINAL", /* Class name */
argv[1], /* Terminal name */
&odf, /* Object definition */
entdat); /* Entity data */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Exit with error message in case we fail to get the data */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
if ( rv != 0 ) return ErrorMessage(rv);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Display OWNER information.
*/
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
if ( entdat[0].nPVQty != 0 )
{ owner = (SEOS_X_OID *)entdat[0].pPVList[0];
if ( owner‑>pCName != NULL )
printf("OWNER = %s %s, id=%d\n", owner‑>pCName,
owner‑>pOName, owner‑>oid);
else
printf("OWNER = (id=%d)\n", entdat[0].pPVList);
}
else
printf("OWNER = \n");
return 0;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Display error message. */
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
static int ErrorMessage( int rv )
{ char msg_buff[1024];
seadmapi_GetMessage(rv, sizeof(msg_buff), msg_buff);
fprintf(stderr, "%s.\n", msg_buff);
return rv;
}
이 함수는 사용자의 암호, 마지막 로그인 날짜 및 사용자에게 남아 있는 유예 로그인 횟수에 대한 정보를 검색합니다.
이 함수는 ADMIN 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.
모든 사용자가 직접 이 함수를 실행할 수 있습니다.
int seadmapi_GetGraceInfo(SEGRACE_RES *p_sgr);
사용자 로그인 및 유예 기간(일)에 대한 정보를 포함하는 구조에 대한 포인터입니다.
UNIX 예제
다음 예제에서는 UNIX 시스템에서 seadmapi_GetGraceInfo 함수를 사용하는 방법을 보여 줍니다.
/*=========================================================
Project : eTrust
Module : eTrust Version: 4.10
File : sample_grace.c
Purpose : Sample for seadmapi: Display information from the
Access Control database about the user's grace
logins.
===========================================================
Copyright :
Copyright 2004 Computer Associates International, Inc.
===========================================================*/
#include <ctype.h>
#include <stdio.h>
#include <sys/types.h>
#include <seadmapi.h>
int main(void)
{ SEGRACE_RES sgr; /*Grace information structure */
int rv; /*Return value */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* Quit if the kernel extension is not running. */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
rv = seossfr_IsSeOSSyscallLoaded();
if ( rv )
{ fprintf(stderr, "The kernel extension is not loaded.\n");
return rv;
}
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* Quit if the security daemon is not running. */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
rv = seadmapi_IsServerRunning();
if ( rv )
{fprintf(stderr, "Security daemon is not running.\n");
return rv;
}
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* Set username to '0' to get current user's */
/* grace information */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
sgr.uname[0] = 0;
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* Get grace information from the database. */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
rv = seadmapi_GetGraceInfo(&sgr);
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* If rv is not zero, display an error message and quit. */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
if ( rv )
{ if ( sgr.step )
{ if (sgr.msg[0] != 0 )
fprintf(stderr, "%s\n", sgr.msg);
return 1;
}
}
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* Display the number of grace logins. */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
printf("User %s has %d grace logins.\n", sgr.uname, sgr.grace);
return 0;
}
Windows 예제
다음 예제에서는 Windows 환경에서 seadmapi_GetGraceInfo 함수를 사용하는 방법을 보여 줍니다.
/*=========================================================
Project : eTrust
Module : eTrust Version: 4.10
File : sample_grace.c
Purpose : Sample for seadmapi: Display information from the
Access Control database about the user's grace
logins.
===========================================================
Copyright :
Copyright 2004 Computer Associates International, Inc.
===========================================================*/
#include <ctype.h>
#include <stdio.h>
#include <sys/types.h>
#include <seadmapi.h>
int main(void)
{ SEGRACE_RES sgr; /*Grace information structure */
int rv; /*Return value */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* Quit if the kernel extension is not running */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
rv = seossfr_IsSeOSSyscallLoaded();
if ( rv )
{ fprintf(stderr, "The kernel extension is not loaded.\n");
return rv;
}
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* Set username to '0' to get current user's grace information*/
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
sgr.uname[0] = 0;
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* Get grace information from the database. */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
rv = seadmapi_GetGraceInfo(&sgr);
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* If rv is not zero, display an error message and quit. */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
if ( rv )
{ if ( sgr.step )
{ if (sgr.msg[0] != 0 )
fprintf(stderr, "%s\n", sgr.msg);
return 1;
}
}
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
/* Display the number of grace logins. */
/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/
printf("User %s has %d grace logins.\n", sgr.uname, sgr.grace);
return 0;
}
이 함수를 사용하면 개체 ID를 개체 이름을 포함하는 문자열로 손쉽게 변환할 수 있습니다. 개체가 데이터베이스에 없는 경우, 예를 들어 개체가 삭제된 경우 이 함수가 반환하는 문자열은 NULL입니다.
이 함수가 반환하는 포인터는 이후에 호출할 때 덮어쓰여지는 정적 영역에 대한 포인터입니다. 이로 인해 다중 스레드를 사용할 때 함수가 안전하지 않습니다.
이 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.
Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.
이 함수는 성공 시 개체의 이름을 반환하고, 실패 시 NULL을 반환합니다.
char *seadmapi_OidToName(SEOS_OID oid);
레코드의 개체 ID입니다.
이 함수는 엔진에 현재 프로세스에 대한 정보를 제공합니다. 이 함수가 반환하는 정보는 데이터베이스나 권한 부여 엔진에서 다른 정보를 가져오는 데 사용될 수 있습니다.
이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_WhoAmI(uid_t *uid, int *handle, char *szUName, SEOS_UMODE *objtype);
현재 프로세스와 연결된 UID입니다. UNIX에서는 getlogin UNIX 함수에 해당하며 이 함수를 사용할 때보다 안전합니다.
현재 프로세스와 연결된 ACEE 핸들입니다. 이 단원의 "참고" 부분을 참조하십시오.
현재 프로세스와 연결된 사용자 이름입니다.
데이터베이스에 저장되는 사용자 유형입니다. 이 요소는 사용자에게 할당된 특성을 지정합니다.
예제
다음 예제에서는 seadmapi_WhoAmI 함수의 사용 방법을 보여 줍니다.
/*=========================================================
Project : eTrust
Module : eTrust Version: 8.0
Purpose : Display information about the user from the
Access Control database.
===========================================================
Copyright :
Copyright 2004 Computer Associates International, Inc.
===========================================================*/
#include <ctype.h>
#include <stdio.h>
#include <sys/types.h>
#include <seadmapi.h>
int main(void)
{ SEOS_UMODE objtype; /* Object type */
uid_t
uID; /* User ID */
char uName[256]; /* User name */
int handle;
/* Handle */
int regular = 1; /* Mode flag */
int rv;
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Get user information from the database.
*/
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
rv = seadmapi_WhoAmI(&uID, &handle, uName, &objtype);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* If failed, display message and quit.
*/
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
if ( (rv != 0) || (uName[0] == '?') )
{ fprintf(stderr, "Can't find current user name.\n",
uName, rv);
return 1;
}
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Display the user information:
*/
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
printf("User Name : %s\n", uName);
printf("User ID : %ld\n", uID);
printf("User Handle : %ld\n", handle);
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
/* Display user authorization attributes by using the
*/
/* SEOS_UMODE_is macro.
*/
/* ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ */
printf("User Mode :");
if ( SEOS_UMODE_is_auditor(objtype) )
{ printf(" AUDITOR");
regular = 0;
}
if ( SEOS_UMODE_is_operator(objtype) )
{ printf(" OPERATOR");
regular = 0;
}
if ( SEOS_UMODE_is_admin(objtype) )
{ printf(" ADMIN");
regular = 0;
}
if ( SEOS_UMODE_is_pwmanager(objtype) )
{ printf(" PWMANAGER");
regular = 0;
}
if ( regular )
printf(" REGULAR\n");
else
printf("\n");
return 0;
}
seadmapi_WhoIs 함수는 지정된 사용자에 대한 정보를 제공합니다. 이 함수는 데이터베이스에서 사용자 유형(특성)을 가져옵니다. szUName 매개 변수가 가리키는 메모리 영역은 255자를 수용할 수 있을 정도로 충분히 커야 합니다.
헤더 파일 seadmapi.h에는 objtype 변수 데이터에 대해 작동하여 사용자에게 특정 특성이 있는지 여부를 확인하는 몇 개의 매크로가 포함되어 있습니다. 이러한 매크로의 일반적인 표기법은 SEOS_UMODE_is_attribute입니다. 시스템의 모든 프로세스가 이 함수를 호출할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_WhoIs(char *szUName, SEOS_UMODE *objtype);
현재 프로세스와 연결된 사용자 이름입니다.
데이터베이스에 저장되는 사용자 유형입니다. 이 요소는 사용자에게 할당된 특성을 지정합니다.
핸들이 지정된 경우 seadmapi_GetACEE는 관련 ACEE 정보를 검색합니다. 이 함수는 CA ControlMinder에서 현재 사용자에 대해 할당된 모든 ACEE를 검색할 수도 있습니다. 정보는 함수 자체가 할당한 메모리 영역에 로드됩니다. CLIENT_ACEE 구조에 채워지는 정보에는 지정된 ACEE에 대한 모든 자격 증명이 포함됩니다.
이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_GetACEE(int hAcee, CLIENT_ACEE **ppAcee); void seadmapi_FreeAceeMemory(CLIENT_ACEE **ppAcee);
seadmapi_GetACEE가 할당한 메모리 영역을 가리키는 할당된 포인터에 대한 포인터입니다. seadmapi_FreeAceeMemory 함수는 이 동일한 주소를 받고 할당된 메모리를 해제합니다.
이 함수는 메시지 파일에서 오류 설명을 받은 후 버퍼 매개 변수로 가리킨 버퍼에 배치합니다.
시스템의 모든 프로세스가 이 함수를 사용할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_GetMessage(int err_code, int size, char *buff);
CA ControlMinder 함수 중 하나가 반환하는 오류 코드입니다.
버퍼의 크기(바이트)입니다. 일반적으로 충분한 버퍼 크기는 2 KB입니다.
오류 설명 텍스트를 포함하는 버퍼에 대한 포인터입니다.
이 함수는 현재 프로세스의 ACEE에 저장된 개체 유형을 검색합니다. 몇 개의 매크로가 이 정보를 사용하여 현재 프로세스가 사용자에 할당할 수 있는 특정 특성(ADMIN, AUDITOR, PWMANAGER 등) 중 하나가 있는 사용자에 속하는지 여부를 확인할 수 있습니다.
헤더 파일 seadmapi.h에는 이 변수 데이터에 대해 작동하여 사용자에게 특정 특성이 있는지 여부를 확인하는 몇 개의 매크로가 포함되어 있습니다. 이러한 매크로의 일반적인 표기법은 SEOS_UMODE_is_attribute입니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_GetObjType(SEOS_UMODE *objtype);
현재 프로세스의 ACEE에서 채워지는 SEOS_UMODE 유형 변수에 대한 포인터입니다.
예제
다음 예제에서는 seadmapi_GetObjType의 사용 방법을 보여 줍니다.
/*=========================================================
Project : eTrust
Module : eTrust Version: 8.0
File : mymode.c
Purpose : Sample for seadmapi_GetObjType
Display user's mode:
REGULAR AUDITOR ADMIN OPERATOR SERVER or PWMANAGER.
===========================================================
Copyright :
Copyright 2004 Computer Associates International, Inc.
===========================================================*/
#include <stdio.h>
#include <seostype.h>
#include <seadmapi.h>
int main(void)
{ int rv;
SEOS_UMODE umode;
if ( (rv = seadmapi_GetObjType(&umode)) == 0)
{
printf("My mode is 0x%x : ", umode);
if ( umode != 0 )
{
if ( umode & SEOS_UMODE_AUDITOR )
printf("Auditor ");
if ( umode & SEOS_UMODE_OPERATOR )
printf("Operator ");
if ( umode & SEOS_UMODE_ADMIN )
printf("Admin ");
if ( umode & SEOS_UMODE_SERVER )
printf("Server ");
if ( umode & SEOS_UMODE_PWMANAGER )
printf("PwManager ");
}
else
printf("Regular ");
printf("\n");
return 0;
}
fprintf(stderr, "Error 0x%X for seadmapi_GetObjType.\n", rv);
return 1;
}
이 함수는 CA ControlMinder와의 통신 채널을 초기화합니다.
시스템의 모든 프로세스가 이 함수를 사용할 수 있습니다. Windows 환경에서는 이 함수가 사용되지 않습니다.
seadmapi 라이브러리에서 다른 함수를 호출하려면 먼저 seadmapi_init 또는 seadmapi_IsSeOSSyscallLoaded 함수를 호출해야 합니다. 그러나 두 함수를 모두 사용할 경우 seadmapi_init가 seadmapi_IsSeOSSyscallLoaded 앞에 와야 합니다.
이 함수는 초기화 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다. 이 함수는 정확한 CA ControlMinder 시스템 호출이 컴퓨터에 로드되는지 확인합니다.
int seadmapi_init(void)
이 함수는 CA ControlMinder 시스템 호출이 로드되었는지 여부를 확인합니다. Solaris, HP-UX 및 Linux 시스템의 경우 이 함수는 동적 CA ControlMinder 시스템 호출 번호를 확인합니다.
이 함수는 시스템의 모든 프로세스가 사용할 수 있습니다. Windows 환경에서는 이 함수가 사용되지 않습니다.
AIX를 제외한 모든 UNIX 시스템에서 이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
AIX 시스템의 경우, AIX 시스템 로더는 CA ControlMinder 시스템 호출이 실제로 로드되어 있지 않은 한 시스템 호출을 로드하는 데 필요한 프로세스를 로드할 수 없으므로 이 함수가 항상 0을 반환합니다.
int seadmapi_IsSeOSSyscallLoaded(void)
참고: seadmapi 라이브러리에서 다른 함수를 호출하려면 먼저 seadmapi_init 또는 seadmapi_IsSeOSSyscallLoaded 함수를 호출해야 합니다.
seadmapi_SendAuditRecord 함수는 모든 유형의 감사 정보를 감사 로그에 보냅니다. 이 함수는 이 API와 함께 제공되는 다른 함수가 특정 유형의 감사 로그 레코드를 로그 파일에 제출하는 데 내부적으로 사용합니다. 여러 가지 경우에 이 함수를 손쉽게 사용할 수 있지만 이 함수를 사용하는 대신 각 감사 레코드 유형에 대해 특정 함수를 사용하는 것이 좋습니다.
이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.
Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_SendAuditRecord(int type, int result, void *data);
감사 레코드의 유형입니다. 유효한 값의 목록은 selogtype.h 헤더 파일을 참조하십시오.
CA ControlMinder가 지원하는 유효한 결과 코드 중 하나입니다. 유효한 값은 selogtype.h 헤더 파일을 참조하십시오.
감사 레코드 데이터에 대한 포인터입니다. 이 포인터는 제출할 레코드의 유형에 따라 유효한 데이터를 가리켜야 합니다.
이 함수는 감사 레코드를 감사 로그로 보냅니다. 이 함수는 seadmapi_SendAuditRecord 함수를 사용합니다. seadmapi_SendAuditRecord 함수를 직접 호출하는 대신 이 함수를 사용하는 것이 좋습니다.
다음은 seadmapi_SendAudit 함수입니다.
감사 레코드를 관리 레코드 형식으로 감사 로그로 보냅니다.
감사 레코드를 서비스 연결 레코드 형식으로 감사 로그로 보냅니다.
감사 레코드를 일반 리소스 레코드 형식으로 감사 로그로 보냅니다.
감사 레코드를 TCP/IP 레코드 형식으로 감사 로그로 보냅니다.
감사 레코드를 로그인 이벤트 레코드 형식으로 감사 로그로 보냅니다.
감사 레코드를 종료 레코드 형식으로 감사 로그로 보냅니다.
감사 레코드를 시작 레코드 형식으로 감사 로그로 보냅니다.
UNIX에만 해당
감사 레코드를 사용자 레코드 형식으로 감사 로그로 보냅니다.
감사 레코드를 Watchdog 레코드 형식으로 감사 로그로 보냅니다.
CA ControlMinder는 감사 정보에 압축 알고리즘을 사용합니다. 따라서 정보를 입력하기 전에 구조를 0으로 초기화해야 합니다. 모든 시스템의 표준 C 라이브러리에서 제공되는 memset 함수를 호출하여 구조를 초기화할 수 있습니다.
이 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.
Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
이벤트 관련 데이터를 포함하는 구조에 대한 포인터입니다.
CA ControlMinder가 지원하는 유효한 결과 코드 중 하나입니다. 유효한 결과 코드의 목록은 selogtype.h 헤더 파일을 참조하십시오.
이 함수는 알림 레코드를 감사 로그로 보냅니다. 이 함수는 seadmapi_SendAuditRecord 함수를 사용합니다. seadmapi_SendAuditRecord 함수를 직접 호출하는 대신 이 함수를 사용하는 것이 좋습니다. 알림 레코드는 관련 사용자에게 이벤트를 알리도록 리소스에 대해 생성됩니다(NOTIFY 속성).
다음은 seadmapi_SendNotificationAudit 함수입니다.
알림 레코드를 관리 레코드 형식으로 감사 로그로 보냅니다.
알림 레코드를 서비스 연결 레코드 형식으로 감사 로그로 보냅니다.
알림 레코드를 일반 리소스 레코드 형식으로 감사 로그로 보냅니다.
알림 레코드를 TCP/IP 레코드 형식으로 감사 로그로 보냅니다.
알림 레코드를 로그인 이벤트 레코드 형식으로 감사 로그로 보냅니다.
알림 레코드를 종료 레코드 형식으로 감사 로그로 보냅니다.
알림 레코드를 시작 레코드 형식으로 감사 로그로 보냅니다.
UNIX에만 해당
알림 레코드를 사용자 레코드 형식으로 감사 로그로 보냅니다.
알림 레코드를 Watchdog 레코드 형식으로 감사 로그로 보냅니다.
CA ControlMinder는 감사 정보에 압축 알고리즘을 사용합니다. 따라서 정보를 입력하기 전에 구조를 0으로 초기화해야 합니다. 모든 시스템의 표준 C 라이브러리에서 제공되는 memset 함수를 호출하여 구조를 초기화할 수 있습니다.
이 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.
Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
이벤트 관련 데이터를 포함하는 구조에 대한 포인터입니다.
CA ControlMinder가 지원하는 유효한 결과 코드 중 하나입니다. 유효한 결과 코드의 목록은 selogtype.h 헤더 파일을 참조하십시오.
이 함수는 Watchdog과 에이전트가 가능한 오류 또는 오작동을 기록하기 위해 역추적 기능을 배치하는 데 사용됩니다. 오류 설명은 오류 로그 파일의 모든 오류 레코드에 공통적으로 사용됩니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_SendErrorLog(SEOS_REQ_ERRORDESCP *rec);
오류 및 역추적 데이터의 설명을 포함하는 구조에 대한 포인터입니다.
이 함수는 프로세스가 감사 수준 및 보안을 제어하는 데 사용됩니다. 프로세스는 이 함수를 호출하여 모든 작업에 대한 감사를 설정하거나 프로세스와 연결된 자격 증명을 삭제할 수 있습니다. flags 매개 변수를 사용하면 프로세스는 이러한 값을 제어할 수 있습니다. flags 매개 변수에는 다음 테이블에 설명된 값이나 해당 값의 bitwise OR 값이 포함될 수 있습니다.
현재 지원되는 플래그는 다음과 같습니다.
ACEE를 제거하고 CA ControlMinder에 정의되지 않은 사용자의 자격 증명을 사용하라는 프로세스의 요청. 새 NULL 자격 증명이 프로세스 및 자식 프로세스에 할당됩니다.
모든 요청을 감사하라는 프로세스 및 자식 프로세스의 요청.
senone 유틸리티가 이 함수를 사용하며, 시스템의 모든 프로세스가 이 함수를 호출할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_ProcessControl(unsigned long flags);
하나 이상의 bitwise 값입니다.
이 함수는 추적 로깅을 제어합니다. 추적 함수는 문제를 진단하고 CA ControlMinder의 동작을 이해하는 데 유용하게 사용됩니다.
모든 함수가 호출 후 추적 상태를 반환합니다. 값 1은 추적이 활성화됨을 의미하고, 0은 추적이 비활성화됨을 의미합니다. 이 함수에 지정된 CurrStatus 매개 변수가 NULL이면 이 함수는 추적의 현재 상태를 채우지 않습니다.
이 함수와 secons 유틸리티의 ‑t 옵션은 동일한 기능을 제공합니다.
이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_consTraceClear(int *CurrStatus); int seadmapi_consTraceDisable(int *CurrStatus); int seadmapi_consTraceEnable(int *CurrStatus); int seadmapi_consTraceGetStatus(int *CurrStatus); int seadmapi_consTraceToggle(int *CurrStatus);
호출 후 추적의 상태입니다.
이 함수는 사용자의 동시 로그인 설정에 대해 작동합니다. 이 함수는 다음 작업을 수행합니다.
사용자는 uid 매개 변수로 식별됩니다.
이 함수와 secons 유틸리티의 ‑d 및 ‑u 옵션은 동일한 기능을 제공합니다.
seadmapi_consUidLoginDisable 함수는 지정된 사용자 ID에 대한 동시 로그인을 비활성화합니다. seadmapi_consUidLoginEnable 함수는 지정된 사용자 ID에 대한 동시 로그인을 다시 활성화합니다.
seadmapi_consUidLoginGetStatus 함수는 권한 부여 데몬이 제공한 대로 사용자의 동시 로그인 설정 상태를 검색합니다.
이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_consUidLoginDisable(int uid); int seadmapi_consUidLoginEnable(int uid); int seadmapi_consUidLoginGetStatus(int uid, nt *CurrStatus);
함수가 작동할 대상 사용자 ID입니다.
사용자 동시 로그인 설정의 현재 상태입니다.
이 함수는 사용자가 시스템에 로그인할 수 있는지 여부를 제어합니다. 로그인이 비활성화되어 있으면 CA ControlMinder가 실행 중인 동안 사용자가 시스템에 로그인할 수 없습니다.
이 함수와 secons ‑L 옵션은 동일한 기능을 제공합니다.
이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_consAllLoginDisable(void); int seadmapi_consAllLoginEnable(void); int seadmapi_consAllLoginGetStatus(int *CurrStatus);
시스템 수준 로그인 비활성화 플래그의 현재 상태입니다.
이 함수는 커널 런타임 테이블에서 IP 주소 확인을 위해 호스트 이름을 새로 고칩니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
참고: 이 함수는 ADMIN 특성이 있는 사용자만 호출할 수 있습니다.
int seadmapi_ReloadIni(unsigned int* puiNumberOfRefreshedResources);
함수가 성공적으로 완료된 경우 새로 고친 리소스의 수를 포함합니다.
이 함수는 seosd에 대한 런타임 통계를 검색합니다. 이 정보는 secons 유틸리티를 사용하여 볼 수 있습니다. 검색된 정보는 rtsStat 매개 변수가 가리키는 구조에 포함됩니다. 구조에 포함되는 정보는 다음과 같습니다.
거부된 TCP/IP 요청의 수입니다.
허용된 TCP/IP 요청의 수입니다.
오류로 인해 확인하지 못한 TCP/IP 요청의 수입니다.
큐에 있는 기록되지 않은 감사 레코드의 수입니다.
큐에 있는 기록되지 않은 오류 레코드의 수입니다.
마지막으로 사용된 개체 ID입니다.
마지막으로 사용된 속성 ID입니다.
마지막으로 사용된 클래스 ID입니다.
데이터베이스의 클래스 수입니다.
데이터베이스의 속성 수입니다.
데이터베이스의 개체(레코드) 수입니다.
속성‑값 데이터베이스의 레코드 수입니다.
현재 사용되는 ACEE 항목의 수입니다.
보호되는 클라이언트의 수입니다. 이 필드는 나중에 사용하기 위해 예약되어 있습니다.
캐시에 로드된 트러스트된 프로그램의 수입니다.
트러스트되지 않은 것으로 표시된 캐시 내의 프로그램 수입니다.
이 함수와 secons 유틸리티의 ‑i 옵션은 동일한 정보를 제공합니다.
이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_consRunTimeStatisticsGet SEADMAPI_RTSTAT *rtsStat);
설명한 것과 같이 런타임 통계를 포함하는 구조입니다.
이 함수는 CA ControlMinder 추적 기능에 메시지를 보냅니다.
이 함수와 secons 유틸리티의 ‑m 옵션은 동일한 기능을 제공합니다.
모든 프로세스가 이 함수를 호출할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_consMessageSend(const char *szMessage);
추적 로그에 포함할 메시지 문자열입니다.
이 함수는 CA ControlMinder가 CA ControlMinder 기본 구성에 포함되는 세 개의 데몬, 즉 seosd, seoswd 및 seagent(에이전트라고도 함)를 종료하고 비활성화하도록 합니다. CA ControlMinder UNIX 데몬(Windows 서비스)을 종료한 후 커널 확장은 로드된 상태로 유지되지만 seosd가 다시 실행될 때까지는 활성 상태가 아닙니다. 따라서 CA ControlMinder가 제공하는 모든 보호 기능이 비활성화됩니다.
UNIX에서 CA ControlMinder를 구성하는 serevu, selogrd 및 selogrcd 등의 다른 데몬은 이 함수의 영향을 받지 않습니다. 이러한 함수는 명시적으로 중지할 수 있습니다.
seadmapi_consShutdown 함수와 secons 유틸리티의 ‑s 옵션은 동일한 기능을 제공합니다.
이 함수는 ADMIN 또는 OPERATOR 특성이 있는 사용자만 호출할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_consShutdown(void);
이 함수는 seosd 데몬의 구성 토큰을 다시 로드합니다. 이러한 토큰은 seos.ini 파일에 있습니다. 데몬이 실제로 사용하는 것은 새로 다시 로드된 토큰의 일부뿐입니다.
이 함수는 ADMIN 또는 OPERATOR 특성이 있는 사용자만 호출할 수 있습니다.
이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.
int seadmapi_ReloadIni(void);
sepass_ReplacePassword 함수는 사용자 암호를 새 암호로 바꿉니다.
사용자가 로컬로 정의되고 domainCode 인수에 SEPASS_API_DOMAIN_PMD가 제공되지 않은 경우 sepass_ReplacePassword는 로컬 UNIX 파일에 있는 사용자의 암호를 바꿉니다.
다음과 같은 경우에 암호를 바꿀 수 있습니다.
int sepass_ReplacePassword (char *userName,
char *oldPasswd,
char *newPasswd,
char *szPmd,
char* szMsg,
int msgLen,
int domainCodes,
int debug,
int ignoreRules,
int keep_grace,
int do_as_user,
int onlySeOS,
int ChangeGrace);
암호를 바꿀 해당 사용자의 이름을 포함하는 NULL 종결 문자열입니다.
지정된 사용자 또는 해당 함수를 호출하는 관리자의 현재(이전) 암호를 포함하는 NULL 종결 문자열입니다.
원하는 새 암호를 포함하는 NULL 종결 문자열입니다.
암호 모델(있는 경우)을 변경할 정책 모델의 이름을 포함하는 NULL 종결 문자열입니다.
성공 또는 실패 메시지가 저장될 버퍼에 대한 포인터입니다.
메시지 버퍼의 크기입니다.
다음 값 중 하나입니다.
출력해야 하는 자세한 설명을 나타내는 플래그입니다.
이 인수는 다음 세 값 중 하나를 가질 수 있습니다.
암호를 바꾼 후 사용자에 대한 유예 특성을 다시 설정합니다.
관리자가 아니라 지정된 사용자의 자격으로 암호를 변경합니다.
이 인수는 다음 두 값 중 하나를 가질 수 있습니다.
1 - CA ControlMinder 환경에서만 암호를 변경합니다.
0 - UNIX 환경과 CA ControlMinder 환경에서 암호를 변경합니다.
사용자의 로그인 유예 기간을 지정된 기간(일)으로 설정합니다.
-1 => 기본값(1)을 사용합니다.
데이터베이스의 각 속성마다 고유한 데이터 형식이 있습니다. 데이터베이스에 정의된 데이터 형식 중 일부는 문자열 또는 정수 값과 같은 간단한 형식이고, 일부는 몇 개의 필드를 포함하는 구조 형식입니다.
다음 단원에서는 주요 데이터 구조 및 데이터 형식에 대해 설명합니다.
CA ControlMinder가 데이터베이스에 정의 및 저장하는 각 데이터 형식에는 다음 명명 규칙을 사용하여 정의된 심볼 상수가 있습니다.
SEOSDB_PTYPE_Access_Control_data_type
예를 들어 SEOS_OID 형식에는 SEOSDB_PTYPE_OID라는 심볼 상수가 있습니다.
ASCII‑Z 문자열. 문자열의 최대 길이에 따라 결정되는 속성 크기입니다.
데이터베이스에 있는 개체 ID입니다.
날짜 및 시간. 형식은 time_t입니다.
1, 2 또는 4 바이트의 정수. 이 속성 크기는 실제 형식을 결정합니다.
1, 2 또는 4 바이트의 부호 없는 정수. 이 속성 크기는 실제 형식을 결정합니다.
사용자가 ADMIN인지, AUDITOR인지 등을 나타내는 사용자 모드입니다. 이 값은 정수 비트 필드에 저장됩니다.
그룹에 대한 사용자의 연결 정보입니다.
허용되는 액세스 유형입니다. 액세스는 32 비트 필드 값입니다.
ACL 항목입니다.
프로그램의 조건부 ACL 항목입니다.
사용자 계정에 대한 감사 트리거입니다. 비트 필드 값입니다.
리소스 액세스에 대한 날짜 및 시간 제한입니다.
파일 특징의 트러스트된 프로그램 정보입니다.
호스트 및 기타 인터넷 클래스에 대한 ACL 항목입니다.
리소스에 대한 감사 트리거입니다. 16 비트 필드 값입니다.
부울 값을 나타내는 부호 없는 문자입니다.
IP 주소에 대한 마스크와 일치 값의 조합입니다.
TCP/IP 서비스 범위의 ACL 항목입니다.
이러한 구조의 각 데이터 구성원에 저장되는 정보와 값은 seostypes.h 파일에 나와 있습니다. 일부 경우에 구조는 단일 값이거나 각각 동일한 값을 갖는 항목의 목록일 수 있습니다. 예를 들어 ACL은 0개 이상의 ACL 항목으로 구성된 목록입니다. 사용자가 연결된 그룹의 목록은 SEOS_GCONN 구조의 목록입니다. 후자의 경우는 엔터티가 서로 다른 엔터티를 가리키는 경우를 나타내기도 합니다. 사용자 개체에는 해당 사용자가 연결된 그룹의 목록이 있습니다. 그룹에는 해당 그룹에 연결된 사용자의 목록이 있습니다.
참고: 모든 클래스의 각 속성에 대한 자세한 내용은 selang 참조 안내서를 참조하십시오.
다음 목록에서는 관리 API 함수의 데이터베이스 구조와 데이터 형식에 대해 간단히 설명합니다.
지정된 ACEE에 대한 정보를 포함합니다.
런타임 통계를 포함합니다.
유예 로그인 정보를 포함합니다.
액세스 플래그의 목록을 포함합니다.
ACL 목록을 포함합니다.
클래스 식별 설명자를 포함합니다.
사용자가 연결된 그룹과 각 그룹에서 사용자가 갖는 특성(있는 경우)의 목록을 포함합니다.
개체 식별 설명자를 포함합니다.
속성 식별 설명자를 포함합니다.
SEOS_ACL보다 많은 정보가 있는 ACL 목록을 포함합니다.
SEOS_GCONN과 유사하지만 보다 많은 정보를 포함합니다.
확장된 개체 식별 설명자를 포함합니다.
확장된 PACL 목록을 포함합니다.
데이터베이스의 특정 클래스에 대한 정의를 포함합니다.
데이터베이스의 속성에 대한 정보를 포함합니다.
데이터베이스의 특정 개체에 대한 정의를 포함합니다.
데이터베이스의 특정 속성에 대한 정의를 포함합니다.
CA ControlMinder는 압축된 이진 파일을 사용하여 감사 및 오류 로그 레코드를 저장합니다. 이 로그 파일은 각 레코드에 대한 고정 부분과 가변 길이 부분으로 구성됩니다. 고정 부분에는 레코드 제출 시간과 같이 일반적으로 사용되는 데이터와 가변 길이 부분의 크기 및 유형이 포함됩니다. CA ControlMinder는 여러 감사 레코드에 대한 몇 가지 구조를 정의합니다. 현재 버전의 CA ControlMinder는 다음과 같은 감사 레코드를 제공합니다.
다음 구조는 관리 API와 LogRoute API 모두에 사용됩니다.
CA ControlMinder 업데이트 및 언어 파서 인터페이스 요청
CA ControlMinder 데몬 및 서비스 종료 이벤트
일반 리소스 감사 이벤트
CA ControlMinder TCP/IP 이벤트 감사 정보
로그인 이벤트 및 암호 이벤트 감사 레코드
CA ControlMinder 데몬 및 서비스 시작 이벤트
감사 대상 사용자에 대한 추적 레코드
트러스트된 프로그램을 언트러스트된 것으로 설정하기 위한 Watchdog 감사 레코드
CA ControlMinder 오류 역추적 정보
이러한 모든 구조는 헤더 파일 selogtype.h에 정의되어 있습니다.
CLIENT_ACEE 구조는 지정된 ACEE에 대한 정보를 포함합니다. 필드는 다음과 같습니다.
ACEE의 핸들입니다.
그룹 연결의 수입니다.
그룹 연결 배열입니다.
범주 수입니다.
범주 이름의 배열입니다.
보안 레이블입니다.
사용자의 이름입니다.
사용자의 감사 모드입니다.
사용자의 보안 수준입니다.
원본 터미널입니다.
ACEE의 프로세스 수입니다.
사용자의 모드입니다.
ACEE의 생성 시간입니다.
SEADMAPI_RTSTAT 구조는 seadmapi_consRunTimeStatisticsGet 함수에서 검색된 정보를 포함합니다.
필드는 다음과 같습니다.
거부된 inet 요청의 수입니다.
허용된 inet 요청의 수입니다.
오류가 있는 inet 요청의 수입니다.
감사 로그 큐 길이입니다.
오류 로그 큐 길이입니다.
데이터베이스에 있는 사용 가능한 첫 번째 개체 ID입니다.
데이터베이스에 있는 사용 가능한 첫 번째 속성 ID입니다.
데이터베이스에 있는 사용 가능한 첫 번째 클래스 ID입니다.
데이터베이스의 클래스 수입니다.
데이터베이스의 속성 수입니다.
데이터베이스의 개체 수입니다.
데이터베이스의 속성 값 수입니다.
현재 시스템에 있는 ACEE 핸들의 수입니다.
보호되는 클라이언트의 수입니다.
현재 데이터베이스에 있는 트러스트된 프로그램의 수입니다.
현재 데이터베이스에 있는 언트러스트된 프로그램의 수입니다.
SEGRACE_RES 구조는 seadmapi_GetGraceInfo 함수에 의해 검색된 정보를 포함합니다.
필드는 다음과 같습니다.
구조에 포함된 정보의 유형을 나타내는 정수입니다. 값은 다음과 같습니다.
표시할 수 있는 데이터가 없습니다.
사용자에게 남은 유예 기간(일)이나 사용자 암호가 만료될 때까지의 기간(일) 등에 대한 경고를 사용자에게 표시합니다.
사용자 암호가 만료되었으므로 지금 암호를 바꿔야 합니다.
사용자에게 표시되는 메시지입니다.
사용자의 마지막 로그인에 대한 정보를 포함하는 메시지입니다.
사용자에게 남은 유예 로그인 횟수입니다.
사용자가 암호를 바꿔야 하는 남은 기간(일)입니다.
조회 대상 사용자의 이름입니다.
SEOS_ACL 구조는 접근자에게 허용된 액세스 권한을 설명합니다.
필드는 다음과 같습니다.
접근자의 개체 ID입니다.
리소스에 대한 접근자의 액세스 수준입니다.
SEOS_GCONN 구조는 사용자가 연결된 그룹과 해당 그룹에서 사용자가 갖는 특성(있는 경우)의 목록을 포함합니다.
필드는 다음과 같습니다.
그룹의 개체 ID입니다.
연결의 소유자입니다.
연결이 설정된 날짜 및 시간입니다.
그룹에서의 사용자 특성입니다.
SEOS_PACL 구조는 조건부 ACL의 목록을 포함합니다.
필드는 다음과 같습니다.
접근자의 개체 ID입니다.
트러스트된 프로그램의 개체 ID입니다.
리소스에 대한 접근자의 액세스 수준입니다.
SEOS_REQ_ERRORDESCP 구조는 감사 로그로 보내진 정보를 포함합니다.
필드는 다음과 같습니다.
오류 레코드를 보낸 모듈의 번호입니다.
오류 코드입니다.
오류 레코드를 보낸 모듈의 이름입니다.
오류의 소스 파일입니다.
오류가 감지된 단계입니다.
오류의 심각도입니다.
SEOS_X_ACL 구조는 SEOS_ACL 구조의 확장된 버전입니다.
필드는 다음과 같습니다.
접근자의 개체 ID입니다.
리소스에 대한 접근자의 액세스 수준입니다.
접근자가 속한 클래스입니다.
접근자의 이름입니다.
SEOS_X_GCONN 구조는 SEOS_GCONN 구조의 확장된 버전입니다.
필드는 다음과 같습니다.
그룹의 개체 ID입니다.
연결의 소유자입니다.
연결이 설정된 날짜 및 시간입니다.
그룹에서의 사용자 특성입니다.
그룹의 이름입니다.
작성자의 이름입니다.
SEOS_X_PACL 구조는 SEOS_PACL 구조의 확장된 버전입니다.
필드는 다음과 같습니다.
접근자의 개체 ID입니다.
트러스트된 프로그램의 개체 ID입니다.
리소스에 대한 접근자의 액세스 수준입니다.
클래스 이름입니다.
개체 이름입니다.
액세스를 허용하는 데 사용된 프로그램의 이름입니다.
SEOSDB_CDF 구조는 데이터베이스의 특정 클래스에 대한 정의를 포함합니다.
필드는 다음과 같습니다.
클래스의 ID입니다.
클래스의 이름입니다.
클래스의 플래그입니다.
나중에 사용하기 위해 예약되어 있습니다.
나중에 사용하기 위해 예약되어 있습니다.
나중에 사용하기 위해 예약되어 있습니다.
SEOSDB_ENTDAT 구조는 seadmapi_GetEntity and seadmapi_GetExEntity 함수에 의해 반환된 정보를 포함합니다.
필드는 다음과 같습니다.
속성 이름입니다.
개체 클래스의 클래스 ID입니다.
개체의 속성 ID입니다.
속성의 플래그입니다.
속성의 크기입니다.
나중에 사용하기 위해 예약되어 있습니다.
나중에 사용하기 위해 예약되어 있습니다.
나중에 사용하기 위해 예약되어 있습니다.
pPVList의 값 수입니다.
값 목록입니다.
오류 코드입니다(함수가 요청된 데이터를 반환하지 못한 경우).
SEOS_X_OID 데이터 형식은 SEOS_OID 데이터 형식의 확장된 버전입니다.
필드는 다음과 같습니다.
레코드의 개체 ID를 부호 없는 long 정수로 나타냅니다.
개체의 클래스입니다.
개체의 이름입니다.
|
Copyright © 2013 CA.
All rights reserved.
|
|