### Macros to Access Binding Fields

In the following macro definitions, which are used by a sec_attr_schema_entry_t and its equivalent dce_attr_sch data type, B is a pointer to sec_attr_bind_info_t.

#define SA_BND_AUTH_INFO(B) (B)->auth_info
#define SA_BND_AUTH_INFO_TYPE(B) (SA_BND_AUTH_INFO(B)).info_type

#define SA_BND_AUTH_SVR_PNAME_P(B) \

(SA_BND_AUTH_DCE_INFO(B)).svr_princ_name

#define SA_BND_AUTH_PROT_LEVEL(B) \

(SA_BND_AUTH_DCE_INFO(B)).protect_level

#define SA_BND_AUTH_AUTHN_SVC(B) \

(SA_BND_AUTH_DCE_INFO(B)).authn_svc

#define SA_BND_AUTH_AUTHZ_SVC(B) \

(SA_BND_AUTH_DCE_INFO(B)).authz_svc

#define SA_BND_NUM(B) (B)->num_bindings

#define SA_BND_ARRAY(B,I) (B)->bindings[I]

#define SA_BND_TYPE(B,I) (SA_BND_ARRAY(B,I)).bind_type

#define SA_BND_STRING_P(B,I) \

(SA_BND_ARRAY(B,I)).tagged_union.string_binding

#define SA_BND_SVRNAME_P(B,I) \

(SA_BND_ARRAY(B,I)).tagged_union.svrname

#define SA_BND_SVRNAME_SYNTAX(B,I) \

(SA_BND_SVRNAME_P(B,I))->name_syntax

#define SA_BND_SVRNAME_NAME_P(B,I) \

(SA_BND_SVRNAME_P(B,I))->name

#define SA_BND_TWRSET_P(B,I) \

(SA_BND_ARRAY(B,I)).tagged_union.twr_set

#define SA_BND_TWRSET_COUNT(B,I) (SA_BND_TWRSET_P(B,I))->count

#define SA_BND_TWR_P(B,I,J) (SA_BND_TWRSET_P(B,I))->towers[J]

#define SA_BND_TWR_LEN(B,I,J) (SA_BND_TWR_P(B,I,J))->tower_length

#define SA_BND_TWR_OCTETS(B,I,J) \

(SA_BND_TWR_P(B,I,J))->tower_octet_string

###