//File: SecurityAdmin.idl
//Part of the Security Service

#ifndef _SECURITY_ADMIN_IDL
#define _SECURITY_ADMIN_IDL

// omniORB specific pragmas to insert extra includes into the stub header.
#pragma hh #include "COS_sysdep.h"

#include <SecurityLevel2.idl>

#pragma prefix "omg.org"

module SecurityAdmin {

    // interface AccessPolicy
    interface AccessPolicy : CORBA::Policy {
        Security::RightsList get_effective_rights (
            in   Security::AttributeList     attrib_list,
            in   Security::ExtensibleFamily  rights_family
        );
    };

    // interface DomainAccessPolicy
    interface DomainAccessPolicy : AccessPolicy {

        void grant_rights(
            in   Security::SecAttribute      priv_attr,
            in   Security::DelegationState   del_state,
            in   Security::ExtensibleFamily  rights_family,
            in   Security::RightsList        rights
        );

        void revoke_rights(
            in   Security::SecAttribute      priv_attr,
            in   Security::DelegationState   del_state,
            in   Security::ExtensibleFamily  rights_family,
            in   Security::RightsList        rights
        );

        void replace_rights (
            in   Security::SecAttribute      priv_attr,
            in   Security::DelegationState   del_state,
            in   Security::ExtensibleFamily  rights_family,
            in   Security::RightsList        rights
        );

        Security::RightsList get_rights (
            in   Security::SecAttribute      priv_attr,
            in   Security::DelegationState   del_state,
            in   Security::ExtensibleFamily  rights_family
        );
    };

    // interface AuditPolicy
    interface AuditPolicy : CORBA::Policy {

        void set_audit_selectors (
            in   CORBA::InterfaceDef          object_type,
            in   Security::AuditEventTypeList events,
            in   Security::SelectorValueList  selectors 
        );

        void clear_audit_selectors (
            in   CORBA::InterfaceDef          object_type,
            in   Security::AuditEventTypeList events         
        );

        void replace_audit_selectors (
            in   CORBA::InterfaceDef          object_type,
            in   Security::AuditEventTypeList events,
            in   Security::SelectorValueList  selectors 
        ); 

        Security::SelectorValueList get_audit_selectors (
            in   CORBA::InterfaceDef           object_type,
            in   Security::AuditEventTypeList  events
        ); 

        void set_audit_channel (
            in   Security::AuditChannelId      audit_channel_id
        );
    };

    // interface SecureInvocationPolicy
    interface SecureInvocationPolicy : CORBA::Policy {

        void set_association_options(
            in   CORBA::InterfaceDef              object_type,
            in   Security::RequiresSupports       requires_supports,
            in   Security::CommunicationDirection direction,
            in   Security::AssociationOptions     options 
        );

        Security::AssociationOptions get_association_options(
            in   CORBA::InterfaceDef              object_type,
            in   Security::RequiresSupports       requires_supports,
            in   Security::CommunicationDirection direction
        ); 
    };

    // interface DelegationPolicy
    interface DelegationPolicy : CORBA::Policy {

        void set_delegation_mode(
            in   CORBA::InterfaceDef          object_type,
            in   Security::DelegationMode     mode
        );

        Security::DelegationMode get_delegation_mode(
            in   CORBA::InterfaceDef          object_type
        );
    };
};

#endif /* _SECURITY_ADMIN_IDL */
