이전 항목: 프로그래밍 지침다음 항목: IR API


데이터베이스 조직 - @@@ 끝까지 검토

데이터베이스의 정보는 클래스로 구성됩니다. 클래스의 정의에는 해당 클래스의 모든 레코드 또는 개체에 일반적인 정보가 포함됩니다. 동일한 클래스에 속하는 레코드는 의미가 유사합니다. 예를 들어 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 참조 안내서를 참조하십시오.

데이터베이스 레이아웃

데이터베이스는 다음과 같은 데이터 파일로 구성됩니다.

seos_cdf.dat

클래스 정의 테이블이 포함된 클래스 설명 파일입니다.

seos_odf.dat

레코드 정의 테이블이 포함된 개체 설명 파일입니다.

seos_pdf.dat

속성 정의 테이블이 포함된 속성 설명 파일입니다.

seos_pvf.dat

모든 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 항목

ACL(액세스 제어 목록)은 리소스 레코드에 있는 0개 이상의 항목으로 구성된 목록입니다. ACL의 각 항목은 데이터베이스의 접근자 개체가 리소스에 대해 갖는 액세스 권한을 정의합니다. 각 ACL 항목은 다음 요소로 구성됩니다.

이 항목은 리소스 레코드가 나타내는 리소스에 대해 접근자가 수행할 수 있는 작업을 결정합니다.

CA ControlMinder는 일반 ACL과 유사하며 조건부 ACL이라고도 하는 PACL(프로그램 액세스 제어 목록)도 제공합니다. PACL 항목을 구성하는 요소로는 접근자의 레코드 ID와 접근자의 권한 수준 외에도 프로그램 레코드 ID가 포함됩니다.

규칙에 따라 CA ControlMinder는 어떤 개체에도 개체 ID 0을 할당하지 않습니다. ACL과 PACL에서 개체 ID 0은 CA ControlMinder의 정의된 모든 사용자(*)를 나타냅니다.

참고: ACL에 대한 자세한 내용은 selang 참조 안내서의 권한 부여 명령 부분을 참조하십시오.

ACEE 이해

CA ControlMinder는 각 사용자가 시스템에 로그인할 때 사용자에게 ACEE(Accessor Environment Element)를 할당합니다. ACEE는 사용자의 자격 증명과 다양한 보안 매개 변수의 정의를 포함하는 데이터 구조입니다. 로그인 프로세스에 의해 생성된 모든 프로세스는 부모 프로세스의 ACEE를 상속합니다. ACEE는 프로세스가 시스템의 su 유틸리티나 sesu 유틸리티를 실행하여 사용자를 대체하는 경우에도 유지됩니다.

각 ACEE에는 모든 시점에서 프로세스 자격 증명과 기타 정보를 고유하게 식별하는 핸들이 있습니다. ACEE와 관련 핸들은 해당 항목을 생성한 로그인 세션이 종료될 때까지 존재합니다.

관리 API와 모든 CA ControlMinder 권한 부여 프로세스는 ACEE 핸들을 사용하여 요청하는 사용자를 식별하고 설명합니다.

관리 API에는 사용자의 ACEE 또는 ACEE 핸들을 가져오는 함수가 포함되어 있습니다. UNIX에서는 이러한 함수로 가져온 정보를 sewhoami 유틸리티에서 적절한 옵션을 사용하여 볼 수 있습니다.

참고: sewhoami 유틸리티에 대한 자세한 내용은 참조 안내서를 참조하십시오.

API의 범위 제한

관리 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와 함께 사용해야 하는 라이브러리에 대해 설명합니다.

UNIX

seadmapi는 단일 라이브러리 파일인 seadmapi.a로 구성되며 이 파일은 이 API를 사용하는 모든 컴파일된 소스 파일과 연결해야 합니다.

CA ControlMinder에는 libseadmapi.xx라는 이 API의 공유 라이브러리 버전이 포함되어 있습니다. 여기서 xx는 공유 라이브러리 이름에 대한 표준 운영 체제 규칙(일반적으로 so 또는 sl)입니다. sample_TermOwn.c와 같은 공유 라이브러리를 사용하는 프로그램을 실행하기 전에 환경 변수가 공유 라이브러리의 경로를 가리키는지 확인하십시오. 환경이 공유 경로를 가리키도록 하려면 다음을 입력하십시오.

setenv LD_LIBRARY_PATH /opt/CA/AccessControl/lib
Windows

seadmapi 함수를 사용하여 프로그램을 컴파일하고 연결하려면 링크 경로에 정적 라이브러리 seadmapi.lib를 포함해야 합니다. 이 라이브러리는 일반적으로 ACDir\lib에 있습니다. 여기서 ACDir는 CA ControlMinder를 설치한 디렉터리(기본값: C:\Program Files\CA\Access Control)입니다.

이 라이브러리를 사용하는 프로그램을 실행하기 전에 환경 변수가 이 라이브러리의 경로를 가리키는지 확인하십시오.

seadmapi를 사용하여 컴파일 및 연결

seadmapi를 사용하여 컴파일하는 데는 특별한 플래그가 필요하지 않습니다. 반면 연결 작업에는 추가 설정이 필요할 수 있습니다. 이러한 플래그는 컴퓨터 및 운영 체제에 따라 다릅니다. 이 API의 샘플과 함께 제공되는 메이크파일을 사용하고 해당 샘플에서 최신 정보를 확인하십시오.

프로그래밍 참고 사항

중요! 교착 상태를 방지하려면 seosd exit 내부에서 어떠한 관리 API 함수도 사용하지 마십시오.

이 API가 제공하는 모든 함수는 스레드로부터 안전합니다. 스레드로부터 안전하지 않은 함수의 경우에는 함수의 참고 부분에 해당 내용이 언급됩니다.

참고: seadmapi 라이브러리에서 다른 함수를 호출하려면 먼저 seadmapi_init 또는 seadmapi_IsSeOSSyscallLoaded 함수를 호출해야 합니다.

함수

관리 API에 포함된 함수는 다음과 같이 분류됩니다.

클래스 작업 함수

다음 함수는 CA ControlMinder 클래스에 대해 작동합니다.

seadmapi_ClassGetEqual

데이터베이스에서 특정 클래스를 검색합니다.

seadmapi_ClassGetFirst

데이터베이스에서 첫 번째 클래스를 검색합니다.

seadmapi_ClassGetNext

데이터베이스에서 다음 클래스를 검색합니다.

속성 작업

다음 함수는 속성에 대해 작동합니다.

seadmapi_PropGetEqual

특정 속성에 대한 설명을 검색합니다.

seadmapi_PropGetFirstInClass

클래스의 첫 번째 속성 설명을 검색합니다.

seadmapi_PropGetNextInClass

클래스의 다음 속성 설명을 검색합니다.

개체 작업

다음 함수는 개체에 대해 작동합니다.

seadmapi_FreeObjList

ObjInClassList로 검색한 개체의 목록을 해제합니다.

seadmapi_ObjGetEqual

특정 개체에 대한 정보를 검색합니다.

seadmapi_ObjGetFirstInClass

클래스의 첫 번째 개체에 대한 정보를 검색합니다.

seadmapi_ObjGetGreaterEqual

개체 ID가 지정된 개체 ID보다 크거나 같은 개체에 대한 정보를 검색합니다.

seadmapi_ObjGetNextInClass

클래스의 다음 개체에 대한 정보를 검색합니다.

seadmapi_ObjInClassList

