UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2013 Olaf Wintermann. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef AUTH_H 30 #define AUTH_H 31 32 #include <sys/types.h> 33 #include <inttypes.h> 34 #include "../public/auth.h" 35 36 #include <cx/map.h> 37 #include <cx/string.h> 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 typedef struct { 44 User user; 45 char *authdb; 46 cxmutstr *groups; 47 size_t numgroups; 48 char *password; 49 uint32_t ref; 50 } CachedUser; 51 52 typedef struct user_cache_elm UserCacheElm; 53 struct user_cache_elm { 54 CachedUser *user; 55 UserCacheElm *next_user; // next elm in the cached user list 56 CxHashKey key; // key to access this element 57 size_t slot; // slot in the map 58 UserCacheElm *next_elm; // next element in this map slot 59 time_t created; 60 }; 61 62 typedef struct { 63 UserCacheElm **map; 64 size_t size; 65 size_t count; 66 size_t max_users; 67 UserCacheElm *head; 68 UserCacheElm *trail; 69 } UserCache; 70 71 void auth_cache_init(); 72 73 User* auth_cache_get(char *authdb, const char *user); 74 void auth_cache_add( 75 char *authdb, 76 User *user, 77 const char *password, 78 const char **groups, 79 size_t numgroups); 80 81 void auth_cache_remove_from_map(UserCacheElm *elm); 82 83 int cached_user_verify_password(CachedUser *user, const char *password); 84 int cached_user_check_group(CachedUser *user, const char *group); 85 void cached_user_unref(CachedUser *user); 86 void cached_user_delete(CachedUser *user); 87 88 #ifdef __cplusplus 89 } 90 #endif 91 92 #endif /* AUTH_H */ 93 94