1*76404edcSAsim Jamshed #ifndef _HTTP_AUTH_H_
2*76404edcSAsim Jamshed #define _HTTP_AUTH_H_
3*76404edcSAsim Jamshed 
4*76404edcSAsim Jamshed #include "server.h"
5*76404edcSAsim Jamshed #include "plugin.h"
6*76404edcSAsim Jamshed 
7*76404edcSAsim Jamshed #if defined(HAVE_LDAP_H) && defined(HAVE_LBER_H) && defined(HAVE_LIBLDAP) && defined(HAVE_LIBLBER)
8*76404edcSAsim Jamshed # define USE_LDAP
9*76404edcSAsim Jamshed # include <ldap.h>
10*76404edcSAsim Jamshed #endif
11*76404edcSAsim Jamshed 
12*76404edcSAsim Jamshed typedef enum {
13*76404edcSAsim Jamshed 	AUTH_BACKEND_UNSET,
14*76404edcSAsim Jamshed 	AUTH_BACKEND_PLAIN,
15*76404edcSAsim Jamshed 	AUTH_BACKEND_LDAP,
16*76404edcSAsim Jamshed 	AUTH_BACKEND_HTPASSWD,
17*76404edcSAsim Jamshed 	AUTH_BACKEND_HTDIGEST
18*76404edcSAsim Jamshed } auth_backend_t;
19*76404edcSAsim Jamshed 
20*76404edcSAsim Jamshed typedef struct {
21*76404edcSAsim Jamshed 	/* auth */
22*76404edcSAsim Jamshed 	array  *auth_require;
23*76404edcSAsim Jamshed 
24*76404edcSAsim Jamshed 	buffer *auth_plain_groupfile;
25*76404edcSAsim Jamshed 	buffer *auth_plain_userfile;
26*76404edcSAsim Jamshed 
27*76404edcSAsim Jamshed 	buffer *auth_htdigest_userfile;
28*76404edcSAsim Jamshed 	buffer *auth_htpasswd_userfile;
29*76404edcSAsim Jamshed 
30*76404edcSAsim Jamshed 	buffer *auth_backend_conf;
31*76404edcSAsim Jamshed 
32*76404edcSAsim Jamshed 	buffer *auth_ldap_hostname;
33*76404edcSAsim Jamshed 	buffer *auth_ldap_basedn;
34*76404edcSAsim Jamshed 	buffer *auth_ldap_binddn;
35*76404edcSAsim Jamshed 	buffer *auth_ldap_bindpw;
36*76404edcSAsim Jamshed 	buffer *auth_ldap_filter;
37*76404edcSAsim Jamshed 	buffer *auth_ldap_cafile;
38*76404edcSAsim Jamshed 	unsigned short auth_ldap_starttls;
39*76404edcSAsim Jamshed 	unsigned short auth_ldap_allow_empty_pw;
40*76404edcSAsim Jamshed 
41*76404edcSAsim Jamshed 	unsigned short auth_debug;
42*76404edcSAsim Jamshed 
43*76404edcSAsim Jamshed 	/* generated */
44*76404edcSAsim Jamshed 	auth_backend_t auth_backend;
45*76404edcSAsim Jamshed 
46*76404edcSAsim Jamshed #ifdef USE_LDAP
47*76404edcSAsim Jamshed 	LDAP *ldap;
48*76404edcSAsim Jamshed 
49*76404edcSAsim Jamshed 	buffer *ldap_filter_pre;
50*76404edcSAsim Jamshed 	buffer *ldap_filter_post;
51*76404edcSAsim Jamshed #endif
52*76404edcSAsim Jamshed } mod_auth_plugin_config;
53*76404edcSAsim Jamshed 
54*76404edcSAsim Jamshed typedef struct {
55*76404edcSAsim Jamshed 	PLUGIN_DATA;
56*76404edcSAsim Jamshed 	buffer *tmp_buf;
57*76404edcSAsim Jamshed 
58*76404edcSAsim Jamshed 	buffer *auth_user;
59*76404edcSAsim Jamshed 
60*76404edcSAsim Jamshed #ifdef USE_LDAP
61*76404edcSAsim Jamshed 	buffer *ldap_filter;
62*76404edcSAsim Jamshed #endif
63*76404edcSAsim Jamshed 
64*76404edcSAsim Jamshed 	mod_auth_plugin_config **config_storage;
65*76404edcSAsim Jamshed 
66*76404edcSAsim Jamshed 	mod_auth_plugin_config conf, *anon_conf; /* this is only used as long as no handler_ctx is setup */
67*76404edcSAsim Jamshed } mod_auth_plugin_data;
68*76404edcSAsim Jamshed 
69*76404edcSAsim Jamshed int http_auth_basic_check(server *srv, connection *con, mod_auth_plugin_data *p, array *req, buffer *url, const char *realm_str);
70*76404edcSAsim Jamshed int http_auth_digest_check(server *srv, connection *con, mod_auth_plugin_data *p, array *req, buffer *url, const char *realm_str);
71*76404edcSAsim Jamshed int http_auth_digest_generate_nonce(server *srv, mod_auth_plugin_data *p, buffer *fn, char hh[33]);
72*76404edcSAsim Jamshed 
73*76404edcSAsim Jamshed #endif
74