지정된 클래스의 개체 목록을 검색합니다.

값 작업

다음 함수는 값에 대해 작동합니다.

seadmapi_FetchListPropVal

목록 유형 속성의 값을 가져옵니다.

seadmapi_FetchSinglePropVal

단일 값 속성의 값을 가져옵니다.

seadmapi_FreeListPropVal

FetchListPropVal로 가져온 값 목록을 해제합니다.

seadmapi_SetSinglePropVal

단일 속성 값 유형의 값을 설정합니다.

쿼리 작업

다음 함수는 쿼리를 수행합니다.

seadmapi_GetEntity

이전에 초기화된 엔터티 규칙을 사용하여 전체 개체 및 해당 속성 값을 검색합니다.

seadmapi_GetExEntity

이전에 초기화된 엔터티 규칙을 사용하여 개체 및 클래스 이름을 포함한 전체 개체 및 해당 속성 값을 검색합니다.

seadmapi_GetGraceInfo

사용자에 대한 유예 정보를 검색합니다.

seadmapi_InitEntityRuler

GetEntity 및 GetExEntity 작업에 사용되는 엔터티 쿼리 버퍼를 초기화합니다.

seadmapi_KillExEntityMem

InitEntityRuler 함수에 의해 엔터티 스타일 쿼리에 할당된 메모리를 해제합니다.

seadmapi_KillPDFList

MakePDFList 함수에 의해 할당된 속성 설명자의 목록을 해제합니다.

seadmapi_MakePDFList

속성 이름 목록을 사용하여 속성 설명자 목록을 생성합니다.

seadmapi_OidToName

개체 ID를 개체 이름으로 변환합니다.

로그 파일 인터페이스

다음 함수는 로그 파일에 대해 작동합니다.

seadmapi_SendAdminAudit

ADMIN 감사 레코드를 제출합니다.

seadmapi_SendAuditRecord

감사 레코드를 제출하기 위한 인터페이스를 제공합니다.

seadmapi_SendCwsAudit

서비스 연결 리소스 감사 레코드를 제출합니다.

seadmapi_SendErrorLog

오류 로그에 대한 기록을 제출합니다.

seadmapi_SendGenrAudit

일반 리소스 감사 레코드를 제출합니다.

seadmapi_SendInetAudit

TCP/IP 감사 레코드를 제출합니다.

seadmapi_SendLoginAudit

로그인 감사 레코드를 제출합니다.

seadmapi_SendShutdownAudit

종료에 대한 감사 레코드를 제출합니다.

seadmapi_SendStartupAudit

시작에 대한 감사 레코드를 제출합니다.

seadmapi_SendUserAudit

사용자 감사 레코드를 제출합니다.

seadmapi_SendWatchdogAudit

watchdog 감사 레코드를 제출합니다.

seadmapi_SendNfAdminAudit

ADMIN 알림 레코드를 제출합니다.

seadmapi_SendNfCwsAudit

서비스 연결 리소스 알림 레코드를 제출합니다.

seadmapi_SendNfGenrAudit

일반 리소스 알림 레코드를 제출합니다.

seadmapi_SendNfInetAudit

TCP/IP 알림 레코드를 제출합니다.

seadmapi_SendNfLoginAudit

로그인 알림 레코드를 제출합니다.

seadmapi_SendNfShutdownAudit

종료에 대한 알림 레코드를 제출합니다.

seadmapi_SendNfStartupAudit

시작에 대한 알림 레코드를 제출합니다.

seadmapi_SendNfUserAudit

사용자 알림 레코드를 제출합니다.

seadmapi_SendNfWatchdogAudit

watchdog 알림 레코드를 제출합니다.

콘솔 작업

다음 함수는 콘솔 작업을 제공합니다.

seadmapi_consAllLoginDisable

시스템에 대한 모든 로그인을 비활성화합니다.

seadmapi_consAllLoginEnable

시스템에 대한 모든 로그인을 활성화합니다.

seadmapi_consAllLoginGetStatus

전역 로그인 제어의 상태를 가져옵니다.

seadmapi_consMessageSend

CA ControlMinder 추적 기능으로 메시지를 보냅니다.

seadmapi_consRefreshIPAddresses

IP 주소 확인을 위해 호스트 이름을 새로 고칩니다.

seadmapi_consRunTimeStatisticsGet

런타임 통계 정보를 가져옵니다.

seadmapi_consShutdown

CA ControlMinder를 종료합니다.

seadmapi_consTraceClear

추적 파일을 지웁니다.

seadmapi_consTraceDisable

CA ControlMinder 추적을 비활성화합니다.

seadmapi_consTraceEnable

CA ControlMinder 추적을 활성화합니다.

seadmapi_consTraceGetStatus

CA ControlMinder 추적의 상태를 반환합니다.

seadmapi_consTraceToggle

CA ControlMinder 추적을 전환합니다.

seadmapi_consUidLoginDisable

사용자 ID의 로그인을 비활성화합니다.

seadmapi_consUidLoginEnable

사용자 ID의 로그인을 활성화합니다.

seadmapi_consUidLoginGetStatus

UID 동시 로그인 상태를 가져옵니다.

기타 작업

다음 함수는 앞의 어떤 범주에도 해당되지 않는 기능을 수행합니다.

seadmapi_FreeAceeMemory

seadmapi_GetACEE 함수에 의해 할당된 메모리를 해제합니다.

seadmapi_GetACEE

현재 프로세스 사용자의 ACEE를 검색합니다.

seadmapi_GetMessage

CA ControlMinder 메시지 파일을 사용하여 지정된 오류 코드에서 오류 문자열을 검색합니다.

seadmapi_GetObjType

현재 프로세스의 사용자 유형에 대한 정보를 검색합니다.

seadmapi_init

CA ControlMinder와의 통신 채널을 초기화합니다.

seadmapi_IsSeOSSyscallLoaded

CA ControlMinder 시스템 호출이 로드되었는지 확인합니다.

seadmapi_ProcessControl

현재 프로세스에 대한 제어 기능을 제공합니다.

seadmapi_WhoAmI

현재 프로세스에 대한 정보를 검색합니다.

seadmapi_WhoIs

사용자에 대한 특성 정보를 검색합니다.

sepass_ReplacePassword

사용자 암호를 새 암호로 바꿉니다.

seadmapi_ClassGet 함수

이 함수는 데이터베이스에 정의된 클래스에 대한 정보를 검색합니다.

데이터베이스의 모든 클래스를 검색하려면 먼저 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);
szClass

관련 정보를 검색할 클래스의 이름입니다. cid 매개 변수에 클래스 ID를 지정할 경우에는 이 매개 변수를 NULL로 설정하십시오.

cid

관련 정보를 검색할 클래스의 클래스 ID입니다. szClass 매개 변수에 클래스 이름을 지정할 경우에는 이 매개 변수를 ‑1로 설정하십시오.

p_seclass

이 함수로 검색된 정보를 포함할 구조에 대한 포인터입니다. 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_PropGet 함수

이 함수는 데이터베이스에 정의된 하나 이상의 속성에 대한 정보를 검색합니다.

특정 클래스의 모든 속성을 검색하려면 먼저 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);
szClass

클래스 이름입니다. 클래스 이름 대신 클래스 설명을 지정하려면 이 매개 변수를 NULL로 설정하십시오.

p_seclass

