In the following macro descriptions, S is a pointer to sec_attr_t, and I and J are nonnegative integers for array element selection.
#define SA_ATTR_ID(S) (S)->attr_id
#define SA_ATTR_VALUE(S) (S)->attr_value
#define SA_ATTR_ENCODING(S)
(SA_ATTR_VALUE(S)).attr_encoding
#define SA_ATTR_INTEGER(S) \
(SA_ATTR_VALUE(S)).tagged_union.signed_int
#define SA_ATTR_PRINTSTRING_P(S) \
(SA_ATTR_VALUE(S)).tagged_union.printstring
#define SA_ATTR_STR_ARRAY_P(S) \
(SA_ATTR_VALUE(S)).tagged_union.string_array
#define SA_ATTR_STR_ARRAY_NUM(S) (SA_ATTR_STR_ARRAY_P(S))->num_strings
#define SA_ATTR_STR_ARRAY_ELT_P(S,I) (SA_ATTR_STR_ARRAY_P(S))->strings[I]
#define SA_ATTR_BYTES_P(S) \
(SA_ATTR_VALUE(S)).tagged_union.bytes
#define SA_ATTR_BYTES_LEN(S) (SA_ATTR_BYTES_P(S))->length
#define SA_ATTR_BYTES_DATA(S,I) (SA_ATTR_BYTES_P(S))->data[I]
#define SA_ATTR_IDATA_P(S) \
(SA_ATTR_VALUE(S)).tagged_union.idata
#define SA_ATTR_IDATA_CODESET(S) (SA_ATTR_IDATA_P(S))->codeset
#define SA_ATTR_IDATA_LEN(S) (SA_ATTR_IDATA_P(S))->length
#define SA_ATTR_IDATA_DATA(S,I) (SA_ATTR_IDATA_P(S))->data[I]
#define SA_ATTR_UUID(S) \
(SA_ATTR_VALUE(S)).tagged_union.uuid
#define SA_ATTR_SET_P(S) \
(SA_ATTR_VALUE(S)).tagged_union.attr_set
#define SA_ATTR_SET_NUM(S) (SA_ATTR_SET_P(S))->num_members
#define SA_ATTR_SET_MEMBERS(S,I) (SA_ATTR_SET_P(S))->members[I]
#define SA_ATTR_BND_INFO_P(S) \
(SA_ATTR_VALUE(S)).tagged_union.binding
#define SA_ATTR_BND_AUTH_INFO(S) \
(SA_BND_AUTH_INFO(SA_ATTR_BND_INFO_P(S)))
#define SA_ATTR_BND_AUTH_INFO_TYPE(S) \
(SA_BND_AUTH_INFO_TYPE(SA_ATTR_BND_INFO_P(S)))
#define SA_ATTR_BND_AUTH_DCE_INFO(S) \
(SA_BND_AUTH_DCE_INFO(SA_ATTR_BND_INFO_P(S)))
#define SA_ATTR_BND_AUTH_SVR_PNAME_P(S) \
(SA_BND_AUTH_SVR_PNAME_P(SA_ATTR_BND_INFO_P(S)))
#define SA_ATTR_BND_AUTH_PROT_LEVEL(S) \
(SA_BND_AUTH_PROT_LEVEL(SA_ATTR_BND_INFO_P(S)))
#define SA_ATTR_BND_AUTH_AUTHN_SVC(S) \
(SA_BND_AUTH_AUTHN_SVC(SA_ATTR_BND_INFO_P(S)))
#define SA_ATTR_BND_AUTH_AUTHZ_SVC(S) \
(SA_BND_AUTH_AUTHZ_SVC(SA_ATTR_BND_INFO_P(S)))
#define SA_ATTR_BND_NUM(S) \
(SA_BND_NUM(SA_ATTR_BND_INFO_P(S)))
#define SA_ATTR_BND_ARRAY(S,I) \
(SA_BND_ARRAY((SA_ATTR_BND_INFO_P(S)),I))
#define SA_ATTR_BND_TYPE(S,I) \
(SA_BND_TYPE((SA_ATTR_BND_INFO_P(S)),I))
#define SA_ATTR_BND_STRING_P(S,I) \
(SA_BND_STRING_P((SA_ATTR_BND_INFO_P(S)),I))
#define SA_ATTR_BND_SVRNAME_P(S,I) \
(SA_BND_SVRNAME_P((SA_ATTR_BND_INFO_P(S)),I))
#define SA_ATTR_BND_SVRNAME_SYNTAX(S,I) \
(SA_BND_SVRNAME_SYNTAX((SA_ATTR_BND_INFO_P(S)),I))
#define SA_ATTR_BND_SVRNAME_NAME_P(S,I) \
(SA_BND_SVRNAME_NAME_P((SA_ATTR_BND_INFO_P(S)),I))
#define SA_ATTR_BND_TWRSET_P(S,I) \
(SA_BND_TWRSET_P((SA_ATTR_BND_INFO_P(S)),I))
#define SA_ATTR_BND_TWRSET_COUNT(S,I) \
(SA_BND_TWRSET_COUNT((SA_ATTR_BND_INFO_P(S)),I))
#define SA_ATTR_BND_TWR_P(S,I,J) \
(SA_BND_TWR_P((SA_ATTR_BND_INFO_P(S)),I,J))
#define SA_ATTR_BND_TWR_LEN(S,I,J) \
(SA_BND_TWR_LEN((SA_ATTR_BND_INFO_P(S)),I,J))
#define SA_ATTR_BND_TWR_OCTETS(S,I,J) \
(SA_BND_TWR_OCTETS((SA_ATTR_BND_INFO_P(S)),I,J))