NAME sec_intro - Application Program Interface to the DCE Security Service DESCRIPTION The Distributed Computing Environment (DCE) Security Service Application Program Interface (API) allows developers to create network services with complete access to all the authentication and authorization capabilities of DCE Security Service and facilities. The transaction of a network service generally consists of a client process requesting some action from a server process. The client may itself be a server, or a user, and the server may also be a client of other servers. Before the targeted server executes the specified action, it must be sure of the client's identity, and it must know whether the client is authorized to request the service. The Security Service API consists of the following sets of Remote Procedure Calls (RPCs) used to communicate with various security- related services and facilities: + rgy - Maintains the network registry of principal identities. + era - Maintains extended registry attributes. + login - Validates a principal's network identity and establish delegated identities. + epa - Extracts privilege attributes from an opaque binding handle. + acl - Implements an Access Control List (ACL) protocol for the authorization of a principal to network access and services. + key - Provides facilities for the maintenance of account keys for daemon principals. + id - Maps file system names to Universal Unique IDs (UUIDs). + pwd_mgmt - Provides facilities for password management. All the calls in this API have names beginning with the sec_ prefix. These are the same calls used by various user-level tools provided as part of the DCE. For example, the sec_create_db tool is written with sec_rgy calls, acl_edit is written with sec_acl calls, and the login program, with which a user logs in to a DCE system, is written using sec_login calls. Most sites will find the user-level tools adequate for their needs, and only must use the Security Service API to customize or replace the functionality of these tools. Though most of the calls in the Security Service API represent RPC transactions, code has been provided on the client side to handle much of the overhead involved with making remote calls. These "stubs" handle binding to the requested security server site, the marshalling of data into whatever form is needed for transmission, and other bookkeeping involved with these remote calls. An application programmer can use the Security Service interfaces as if they were composed of simple C functions. This reference page introduces each of the following APIs: + Registry APIs + Login APIs + Extended Privilege Attributes APIs + Extended Registry Attributes APIs + ACL APIs + Key Management APIs + ID Mapping APIs + Password Management APIs The section for each API is organized as follows: + Synopsis + Data Types + Constants + Files
1 – REGISTRY_API_DATA_TYPES
SYNOPSIS #include <dce/rgybase.h> DATA TYPES The following data types are used in sec_rgy_ calls: sec_rgy_handle_t A pointer to the registry server handle. The registry server is bound to a handle with the sec_rgy_site_open() routine. sec_rgy_bind_auth_info_type_t A enumeration that defines whether or not the binding is authenticated. This data type is used in conjunction with the sec_rgy_bind_auth_info_t data type to set up the authorization method and parameters for a binding. The sec_rgy_bind_auth_info_type_t type consists of the following elements: + sec_rgy_bind_auth_none-The binding is not authenticated. + sec_rgy_bind_auth_dce-The binding uses DCE shared-secret key authentication. sec_rgy_bind_auth_info_t A discriminated union that defines authorization and authentication parameters for a binding. This data type is used in conjunction with the sec_rgy_bind_auth_info_type_t data type to set up the authorization method and parameters for a binding. The sec_rgy_bind_auth_info_t data type consists of the following elements: info_type A sec_rgy_bind_auth_info_type_t data type that specifies whether or not the binding is authenticated. The contents of the union depend on the value of sec_rgy_bind_auth_info_type_t. For unauthenticated bindings (sec_rgy_bind_auth_info_type_t = sec_rgy_bind_auth_none), no parameters are supplied. For authenticated bindings (sec_rgy_bind_auth_info_type_t = sec_rgy_bind_auth_dce), the dce_info structure is supplied. dce_info A structure that consists of the following elements: authn_level An unsigned 32 bit integer indicating the protection level for RPC calls made using the server binding handle. The protection level determines the degree to which authenticated communications between the client and the server are protected by the authentication service specified by authn_svc. If the RPC runtime or the RPC protocol in the bound protocol sequence does not support a specified level, the level is automatically upgraded to the next higher supported level. The possible protection levels are as follows: + rpc_c_protect_level_default - Uses the default protection level for the specified authentication service. The default protection level for DCE shared-secret key authentication is rpc_c_protect_level_pkt_value + rpc_c_protect_level_none - Performs no authentication: tickets are not exchanged, session keys are not established, client PACs or names are not certified, and trans- missions are in the clear. Note that although uncertified PACs should not be trusted, they may be useful for debugging, tracing, and measurement purposes. + rpc_c_protect_level_connect - Authenticates only when the client establishes a rela- tionship with the server. + rpc_c_protect_level_call - Authenticates only at the beginning of each remote procedure call when the server receives the request. This level does not apply to remote procedure calls made over a connection-based protocol sequence (that is, ncacn_ip_tcp). If this level is specified and the binding handle uses a connection-based protocol sequence, the routine uses the rpc_c_protect_level_pkt level instead. + rpc_c_protect_level_pkt - Ensures that all data received is from the expected client. + rpc_c_protect_level_pkt_integ - Ensures and verifies that none of the data trans- ferred between client and server has been modified. This is the highest protection level that is guaranteed to be present in the RPC runtime. + rpc_c_protect_level_pkt_privacy - Authenticates as specified by all of the previous levels and also encrypts each RPC argument value. This is the highest protection level, but is not guaranteed to be present in the RPC runtime. authn_svc Specifies the authentication service to use. The exact level of protection provided by the authentication service is specified by protect_level. The supported authentication services are as follows: + rpc_c_authn_none - No authentication: no tickets are exchanged, no session keys established, client PACs or names are not transmitted, and transmissions are in the clear. Specify rpc_c_authn_none to turn authentication off for remote procedure calls made using this binding. + rpc_c_authn_dce_secret - DCE shared-secret key authentication. + rpc_c_authn_default - Default authentica- tion service. The current default authen- tication service is DCE shared-secret key; therefore, specifying rpc_c_authn_default is equivalent to specifying rpc_c_authn_dce_secret . + rpc_c_authn_dce_public - DCE public key authentication (reserved for future use). authz_svc Specifies the authorization service implemented by the server for the interface. The validity and trustworthiness of authorization data, like any application data, is dependent on the authentication service and protection level specified. The supported authorization services are as follows: + rpc_c_authz_none - Server performs no authorization. This is valid only if authn_svc is set to rpc_c_authn_none, specifying that no authentication is being performed. + rpc_c_authz_name - Server performs authorization based on the client principal name. This value cannot be used if authn_svc is rpc_c_authn_none. + rpc_c_authz_dce - Server performs authorization using the client's DCE Privilege Attribute Certificate (PAC) sent to the server with each remote procedure call made with this binding. Generally, access is checked against DCE Access Control Lists (ACLs). identity A value of type sec_login_handle_t that represents a complete login context. sec_timeval_sec_t A 32-bit integer containing the seconds portion of a UNIX timeval_t, to be used when expressing absolute dates. sec_timeval_t A structure containing the full UNIX time. The structure contains two 32-bit integers that indicate seconds (sec) and microseconds (usec) since 0:00, January 1, 1970. sec_timeval_period_t A 32-bit integer expressing seconds relative to some well-known time. sec_rgy_acct_key_t Specifies how many parts (person, group, organization) of an account login name will be enough to specify a unique abbreviation for that account. sec_rgy_cursor_t A structure providing a pointer into a registry database. This type is used for iterative operations on the registry information. For example, a call to sec_rgy_pgo_get_members() might return the 10 account names following the input sec_rgy_cursor_t position. Upon return, the cursor position will have been updated, so the next call to that routine will return the next 10 names. The components of this structure are not used by application programs. sec_rgy_pname_t A character string of length sec_rgy_pname_t_size. sec_rgy_name_t A character string of length sec_rgy_name_t_size. sec_rgy_login_name_t A structure representing an account login name. It contains three strings of type sec_rgy_name_t: pname The person name for the account. gname The group name for the account. oname The organization name for the account. sec_rgy_member_t A character string of length sec_rgy_name_t_size. LI "sec_rgy_foreign_id_t" The representation of a foreign ID. This structure contains two components: cell A string of type uuid_t representing the UUID of the foreign cell. principal A string of type uuid_t representing the UUID of the principal. sec_rgy_sid_t A structure identifying an account. It contains three fields: person The UUID of the person part of the account. group The UUID of the group part of the account. org The UUID of the organization part of the account. sec_rgy_unix_sid_t A structure identifying an account with UNIX ID numbers. It contains three fields: person The UNIX ID of the person part of the account. group The UNIX ID of the group part of the account. org The UNIX ID of the organization part of the account. sec_rgy_domain_t This 32-bit integer specifies which naming domain a character string refers to: person, group, or organization. sec_rgy_pgo_flags_t A 32-bit bitset containing flags pertaining to registry entries. This type contains the following three flags: sec_rgy_pgo_is_an_alias If set, indicates the registry entry is an alias of another entry. sec_rgy_pgo_is_required If set, the registry item is required and cannot be deleted. An example of a required account is the one for the registry server itself. sec_rgy_pgo_projlist_ok If the accompanying item is a person entry, this flag indicates the person may have concurrent group sets. If the item is a group entry, the flag means this group can appear in a concurrent group set. The flag is undefined for organization items. sec_rgy_pgo_item_t The structure identifying a registry item. It contains five com- ponents: id The UUID of the registry item, in uuid_t form. unix_num A 32-bit integer containing the UNIX ID number of the registry item. quota A 32-bit integer representing the maximum number of user- defined groups the account owner can create. flags A sec_rgy_pgo_flags_t bitset containing information about the entry. fullname A sec_rgy_pname_t character string containing a full name for the registry entry. For a person entry, this field might contain the real name of the account owner. For a group, it might contain a description of the group. This is just a data field, and registry queries cannot search on the fullname entry. sec_rgy_acct_admin_flags_t A 32-bit bitset containing administration flags used as part of the administrator's information for any registry account. The set contains three flags: sec_rgy_acct_admin_valid Specifies that the account is valid for login. sec_rgy_acct_admin_server If set, the account's name can be used as a server name in a ticket-granting ticket. sec_rgy_acct_admin_client If set, the account's name can be used as a client name in a ticket-granting ticket. Note that you can prevent the principal from being authenticated, by turning off both the sec_rgy_acct_admin_server and the sec_rgy_acct_admin_client flags. sec_rgy_acct_auth_flags_t A 32-bit bitset containing account authorization flags used to implement authentication policy as defined by the Kerberos Version 5 protocol. The set contains six flags: sec_rgy_acct_auth_post_dated Allows issuance of post-dated certificates. sec_rgy_acct_auth_forwardable Allows issuance of forwardable certificates. sec_rgy_acct_auth_tgt Allows issuance of certificates based on Ticket-Granting Ticket (TGT) authentication. If this flag is not set, a client requesting a service may have to supply a password directly to the server. sec_rgy_acct_auth_renewable Allows issuance of renewable certificates. sec_rgy_acct_auth_proxiable Allows issuance of proxiable certificates. sec_rgy_acct_auth_dup_session_key Allows issuance of duplicate session keys. sec_rgy_acct_admin_t The portion of a registry account item containing components relevant to administrators. This structure consists of the fields listed below. Note that only expiration_date, good_since_date, flags, and authentication_flags can be modified by an administrator; the remaining fields are set by the Security server. creator This field, in foreign_id_t format, identifies the administrator who created the registry account. creation_date Specifies the creation date of the account, in sec_timeval_sec_t format. last_changer Identifies the last person to change any of the account information, in foreign_id_t format. change_date Specifies the date of the last modification of the account information, in sec_timeval_sec_t format. expiration_date The date after which the account will no longer be valid. In sec_timeval_sec_t format. good_since_date The Kerberos Version 5 TGT revocation date. TGTs issued before this date will not be honored. In sec_timeval_sec_t format. flags Administrative flags in sec_rgy_acct_admin_flags_t format. authentication_flags Authentication flags in sec_rgy_acct_auth_flags_t format. sec_rgy_acct_user_flags_t A 32-bit bitset containing flags controlling user-modifiable information. There is only one flag currently implemented. If sec_rgy_acct_user_passwd_valid is set, it indicates the user pass- word is valid. If it is not set, this flag prompts the user to change the password on the next login attempt. sec_rgy_acct_user_t A structure containing registry account information. The structure consists of the fields listed below. Note that only the gecos, homedir, shell, and flags fields can be modified by the account owner or other authorized useer; the remaining fields are set by the Security server. gecos This is a character string (in sec_rgy_pname_t format) containing information about the account user. It generally consists of everything after the full name in the UNIX gecos format. homedir The login directory for the account user, in sec_rgy_pname_t format. shell The default shell for the account user, in sec_rgy_pname_t format. passwd_version_number An unsigned 32-bit integer, indicating the password version number. This value is used as output only. passwd The UNIX encrypted account password, in sec_rgy_unix_passwd_buf_t format. This value is used as output only. passwd_dtm The date the password was established, in sec_timeval_sec_t format. flags Account user flags, in sec_rgy_acct_user_flags_t format. sec_rgy_plcy_pwd_flags_t A 32-bit bitset containing two flags about password policy: sec_rgy_plcy_pwd_no_spaces If set, will not allow spaces in a password. sec_rgy_plcy_pwd_non_alpha If set, requires at least one nonalphanumeric character in the password. sec_rgy_plcy_t A structure defining aspects of registry account policy. It contains five components: passwd_min_len A 32-bit integer describing the minimum number of characters in the account password. passwd_lifetime The number of seconds after a password's creation until it expires, in sec_timeval_period_t format. passwd_exp_date The expiration date of the account password, in sec_timeval_sec_t format. acct_lifespan The number of seconds after the creation of an account before it expires, in sec_timeval_period_t format. passwd_flags Account password policy flags, in sec_rgy_plcy_pwd_flags_t format. sec_rgy_plcy_auth_t This type describes authentication policy. It is a structure containing two time periods, in sec_timeval_period_t format. One, max_ticket_lifetime, specifies the maximum length of the period during which a Ticket-Granting Ticket (TGT) will be valid. The other, max_renewable_lifetime, specifies the maximum length of time for which such a ticket may be renewed. This authentication policy applies both to the registry as a whole as well as individual accounts. The effective policy for a given account is defined to bethe more restrictive of the site and principal authen- tication policy. sec_rgy_properties_t A structure describing some registry properties. It contains the following: read_version A 32-bit integer describing the earliest version of the secd software that can read this registry. write_version A 32-bit integer describing the version of the secd soft- ware that wrote this registry. minimum_ticket_lifetime The minimum lifetime of an authentication certificate, in sec_timeval_period_t format. default_certificate_lifetime The "normal" lifetime of an an authentication certificate (ticket-granting ticket in Kerberos parlance), in sec_timeval_period_t format. Processes may request authentication certificates with longer lifetimes up to, but not in excess of, the maximum allowable lifetime as determined by the effective policy for the account. low_unix_id_person The lowest UNIX number permissible for a person item in the registry. low_unix_id_group The lowest UNIX number permissible for a group item in the registry. low_unix_id_org The lowest UNIX number permissible for an organization item in the registry. max_unix_id The largest UNIX number permissible for any registry entry. flags Property flags, in sec_rgy_properties_flags_t format. realm The name of the cell, in sec_rgy_name_t form, for which this registry is the authentication service. realm_uuid The UUID of the same cell. sec_rgy_properties_flags_t A 32-bit bitset, containing flags concerning registry properties: sec_rgy_prop_readonly If set (TRUE), indicates that this registry is a query site. sec_rgy_prop_auth_cert_unbound If set (TRUE), the registry server will accept requests from any site. sec_rgy_prop_shadow_passwd If the shadow password flag is set (TRUE), the registry server will not include the account password when responding to a request for the user data from a specified account. This helps minimize the risk of an account password being intercepted while traveling over the network. sec_rgy_prop_embedded_unix_id Indicates that all UUIDs in this registry contain a UNIX number embedded. This implies that the UNIX numbers of objects in the registry cannot be changed, since UUIDs are immutable. sec_rgy_override_t A 32-bit integer used as a flag for registry override mode. Currently, its possible values are the constants sec_rgy_no_override and sec_rgy_override. When this mode is enabled, override data supplied by the node administrator will replace some of the data gotten from the registry for a given person/account under certain conditions. These conditions are as follows: 1. The registry permits the requested overrides to be set for this machine. 2. The override data is intended for person/account at hand. When the mode is "override off," data from the registry is returned to the end user or the application remains untouched. sec_rgy_mode_resolve_t A 32-bit integer used as a flag for resolve mode. Currently, its possible values are the constants sec_rgy_no_resolve_pname and sec_rgy_resolve_pname. When the mode is enabled, pathnames containing leading // (slashes) will be translated into a form understandable by the local machine's NFS. sec_rgy_unix_passwd_buf_t A character array of UNIX password strings. CONSTANTS The following constants are used in sec_rgy_ calls: sec_rgy_default_handle The value of an unbound registry server handle. sec_rgy_acct_key_t Constants The following 32-bit integer constants are used with the sec_rgy_acct_key_t data type: sec_rgy_acct_key_none Invalid key. sec_rgy_acct_key_person The person name alone is enough. sec_rgy_acct_key_group The person and group names are both necessary for the account abbreviation. sec_rgy_acct_key_org The person, group, and organization names are all necessary. sec_rgy_acct_key_last Key values must be less than this constant. sec_rgy_pname_t_size The maximum number of characters in a sec_rgy_pname_t. sec_rgy_name_t_size The maximum number of characters in a sec_rgy_name_t. sec_rgy_domain_t Constants The following 32-bit integer constants are the possible values of the sec_rgy_domain_t data type: sec_rgy_domain_person The name in question refers to a person. sec_rgy_domain_group The name in question refers to a group. sec_rgy_domain_org The name in question refers to an organization. sec_rgy_pgo_flags_t A 32-bit constant equal to a variable of type sec_rgy_pgo_flags_t with no flags set. sec_rgy_quota_unlimited A 32-bit integer. Set the quota field of the sec_rgy_pgo_item_t type to this constant to override the registry quota limitation. sec_rgy_acct_admin_flags_t A 32-bit integer. This is the value of the sec_rgy_acct_admin_flags_t bitset when none of its flags are set. sec_rgy_acct_auth_flags_none A 32-bit integer. This is the value of the sec_rgy_acct_auth_flags_t bitset when none of its flags are set. sec_rgy_acct_user_flags_t A 16-bit integer. This is the value of the sec_rgy_acct_user_flags_t bitset when none of its flags are set. sec_rgy_plcy_pwd_flags_t A 16-bit integer. This is the value of the sec_rgy_policy_pwd_flags_t bitset when none of its flags are set. sec_rgy_properties_flags_t A 16-bit integer. This is the value of the sec_rgy_properties_flags_t bitset when none of its flags are set. sec_rgy_override A 32-bit integer, which turns registry override mode on. When this mode is enabled, override data supplied by the node administrator will replace some of the data gotten from the registry for a given person/account under certain conditions. sec_rgy_no_override A 32-bit integer, which turns off registry override mode. sec_rgy_resolve_pname A 32-bit integer, which turns on registry resolve mode. When the mode is enabled, pathnames containing leading // (slashes) will be translated into a form understandable by the local machine's NFS. sec_rgy_no_resolve_pname A 32-bit integer, which turns off registry resolve mode. FILES SYS$COMMON:[DCE$LIBRARY]RGYBASE.IDL The idl file from which rgybase.h was derived.
2 – EXTENDED_REGISTRY_ATTRIBUTE_DATA_TYPES
SYNOPSIS #include <dce/sec_attr_base.h> DATA TYPES The following data types are used in sec_rgy_attr calls: sec_attr_twr_ref_t A pointer to a tower. This data type is used with the sec_attr_twr_set_t data type to allow a client to pass an unallocated array of towers, which the server must allocate. Both data types are used in conjunction with the sec_attr_bind_type_t data type. sec_attr_twr_set_t A structure that defines an array of towers. This data type is used with the sec_attr_twr_ref_t data type to allow a client to pass an unallocated array of towers, which the server must allocate. Both data types are used in conjunction with the sec_attr_bind_type_t data type. The sec_attr_twr_set_t structure consists of the following elements: count An unsigned 32-bit integer specifying the number of towers in the array. towers[] An array of pointers (of type sec_attr_twr_ref_t) to towers. sec_attr_bind_type_t A 32-bit integer that specifies the type of binding used by an attribute interface. The data type (which is used in conjunction with the sec_attr_binding_t data type) uses the following constants: sec_attr_bind_type_string An RPC string binding. sec_attr_bind_type_twrs A DCE protocol tower representation of a bindings. sec_attr_bind_type_svrname A name in rpc_c_ns_syntax format that identifies a CDS entry containing the server's binding information. This constant has the following structure: name_syntax Must be rpc_c_ns_syntax_dce to specify that DCE naming rules are used to specify name. name A pointer to a name of a CDS entry in rpc_c_ns_syntax_dce syntax. sec_attr_binding_t A discriminated union that supplies information to generate a binding handle for a attribute trigger. This data type, which is used in conjunction with the sec_attr_bind_info_t data type, is composed of the following elements: bind_type A value of type sec_attr_bind_type_t that defines the type of binding used by an attribute interface. The contents of tagged union (below) depend on the value of sec_attr_bind_type_t. tagged_union A tagged union specifying the binding handle. The contents of the tagged union depend on the value of bind_type as follows: If bind_type is... Then tagged_union is... _______________________________________________________________________ sec_attr_bind_type_string A pointer to an unsigned 32-bit character string specifying an attribute's RPC string binding. _______________________________________________________________________ sec_attr_bind type_twrs An attribute's tower binding representation of type sec_attr_twr_set_t. _______________________________________________________________________ sec_attr_bind_svrname A pointer to a name of type sec_attr_bind_type_t that specifies a Cell Directory Service entry containing an attribute trigger's binding information. sec_attr_binding_p_t A pointer to a sec_attr_binding_t union. sec_attr_bind_auth_info_type_t An enumeration that defines whether or not the binding is authenti- cated. This data type is used in conjunction with the sec_attr_bind_auth_info_t data type to set up the authorization method and parameters for an RPC binding. The sec_attr_bind_auth_info_type_t type consists of the following elements: + sec_attr_bind_auth_none-The binding is not authenticated. + sec_attr_bind_auth_dce-The binding uses DCE shared-secret key authentication. sec_attr_bind_auth_info_t A discriminated union that defines authorization and authentication parameters for a binding. This data type is used in conjunction with the sec_attr_bind_auth_info_type_t data type to set up the authorization method and parameters for an RPC binding. The sec_attr_bind_auth_info_t data type consists of the following elements: info_type A sec_attr_bind_auth_info_type_t data type that specifies whether or not the binding is authenticated. The contents of tagged union (below) depend on the value of sec_attr_bind_auth_info_type_t. tagged_union A tagged union specifying the method of authorization and the authorization parameters. For unauthenticated bindings (sec_attr_bind_auth_info_type_t = sec_attr_bind_auth_none) no parameters are supplied. For authenticated bindings (sec_attr_bind_auth_info_type_t = sec_attr_bind_auth_dce), the following union is supplied: svr_princ_name A pointer to a character string that specifies the principal name of the server referenced by the binding handle. protect_level An unsigned 32 bit integer indicating the protection level for RPC calls made using the server binding handle. The protection level determines the degree to which authenticated communications between the client and the server are protected by the authentication service specified by authn_svc. If the RPC runtime or the RPC protocol in the bound protocol sequence does not support a specified level, the level is automatically upgraded to the next higher supported level. The possible protection levels are as follows: + rpc_c_protect_level_default - Uses the default protection level for the specified authentication service. The default protection level for DCE shared-secret key authentication is rpc_c_protect_level_pkt_value + rpc_c_protect_level_none - Performs no authentication: tickets are not exchanged, session keys are not established, client PACs or names are not certified, and transmissions are in the clear. Note that although uncertified PACs should not be trusted, they may be useful for debugging, tracing, and measurement purposes. + rpc_c_protect_level_connect - Authenticates only when the client establishes a relationship with the server. + rpc_c_protect_level_call - Authenticates only at the beginning of each remote procedure call when the server receives the request. This level does not apply to remote procedure calls made over a connection-based protocol sequence (that is, ncacn_ip_tcp). If this level is specified and the binding handle uses a connection-based protocol sequence, the routine uses the rpc_c_protect_level_pkt level instead. + rpc_c_protect_level_pkt - Ensures that all data received is from the expected client. + rpc_c_protect_level_pkt_integ - Ensures and verifies that none of the data trans- ferred between client and server has been modified. This is the highest protection level that is guaranteed to be present in the RPC runtime. + rpc_c_protect_level_pkt_privacy - Authenticates as specified by all of the previous levels and also encrypts each RPC argument value. This is the highest protection level, but is not guaranteed to be present in the RPC runtime. authn_svc Specifies the authentication service to use. The exact level of protection provided by the authentication service is specified by protect_level. The supported authentication services are as follows: + rpc_c_authn_none - No authentication: no tickets are exchanged, no session keys established, client PACs or names are not transmitted, and transmissions are in the clear. Specify rpc_c_authn_none to turn authentication off for remote procedure calls made using this binding. + rpc_c_authn_dce_secret - DCE shared-secret key authentication. + rpc_c_authn_default - Default authentica- tion service. The current default authen- tication service is DCE shared-secret key; therefore, specifying rpc_c_authn_default is equivalent to specifying rpc_c_authn_dce_secret. + rpc_c_authn_dce_public - DCE public key authentication (reserved for future use). authz_svc Specifies the authorization service implemented by the server for the interface. The validity and trustworthiness of authorization data, like any application data, is dependent on the authentication service and protection level specified. The supported authorization services are as follows: + rpc_c_authz_none - Server performs no authorization. This is valid only if authn_svc is set to rpc_c_authn_none, specifying that no authentication is being performed. + rpc_c_authz_name - Server performs authorization based on the client principal name. This value cannot be used if authn_svc is rpc_c_authn_none. + rpc_c_authz_dce - Server performs authorization using the client's DCE Privilege Attribute Certificate (PAC) sent to the server with each remote procedure call made with this binding. Generally, access is checked against DCE Access Control Lists (ACLs). sec_attr_bind_info_t A structure that specifies attribute trigger binding information. This data type, which is used in conjunction with the sec_attr_schema_entry_t data type, contains of the following elements: auth_info The binding authorization information of type sec_attr_bind_auth_info_t. num_bindings An unsigned 32-bit integer specifying the number of binding handles in bindings. bindings An array of sec_attr_binding_t data types that specify binding handles. sec_attr_bind_info_p_t A pointer to a sec_attr_bind_info_t union. sec_attr_encoding_t An enumerator that contains attribute encoding tags used to define the legal encodings for attribute values. The data type, which is used in conjunction with the sec_attr_value_t and sec_attr_schema_entry_t data types, consists of the following elements: sec_attr_enc_any The attribute value can be of any legal encoding type. This encoding tag is legal only in a schema entry. An attribute entry must contain a concrete encoding type. sec_attr_enc_void The attribute has no value. It is simple a marker that is either present or absent. sec_attr_enc_printstring The attribute value is a printable IDL string in DCE Portable Character Set. sec_attr_enc_printstring_array The attribute value is an array of printstrings. sec_attr_enc_integer The attribute value is a signed 32-bit integer. sec_attr_enc_bytes The attribute value is a string of bytes. The string is assumed to be a pickle or some other self describing type. (See also the sec_attr_enc_bytes_t data type.) sec_attr_enc_confidential_bytes The attribute value is a string of bytes that have been encrypted in the key of the principal object to which the attribute is attached. The string is assumed to be a pickle or some other self describing type. This encoding type is useful only when attached to a principal object, where it is decrypted and encrypted each time the principal's password changes. (See also the sec_attr_enc_bytes_t data type.) sec_attr_enc_i18n_data The attribute value is an "internationalized" string of bytes with a tag identifying the OSF registered codeset used to encode the data. (See also the sec_attr_i18n_data_t data type.) sec_attr_enc_uuid The attribute is a value of type uuid_t, a DCE UUID. sec_attr_enc_attr_set The attribute value is an attribute set, a vector of attribute UUIDs used to associate multiple related attribute instances which are members of the set. (See also the sec_attr_enc_attr_set_t data type.) sec_attr_enc_binding The attribute value is a sec_attr_bind_info_t data type that specifies DCE server binding information. sec_attr_enc_trig_binding This encoding type is returned by rs_attr_lookup call. It informs the client agent of the trigger binding informa- tion of an attribute with a query trigger. Unless sec_attr_enc_void or sec_attr_enc_any is specified, the attribute values must conform to the attribute's encoding type. sec_attr_enc_bytes_t A structure that defines the length of attribute encoding values for attributes encoded as sec_attr_enc_bytes and sec_attr_enc_confidential_bytes. The structure, which is used in conjunction with the sec_attr_value_t data type, consists of: An unsigned 32-bit integer that defines the data length. data[] An array of bytes specifying the length of attribute encoding data. sec_attr_i18n_data_t A structure that defines the codeset used for attributes encoded as sec_attr_enc_il8n_data and the length of the attribute encoding values. The structure, which is used in conjunction with the sec_attr_value_t data type, consists of: An unsigned 32-bit identifier of a codeset registered with the Open Software Foundation. An unsigned 32-bit integer that defines the data length. data[] An array of bytes specifying the length of attribute encoding data. sec_attr_enc_attr_set_t A structure that that supplies the UUIDs of each member of an attribute set. The structure, which is used in conjunction with the sec_attr_value_t data type, consists of: num_members An unsigned 32-bit integer specifying the total number of attribute's in the set. members[] An array containing values of type uuid_t, the UUID of each member in the set. sec_attr_enc_printstring_t A structure that contains a printstring. sec_attr_enc_printstring_p_t A pointer to a sec_attr_enc_printstring_t structure. sec_attr_enc_str_array_t A structure that defines a printstring array. It consists of: num_strings An unsigned 32-bit integer specifying the number of strings in the array. strings[] An array of pointers (of type sec_attr_enc_print_string_p_t) to printstrings. sec_attr_value_t A discriminated union that defines attribute values. The union, which is used in conjunction with the sec_attr_t data type, consists of the following elements: attr_encoding A sec_attr_encoding_t data type that defines attribute encoding. The contents of tagged union (below) depend on the value of sec_attr_encoding_t. tagged_union A tagged union whose contents depend on attr_encoding as follows: If attr_encoding is... Then tagged_union is... _______________________________________________________________________ sec_attr_enc_void NULL _______________________________________________________________________ sec_attr_enc_printstring A pointer to printstring _______________________________________________________________________ sec_attr_enc_printstring_array A pointer to an array of printstrings _______________________________________________________________________ sec_attr_enc_integer signed_int, a 32-bit signed integer _______________________________________________________________________ sec_attr_enc_bytes bytes, a pointer to a structure of type sec_attr_enc_bytes_t _______________________________________________________________________ sec_attr_enc_confidential_bytes bytes, a pointer to a structure of type sec_attr_enc_bytes_t _______________________________________________________________________ sec_attr_enc_i18n_data idata, a pointer to a structure of type sec_attr_i18n_data_t _______________________________________________________________________ sec_attr_end_uuid uuid, a value of type uuid_t _______________________________________________________________________ sec_attr_enc_attr_set attr_set, a pointer to a structure of type sec_attr_enc_attr_set_t _______________________________________________________________________ sec_attr_enc_binding binding, a pointer to a structure of type sec_attr_binding_info_t sec_attr_t A structure that defines an attribute. The structure consists of: attr_id A value of type uuid_t, the UUID of the attribute. attr_value A value of type sec_attr_value_t. sec_attr_acl_mgr_info_t A structure that contains the access control information defined in a schema entry for an attribute. The structure, which is used in conjunction with the sec_attr_schema_entry_t data type, consists of the following elements: acl_mgr_type The value of type uuid_t that specifies the UUID of the ACL manager type that supports the object type to which the attribute can be attached. This field provides a well-defined context for evaluating the permission bits needed to operate on the attribute. The following table lists the ACL Manager types for registry objects. Registry Object ACL Manager Type Valid Type Permissions ____________________________________________________________________ principal 06ab9320-0191-11ca-a9e8-08001e039d7d rcDnfmaug ____________________________________________________________________ group 06ab9640-0191-11ca-a9e8-08001e039d7d rctDnfmM ____________________________________________________________________ organization 06ab9960-0191-11ca-a9e8-08001e039d7d rctDnfmM ____________________________________________________________________ directory 06ab9c80-0191-11ca-a9e8-08001e039d7d rcidDn ____________________________________________________________________ policy 06ab8f10-0191-11ca-a9e8-08001e039d7d rcma ____________________________________________________________________ replist 2ac24970-60c3-11cb-b261-08001e039d7d cidmAI query_permset Data of type sec_acl_permset_t that defines the permission bits needed to access the attribute's value. update_permset Data of type sec_acl_permset_t that defines the permission bits needed to update the attribute's value. test_permset Data of type sec_acl_permset_t that defines the permission bits needed to test the attribute's value. delete_permset Data of type sec_acl_permset_t that defines the permission bits needed to delete an attribute instance. sec_attr_acl_mgr_info_p_t A pointer to a sec_attr_acl_mgr_info_t structure. sec_attr_acl_mgr_info_set_t A structure that defines an attribute's ACL manager set. The structure consists of the following elements: num_acl_mgrs An unsigned 32-bit integer that specifies the number of ACL managers in the ACL manager set. mgr_info[] An array of pointers of type sec_attr_mgr_info_p_t that define the ACL manager types in the ACL manager set and the permission sets associated with the ACL manager type. sec_attr_intercell_action_t An enumerator that specifies the action that should be taken by the Privilege Service when it reads acceptable attributes from a foreign cell. A foreign attribute is acceptable only if there is either a schema entry for the foreign cell or if sec_attr_intercell_act_accept is set to true. This enumerator, which is used in conjunction with the sec_attr_schema_entry_t data type, is composed of the following ele- ments: sec_attr_intercell_act_accept If the unique flag in the sec_attr_schema_entry_t data type is not set on, retain the attribute. If the unique flag is set on, retain the attribute only if its value is unique among all attribute instances of the same attribute type within the cell. sec_attr_intercell_act_reject Discard the input attribute. sec_attr_intercell_act_evaluate Use the binding information in the trig_binding field of this sec_attr_schema_entry_t data type to make a sec_attr_trig_query call to a trigger server. That server determines whether to retain the attribute value, discard the attribute value, or map the attribute to another value(s). sec_attr_trig_type_t Specifies the trigger type, a flag that determines whether an attribute trigger should be invoked for query operations. The data type, which is used in conjunction with the sec_attr_schema_entry_t data type, uses the following constants: The attribute trigger server is invoked for query opera- tions. sec_attr_trig_type_query The attribute trigger server is invoked for update opera- tions. sec_attr_schema_entry_t A structure that defines a complete attribute entry for the schema catalog. The entry is identified by both a unique string name and a unique attribute UUID. Although either can either can be used as a retrieval key, the string name should be used for interactive access to the attribute and the UUID for programmatic access. The attribute UUID is used to identify the semantics defined for the attribute type in the schema. The sec_attr_schema_entry_t data type consists of the following ele- ments: attr_name A pointer to the attribute name. attr_id A value of type uuid_t that identifies the attribute type. attr_encoding An enumerator of type sec_attr_encoding_t that specifies the attribute's encoding. acl_mgr_set A structure of type sec_attr_acl_mgr_info_set_t that specifies the ACL manager types that support the objects on which attributes of this type can be created and the permission bits supported by that ACL manager type. schema_entry_flags An unsigned integer of type sec_attr_sch_entry_flags_t that defines bitsets for the following flags: unique When set on, this flag indicates that each instance of this attribute type must have a unique value within the cell for the object type implied by the ACL Manager type. If this flag is not set on, uniqueness checks are not performed for attribute writes. multi_valued When set on, this flag indicates that this attribute type may be multi-valued; in other words, multiple instances of the same attribute type can be attached to a single registry object. If this flag is not set on, only one instance of this attribute type can be attached to an object. reserved When set on, this flag prevents the schema entry from being deleted through any interface or by any user. If this flag is not set on, the entry can be deleted by any authorized principal. use_defaults When set on, the system-defined default attribute value will be returned on a client query if an instance of this attribute does not exist on the queried object. If this flag is not set on, system defaults are not used. intercell_action An enumerator of type sec_attr_intercell_action_t that specifies how the Privilege Service will handle attributes from a foreign cell. trig_types A flag of type sec_attr_trig_type_t that specifies whether whether a trigger can perform update or query operations. trig_binding A pointer to a structure of type sec_attr_bind_info_t that supplies the attribute trigger binding handle. scope A pointer to a string that defines the objects to which the attribute can be attached. comment A pointer to a string that contains general comments about the attribute. sec_attr_schema_entry_parts_t A 32-bit bitset containing flags that specify the schema entry fields that can be modified on a schema entry update operation. This data type contains the following flags: sec_attr_schema_part_name If set, indicates that the attribute name (attr_name) can be changed. sec_attr_schema_part_reserved If set, indicates that the setting of the flag that deter- mines whether or not the schema entry can be deleted (reserved) can be changed. sec_attr_schema_part_defaults If set, indicates that the flag that determines whether or not a query for a non-existent attribute will not result in a search for a system default (apply_default) can be changed. sec_attr_schema_part_trig_bind If set, indicates that the trigger's binding information (trig_binding) can be changed. sec_attr_schema_part_comment If set, indicates whether or not comments associated with the schema entry (comment) can be changed. sec_attr_component_name_t A pointer to a character string used to further specify the object to which the attribute is attached. (Note that this data type is analogous to the sec_acl_component_name_t data type in the ACL interface.) sec_attr_cursor_t A structure that provides a pointer into a registry database and is used for multiple database operations. This cursor must minimally represent the object indicated by xattrschema in the schema interfaces, or component_name in the attribute interfaces. The cursor may additionally represent an entry within that schema or an attribute instance on that component. sec_attr_srch_cursor_t A structure that provides a pointer into a registry database and is used for multiple database operations. The cursor must minimally represent the list of all objects managed by this server that possess the search attributes specified in the sec_attr_srch_cursor_init routine. It may additionally represent a given object within this list as well as attribute instance(s) possessed by that object. sec_attr_trig_cursor_t A structure that provides an attribute trigger cursor for inter- active operations. The structure consists of the following elements: source A value of type uuid_t that provides a UUID to identify the server that initialized the cursor. object_handle A signed 32 bit integer that identifies the object (specified by xattrschema in the schema interface or component_name in the attribute interface) upon which the operation is being performed. entry_handle A signed 32 bit integer that identifies the current entry (schema_entry in the schema interface or attribute instance in the attribute interface) for the operation. valid A boolean field with the following values: + true (1) - Indicates an initialized cursor. + false (0) - Indicates an uninitialized cursor. sec_attr_trig_timeval_sec_t A 32-bit integer containing the seconds portion of a UNIX timeval_t, to be used when expressing absolute dates. FILES SYS$COMMON:[DCE$LIBRARY]SEC_ATTR_BASE.IDL The idl file from which sec_attr_base.h was derived. CONSTANTS The following constants are used in sec_attr calls: sec_attr_bind_auth_dce The binding uses DCE shared-secret key authentication. sec_attr_bind_auth_none The binding is not authenticated. sec_attr_bind_type_string The attribute uses an rpc string binding. sec_attr_bind_type_svrname The attribute uses a name in rpc_c_ns_syntax format that identifies a CDS entry containing the server's binding information. This constant has the following structure: name_syntax Must be rpc_c_ns_syntax_dce to specify that DCE naming rules are used to specify name. name A pointer to a name of a CDS entry in rpc_c_ns_syntax_dce syntax. sec_attr_bind_type_twr The attribute uses a DCE protocol tower binding representation. sec_attr_trig_type_t Constants The following 32-bit constants are used with the sec_attr_trig_type_t data type: sec_attr_trig_type_query The trigger server can perform only query operations. sec_attr_trig_type_update The trigger server can perform only update operations. sec_attr_intercell_action_t Constants The following constants are used with the sec_attr_intercell_action_t data type sec_attr_intercell_act_accept If the unique flag in the sec_attr_schema_entry_t data type is not set on, retain attributes from a foreign cell. If the unique flag is set on, retain the foreign attribute only if its value is unique among all attribute instances of the same attribute type within the cell. sec_attr_intercell_act_reject Discard attributes from a foreign cell. sec_attr_intercell_act_evaluate A trigger server determines whether to retain foreign attributes, discard foreign attributes, or map foreign attribute to another value(s). sec_attr_schema_entry_parts_t Constants The following constants are used with the sec_attr_schema_entry_parts_t data type: sec_attr_schema_part_name Indicates that the attribute name can be changed in an schema update operation. sec_attr_schema_part_reserved Indicates that the setting of the reserved flag can be changed in a schema entry update. sec_attr_schema_part_defaults Indicates that the apply_default flag can be changed in a schema entry update operation. sec_attr_schema_part_trig_bind Indicates that trigger binding information can be changed in a schema entry update operation. sec_attr_schema_part_comment Indicates that comments associated with the schema entry can be changed in a schema entry update.
3 – LOGIN_API_DATA_TYPES
SYNOPSIS #include <dce/sec_login.h> DATA TYPES The following data types are used in sec_login_ calls: sec_login_handle_t This is an opaque pointer to a data structure representing a complete login context. The context includes a principal's network credentials, as well as other account information. The network credentials are also referred to as the principal's "ticket-granting ticket." sec_login_flags_t A 32-bit set of flags describing restrictions on the use of a principal's validated network credentials. Currently, only one flag is implemented, and the set can take on the following two values: sec_login_no_flags No special flags are set. sec_login_credentials_private Restricts the validated network credentials to the current process. If this flag is not set, it is permissible to share credentials with descendents of current process. sec_login_auth_src_t An enumerated set describing how the login context was authorized. The possible values are: sec_login_auth_src_network Authentication accomplished through the normal network authority. A login context authenticated this way will have all the network credentials it ought to have. sec_login_auth_src_local Authentication accomplished via local data. Authentication occurs locally if a principal's account is tailored for the local machine, or if the network authority is unavailable. Since login contexts authenticated locally have no network credentials, they may not be used for network operations. sec_login_auth_src_overridden Authentication accomplished via the override facility. sec_login_passwd_t The sec_login_get_pwent() call will return a pointer to a "password" structure, which depends on the underlying registry structure. In most cases, the structure will look like that supported by Berkeley 4.4BSD and OSF/1, which looks like this: struct passwd { char *pw_name; * user name * char *pw_passwd; * encrypted password * int pw_uid; * user uid * int pw_gid; * user gid * time_t pw_change; * password change time * char *pw_class; * user access class * char *pw_gecos; * Honeywell login info * char *pw_dir; * home directory * char *pw_shell; * default shell * time_t pw_expire; * account expiration * }; sec_passwd_rec_t A structure containing either a plaintext password or a preencrypted buffer of password data. The sec_passwd_rec_t structure consists of three components: version_number The version number of the password. pepper A character string combined with the password before an encryption key is derived from the password. key A structure consists of the following components: key_type The key type can be the following: sec_passwd_plain Indicates that a printable string of data is stored in plain. sec_passwd_des Indicates that an array of data is stored in des_key. tagged_union A structure specifying the password. The value of the structure depends on key_type. If key_type is sec_passwd_plain, structure contains plain, a character string. If key_type is sec_passwd_des, the structure contains des_key, a DES key of type sec_passwd_des_key_t. CONSTANTS The following constants are used in sec_login_ calls: sec_login_default_handle The value of a login context handle before setup or validation. sec_login_flags_t Constants The following two constants are used with the sec_login_flags_t type. sec_login_no_flags No special flags are set. sec_login_credentials_private Restricts the validated network credentials to the current process. If this flag is not set, it is permissible to share credentials with descendents of current process. sec_login_remote_uid Used in the sec_login_passwd_t structure for users from remote cells. sec_login_remote_gid Used in the sec_login_passwd_t structure for users from remote cells. FILES SYS$COMMON:[DCE$LIBRARY]SEC_LOGIN.IDL The idl file from which sec_login.h was derived.
4 – EXTENDED_PRIVILEGE_ATTRIBUTE_API_DATA_TYPES
SYNOPSIS #include <dce/id_epac.h> #include <dce/nbase.h> DATA TYPES The following data types are used in Extended Privilege Attribute calls and in the sec_login_cred calls that implement extended privilege attributes. sec_cred_cursor_t A structure that provides an input/output cursor used to iterate through a set of delegates in the sec_cred_get_delegate() or sec_login_cred_get_delegate() calls. This cursor is initialized by the sec_cred_initialize_cursor() or sec_login_cred_init_cursor() call. sec_cred_attr_cursor_t A structure that provides an input/output cursor used to iterate through a set of extended attributes in the sec_cred_get_extended_attributes() call. This cursor is initialized by the sec_cred_initialize_attr_cursor() call. sec_id_opt_req_t A structure that specifies application-defined optional restrictions. The sec_id_opt_req_t data type is composed of the following elements: restriction_len An unsigned 16-bit integer that defines the size of the restriction data. restrictions A pointer to a byte_t that contains the restriction data. sec_rstr_entry_type_t An enumerator that specifies the entry types for delegate and target restrictions. This data type is used in conjunction with the sec_id_restriction_t data type where the specific UUID(s), if appropriate, are supplied. It consists of the following components: sec_rstr_e_type_user The target is a local principal identified by UUID. This type conforms with the POSIX 1003.6 standard. sec_rstr_e_type_group The target is a local group identified by UUID. This type conforms with the POSIX 1003.6 standard. sec_rstr_e_type_foreign_user The target is a foreign principal identified by principal and cell UUID. sec_rstr_e_type_foreign_group The target is a foreign group identified by group and cell UUID. sec_rstr_e_type_foreign_other The target is any principal that can authenticate to the foreign cell identified by UUID. sec_rstr_e_type_any_other The target is any principal that can authenticate to any cell, but is not identified in any other type entry. sec_rstr_e_type_no_other No pincipal can act as a target or delegate. sec_id_restriction_t A discriminated union that defines delegate and target restrictions. The union, which is used in conjunction with the sec_restriction_set_t data type, consists of the following elements: entry_type A sec_rstr_entry_type_t that defines the ACL entry types for delegate and target restrictions. The value of tagged_union depends on the value of entry_type. tagged_union A tagged union whose contents depend on entry_type as fol- lows: If entry_type is... Then tagged_union is... ________________________________________________________________ sec_rstr_e_type_any_other NULL ________________________________________________________________ sec_rstr_e_type_foreign_other foreign_id that identifies the foreign cell. ________________________________________________________________ sec_rstr_e_type_user id, a sec_id_t that sec_rstr_e_type_group identifies the user or group. ________________________________________________________________ sec_rstr_e_type_foreign_user foreign_id, a sec_id_foreign_t sec_rstr_e_type_foreign_group that identifies the foreign user or group. sec_id_restriction_set_t A structure that that supplies delegate and target restrictions. The structure consists of: num_restrictions A 16-bit unsigned integer that defines the number of restrictions in restrictions. restrictions A pointer to a sec_id_restriction_t that contains the res- trictions. sec_id_compatibility_mode_t A unsigned 16 bit integer that defines the compatibility between current and pre-1.1 servers. The data type uses the following con- stants: sec_id_compat_mode_none Compatibility mode is off. sec_id_compat_mode_initiator Compatibility mode is on. The 1.0 PAC data extracted from the EPAC of the chain initiator. sec_id_compat_mode_caller Compatibility mode is on. The 1.0 PAC data extracted from the last delegate in the delegation chain. sec_id_delegation_type_t An unsigned 16 bit integer that defines the delegation type. The data type uses the following constants: sec_id_deleg_type_none Delegation is not allowed. sec_id_deleg_type_traced Traced delegation is allowed. sec_id_deleg_type_impersonation Simple (impersonation) delegation is allowed. sec_id_pa_t An structure that contains pre-1.1 PAC data extracted from an EPAC of a current version server. This data type, which is used for compatibility with pre-1.1 servers, consists of the following elements: realm A value of type sec_id_t that contains the UUID that identifies the cell in which the principal associated with the PAC exists. principal A value of type sec_id_t that contains the UUID of the principal. group A value of type sec_id_t that contains the UUID of the principal's primary group. num_groups An unsigned 16-bit integer that specifies the number of groups in the principal's groupset. groups An array of pointers to sec_id_ts that contain the UUIDs of the each group in the principal's groupset. num_foreign_groupsets An unsigned 16-bit integer that specifies the number of foreign groups for the principal's groupset. foreign_groupsets An array of pointers to sec_id_ts that contain the UUIDs of the each group in the principal's groupset. sec_id_pac_t An structure that contains a pre-1.1 PAC. This data type, which is used as output of the sec_cred_get_v1_pac call, consists of the following elements: pac_type A value of type sec_id_pac_format_t that can be used to describe the PAC format. authenticated A boolean field that indicates whether or not the PAC is authenticated (obtained from an authenticated source). FALSE indicates that the PAC is not authenticated. No authentication protocol was used in the rpc that trans- mitted the identity of the caller. TRUE indicates that the PAC is authenticated. realm A value of type sec_id_t that contains the UUID that identifies the cell in which the principal associated with the PAC exists. principal A value of type sec_id_t that contains the UUID of the principal. group For local principals, a value of type sec_id_t that contains the UUID of the principal's primary group. num_groups An unsigned 16-bit integer that specifies the number of groups in the principal's groupset. groups An array of pointers to sec_id_ts that contain the UUIDs of the each group in the principal's groupset. num_foreign_groups An unsigned 16-bit integer that specifies the number of foreign groups in the principal's groupset. foreign_groups An array of pointers to sec_id_ts that contain the UUIDs of the each foreign group in the principal's groupset. sec_id_pac_format_t An enumerator that can be used to describe the PAC format. sec_id_t A structure that contains UUIDs for principals, groups, or organiza- tions and an optional printstring name. Since a UUID is an handle for the object's identity, the sec_id_t data type is the basic unit for identifying principals, groups, and organizations. Because the printstring name is dynamically allocated, this datatype requires a destructor function. Generally, however, the sec_id_t is embedded in other data types (ACLs, for example), and these data- types have a destructor function to release the printstring storage. The sec_id_t data type is composed of the following elements: uuid A value of type uuid_t, the UUID of the principal, group, or organization. name A pointer to a character string containing the name of the principal, group, or organization. sec_id_foreign_t A structure that contains UUIDs for principals, groups, or organiza- tions for objects in a foreign cell and the UUID that identifies the foreign cell. The sec_id_foreign_t data type is composed of the following elements: id A value of type sec_id_t that contains the UUIDs of the objects from the foreign cell. realm A value of type sec_id_t that contains the UUID of the foreign cell. sec_id_foreign_groupset_t A structure that contains UUIDs for set of groups in a foreign cell and the UUID that identifies the foreign cell. The sec_id_foreign_groupset_t data type is composed of the following elements: realm A value of type sec_id_t that contain the UUID of the foreign cell. num_groups An unsigned 16-bit integer specifying the number of group UUIDs in groups. groups A printer to a sec_id_t that contains the UUIDs of the groupset from the foreign cell. CONSTANTS The following constants are used in the Extended Privilege Attribute calls and in the the sec_login calls that implement extended privilege attributes: sec_id_compat_mode_none Compatibility mode is off. sec_id_compat_mode_initiator Compatibility mode is on. The 1.0 PAC data extracted from the EPAC of the chain initiator. sec_id_compat_mode_caller Compatibility mode is on. The 1.0 PAC data extracted from the last delegate in the delegation chain. sec_id_deleg_type_none Delegation is not allowed. sec_id_deleg_type_traced Traced delegation is allowed. sec_id_deleg_type_impersonation Simple (impersonation) delegation is allowed. sec_rstr_e_type_user The delegation target is a local principal identified by UUID. This type conforms with the POSIX 1003.6 standard. sec_rstr_e_type_group The delegation target is a local group identified by UUID. This type conforms with the POSIX 1003.6 standard. sec_rstr_e_type_foreign_user The delegation target is a foreign principal identified by principal and cell UUID. sec_rstr_e_type_foreign_group The delegation target is a foreign group identified by group and cell UUID. sec_rstr_e_type_foreign_other The delegation target is any principal that can authenticate to the foreign cell identified by UUID. sec_rstr_e_type_any_other The delegation target is any principal that can authenticate to any cell, but is not identified in any other type entry. sec_rstr_e_type_no_other No principal can act as a target or delegate. FILES SYS$COMMON:[DCE$LIBRARY]SEC_CRED.IDL The idl file from which sec_cred.h was derived. SYS$COMMON:[DCE$LIBRARY]ID_EPAC.IDL The idl file from which id_epac.h was derived. SYS$COMMON:[DCE$LIBRARY]NBASE.IDL The idl file from which nbase.h was derived.
5 – ACL_API_DATA_TYPES
SYNOPSIS #include <dce/aclbase.h> Data Types The following data types are used in sec_acl_ calls: sec_acl_handle_t A pointer to an opaque handle bound to an ACL that is the subject of a test or examination. The handle is bound to the ACL with sec_acl_bind(). An unbound handle has the value sec_acl_default_handle. sec_acl_posix_semantics_t A flag that indicates which, if any, POSIX ACL semantics an ACL manager supports. The following constants are defined for use with the sec_acl_posix_semantics_t data type: sec_acl_posix_no_semantics The manager type does not support POSIX semantics. sec_acl_posix_mask_obj The manager type supports the mask_obj entry type and POSIX 1003.6 Draft 12 ACL mask entry semantics. sec_acl_t This data type is the fundamental type for the ACL manager interfaces. The sec_acl_t type contains a complete access control list, made up of a list of entry fields (type sec_acl_entry_t). The default cell identifies the authentication authority for simple ACL entries (foreign entries identify their own foreign cells). The sec_acl_manager_type identifies the manager to interpret this ACL. The sec_acl_t type is a structure containing the following fields: default_realm A structure of type sec_acl_id_t, this identifies the UUID and (optionally) the name of the default cell. sec_acl_manager_type Contains the UUID of the ACL manager type. num_entries An unsigned 32-bit integer containing the number of ACL entries in this ACL. sec_acl_entries An array containing num_entries pointers to different ACL entries, each of type sec_acl_entry_t. sec_acl_p_t This data type, simply a pointer to a sec_acl_t, is for use with the sec_acl_list_t data type. sec_acl_list_t This data type is a structure containing an unsigned 32-bit integer num_acls that describes the number of ACLs indicated by its companion array of pointers, sec_acls, of type sec_acl_p_t. sec_acl_entry_t The sec_acl_entry_t type is a structure made up of the following components: perms A set of flags of type sec_acl_permset_t that describe the permissions granted for the principals identified by this ACL entry. Note that if a principal matches more than one ACL entry, the effective permissions will be the most restrictive combination of all the entries. entry_info A structure containing two members: entry_type A flag of type sec_acl_entry_type_t, indicating the type of ACL entry. tagged_union A tagged union whose contents depend on the type of the entry. The types of entries indicated by entry_type can be the following: sec_acl_e_type_user_obj The entry contains permissions for the implied user object. This type is described in the POSIX 1003.6 standard. sec_acl_e_type_group_obj The entry contains permissions for the implied group object. This type is described in the POSIX 1003.6 standard. sec_acl_e_type_other_obj The entry contains permissions for principals not otherwise named through user or group entries. This type is described in the POSIX 1003.6 standard. sec_acl_e_type_user The entry contains a key that identifies a user. This type is described in the POSIX 1003.6 standard. sec_acl_e_type_group The entry contains a key that identifies a group. This type is described in the POSIX 1003.6 standard. sec_acl_e_type_mask_obj The entry contains the maximum permissions for all entries other than mask_obj, unauthenticated, user_obj, other_obj. sec_acl_e_type_foreign_user The entry contains a key that identifies a user and the foreign realm. sec_acl_e_type_foreign_group The entry contains a key that identifies a group and the foreign realm. sec_acl_e_type_foreign_other The entry contains a key that identifies a foreign realm. Any user that can authenticate to the foreign realm will be allowed access. sec_acl_e_type_any_other The entry contains permissions to be applied to any accessor who can authenticate to any realm, but is not identified in any other entry (except sec_acl_e_type_unauthenticated). sec_acl_e_type_unauthenticated The entry contains permissions to be applied when the accessor does not pass authentication procedures. A privilege attribute certificate will indicate that the caller's identity is not authenticated. The identity is used to match against the standard entries, but the access rights are masked by this mask. If this mask does not exist in an ACL, the ACL is assumed to grant no access and all unauthenticated access attempts will be denied. Great care should be exercised when allowing unauthenticated access to an object. Almost by definition, unauthenticated access is very easy to spoof. The presence of this mask on an ACL essentially means that anyone can get at least as much access as allowed by the mask. sec_acl_e_type_extended The entry contains additional "pickled" data. This kind of entry cannot be interpreted, but can be used by an out-of-date client when copying an ACL from one manager to another (assuming that the two managers each understand the data). The contents of the tagged union depend on the entry type. For the following entry types, the union contains a UUID and an optional print string (called entry_info.tagged_union.id with type sec_id_t) for an identified local principal, or for an identified foreign realm. + sec_acl_e_type_user + sec_acl_e_type_group + sec_acl_type_foreign_other For the following entry types, the union contains two UUIDs and optional print strings (called entry_info.tagged_union.foreign_id with type sec_id_foreign_t) for an identified foreign principal and its realm. + sec_acl_e_type_foreign_user + sec_acl_e_type_foreign_group For an extended entry (sec_acl_e_type_extended), the union contains entry_info.tagged_union.extended_info, a pointer to an information block of type sec_acl_extend_info_t. sec_acl_permset_t A 32-bit set of permission flags. The flags currently represent the conventional file system permissions (read, write, execute) and the extended DFS permissions (owner, insert, delete). The "unused" flags represent permissions that can only be interpreted by the manager for the object. For example, sec_acl_perm_unused_00000080 may mean to one ACL manager that withdrawals are allowed, and to another ACL manager that rebooting is allowed. The following constants are defined for use with the sec_acl_permset_t data type: sec_acl_perm_read The ACL allows read access to the protected object. sec_acl_perm_write The ACL allows write access to the protected object. sec_acl_perm_execute The ACL allows execute access to the protected object. sec_acl_perm_control The ACL allows the ACL itself to be modified. sec_acl_perm_insert The ACL allows insert access to the protected object. sec_acl_perm_delete The ACL allows delete access to the protected object. sec_acl_perm_test The ACL allows access to the protected object only to the extent of being able to test for existence. The bits from 0x00000080 to 0x80000000 are not used by the conventional ACL permission set. Constants of the form sec_acl_perm_unused_00000080 have been defined so application programs can easily use these bits for extended ACLs. sec_acl_extend_info_t This is an extended information block, provided for future extensibility. Primarily, this allows an out-of-date client to read an ACL from a newer manager and apply it to another (up-to- date) manager. The data cannot be interpreted by the out-of-date client without access to the appropriate "pickling" routines (that presumably are unavailable to such a client). In general, ACL managers should not accept ACLs that contain entries the manager does not understand. The manager clearly cannot perform the security service requested by an uninterpretable entry, and it is considered a security breach to lead a client to believe that the manager is performing a particular class of service if the manager cannot do so. The data structure is made up of the following components: extension_type The UUID of the extension type. format_label The format of the label, in ndr_format_t form. num_bytes An unsigned 32-bit integer indicating the number of bytes containing the "pickled" data. pickled_data The byte array containing the "pickled" data. sec_acl_type_t The sec_acl_type_t type differentiates among the various types of ACLs an object can possess. Most file system objects will only have one ACL controlling the access to that object, but objects that control the creation of other objects (sometimes referred to as "containers") may have more. For example, a directory can have three different ACLs: the directory ACL, controlling access to the directory; the initial object (or default object) ACL, which serves as a mask when creating new objects in the directory; and the initial directory (or default directory) ACL, which serves as a mask when creating new directories (containers). The sec_acl_type_t is an enumerated set containing one of the following values: sec_acl_type_object The ACL refers to the specified object. sec_acl_type_default_object The ACL is to be used when creating objects in the container. sec_acl_type_default_container The ACL is to be used when creating nested containers. The following values are defined but not currently used. They are available for application programs that may create an application- specific ACL definition. sec_acl_type_unspecified_3 sec_acl_type_unspecified_4 sec_acl_type_unspecified_5 sec_acl_type_unspecified_6 sec_acl_type_unspecified_7 sec_acl_printstring_t A sec_acl_printstring_t structure contains a printable representa- tion for a permission in a sec_acl_permset_t permission set. This allows a generic ACL editing tool to be used for application- specific ACLs. The tool need not know the printable representation for each permission bit in a given permission set. The sec_acl_get_printstring() function will query an ACL manager for the print strings of the permissions it supports. The structure consists of three components: printstring A character string of maximum length sec_acl_printstring_len describing the printable representation of a specified permission. helpstring A character string of maximum length sec_acl_printstring_help_len containing some text that may be used to describe the specified permission. permissions A sec_acl_permset_t permission set describing the permissions that will be represented with the specified print string. sec_acl_component_name_t This type is a pointer to a character string, to be used to specify the entity a given ACL is protecting. CONSTANTS The following constants are used in sec_acl_ calls: sec_acl_default_handle The value of an unbound ACL manager handle. sec_rgy_acct_key_t Constants The following 32-bit integer constants are used with the sec_rgy_acct_key_t data type: sec_rgy_acct_key_none Invalid key. sec_rgy_acct_key_person The person name alone is enough. sec_rgy_acct_key_group The person and group names are both necessary for the account abbreviation. sec_rgy_acct_key_org The person, group, and organization names are all necessary. sec_rgy_acct_key_last Key values must be less than this constant. sec_rgy_pname_t_size The maximum number of characters in a sec_rgy_pname_t. sec_acl_permset_t Constants The following constants are defined for use with the sec_acl_permset_t data type: sec_acl_perm_read The ACL allows read access to the protected object. sec_acl_perm_write The ACL allows write access to the protected object. sec_acl_perm_execute The ACL allows execute access to the protected object. sec_acl_perm_owner The ACL allows owner-level access to the protected object. sec_acl_perm_insert The ACL allows insert access to the protected object. sec_acl_perm_delete The ACL allows delete access to the protected object. sec_acl_perm_test The ACL allows access to the protected object only to the extent of being able to test for existence. sec_acl_perm_unused_00000080 - sec_acl_perm_unused_0x80000000 The bits from 0x00000080 to 0x80000000 are not used by the conventional ACL permission set. Constants have been defined so application programs can easily use these bits for extended ACLs. sec_acl_printstring_len The maximum length of the printable representation of an ACL permis- sion. (See sec_acl_printstring_t.) sec_acl_printstring_help_len The maximum length of a help message to be associated with a supported ACL permission. (See sec_acl_printstring_t.) FILES SYS$COMMON:[DCE$LIBRARY]ACLBASE.IDL The idl file from which aclbase.h was derived.
6 – KEY_MANAGEMENT_API_DATA_TYPES
NOTES Key management operations that take a keydata argument expect a pointer to a sec_passwd_rec_t structure, and those that take a keytype argument (void *) expect a pointer to a sec_passwd_type_t. Key management operations that yield a keydata argument as output set the pointer to an array of sec_passwd_rec_t. (The array is terminated by an element with a key type of sec_passwd_none.) Operations that take a keydata argument expect a pointer to a sec_passwd_rec_t structure. Operations that yield a keydata argument as output set the pointer to an array of sec_passwd_rec_t. (The array is terminated by an element with key type sec_passwd_none.) Operations that take a keytype argument (void *) expect a pointer to a sec_passwd_type_t. SYNOPSIS #include <dce/keymgmt.h> DATA TYPES An enumerated set describing the currently supported key types. The possible values are: Indicates no key types are supported. Indicates that the key is a printable string of data. Indicates that the key is DES encrypted data. sec_passwd_rec_t A structure containing either a plaintext password or a preencrypted buffer of password data. The sec_passwd_rec_t structure consists of three components: version_number The version number of the password. pepper A character string combined with the password before an encryption key is derived from the password. key A structure consists of the following components: key_type The key type can be the following: sec_passwd_plain Indicates that a printable string of data is stored in plain. sec_passwd_des Indicates that an array of data is stored in des_key. tagged_union A structure specifying the password. The value of the structure depends on key_type. If key_type is sec_passwd_plain, structure contains plain, a character string. If key_type is sec_passwd_des, the structure contains des_key, a DES key of type sec_passwd_des_key_t. sec_passwd_version_t An unsigned 32-bit integer that defines the password version number. You can supply a version number or a 0 for no version number. If you supply the constant sec_passwd_c_version_none, the Security service supplies a system-generated version number. A 32-bit unsigned integer whose purpose is to indicate the authenti- cation service in use, since a server may have different keys for different levels of security. The possible values of this data type and their meanings are as follows: rpc_c_authn_none No authentication. rpc_c_authn_dce_private DCE private key authentication (an implementation of the Kerberos system). rpc_c_authn_dce_public DCE public key authentication (reserved for future use). Constants There are no constants specially defined for use with the key management API. FILES SYS$COMMON:[DCE$LIBRARY]KEYMGMT.IDL The idl file from which keymgmt.h was derived.
7 – ID_MAPPING_API_DATA_TYPES
SYNOPSIS #include <dce/secidmap.h> DATA TYPES No special data types are defined for the ID Mapping API. CONSTANTS No special constants are defined for the ID Mapping API. FILES SYS$COMMON:[DCE$LIBRARY]SECIDMAP.IDL The idl file from which secidmap.h was derived.
8 – PASSWORD_MANAGEMENT_API_DATA_TYPES
SYNOPSIS #include <dce/sec_pwd_mgmt.h> DATA TYPES The following data types are used in sec_pwd_mgmt_ calls: A pointer to an opaque handle consisting of password management information about a principal. It is returned by sec_pwd_mgmt_setup(). CONSTANTS There are no constants specially defined for use with the Password Management API. FILES SYS$COMMON:[DCE$LIBRARY]SEC_PWD_MGMT.IDL The idl file from which sec_pwd_mgmt.h was derived.