클래스 설명입니다. 클래스 설명 대신 클래스 이름을 지정하려면 이 매개 변수를 NULL로 설정하십시오. 이 매개 변수가 NULL일 경우 szClass는 NULL이 아니어야 합니다.

szProp

속성 이름입니다. 속성 이름 대신 속성 ID를 지정하려면 이 매개 변수를 NULL로 설정하십시오.

pid

속성 ID입니다. 속성 ID 대신 속성 이름을 지정하려면 이 매개 변수를 ‑1로 설정하십시오.

p_seprop

이 함수로 검색된 정보를 포함할 데이터 구조에 대한 포인터입니다.

예제

다음 예제에서는 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_ObjGet 함수

이 함수는 데이터베이스의 개체(레코드)에 대한 정보를 검색합니다.

이러한 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.

Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.

seadmapi_ObjGetGreaterEqual 함수는 다음 값 중 하나를 반환합니다.

0

이 함수가 지정된 개체와 같은 개체 ID를 갖는 개체에 대한 정보를 검색했습니다.

1

이 함수가 지정된 개체보다 큰 개체 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);
szClass

개체가 속한 클래스의 이름을 지정합니다. p_seclass 매개 변수를 사용하여 클래스를 지정할 경우에는 이 매개 변수를 NULL로 설정하십시오.

p_seclass

클래스 설명자를 포함하는 구조에 대한 포인터입니다. szClass 매개 변수를 지정할 경우에는 이 매개 변수를 NULL로 설정하십시오.

szObj

값을 가져올 해당 개체의 이름입니다. 개체 이름 대신 개체 ID를 지정할 경우에는 이 매개 변수를 NULL로 설정하십시오.

oid

관련 정보를 검색할 개체의 개체 ID입니다. 개체 ID 대신 개체 이름을 지정할 경우에는 이 매개 변수를 ‑2로 설정하십시오.

p_seobj

이 함수로 검색된 정보를 포함할 구조에 대한 포인터입니다.

예제

다음 예제에서는 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_ObjInClassList 함수

seadmapi_ObjInClassList 함수는 지정된 클래스의 개체 목록을 검색합니다.

SEADMAPI_MAXOBJSLIST 필드는 한 번 호출하여 검색할 수 있는 항목 수에 대한 제한을 지정합니다.

이 함수를 호출한 후에는 seadmapi_FreeObjList 함수를 호출하여 쿼리에 할당된 메모리를 해제해야 합니다. 이 함수에서 반환된 ptr 인수를 사용하십시오.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_ObjInClassList (SEOSDB_CDF  *pcdf,     
                    char        *start,     
                    void        **ptr,     
                    char        **names,     
                    int         *count);
pcdf

클래스 설명에 대한 포인터입니다.

start

목록의 처음에 오는 개체 이름을 나타내는 문자열입니다.

ptr

목록 쿼리에 할당된 메모리를 해제하는 데 사용되는 "void *"에 대한 포인터입니다.

names

문자 포인터의 벡터에 대한 포인터입니다. 각 요소는 개체 이름을 가리킵니다.

count

입력 값일 경우 벡터의 크기입니다. 반환 값일 경우 벡터의 항목 수입니다.

seadmapi_FreeObjList 함수

seadmapi_FreeObjList 함수는 seadmapi_ObjInClassList 함수가 할당한 메모리를 해제합니다.

이 함수는 *ptr에 NULL을 할당합니다.

반환 값은 없습니다.

int seadmapi_FreeObjList (void **ptr);
ptr

가장 최근에 seadmapi_ObjInClassList 함수를 호출하여 얻은 포인터입니다.

추가 정보:

seadmapi_ObjInClassList 함수

seadmapi_FetchListPropVal 함수

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);
szClass

개체가 속한 클래스의 이름을 지정합니다. p_seclass 매개 변수를 사용하여 클래스를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.

p_seclass

클래스 설명을 포함하는 구조에 대한 포인터입니다. szClass 매개 변수를 사용하여 클래스를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.

szObj

속성 값을 가져올 해당 레코드의 이름입니다. p_seobj 매개 변수를 사용하여 개체를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.

p_seobj

개체 설명을 포함하는 구조에 대한 포인터입니다. szObj 매개 변수를 사용하여 개체를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.

szProp

값을 가져올 해당 속성의 이름입니다. p_seprop 매개 변수를 사용하여 속성을 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.

p_seprop

속성 설명을 포함하는 구조에 대한 포인터입니다. szProp 매개 변수를 사용하여 속성을 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.

val

가져온 값 유형의 3중 포인터(포인터에 대한 포인터에 대한 포인터)입니다. 자세한 내용은 이 목록 다음에 나오는 설명을 참조하십시오.

psize

가져온 값의 크기입니다.

count

할당된 벡터에 있는 요소의 수입니다.

예제

다음 예제에서는 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_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);
szClass

개체가 속한 클래스의 이름을 지정합니다. p_seclass 매개 변수를 사용하여 클래스를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.

p_seclass

클래스 설명을 포함하는 구조에 대한 포인터입니다. szClass 매개 변수를 사용하여 클래스를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.

szObj

속성 값을 가져올 해당 레코드의 이름입니다. p_seobj 매개 변수를 사용하여 레코드를 식별할 경우에는 이 매개 변수를 NULL로 설정하십시오.

p_seobj

개체 설명을 포함하는 구조에 대한 포인터입니다. szObj 매개 변수를 사용하여 개체를 식별할 경우에는 이 변수를 NULL로 설정하십시오.

szProp

가져올 속성의 이름입니다. p_seprop 매개 변수를 사용하여 속성을 식별할 경우에는 이 변수를 NULL로 설정하십시오.

p_seprop

속성 설명을 포함하는 구조에 대한 포인터입니다. sz_Prop 매개 변수를 사용하여 속성을 식별할 경우에는 이 변수를 NULL로 설정하십시오.

val

결과를 저장할 메모리 내의 위치에 대한 포인터입니다.

size

입력 값일 경우 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_FreeListPropVal 함수는 seadmapi_FetchListPropVal 함수를 사용하여 목록 값을 가져오고 해당 값에 대해 할당된 메모리를 해제한 후에 사용해야 합니다. 이 함수에 제공된 매개 변수는 seadmapi_FetchListPropVal 함수에 제공된 매개 변수와 동일해야 합니다.

모든 프로세스가 이 함수를 호출할 수 있습니다.

반환 값은 없습니다.

void seadmapi_FreeListPropVal(void ***list, unsigned int *count);    
list

seadmapi_FetchListPropVal 함수가 할당한 벡터에 대한 포인터입니다.

count

할당된 벡터에 있는 요소의 수에 대한 포인터입니다.

추가 정보:

seadmapi_FetchListPropVal 함수

seadmapi_SetSinglePropVal 함수

seadmapi_SetSinglePropVal 함수는 단일 값 속성의 값을 설정합니다. 이 함수는 Watchdog 및 에이전트가 사용합니다. 데이터베이스가 손상되는 것을 방지하기 위해 다른 프로세스는 이 함수를 사용할 수 없습니다.

seadmapi_SetSinglePropVal 함수는 Watchdog 및 에이전트만 사용할 수 있습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_SetSinglePropVal(const char *szClass,     
const char *szObj,     
const char *szProp,     
void       *val,     
int        size);
szClass

레코드가 속한 클래스의 이름입니다.

szObj

속성을 설정할 해당 레코드의 이름입니다.

szProp

값을 설정할 해당 속성의 이름입니다.

val

속성에 할당할 값입니다.

size

