Return to pwutil.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / sudo / plugins / sudoers |
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 */