2 * Sub-authentication Daemon
4 * (c) 2017 Martin Mares <mj@ucw.cz>
11 #include <ucw/clists.h>
12 #include <ucw/mainloop.h>
13 #include <ucw/mempool.h>
14 #include <ucw-json/json.h>
16 #define SOCKET_TIMEOUT 60000 // in ms
17 #define MAX_PACKET_SIZE 16384
18 #define MAX_OOB_DATA_SIZE 4096
21 struct main_file socket;
22 struct main_timer timer;
25 struct json_context *json;
26 struct json_node *request;
27 struct json_node *reply;
30 extern clist zone_list; // of struct auth_zone
31 extern char *database_name;
32 extern char *temp_key_file;
36 void cmd_dispatch(struct client *c);
38 const char *get_string(struct json_node *n, const char *key);
39 bool get_uint(struct json_node *n, const char *key, uint *dest);
40 struct json_node **get_array(struct json_node *n, const char *key);
41 struct json_node *get_object(struct json_node *n, const char *key);
45 #define DEFAULT_SALT_BYTES 8
46 #define DEFAULT_IDENT_BYTES 2
47 #define DEFAULT_GENERATED_BYTES 8
48 #define HASH_BYTES 32 // We are using SHA-256
49 #define DEFAULT_HASH_ITERATIONS 64 // Number of hash function iterations per PBKDF2
50 #define MAX_TEXT_HASH_SIZE 256
56 uint auto_create_acct;
59 uint max_temp_validity;
63 clist accounts; // of struct auth_acct
69 struct auth_user *user;
70 struct auth_zone *zone;
71 clist tokens; // of struct auth_token
83 struct auth_acct *acct;
95 struct auth_zone *auth_find_zone(const char *name);
96 struct auth_user *auth_find_user(const char *login, bool create);
97 struct auth_acct *auth_find_acct(struct auth_user *au, struct auth_zone *az, bool create);
98 struct auth_token *auth_find_token_passwd(struct auth_acct *aa);
99 struct auth_token *auth_find_token_generated(struct auth_acct *aa, const char *ident);
100 void auth_delete_user(struct auth_user *au);
101 void auth_delete_acct(struct auth_acct *aa);
102 void auth_delete_token(struct auth_token *at);
103 struct auth_token *auth_create_token(struct auth_acct *aa);
104 void auth_set_token_passwd(struct auth_token *at, const char *passwd);
105 char *auth_set_token_generated(struct auth_token *at, const char *comment, struct mempool *pool);
106 bool auth_check_token(struct auth_token *at, const char *passwd);
108 extern struct auth_token *auth_fake_token;
112 void temp_init(void);
113 char *temp_generate(const char *zone, const char *login, uint validity, struct mempool *pool);
114 const char *temp_check(const char *zone, const char *login, const char *token, struct mempool *pool);
115 const char *temp_shorten(const char *token, struct mempool *pool);