#ifndef LDAP_AUTH_H
#define LDAP_AUTH_H
#include "../public/auth.h"
#include <sys/types.h>
#include <ldap.h>
#include <ucx/map.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct ldap_auth_db LDAPAuthDB;
typedef struct ldap_config LDAPConfig;
typedef struct ldap_user LDAPUser;
typedef struct ldap_group LDAPGroup;
typedef struct ldap_member LDAPMember;
typedef struct ldap_group_cache LDAPGroupCache;
struct ldap_config {
char *hostname;
int port;
int ssl;
char *basedn;
char *binddn;
char *bindpw;
char *usersearch;
char *groupsearch;
};
struct ldap_group_cache {
LDAPGroup *first;
LDAPGroup *last;
UcxMap *map;
};
struct ldap_auth_db {
AuthDB authdb;
LDAPConfig config;
LDAPGroupCache groups;
};
struct ldap_user {
User user;
LDAPAuthDB *authdb;
LDAP *ldap;
char *userdn;
int uid;
int gid;
};
struct ldap_member {
char *name;
int uid;
};
struct ldap_group {
char *name;
LDAPMember *members;
size_t nmembers;
time_t update;
LDAPGroup *next;
};
AuthDB* create_ldap_authdb(
char *name, LDAPConfig *conf);
LDAP* get_ldap_session(LDAPAuthDB *authdb);
User* ldap_get_user(AuthDB *sb,
char *username);
LDAPGroup* ldap_get_group(LDAPAuthDB *authdb,
char *group);
int ldap_user_verify_password(User *user,
char *password);
int ldap_user_check_group(User *user,
char *group);
void ldap_user_free(User *user);
#ifdef __cplusplus
}
#endif
#endif