#ifndef LDAP_AUTH_H
#define LDAP_AUTH_H
#include "../public/auth.h"
#include <sys/types.h>
#include <ldap.h>
#include <cx/map.h>
#include "config.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;
enum WSLdapGroupMemberType {
WS_LDAP_GROUP_MEMBER_DN =
0,
WS_LDAP_GROUP_MEMBER_UID
};
struct ldap_config {
const char *resource;
const char *basedn;
const char *binddn;
const char *bindpw;
const char *userSearchFilter;
cxstring *uidAttributes;
size_t numUidAttributes;
const char *groupSearchFilter;
cxstring *memberAttributes;
size_t numMemberAttributes;
enum WSLdapGroupMemberType groupMemberType;
WSBool enableGroups;
WSBool userNameIsDN;
};
struct ldap_group_cache {
LDAPGroup *first;
LDAPGroup *last;
CxMap *map;
};
struct ldap_auth_db {
AuthDB authdb;
LDAPConfig config;
LDAPGroupCache groups;
};
struct ldap_user {
User user;
LDAPAuthDB *authdb;
LDAP *ldap;
Session *sn;
Request *rq;
char *userdn;
char *uid_attr;
int uid;
int gid;
};
struct ldap_member {
char *name;
int uid;
};
struct ldap_group {
char *name;
char *dn;
CxMap *members;
time_t update;
};
AuthDB* create_ldap_authdb(ServerConfiguration *cfg,
const char *name, ConfigNode *node);
LDAP* get_ldap_session(Session *sn, Request *rq, LDAPAuthDB *authdb);
User* ldap_get_user(AuthDB *sb, Session *sn, Request *rq,
const char *username);
LDAPGroup* ldap_get_group(Session *sn, Request *rq, LDAPAuthDB *authdb,
const char *group);
int ldap_user_verify_password(User *user,
const char *password);
int ldap_user_check_group(User *user,
const char *group);
void ldap_user_free(User *user);
#ifdef __cplusplus
}
#endif
#endif