값의 크기(바이트)입니다.

seadmapi_MakePDFList 함수

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);
szClass

클래스 이름입니다.

ppPdf

속성 벡터를 포함하는 할당된 메모리 영역을 가리키는 SEOSDB_PDF 포인터에 대한 포인터입니다.

nCount

벡터에 있는 속성의 수입니다.

seadmapi_Entity 함수

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);    
szCName

클래스 이름입니다.

szOName

개체 이름입니다.

podf

개체 설명으로 채울 메모리 영역에 대한 포인터입니다.

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;     
}

seadmapi_GetGraceInfo 함수

이 함수는 사용자의 암호, 마지막 로그인 날짜 및 사용자에게 남아 있는 유예 로그인 횟수에 대한 정보를 검색합니다.

이 함수는 ADMIN 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.

모든 사용자가 직접 이 함수를 실행할 수 있습니다.

int seadmapi_GetGraceInfo(SEGRACE_RES *p_sgr);    
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;
}

seadmapi_OidToName 함수

이 함수를 사용하면 개체 ID를 개체 이름을 포함하는 문자열로 손쉽게 변환할 수 있습니다. 개체가 데이터베이스에 없는 경우, 예를 들어 개체가 삭제된 경우 이 함수가 반환하는 문자열은 NULL입니다.

이 함수가 반환하는 포인터는 이후에 호출할 때 덮어쓰여지는 정적 영역에 대한 포인터입니다. 이로 인해 다중 스레드를 사용할 때 함수가 안전하지 않습니다.

이 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.

Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.

이 함수는 성공 시 개체의 이름을 반환하고, 실패 시 NULL을 반환합니다.

char *seadmapi_OidToName(SEOS_OID oid);    
oid

레코드의 개체 ID입니다.

추가 정보:

seadmapi_ObjGet 함수

seadmapi_WhoAmI 함수

이 함수는 엔진에 현재 프로세스에 대한 정보를 제공합니다. 이 함수가 반환하는 정보는 데이터베이스나 권한 부여 엔진에서 다른 정보를 가져오는 데 사용될 수 있습니다.

이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_WhoAmI(uid_t *uid, int *handle, char *szUName, SEOS_UMODE *objtype);    
uid

현재 프로세스와 연결된 UID입니다. UNIX에서는 getlogin UNIX 함수에 해당하며 이 함수를 사용할 때보다 안전합니다.

handle
현재 프로세스와 연결된 ACEE 핸들입니다. 이 단원의 "참고" 부분을 참조하십시오.
szUName

현재 프로세스와 연결된 사용자 이름입니다.

objtype

데이터베이스에 저장되는 사용자 유형입니다. 이 요소는 사용자에게 할당된 특성을 지정합니다.

예제

다음 예제에서는 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 함수

seadmapi_WhoIs 함수는 지정된 사용자에 대한 정보를 제공합니다. 이 함수는 데이터베이스에서 사용자 유형(특성)을 가져옵니다. szUName 매개 변수가 가리키는 메모리 영역은 255자를 수용할 수 있을 정도로 충분히 커야 합니다.

헤더 파일 seadmapi.h에는 objtype 변수 데이터에 대해 작동하여 사용자에게 특정 특성이 있는지 여부를 확인하는 몇 개의 매크로가 포함되어 있습니다. 이러한 매크로의 일반적인 표기법은 SEOS_UMODE_is_attribute입니다. 시스템의 모든 프로세스가 이 함수를 호출할 수 있습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_WhoIs(char *szUName, SEOS_UMODE *objtype);    
szUName

현재 프로세스와 연결된 사용자 이름입니다.

objtype

데이터베이스에 저장되는 사용자 유형입니다. 이 요소는 사용자에게 할당된 특성을 지정합니다.

seadmapi_ACEE 함수

핸들이 지정된 경우 seadmapi_GetACEE는 관련 ACEE 정보를 검색합니다. 이 함수는 CA ControlMinder에서 현재 사용자에 대해 할당된 모든 ACEE를 검색할 수도 있습니다. 정보는 함수 자체가 할당한 메모리 영역에 로드됩니다. CLIENT_ACEE 구조에 채워지는 정보에는 지정된 ACEE에 대한 모든 자격 증명이 포함됩니다.

이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_GetACEE(int hAcee, CLIENT_ACEE **ppAcee);
void seadmapi_FreeAceeMemory(CLIENT_ACEE **ppAcee);
ppAcee

seadmapi_GetACEE가 할당한 메모리 영역을 가리키는 할당된 포인터에 대한 포인터입니다. seadmapi_FreeAceeMemory 함수는 이 동일한 주소를 받고 할당된 메모리를 해제합니다.

추가 정보:

seadmapi_WhoAmI 함수

seadmapi_GetMessage 함수

이 함수는 메시지 파일에서 오류 설명을 받은 후 버퍼 매개 변수로 가리킨 버퍼에 배치합니다.

시스템의 모든 프로세스가 이 함수를 사용할 수 있습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_GetMessage(int err_code, int size, char *buff);
err_code

CA ControlMinder 함수 중 하나가 반환하는 오류 코드입니다.

size

버퍼의 크기(바이트)입니다. 일반적으로 충분한 버퍼 크기는 2 KB입니다.

buff

오류 설명 텍스트를 포함하는 버퍼에 대한 포인터입니다.

seadmapi_GetObjType 함수

이 함수는 현재 프로세스의 ACEE에 저장된 개체 유형을 검색합니다. 몇 개의 매크로가 이 정보를 사용하여 현재 프로세스가 사용자에 할당할 수 있는 특정 특성(ADMIN, AUDITOR, PWMANAGER 등) 중 하나가 있는 사용자에 속하는지 여부를 확인할 수 있습니다.

헤더 파일 seadmapi.h에는 이 변수 데이터에 대해 작동하여 사용자에게 특정 특성이 있는지 여부를 확인하는 몇 개의 매크로가 포함되어 있습니다. 이러한 매크로의 일반적인 표기법은 SEOS_UMODE_is_attribute입니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_GetObjType(SEOS_UMODE *objtype);    
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;     
}

추가 정보:

seadmapi_WhoAmI 함수

seadmapi_init 함수

이 함수는 CA ControlMinder와의 통신 채널을 초기화합니다.

시스템의 모든 프로세스가 이 함수를 사용할 수 있습니다. Windows 환경에서는 이 함수가 사용되지 않습니다.

seadmapi 라이브러리에서 다른 함수를 호출하려면 먼저 seadmapi_init 또는 seadmapi_IsSeOSSyscallLoaded 함수를 호출해야 합니다. 그러나 두 함수를 모두 사용할 경우 seadmapi_init가 seadmapi_IsSeOSSyscallLoaded 앞에 와야 합니다.

이 함수는 초기화 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다. 이 함수는 정확한 CA ControlMinder 시스템 호출이 컴퓨터에 로드되는지 확인합니다.

int seadmapi_init(void)

seadmapi_IsSeOSSyscallLoaded 함수

이 함수는 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_FetchSinglePropVal 함수

seadmapi_SendAuditRecord 함수

seadmapi_SendAuditRecord 함수는 모든 유형의 감사 정보를 감사 로그에 보냅니다. 이 함수는 이 API와 함께 제공되는 다른 함수가 특정 유형의 감사 로그 레코드를 로그 파일에 제출하는 데 내부적으로 사용합니다. 여러 가지 경우에 이 함수를 손쉽게 사용할 수 있지만 이 함수를 사용하는 대신 각 감사 레코드 유형에 대해 특정 함수를 사용하는 것이 좋습니다.

