summaryrefslogtreecommitdiffstats
path: root/src/authdb.h
blob: 562ed17e77fcfeaea645c741f9a9848c7da47706 (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
#ifndef AUTHDB_H
#define AUTHDB_H

#include <stddef.h>
#include <stdint.h>
#include "blob.h"
#include "addr.h"

#define AUTHDB_IP_HASH_SIZE		64

struct sqdb;
struct authdb_map_entry;

struct authdb_config {
	struct sqdb *db;
	time_t last_check;
	time_t last_change;
	uint64_t block_categories;
	uint64_t hard_block_categories;
	blob_t redirect_url_base;
	unsigned int logout_timeout;
};

struct authdb {
	struct authdb_map_entry	*hash_bucket[AUTHDB_IP_HASH_SIZE];
};

struct authdb_entry {
	struct {
		char		login_name[44];
		char		mac_address[6];
		uint16_t	switch_port;
		sockaddr_any	switch_ip;
		uint64_t	block_categories;
		uint64_t	hard_block_categories;
		uint32_t	login_time;
	} p;
	uint32_t		last_activity_time;
	uint32_t		override_time;
	uint32_t		checksum;
};

struct authdb_map_entry {
	struct authdb_map_entry	*next;
	sockaddr_any		baseaddr;
	struct authdb_entry *	entries;
};

int authdb_open(struct authdb *adb, struct authdb_config *adbc, struct sqdb *db);
void authdb_close(struct authdb *adb);

void *authdb_get(struct authdb *adb, sockaddr_any *addr, struct authdb_entry *entry, int create);

void authdb_clear_entry(struct authdb_entry *entry);
int authdb_set(void *token, struct authdb_entry *entry);
int authdb_check_login(void *token, struct authdb_entry *e, blob_t username, time_t now, struct authdb_config *cfg);
void authdb_commit_login(void *token, struct authdb_entry *e, time_t now, struct authdb_config *cfg);
void authdb_commit_logout(void *token);
void authdb_commit_override(void *token, struct authdb_entry *entry, time_t now);

int adbc_refresh(struct authdb_config *cfg, time_t now);

#endif