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 LDAP_AUTH_H 30 #define LDAP_AUTH_H 31 32 #include "../public/auth.h" 33 #include <sys/types.h> 34 #include <ldap.h> 35 #include <ucx/map.h> 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 typedef struct ldap_auth_db LDAPAuthDB; 42 typedef struct ldap_config LDAPConfig; 43 typedef struct ldap_user LDAPUser; 44 typedef struct ldap_group LDAPGroup; 45 typedef struct ldap_member LDAPMember; 46 typedef struct ldap_group_cache LDAPGroupCache; 47 48 struct ldap_config { 49 char *hostname; 50 int port; 51 int ssl; 52 char *basedn; 53 char *binddn; 54 char *bindpw; 55 char *usersearch; 56 char *groupsearch; 57 }; 58 59 struct ldap_group_cache { 60 LDAPGroup *first; 61 LDAPGroup *last; 62 UcxMap *map; 63 }; 64 65 struct ldap_auth_db { 66 AuthDB authdb; 67 LDAPConfig config; 68 LDAPGroupCache groups; 69 }; 70 71 struct ldap_user { 72 User user; 73 LDAPAuthDB *authdb; 74 LDAP *ldap; 75 char *userdn; 76 int uid; 77 int gid; 78 }; 79 80 struct ldap_member { 81 char *name; 82 int uid; 83 }; 84 85 struct ldap_group { 86 char *name; 87 LDAPMember *members; 88 size_t nmembers; 89 time_t update; 90 LDAPGroup *next; 91 }; 92 93 AuthDB* create_ldap_authdb(char *name, LDAPConfig *conf); 94 95 LDAP* get_ldap_session(LDAPAuthDB *authdb); 96 97 User* ldap_get_user(AuthDB *sb, char *username); 98 99 LDAPGroup* ldap_get_group(LDAPAuthDB *authdb, char *group); 100 101 int ldap_user_verify_password(User *user, char *password); 102 int ldap_user_check_group(User *user, char *group); 103 void ldap_user_free(User *user); 104 105 #ifdef __cplusplus 106 } 107 #endif 108 109 #endif /* LDAP_AUTH_H */ 110 111