summaryrefslogtreecommitdiff
path: root/src/http_auth.h
blob: 0b664fa11122fc84dedac8d9a31be1e70f23123d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#ifndef _HTTP_AUTH_H_
#define _HTTP_AUTH_H_

#include "server.h"
#include "plugin.h"

#if defined(HAVE_LDAP_H) && defined(HAVE_LBER_H) && defined(HAVE_LIBLDAP) && defined(HAVE_LIBLBER)
# define USE_LDAP
# include <ldap.h>
#endif

typedef enum { AUTH_BACKEND_UNSET, AUTH_BACKEND_PLAIN, 
		AUTH_BACKEND_LDAP, AUTH_BACKEND_HTPASSWD, 
		AUTH_BACKEND_HTDIGEST, AUTH_BACKEND_PAM } auth_backend_t;

typedef struct {
	/* auth */
	array  *auth_require;
	
	buffer *auth_plain_groupfile;
	buffer *auth_plain_userfile;
	
	buffer *auth_htdigest_userfile;
	buffer *auth_htpasswd_userfile;
	
	buffer *auth_backend_conf;
	
	buffer *auth_ldap_hostname;
	buffer *auth_ldap_basedn;
	buffer *auth_ldap_binddn;
	buffer *auth_ldap_bindpw;
	buffer *auth_ldap_filter;
	buffer *auth_ldap_cafile;
	unsigned short auth_ldap_starttls;
	
	unsigned short auth_debug;
	
	/* generated */
	auth_backend_t auth_backend;
	
#ifdef USE_LDAP
	LDAP *ldap;
	
	buffer *ldap_filter_pre;
	buffer *ldap_filter_post;
#endif
} mod_auth_plugin_config;

typedef struct {
	PLUGIN_DATA;
	buffer *tmp_buf;
	
	buffer *auth_user;

#ifdef USE_LDAP
	buffer *ldap_filter;
#endif
	
	mod_auth_plugin_config **config_storage;
	
	mod_auth_plugin_config conf; /* this is only used as long as no handler_ctx is setup */
} mod_auth_plugin_data;

int http_auth_basic_check(server *srv, connection *con, mod_auth_plugin_data *p, array *req, buffer *url, const char *realm_str);
int http_auth_digest_check(server *srv, connection *con, mod_auth_plugin_data *p, array *req, buffer *url, const char *realm_str);
int http_auth_digest_generate_nonce(server *srv, mod_auth_plugin_data *p, buffer *fn, char hh[33]);

#endif