#ifndef AUTHDB_H #define AUTHDB_H #include #include #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; int require_auth; }; 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