• Main Page
  • Modules
  • Files
  • File List

xacml_datatypes.h

00001 /*
00002  * Copyright 1999-2008 University of Chicago
00003  * 
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  * 
00008  * http://www.apache.org/licenses/LICENSE-2.0
00009  * 
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
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 /* Subject Attributes */
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 /* Environment Attributes */
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 /* SAML NameID formats */
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 /* XACML_DATATYPES_H */