이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.

Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_SendAuditRecord(int type, int result, void *data);
type

감사 레코드의 유형입니다. 유효한 값의 목록은 selogtype.h 헤더 파일을 참조하십시오.

result

CA ControlMinder가 지원하는 유효한 결과 코드 중 하나입니다. 유효한 값은 selogtype.h 헤더 파일을 참조하십시오.

data

감사 레코드 데이터에 대한 포인터입니다. 이 포인터는 제출할 레코드의 유형에 따라 유효한 데이터를 가리켜야 합니다.

seadmapi_SendAudit 함수

이 함수는 감사 레코드를 감사 로그로 보냅니다. 이 함수는 seadmapi_SendAuditRecord 함수를 사용합니다. seadmapi_SendAuditRecord 함수를 직접 호출하는 대신 이 함수를 사용하는 것이 좋습니다.

다음은 seadmapi_SendAudit 함수입니다.

int seadmapi_SendAdminAudit(SEOS_AUDITADMIN *rec, int result);

감사 레코드를 관리 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendCwsAudit(SEOS_AUDITCWS *rec, int result);

감사 레코드를 서비스 연결 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendGenrAudit(SEOS_AUDITGENR *rec, int result);

감사 레코드를 일반 리소스 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendInetAudit(SEOS_AUDITINWARN *rec, int result);

감사 레코드를 TCP/IP 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendLoginAudit(SEOS_AUDITLOGIN *rec, int result);

감사 레코드를 로그인 이벤트 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendShutdownAudit(SEOS_AUDITDOWN *rec, int result);

감사 레코드를 종료 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendStartupAudit(SEOS_AUDITSTART *rec, int result);

감사 레코드를 시작 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendUserAudit(SEOS_AUDITUSER *rec, int result);

UNIX에만 해당

감사 레코드를 사용자 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendWatchdogAudit(SEOS_AUDITWDWARN *rec, int result);

감사 레코드를 Watchdog 레코드 형식으로 감사 로그로 보냅니다.

CA ControlMinder는 감사 정보에 압축 알고리즘을 사용합니다. 따라서 정보를 입력하기 전에 구조를 0으로 초기화해야 합니다. 모든 시스템의 표준 C 라이브러리에서 제공되는 memset 함수를 호출하여 구조를 초기화할 수 있습니다.

이 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.

Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

rec

이벤트 관련 데이터를 포함하는 구조에 대한 포인터입니다.

result

CA ControlMinder가 지원하는 유효한 결과 코드 중 하나입니다. 유효한 결과 코드의 목록은 selogtype.h 헤더 파일을 참조하십시오.

seadmapi_SendNotificationAudit 함수

이 함수는 알림 레코드를 감사 로그로 보냅니다. 이 함수는 seadmapi_SendAuditRecord 함수를 사용합니다. seadmapi_SendAuditRecord 함수를 직접 호출하는 대신 이 함수를 사용하는 것이 좋습니다. 알림 레코드는 관련 사용자에게 이벤트를 알리도록 리소스에 대해 생성됩니다(NOTIFY 속성).

다음은 seadmapi_SendNotificationAudit 함수입니다.

int seadmapi_SendNfAdminAudit(SEOS_AUDITADMIN *rec, int result);

알림 레코드를 관리 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendNfCwsAudit(SEOS_AUDITCWS *rec, int result);

알림 레코드를 서비스 연결 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendNfGenrAudit(SEOS_AUDITGENR *rec, int result);

알림 레코드를 일반 리소스 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendNfInetAudit(SEOS_AUDITINWARN *rec, int result);

알림 레코드를 TCP/IP 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendNfLoginAudit(SEOS_AUDITLOGIN *rec, int result);

알림 레코드를 로그인 이벤트 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendNfShutdownAudit(SEOS_AUDITDOWN *rec, int result);

알림 레코드를 종료 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendNfStartupAudit(SEOS_AUDITSTART *rec, int result);

알림 레코드를 시작 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendNfUserAudit(SEOS_AUDITUSER *rec, int result);

UNIX에만 해당

알림 레코드를 사용자 레코드 형식으로 감사 로그로 보냅니다.

int seadmapi_SendNfWatchdogAudit(SEOS_AUDITWDWARN *rec, int result);

알림 레코드를 Watchdog 레코드 형식으로 감사 로그로 보냅니다.

CA ControlMinder는 감사 정보에 압축 알고리즘을 사용합니다. 따라서 정보를 입력하기 전에 구조를 0으로 초기화해야 합니다. 모든 시스템의 표준 C 라이브러리에서 제공되는 memset 함수를 호출하여 구조를 초기화할 수 있습니다.

이 함수는 다음 특성이 있는 사용자가 실행하는 프로세스에 의해 호출될 수 있습니다.

Watchdog과 에이전트도 이러한 함수를 사용할 수 있습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

rec

이벤트 관련 데이터를 포함하는 구조에 대한 포인터입니다.

result

CA ControlMinder가 지원하는 유효한 결과 코드 중 하나입니다. 유효한 결과 코드의 목록은 selogtype.h 헤더 파일을 참조하십시오.

seadmapi_SendErrorLog 함수

이 함수는 Watchdog과 에이전트가 가능한 오류 또는 오작동을 기록하기 위해 역추적 기능을 배치하는 데 사용됩니다. 오류 설명은 오류 로그 파일의 모든 오류 레코드에 공통적으로 사용됩니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_SendErrorLog(SEOS_REQ_ERRORDESCP *rec);
rec

오류 및 역추적 데이터의 설명을 포함하는 구조에 대한 포인터입니다.

seadmapi_ProcessControl 함수

이 함수는 프로세스가 감사 수준 및 보안을 제어하는 데 사용됩니다. 프로세스는 이 함수를 호출하여 모든 작업에 대한 감사를 설정하거나 프로세스와 연결된 자격 증명을 삭제할 수 있습니다. flags 매개 변수를 사용하면 프로세스는 이러한 값을 제어할 수 있습니다. flags 매개 변수에는 다음 테이블에 설명된 값이나 해당 값의 bitwise OR 값이 포함될 수 있습니다.

현재 지원되는 플래그는 다음과 같습니다.

SEADMAPI_PROCCNTL_NOACEE

ACEE를 제거하고 CA ControlMinder에 정의되지 않은 사용자의 자격 증명을 사용하라는 프로세스의 요청. 새 NULL 자격 증명이 프로세스 및 자식 프로세스에 할당됩니다.

SEADMAPI_PROCCNTL_LOGALL

모든 요청을 감사하라는 프로세스 및 자식 프로세스의 요청.

senone 유틸리티가 이 함수를 사용하며, 시스템의 모든 프로세스가 이 함수를 호출할 수 있습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_ProcessControl(unsigned long flags);    
flags

하나 이상의 bitwise 값입니다.

seadmapi_consTrace 함수

이 함수는 추적 로깅을 제어합니다. 추적 함수는 문제를 진단하고 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);
CurrStatus

호출 후 추적의 상태입니다.

seadmapi_consUidLogin 함수

이 함수는 사용자의 동시 로그인 설정에 대해 작동합니다. 이 함수는 다음 작업을 수행합니다.

사용자는 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);    
uid

함수가 작동할 대상 사용자 ID입니다.

CurrStatus

사용자 동시 로그인 설정의 현재 상태입니다.

