#include <stdbool.h>
#include <stdint.h>
#include <time.h>
-#include <gssapi/gssapi.h>
-#include <gssapi/gssapi_ext.h>
-#include <gssapi/gssapi_krb5.h>
#define APR_WANT_STRFUNC
#include "apr_want.h"
#undef PACKAGE_VERSION
#include "config.h"
+#include <gssapi/gssapi.h>
+#include <gssapi/gssapi_ext.h>
+#include <gssapi/gssapi_krb5.h>
+#ifdef HAVE_GSSAPI_GSSAPI_NTLMSSP_H
+# include <gssapi/gssapi_ntlmssp.h>
+#endif
+
#include "crypto.h"
#include "sessions.h"
+#include "environ.h"
#define MIN_SESS_EXP_TIME 300 /* 5 minutes validity minimum */
gss_key_value_set_desc *cred_store;
#endif
struct seal_key *mag_skey;
+
bool use_basic_auth;
+ gss_OID_set_desc *allowed_mechs;
+ gss_OID_set_desc *basic_mechs;
+};
+
+struct mag_server_config {
+ gss_OID_set default_mechs;
+ struct seal_key *mag_skey;
+};
+
+struct mag_req_cfg {
+ request_rec *req;
+ struct mag_config *cfg;
+ gss_OID_set desired_mechs;
+ bool use_sessions;
+ bool send_persist;
+ const char *req_proto;
+ const char *rep_proto;
+ struct seal_key *mag_skey;
};
struct mag_conn {
- apr_pool_t *parent;
+ apr_pool_t *pool;
gss_ctx_id_t ctx;
bool established;
const char *user_name;
const char *gss_name;
time_t expiration;
- const char *auth_type;
+ int auth_type;
+ bool delegated;
+ struct databuf basic_hash;
+ bool is_preserved;
};
+
+#define discard_const(ptr) ((void *)((uintptr_t)(ptr)))
+
+struct mag_conn *mag_new_conn_ctx(apr_pool_t *pool);
+const char *mag_str_auth_type(int auth_type);
+char *mag_gss_name_to_ccache_name(request_rec *req,
+ char *dir, const char *gss_name);