00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef XACML_DATATYPES_H
00018 #define XACML_DATATYPES_H
00019
00020 #ifndef EXTERN_C_BEGIN
00021 # ifdef __cplusplus
00022 # define EXTERN_C_BEGIN extern "C" {
00023 # define EXTERN_C_END }
00024 # else
00025 # define EXTERN_C_BEGIN
00026 # define EXTERN_C_END
00027 # endif
00028 #endif
00029
00030 #include <stdlib.h>
00031 #include <sys/socket.h>
00032
00033 #ifndef DONT_DOCUMENT_INTERNAL
00034 EXTERN_C_BEGIN
00035 #endif
00036
00037 #define XACML_IO_DESCRIPTOR "xacml_io_descriptor"
00038
00044 typedef struct xacml_request_s * xacml_request_t;
00045
00051 typedef struct xacml_resource_attribute_s * xacml_resource_attribute_t;
00052
00057 typedef struct xacml_response_s * xacml_response_t;
00058
00063 typedef struct xacml_obligation_s * xacml_obligation_t;
00064
00069 typedef void* (*xacml_io_connect_t)(
00070 const char *endpoint,
00071 const char *host,
00072 int port);
00073
00074 typedef int (*xacml_io_send_t)(
00075 void *arg,
00076 const char *data,
00077 size_t size);
00078
00079 typedef size_t (*xacml_io_recv_t)(
00080 void *arg,
00081 char *data,
00082 size_t size);
00083
00084 typedef int (*xacml_io_close_t)(
00085 void *arg);
00086
00087 typedef void * (*xacml_io_accept_t)(
00088 int sock,
00089 struct sockaddr *addr,
00090 socklen_t *addr_len,
00091 int *sock_out);
00092
00093 typedef struct
00094 {
00095 char * name;
00096 xacml_io_accept_t accept_func;
00097 xacml_io_connect_t connect_func;
00098 xacml_io_send_t send_func;
00099 xacml_io_recv_t recv_func;
00100 xacml_io_close_t close_func;
00101 }
00102 xacml_io_descriptor_t;
00103
00110 typedef enum
00111 {
00113 SAML_STATUS_Success,
00118 SAML_STATUS_Requester,
00123 SAML_STATUS_Responder,
00128 SAML_STATUS_VersionMismatch,
00133 SAML_STATUS_AuthnFailed,
00138 SAML_STATUS_InvalidAttrNameOrValue,
00143 SAML_STATUS_InvalidNameIDPolicy,
00148 SAML_STATUS_NoAuthnContext,
00154 SAML_STATUS_NoAvailableIDP,
00159 SAML_STATUS_NoPassive,
00164 SAML_STATUS_NoSupportedIDP,
00169 SAML_STATUS_PartialLogout,
00174 SAML_STATUS_ProxyCountExceeded,
00181 SAML_STATUS_RequestDenied,
00185 SAML_STATUS_RequestUnsupported,
00190 SAML_STATUS_RequestVersionDeprecated,
00196 SAML_STATUS_RequestVersionTooHigh,
00201 SAML_STATUS_RequestVersionTooLow,
00206 SAML_STATUS_ResourceNotRecognized,
00211 SAML_STATUS_TooManyResponses,
00216 SAML_STATUS_UnknownAttrProfile,
00221 SAML_STATUS_UnknownPrincipal,
00226 SAML_STATUS_UnsupportedBinding
00227 }
00228 saml_status_code_t;
00229
00234 typedef enum
00235 {
00237 XACML_RESULT_SUCCESS,
00239 XACML_RESULT_INVALID_PARAMETER,
00241 XACML_RESULT_OBLIGATION_FAILED,
00243 XACML_RESULT_SOAP_ERROR,
00245 XACML_RESULT_INVALID_STATE
00246 }
00247 xacml_result_t;
00248
00255 extern const char *saml_status_code_strings[];
00256
00263 typedef enum
00264 {
00268 XACML_STATUS_ok,
00273 XACML_STATUS_missing_attribute,
00278 XACML_STATUS_syntax_error,
00283 XACML_STATUS_processing_error
00284 }
00285 xacml_status_code_t;
00286
00293 extern const char *xacml_status_code_strings[];
00294
00301 typedef enum
00302 {
00306 XACML_DECISION_Permit,
00310 XACML_DECISION_Deny,
00317 XACML_DECISION_Indeterminate,
00321 XACML_DECISION_NotApplicable
00322 }
00323 xacml_decision_t;
00324
00329 typedef enum
00330 {
00334 XACML_EFFECT_Permit,
00338 XACML_EFFECT_Deny
00339 }
00340 xacml_effect_t;
00341
00361 typedef int (*xacml_obligation_handler_t) (
00362 void * handler_arg,
00363 const xacml_response_t response,
00364 const char * obligation_id,
00365 xacml_effect_t fulfill_on,
00366 const char * attribute_ids[],
00367 const char * datatypes[],
00368 const char * values[]);
00369
00370 typedef int (*xacml_authorization_handler_t) (
00371 void * handler_arg,
00372 const xacml_request_t request,
00373 xacml_response_t response);
00374
00375
00389 #define XACML_DATATYPE_X500_NAME \
00390 "urn:oasis:names:tc:xacml:1.0:data-type:x500Name"
00391
00395 #define XACML_DATATYPE_RFC822_NAME \
00396 "urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name"
00397
00401 #define XACML_DATATYPE_IP_ADDRESS \
00402 "urn:oasis:names:tc:xacml:2.0:data-type:ipAddress"
00403
00407 #define XACML_DATATYPE_DNS_NAME \
00408 "urn:oasis:names:tc:xacml:2.0:data-type:dnsName"
00409
00413 #define XACML_DATATYPE_STRING \
00414 "http://www.w3.org/2001/XMLSchema#string"
00415
00419 #define XACML_DATATYPE_BOOLEAN \
00420 "http://www.w3.org/2001/XMLSchema#boolean"
00421
00425 #define XACML_DATATYPE_INTEGER \
00426 "http://www.w3.org/2001/XMLSchema#integer"
00427
00431 #define XACML_DATATYPE_DOUBLE \
00432 "http://www.w3.org/2001/XMLSchema#double"
00433
00437 #define XACML_DATATYPE_TIME \
00438 "http://www.w3.org/2001/XMLSchema#time"
00439
00443 #define XACML_DATATYPE_DATE \
00444 "http://www.w3.org/2001/XMLSchema#date"
00445
00449 #define XACML_DATATYPE_DATE_TIME \
00450 "http://www.w3.org/2001/XMLSchema#dateTime"
00451
00455 #define XACML_DATATYPE_ANY_URI \
00456 "http://www.w3.org/2001/XMLSchema#anyURI"
00457
00461 #define XACML_DATATYPE_HEX_BINARY \
00462 "http://www.w3.org/2001/XMLSchema#hexBinary"
00463
00467 #define XACML_DATATYPE_BASE64_BINARY \
00468 "http://www.w3.org/2001/XMLSchema#base64Binary"
00469
00484 #define XACML_SUBJECT_CATEGORY_ACCESS_SUBJECT \
00485 "urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
00486
00490 #define XACML_SUBJECT_CATEGORY_RECIPIENT_SUBJECT \
00491 "urn:oasis:names:tc:xacml:1.0:subject-category:recipient-subject"
00492
00496 #define XACML_SUBJECT_CATEGORY_INTERMEDIARY_SUBJECT \
00497 "urn:oasis:names:tc:xacml:1.0:subject-category:intermediary-subject"
00498
00502 #define XACML_SUBJECT_CATEGORY_CODEBASE \
00503 "urn:oasis:names:tc:xacml:1.0:subject-category:codebase"
00504
00508 #define XACML_SUBJECT_CATEGORY_REQUESTING_MACHINE \
00509 "urn:oasis:names:tc:xacml:1.0:subject-category:requesting-machine"
00510
00522
00523
00528 #define XACML_SUBJECT_ATTRIBUTE_SUBJECT_ID \
00529 "urn:oasis:names:tc:xacml:1.0:subject:subject-id"
00530
00534 #define XACML_SUBJECT_ATTRIBUTE_SUBJECT_CATEGORY \
00535 "urn:oasis:names:tc:xacml:1.0:subject-category"
00536
00540 #define XACML_SUBJECT_ATTRIBUTE_SUBJECT_ID_QUALIFIER \
00541 "urn:oasis:names:tc:xacml:1.0:subject:subject-id-qualifier"
00542
00546 #define XACML_SUBJECT_ATTRIBUTE_KEY_INFO \
00547 "urn:oasis:names:tc:xacml:1.0:subject:key-info"
00548
00552 #define XACML_SUBJECT_ATTRIBUTE_AUTHENTICATION_TIME \
00553 "urn:oasis:names:tc:xacml:1.0:subject:authentication-time"
00554
00558 #define XACML_SUBJECT_ATTRIBUTE_AUTHENTICATION_METHOD \
00559 "urn:oasis:names:tc:xacml:1.0:subject:authn-locality:authentication-method"
00560
00564 #define XACML_SUBJECT_ATTRIBUTE_REQUEST_TIME \
00565 "urn:oasis:names:tc:xacml:1.0:subject:request-time"
00566
00570 #define XACML_SUBJECT_ATTRIBUTE_SESSION_START_TIME \
00571 "urn:oasis:names:tc:xacml:1.0:subject:session-start-time"
00572
00576 #define XACML_SUBJECT_ATTRIBUTE_AUTHN_LOCALITY_IP_ADDRESS \
00577 "urn:oasis:names:tc:xacml:1.0:subject:authn-locality:ip-address"
00578
00582 #define XACML_SUBJECT_ATTRIBUTE_AUTHN_LOCALITY_DNS_NAME \
00583 "urn:oasis:names:tc:xacml:1.0:subject:authn-locality:dns-name"
00584
00601 #define XACML_RESOURCE_ATTRIBUTE_RESOURCE_ID \
00602 "urn:oasis:names:tc:xacml:1.0:resource:resource-id"
00603
00607 #define XACML_RESOURCE_ATTRIBUTE_TARGETN_NAMESPACE \
00608 "urn:oasis:names:tc:xacml:2.0:resource:target-namespace"
00609
00626 #define XACML_ACTION_ATTRIBUTE_ACTION_ID \
00627 "urn:oasis:names:tc:xacml:1.0:action:action-id"
00628
00632 #define XACML_ACTION_ATTRIBUTE_IMPLIED_ACTION \
00633 "urn:oasis:names:tc:xacml:1.0:action:implied-action"
00634
00638 #define XACML_ACTION_ATTRIBUTE_ACTION_NAMESPACE \
00639 "urn:oasis:names:tc:xacml:1.0:action:action-namespace"
00640
00641
00658 #define XACML_ENVIRONMENT_ATTRIBUTE_CURRENT_TIME \
00659 "urn:oasis:names:tc:xacml:1.0:environment:current-time"
00660
00664 #define XACML_ENVIRONMENT_ATTRIBUTE_CURRENT_DATE \
00665 "urn:oasis:names:tc:xacml:1.0:environment:current-date"
00666
00670 #define XACML_ENVIRONMENT_ATTRIBUTE_CURRENT_DATE_TIME \
00671 "urn:oasis:names:tc:xacml:1.0:environment:current-dateTime"
00672
00673
00674 #define SAML_NAME_ID_FORMAT_UNSPECIFIED \
00675 "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
00676 #define SAML_NAME_ID_FORMAT_EMAIL_ADDRESS \
00677 "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
00678 #define SAML_NAME_ID_FORMAT_X509_SUBJECT_NAME \
00679 "urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName"
00680 #define SAML_NAME_ID_FORMAT_WINDOWS_DOMAIN_QUALIFIED_NAME \
00681 "urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName"
00682 #define SAML_NAME_ID_FORMAT_KERBEROS \
00683 "urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos"
00684 #define SAML_NAME_ID_FORMAT_ENTITY \
00685 "urn:oasis:names:tc:SAML:2.0:nameid-format:entity"
00686 #define SAML_NAME_ID_FORMAT_PERSISTENT \
00687 "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
00688 #define SAML_NAME_ID_FORMAT_TRANSIENT \
00689 "urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
00690
00691 #ifndef DONT_DOCUMENT_INTERNAL
00692 EXTERN_C_END
00693 #endif
00694
00695 #endif