seadmapi_consAllLogin 함수

이 함수는 사용자가 시스템에 로그인할 수 있는지 여부를 제어합니다. 로그인이 비활성화되어 있으면 CA ControlMinder가 실행 중인 동안 사용자가 시스템에 로그인할 수 없습니다.

이 함수와 secons ‑L 옵션은 동일한 기능을 제공합니다.

이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_consAllLoginDisable(void);
int seadmapi_consAllLoginEnable(void);
int seadmapi_consAllLoginGetStatus(int *CurrStatus);
CurrStatus

시스템 수준 로그인 비활성화 플래그의 현재 상태입니다.

seadmapi_consRefreshIPAddresses

이 함수는 커널 런타임 테이블에서 IP 주소 확인을 위해 호스트 이름을 새로 고칩니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

참고: 이 함수는 ADMIN 특성이 있는 사용자만 호출할 수 있습니다.

int seadmapi_ReloadIni(unsigned int* puiNumberOfRefreshedResources);
puiNumberOfRefreshedResources

함수가 성공적으로 완료된 경우 새로 고친 리소스의 수를 포함합니다.

seadmapi_consRunTimeStatisticsGet 함수

이 함수는 seosd에 대한 런타임 통계를 검색합니다. 이 정보는 secons 유틸리티를 사용하여 볼 수 있습니다. 검색된 정보는 rtsStat 매개 변수가 가리키는 구조에 포함됩니다. 구조에 포함되는 정보는 다음과 같습니다.

inet_deny

거부된 TCP/IP 요청의 수입니다.

inet_grant

허용된 TCP/IP 요청의 수입니다.

inet_error

오류로 인해 확인하지 못한 TCP/IP 요청의 수입니다.

audit_log_q

큐에 있는 기록되지 않은 감사 레코드의 수입니다.

error_log_q

큐에 있는 기록되지 않은 오류 레코드의 수입니다.

oidLast

마지막으로 사용된 개체 ID입니다.

pidLast

마지막으로 사용된 속성 ID입니다.

cidLast

마지막으로 사용된 클래스 ID입니다.

classRecCount

데이터베이스의 클래스 수입니다.

propRecCount

데이터베이스의 속성 수입니다.

objRecCount

데이터베이스의 개체(레코드) 수입니다.

pvRecCount

속성‑값 데이터베이스의 레코드 수입니다.

nAceeHandles

현재 사용되는 ACEE 항목의 수입니다.

nClients

보호되는 클라이언트의 수입니다. 이 필드는 나중에 사용하기 위해 예약되어 있습니다.

nTrusted

캐시에 로드된 트러스트된 프로그램의 수입니다.

nUntrusted

트러스트되지 않은 것으로 표시된 캐시 내의 프로그램 수입니다.

이 함수와 secons 유틸리티의 ‑i 옵션은 동일한 정보를 제공합니다.

이 함수와 관련하여 알고 있어야 하는 사항은 다음과 같습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_consRunTimeStatisticsGet SEADMAPI_RTSTAT *rtsStat);    
rtsStat

설명한 것과 같이 런타임 통계를 포함하는 구조입니다.

seadmapi_consMessageSend 함수

이 함수는 CA ControlMinder 추적 기능에 메시지를 보냅니다.

이 함수와 secons 유틸리티의 ‑m 옵션은 동일한 기능을 제공합니다.

모든 프로세스가 이 함수를 호출할 수 있습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_consMessageSend(const char *szMessage);    
szMessage

추적 로그에 포함할 메시지 문자열입니다.

seadmapi_consShutdown 함수

이 함수는 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);

seadmapi_ReloadIni 함수

이 함수는 seosd 데몬의 구성 토큰을 다시 로드합니다. 이러한 토큰은 seos.ini 파일에 있습니다. 데몬이 실제로 사용하는 것은 새로 다시 로드된 토큰의 일부뿐입니다.

이 함수는 ADMIN 또는 OPERATOR 특성이 있는 사용자만 호출할 수 있습니다.

이 함수는 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

int seadmapi_ReloadIni(void);

sepass_ReplacePassword 함수

sepass_ReplacePassword 함수는 사용자 암호를 새 암호로 바꿉니다.

사용자가 로컬로 정의되고 domainCode 인수에 SEPASS_API_DOMAIN_PMD가 제공되지 않은 경우 sepass_ReplacePassword는 로컬 UNIX 파일에 있는 사용자의 암호를 바꿉니다.

다음과 같은 경우에 암호를 바꿀 수 있습니다.

userName

암호를 바꿀 해당 사용자의 이름을 포함하는 NULL 종결 문자열입니다.

oldPasswd

지정된 사용자 또는 해당 함수를 호출하는 관리자의 현재(이전) 암호를 포함하는 NULL 종결 문자열입니다.

newPasswd

원하는 새 암호를 포함하는 NULL 종결 문자열입니다.

szPmd

암호 모델(있는 경우)을 변경할 정책 모델의 이름을 포함하는 NULL 종결 문자열입니다.

szMsg

성공 또는 실패 메시지가 저장될 버퍼에 대한 포인터입니다.

msgLen

메시지 버퍼의 크기입니다.

domainCodes

다음 값 중 하나입니다.

ignoreRules

이 인수는 다음 세 값 중 하나를 가질 수 있습니다.

keep_grace

암호를 바꾼 후 사용자에 대한 유예 특성을 다시 설정합니다.

do_as_user

관리자가 아니라 지정된 사용자의 자격으로 암호를 변경합니다.

onlySeOS

이 인수는 다음 두 값 중 하나를 가질 수 있습니다.

1 - CA ControlMinder 환경에서만 암호를 변경합니다.

0 - UNIX 환경과 CA ControlMinder 환경에서 암호를 변경합니다.

ChangeGrace

사용자의 로그인 유예 기간을 지정된 기간(일)으로 설정합니다.

-1 => 기본값(1)을 사용합니다.

구조 및 데이터 형식: CA ControlMinder 데이터베이스 데이터 구조

데이터베이스의 각 속성마다 고유한 데이터 형식이 있습니다. 데이터베이스에 정의된 데이터 형식 중 일부는 문자열 또는 정수 값과 같은 간단한 형식이고, 일부는 몇 개의 필드를 포함하는 구조 형식입니다.

다음 단원에서는 주요 데이터 구조 및 데이터 형식에 대해 설명합니다.

CA ControlMinder가 데이터베이스에 정의 및 저장하는 각 데이터 형식에는 다음 명명 규칙을 사용하여 정의된 심볼 상수가 있습니다.

SEOSDB_PTYPE_Access_Control_data_type

예를 들어 SEOS_OID 형식에는 SEOSDB_PTYPE_OID라는 심볼 상수가 있습니다.

C 데이터 형식 또는 PTYPE
SEOSDB_PTYPE_STR

ASCII‑Z 문자열. 문자열의 최대 길이에 따라 결정되는 속성 크기입니다.

SEOSDB_PTYPE_OID

데이터베이스에 있는 개체 ID입니다.

SEOSDB_PTYPE_TIME

날짜 및 시간. 형식은 time_t입니다.

SEOSDB_PTYPE_INT

1, 2 또는 4 바이트의 정수. 이 속성 크기는 실제 형식을 결정합니다.

SEOSDB_PTYPE_UINT

1, 2 또는 4 바이트의 부호 없는 정수. 이 속성 크기는 실제 형식을 결정합니다.

