Include RPM spec file in dist package.
[mod_auth_gssapi.git] / src / mod_auth_gssapi.h
1 /* Copyright (C) 2014 mod_auth_gssapi authors - See COPYING for (C) terms */
2
3 #include <stdbool.h>
4 #include <stdint.h>
5 #include <time.h>
6
7 #define APR_WANT_STRFUNC
8 #include "apr_want.h"
9 #include <apr_strings.h>
10 #include <apr_base64.h>
11
12 #include <httpd.h>
13 #include <http_core.h>
14 #include <http_connection.h>
15 #include <http_log.h>
16 #include <http_request.h>
17 #include <mod_session.h>
18 #include <mod_ssl.h>
19
20 /* apache's httpd.h drags in empty PACKAGE_* variables.
21  * undefine them to avoid annoying compile warnings as they
22  * are re-defined in config.h */
23 #undef PACKAGE_BUGREPORT
24 #undef PACKAGE_NAME
25 #undef PACKAGE_STRING
26 #undef PACKAGE_TARNAME
27 #undef PACKAGE_VERSION
28 #include "config.h"
29
30 #include <gssapi/gssapi.h>
31 #include <gssapi/gssapi_ext.h>
32 #include <gssapi/gssapi_krb5.h>
33 #ifdef HAVE_GSSAPI_GSSAPI_NTLMSSP_H
34 #  include <gssapi/gssapi_ntlmssp.h>
35 #endif
36
37 #include "crypto.h"
38 #include "sessions.h"
39 #include "environ.h"
40
41 #define MIN_SESS_EXP_TIME 300 /* 5 minutes validity minimum */
42
43 #ifdef HAVE_GSS_ACQUIRE_CRED_FROM
44 #  ifdef HAVE_GSS_STORE_CRED_INTO
45 #define HAVE_CRED_STORE 1
46 #  endif
47 #endif
48
49 struct mag_na_map {
50     char *env_name;
51     char *attr_name;
52 };
53
54 struct mag_name_attributes {
55     bool output_json;
56     int map_count;
57     struct mag_na_map map[];
58 };
59
60 struct mag_config {
61     apr_pool_t *pool;
62     bool ssl_only;
63     bool map_to_local;
64     bool gss_conn_ctx;
65     bool send_persist;
66     bool use_sessions;
67 #ifdef HAVE_CRED_STORE
68     bool use_s4u2proxy;
69     char *deleg_ccache_dir;
70     gss_key_value_set_desc *cred_store;
71 #endif
72     struct seal_key *mag_skey;
73
74     bool use_basic_auth;
75     gss_OID_set_desc *allowed_mechs;
76     gss_OID_set_desc *basic_mechs;
77     bool negotiate_once;
78     struct mag_name_attributes *name_attributes;
79 };
80
81 struct mag_server_config {
82     gss_OID_set default_mechs;
83     struct seal_key *mag_skey;
84 };
85
86 struct mag_req_cfg {
87     request_rec *req;
88     struct mag_config *cfg;
89     gss_OID_set desired_mechs;
90     bool use_sessions;
91     bool send_persist;
92     const char *req_proto;
93     const char *rep_proto;
94     struct seal_key *mag_skey;
95 };
96
97 struct mag_attr {
98     const char *name;
99     const char *value;
100 };
101
102 struct mag_conn {
103     apr_pool_t *pool;
104     gss_ctx_id_t ctx;
105     bool established;
106     const char *user_name;
107     const char *gss_name;
108     time_t expiration;
109     int auth_type;
110     bool delegated;
111     struct databuf basic_hash;
112     bool is_preserved;
113     int na_count;
114     struct mag_attr *name_attributes;
115 };
116
117 #define discard_const(ptr) ((void *)((uintptr_t)(ptr)))
118
119 struct mag_conn *mag_new_conn_ctx(apr_pool_t *pool);
120 const char *mag_str_auth_type(int auth_type);
121 char *mag_gss_name_to_ccache_name(request_rec *req,
122                                   char *dir, const char *gss_name);
123 char *mag_error(request_rec *req, const char *msg, uint32_t maj, uint32_t min);