Annotation of embedaddon/sudo/plugins/sudoers/pwutil.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (c) 2010-2013 Todd C. Miller <Todd.Miller@courtesan.com>
3: *
4: * Permission to use, copy, modify, and distribute this software for any
5: * purpose with or without fee is hereby granted, provided that the above
6: * copyright notice and this permission notice appear in all copies.
7: *
8: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15: */
16:
17: #ifndef _SUDOERS_PWUTIL_H
18: #define _SUDOERS_PWUTIL_H
19:
20: #define ptr_to_item(p) ((struct cache_item *)((char *)p - offsetof(struct cache_item_##p, p)))
21:
22: /*
23: * Generic cache element.
24: */
25: struct cache_item {
26: unsigned int refcnt;
27: /* key */
28: union {
29: uid_t uid;
30: gid_t gid;
31: char *name;
32: } k;
33: /* datum */
34: union {
35: struct passwd *pw;
36: struct group *gr;
37: struct group_list *grlist;
38: } d;
39: };
40:
41: /*
42: * Container structs to simpify size and offset calculations and guarantee
43: * proper aligment of struct passwd, group and group_list.
44: */
45: struct cache_item_pw {
46: struct cache_item cache;
47: struct passwd pw;
48: };
49:
50: struct cache_item_gr {
51: struct cache_item cache;
52: struct group gr;
53: };
54:
55: struct cache_item_grlist {
56: struct cache_item cache;
57: struct group_list grlist;
58: /* actually bigger */
59: };
60:
61: struct cache_item *sudo_make_gritem(gid_t gid, const char *group);
62: struct cache_item *sudo_make_grlist_item(struct passwd *pw, char * const *groups, char * const *gids);
63: struct cache_item *sudo_make_pwitem(uid_t uid, const char *user);
64:
65: #endif /* _SUDOERS_PWUTIL_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>