summaryrefslogtreecommitdiffstats
path: root/src/pwcache.h
blob: f1ca0bfe6aff5ae73ab82669c8916a31d941e202 (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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/****************************************************************************
 * bfs                                                                      *
 * Copyright (C) 2020 Tavian Barnes <tavianator@tavianator.com>             *
 *                                                                          *
 * Permission to use, copy, modify, and/or distribute this software for any *
 * purpose with or without fee is hereby granted.                           *
 *                                                                          *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES *
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF         *
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR  *
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   *
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN    *
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF  *
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.           *
 ****************************************************************************/

/**
 * A caching wrapper for /etc/{passwd,group}.
 */

#ifndef BFS_PWCACHE_H
#define BFS_PWCACHE_H

#include <grp.h>
#include <pwd.h>

/**
 * A user cache.
 */
struct bfs_users;

/**
 * Create a user cache.
 *
 * @return
 *         A new user cache, or NULL on failure.
 */
struct bfs_users *bfs_users_new(void);

/**
 * Get a user entry by name.
 *
 * @param users
 *         The user cache.
 * @param name
 *         The username to look up.
 * @return
 *         The matching user, or NULL if not found (errno == 0) or an error
 *         occurred (errno != 0).
 */
const struct passwd *bfs_getpwnam(struct bfs_users *users, const char *name);

/**
 * Get a user entry by ID.
 *
 * @param users
 *         The user cache.
 * @param uid
 *         The ID to look up.
 * @return
 *         The matching user, or NULL if not found (errno == 0) or an error
 *         occurred (errno != 0).
 */
const struct passwd *bfs_getpwuid(struct bfs_users *users, uid_t uid);

/**
 * Flush a user cache.
 *
 * @param users
 *         The cache to flush.
 */
void bfs_users_flush(struct bfs_users *users);

/**
 * Free a user cache.
 *
 * @param users
 *         The user cache to free.
 */
void bfs_users_free(struct bfs_users *users);

/**
 * A group cache.
 */
struct bfs_groups;

/**
 * Create a group cache.
 *
 * @return
 *         A new group cache, or NULL on failure.
 */
struct bfs_groups *bfs_groups_new(void);

/**
 * Get a group entry by name.
 *
 * @param groups
 *         The group cache.
 * @param name
 *         The group name to look up.
 * @return
 *         The matching group, or NULL if not found (errno == 0) or an error
 *         occurred (errno != 0).
 */
const struct group *bfs_getgrnam(struct bfs_groups *groups, const char *name);

/**
 * Get a group entry by ID.
 *
 * @param groups
 *         The group cache.
 * @param uid
 *         The ID to look up.
 * @return
 *         The matching group, or NULL if not found (errno == 0) or an error
 *         occurred (errno != 0).
 */
const struct group *bfs_getgrgid(struct bfs_groups *groups, gid_t gid);

/**
 * Flush a group cache.
 *
 * @param groups
 *         The cache to flush.
 */
void bfs_groups_flush(struct bfs_groups *groups);

/**
 * Free a group cache.
 *
 * @param groups
 *         The group cache to free.
 */
void bfs_groups_free(struct bfs_groups *groups);

#endif // BFS_PWCACHE_H