SEOSDB_PTYPE_UMODE

사용자가 ADMIN인지, AUDITOR인지 등을 나타내는 사용자 모드입니다. 이 값은 정수 비트 필드에 저장됩니다.

SEOSDB_PTYPE_GCONN

그룹에 대한 사용자의 연결 정보입니다.

SEOSDB_PTYPE_ACCS

허용되는 액세스 유형입니다. 액세스는 32 비트 필드 값입니다.

SEOSDB_PTYPE_ACL

ACL 항목입니다.

SEOSDB_PTYPE_PACL

프로그램의 조건부 ACL 항목입니다.

SEOSDB_PTYPE_UAUDITM

사용자 계정에 대한 감사 트리거입니다. 비트 필드 값입니다.

SEOSDB_PTYPE_DAYTIME

리소스 액세스에 대한 날짜 및 시간 제한입니다.

SEOSDB_PTYPE_TRPINFO

파일 특징의 트러스트된 프로그램 정보입니다.

SEOSDB_PTYPE_INETACL

호스트 및 기타 인터넷 클래스에 대한 ACL 항목입니다.

SEOSDB_PTYPE_RAUDITM

리소스에 대한 감사 트리거입니다. 16 비트 필드 값입니다.

SEOSDB_PTYPE_BOOL

부울 값을 나타내는 부호 없는 문자입니다.

SEOSDB_PTYPE_IPMSKMTCH

IP 주소에 대한 마스크와 일치 값의 조합입니다.

SEOSDB_PTYPE_INSRACL

TCP/IP 서비스 범위의 ACL 항목입니다.

설명

이러한 구조의 각 데이터 구성원에 저장되는 정보와 값은 seostypes.h 파일에 나와 있습니다. 일부 경우에 구조는 단일 값이거나 각각 동일한 값을 갖는 항목의 목록일 수 있습니다. 예를 들어 ACL은 0개 이상의 ACL 항목으로 구성된 목록입니다. 사용자가 연결된 그룹의 목록은 SEOS_GCONN 구조의 목록입니다. 후자의 경우는 엔터티가 서로 다른 엔터티를 가리키는 경우를 나타내기도 합니다. 사용자 개체에는 해당 사용자가 연결된 그룹의 목록이 있습니다. 그룹에는 해당 그룹에 연결된 사용자의 목록이 있습니다.

참고: 모든 클래스의 각 속성에 대한 자세한 내용은 selang 참조 안내서를 참조하십시오.

다음 목록에서는 관리 API 함수의 데이터베이스 구조와 데이터 형식에 대해 간단히 설명합니다.

CLIENT_ACEE

지정된 ACEE에 대한 정보를 포함합니다.

SEADMAPI_RTSTAT

런타임 통계를 포함합니다.

SEGRACE_RES

유예 로그인 정보를 포함합니다.

SEOS_ACCS

액세스 플래그의 목록을 포함합니다.

SEOS_ACL

ACL 목록을 포함합니다.

SEOS_CID

클래스 식별 설명자를 포함합니다.

SEOS_GCONN

사용자가 연결된 그룹과 각 그룹에서 사용자가 갖는 특성(있는 경우)의 목록을 포함합니다.

SEOS_OID

개체 식별 설명자를 포함합니다.

SEOS_PID

속성 식별 설명자를 포함합니다.

SEOS_X_ACL

SEOS_ACL보다 많은 정보가 있는 ACL 목록을 포함합니다.

SEOS_X_GCONN

SEOS_GCONN과 유사하지만 보다 많은 정보를 포함합니다.

SEOS_X_OID

확장된 개체 식별 설명자를 포함합니다.

SEOS_X_PACL

확장된 PACL 목록을 포함합니다.

SEOSDB_CDF

데이터베이스의 특정 클래스에 대한 정의를 포함합니다.

SEOSDB_ENTDAT

데이터베이스의 속성에 대한 정보를 포함합니다.

SEOSDB_ODF

데이터베이스의 특정 개체에 대한 정의를 포함합니다.

SEOSDB_PDF

데이터베이스의 특정 속성에 대한 정의를 포함합니다.

로그 파일 구조

CA ControlMinder는 압축된 이진 파일을 사용하여 감사 및 오류 로그 레코드를 저장합니다. 이 로그 파일은 각 레코드에 대한 고정 부분과 가변 길이 부분으로 구성됩니다. 고정 부분에는 레코드 제출 시간과 같이 일반적으로 사용되는 데이터와 가변 길이 부분의 크기 및 유형이 포함됩니다. CA ControlMinder는 여러 감사 레코드에 대한 몇 가지 구조를 정의합니다. 현재 버전의 CA ControlMinder는 다음과 같은 감사 레코드를 제공합니다.

데이터 구조

다음 구조는 관리 API와 LogRoute API 모두에 사용됩니다.

SEOS_AUDITADMIN

CA ControlMinder 업데이트 및 언어 파서 인터페이스 요청

SEOS_AUDITDOWN

CA ControlMinder 데몬 및 서비스 종료 이벤트

SEOS_AUDITGENR

일반 리소스 감사 이벤트

SEOS_AUDITINWARN

CA ControlMinder TCP/IP 이벤트 감사 정보

SEOS_AUDITLOGIN

로그인 이벤트 및 암호 이벤트 감사 레코드

SEOS_AUDITSTART

CA ControlMinder 데몬 및 서비스 시작 이벤트

SEOS_AUDITUSER

감사 대상 사용자에 대한 추적 레코드

SEOS_AUDITWDWARN

트러스트된 프로그램을 언트러스트된 것으로 설정하기 위한 Watchdog 감사 레코드

SEOS_REQ_ERRORDESCP

CA ControlMinder 오류 역추적 정보

이러한 모든 구조는 헤더 파일 selogtype.h에 정의되어 있습니다.

CLIENT_ACEE 구조

CLIENT_ACEE 구조는 지정된 ACEE에 대한 정보를 포함합니다. 필드는 다음과 같습니다.

long hAcee

ACEE의 핸들입니다.

long nGroups

그룹 연결의 수입니다.

CLIENT_ACEE_GCONN *Groups

그룹 연결 배열입니다.

long nCategories

범주 수입니다.

char *pszCategories

범주 이름의 배열입니다.

char *szSecLabel

보안 레이블입니다.

char *szUsername

사용자의 이름입니다.

SEOS_UAUDIT_MODE AuditMode

사용자의 감사 모드입니다.

unsigned char SecLevel

사용자의 보안 수준입니다.

char *szTerminal

원본 터미널입니다.

int count

ACEE의 프로세스 수입니다.

SEOS_UMODE user_mode

사용자의 모드입니다.

time_t create_time

ACEE의 생성 시간입니다.

SEADMAPI_RTSTAT 구조

SEADMAPI_RTSTAT 구조는 seadmapi_consRunTimeStatisticsGet 함수에서 검색된 정보를 포함합니다.

필드는 다음과 같습니다.

unsigned int inet_deny

거부된 inet 요청의 수입니다.

unsigned int inet_grant

허용된 inet 요청의 수입니다.

unsigned int inet_errors

오류가 있는 inet 요청의 수입니다.

long audit_log_q

감사 로그 큐 길이입니다.

long error_log_q

오류 로그 큐 길이입니다.

SEOS_OID oidLast

데이터베이스에 있는 사용 가능한 첫 번째 개체 ID입니다.

SEOS_PID pidLast

데이터베이스에 있는 사용 가능한 첫 번째 속성 ID입니다.

