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 #ifndef KEYFILE_AUTH_H
30 #define KEYFILE_AUTH_H
31
32 #include "../public/auth.h"
33
34 #include <ucx/map.h>
35 #include <inttypes.h>
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40
41 typedef struct keyfile Keyfile;
42 typedef struct keyfile_user KeyfileUser;
43
44 enum KeyfileHashType {
45 KEYFILE_SSHA =
0,
46 KEYFILE_SSHA256,
47 KEYFILE_SSHA512
48 };
49
50 struct keyfile {
51 AuthDB authdb;
52 UcxMap *users;
53 uint32_t ref;
54 };
55
56 struct keyfile_user {
57 User user;
58 sstr_t *groups;
59 size_t numgroups;
60 enum KeyfileHashType hash_type;
61 char *hash;
62 size_t hashlen;
63 };
64
65 Keyfile* keyfile_new();
66 void keyfile_ref(Keyfile *keyfile);
67 void keyfile_unref(Keyfile *keyfile);
68
69 void keyfile_add_user(
70 Keyfile *keyfile,
71 sstr_t user,
72 enum KeyfileHashType hash_type,
73 sstr_t hash,
74 sstr_t *groups,
75 size_t ngroups);
76
77 User* keyfile_get_user(AuthDB *db,
char *user);
78 int keyfile_user_verify_password(User *user,
char *password);
79 int keyfile_user_check_group(User *user,
char *group);
80 void keyfile_user_free(User *user);
81
82
83 int ssha_verify(KeyfileUser *user,
char *password);
84
85 #ifdef __cplusplus
86 }
87 #endif
88
89 #endif
90
91