SEOS_CID cidLast

데이터베이스에 있는 사용 가능한 첫 번째 클래스 ID입니다.

long classRecCount

데이터베이스의 클래스 수입니다.

long propRecCount

데이터베이스의 속성 수입니다.

long objRecCount

데이터베이스의 개체 수입니다.

long pvRecCount

데이터베이스의 속성 값 수입니다.

long nAceeHandles

현재 시스템에 있는 ACEE 핸들의 수입니다.

long nClients

보호되는 클라이언트의 수입니다.

long nTrusted

현재 데이터베이스에 있는 트러스트된 프로그램의 수입니다.

long nUnTrusted

현재 데이터베이스에 있는 언트러스트된 프로그램의 수입니다.

SEGRACE_RES 구조

SEGRACE_RES 구조는 seadmapi_GetGraceInfo 함수에 의해 검색된 정보를 포함합니다.

필드는 다음과 같습니다.

int step

구조에 포함된 정보의 유형을 나타내는 정수입니다. 값은 다음과 같습니다.

SEGRACE_STEP_NONE

표시할 수 있는 데이터가 없습니다.

SEGRACE_STEP_WARN

사용자에게 남은 유예 기간(일)이나 사용자 암호가 만료될 때까지의 기간(일) 등에 대한 경고를 사용자에게 표시합니다.

SEGRACE_STEP_MUST

사용자 암호가 만료되었으므로 지금 암호를 바꿔야 합니다.

char msg[ ]

사용자에게 표시되는 메시지입니다.

char last_log[ ]

사용자의 마지막 로그인에 대한 정보를 포함하는 메시지입니다.

int grace

사용자에게 남은 유예 로그인 횟수입니다.

int days

사용자가 암호를 바꿔야 하는 남은 기간(일)입니다.

char uname[ ]

조회 대상 사용자의 이름입니다.

SEOS_ACL 구조

SEOS_ACL 구조는 접근자에게 허용된 액세스 권한을 설명합니다.

필드는 다음과 같습니다.

SEOS_OID oidAccessor

접근자의 개체 ID입니다.

SEOS_ACCS Accs

리소스에 대한 접근자의 액세스 수준입니다.

추가 정보:

SEOS_ACCS 구조

SEOS_GCONN 구조

SEOS_GCONN 구조는 사용자가 연결된 그룹과 해당 그룹에서 사용자가 갖는 특성(있는 경우)의 목록을 포함합니다.

필드는 다음과 같습니다.

SEOS_OID oidGroup

그룹의 개체 ID입니다.

SEOS_OID oidAuthor

연결의 소유자입니다.

SEOS_TIME tConn

연결이 설정된 날짜 및 시간입니다.

SEOS_UGMODE ugmUserMode

그룹에서의 사용자 특성입니다.

SEOS_PACL 구조

SEOS_PACL 구조는 조건부 ACL의 목록을 포함합니다.

필드는 다음과 같습니다.

SEOS_OID oidAccessor

접근자의 개체 ID입니다.

SEOS_OID oidProg

트러스트된 프로그램의 개체 ID입니다.

SEOS_ACCS Accs

리소스에 대한 접근자의 액세스 수준입니다.

추가 정보:

SEOS_ACCS 구조

SEOS_REQ_ERRORDESCP 구조

SEOS_REQ_ERRORDESCP 구조는 감사 로그로 보내진 정보를 포함합니다.

필드는 다음과 같습니다.

int module

오류 레코드를 보낸 모듈의 번호입니다.

int code

오류 코드입니다.

char name[ ]

오류 레코드를 보낸 모듈의 이름입니다.

char source[ ]

오류의 소스 파일입니다.

int stage

오류가 감지된 단계입니다.

int severity

오류의 심각도입니다.

SEOS_X_ACL 구조

SEOS_X_ACL 구조는 SEOS_ACL 구조의 확장된 버전입니다.

필드는 다음과 같습니다.

SEOS_OID oidAccessor

접근자의 개체 ID입니다.

SEOS_ACCS Accs

리소스에 대한 접근자의 액세스 수준입니다.

char *pAccessorCName

접근자가 속한 클래스입니다.

char *pAccessorOName

접근자의 이름입니다.

추가 정보:

SEOS_ACCS 구조

SEOS_X_GCONN 구조

SEOS_X_GCONN 구조는 SEOS_GCONN 구조의 확장된 버전입니다.

필드는 다음과 같습니다.

SEOS_OID oidGroup

그룹의 개체 ID입니다.

SEOS_OID oidAuthor

연결의 소유자입니다.

SEOS_TIME tConn

연결이 설정된 날짜 및 시간입니다.

SEOS_UGMODE ugmUserMode

그룹에서의 사용자 특성입니다.

char *pGName

그룹의 이름입니다.

char *pAuName

작성자의 이름입니다.

SEOS_X_PACL 구조

SEOS_X_PACL 구조는 SEOS_PACL 구조의 확장된 버전입니다.

필드는 다음과 같습니다.

SEOS_OID oidAccessor

접근자의 개체 ID입니다.

SEOS_OID oidProg

트러스트된 프로그램의 개체 ID입니다.

SEOS_ACCS Accs

리소스에 대한 접근자의 액세스 수준입니다.

char *pAccessorCName

클래스 이름입니다.

char *pAccessorOName

개체 이름입니다.

char *pProgName

액세스를 허용하는 데 사용된 프로그램의 이름입니다.

추가 정보:

SEOS_ACCS 구조

SEOSDB_CDF 구조

SEOSDB_CDF 구조는 데이터베이스의 특정 클래스에 대한 정의를 포함합니다.

필드는 다음과 같습니다.

SEOS_CID sCId

클래스의 ID입니다.

char szCName[]

클래스의 이름입니다.

unsigned long lCFlags

클래스의 플래그입니다.

unsigned char cCRLevel

나중에 사용하기 위해 예약되어 있습니다.

unsigned char cCWLevel

나중에 사용하기 위해 예약되어 있습니다.

char reserved[]

나중에 사용하기 위해 예약되어 있습니다.

SEOSDB_ENTDAT 구조

SEOSDB_ENTDAT 구조는 seadmapi_GetEntity and seadmapi_GetExEntity 함수에 의해 반환된 정보를 포함합니다.

필드는 다음과 같습니다.

char *szPName

속성 이름입니다.

SEOS_CID sCId

개체 클래스의 클래스 ID입니다.

SEOS_PID sPId

개체의 속성 ID입니다.

unsigned long int lPFlags

속성의 플래그입니다.

unsigned short int sPVSize

속성의 크기입니다.

unsigned char int cPType

나중에 사용하기 위해 예약되어 있습니다.

unsigned char cPRLevel

나중에 사용하기 위해 예약되어 있습니다.

unsigned char cPWLevel

나중에 사용하기 위해 예약되어 있습니다.

unsigned int nPVQty

pPVList의 값 수입니다.

void **pPVList

값 목록입니다.

unsigned int nErrorCode

오류 코드입니다(함수가 요청된 데이터를 반환하지 못한 경우).

SEOS_X_OID 구조

SEOS_X_OID 데이터 형식은 SEOS_OID 데이터 형식의 확장된 버전입니다.

필드는 다음과 같습니다.

SEOS_OID oid

레코드의 개체 ID를 부호 없는 long 정수로 나타냅니다.

char *pCName

개체의 클래스입니다.

char *pOName

개체의 이름입니다.