The FreeRADIUS server  $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Data Structures | Macros | Enumerations | Functions | Variables
rlm_ldap.c File Reference

LDAP authorization and authentication module. More...

#include <freeradius-devel/util/debug.h>
#include <freeradius-devel/util/table.h>
#include <freeradius-devel/util/uri.h>
#include <freeradius-devel/util/value.h>
#include <freeradius-devel/ldap/conf.h>
#include <freeradius-devel/ldap/base.h>
#include <freeradius-devel/server/map_proc.h>
#include <freeradius-devel/server/module_rlm.h>
#include <freeradius-devel/server/rcode.h>
#include <freeradius-devel/unlang/xlat_func.h>
#include <freeradius-devel/unlang/action.h>
#include <ldap.h>
#include "rlm_ldap.h"
+ Include dependency graph for rlm_ldap.c:

Go to the source code of this file.

Data Structures

struct  ldap_auth_call_env_t
 
struct  ldap_auth_ctx_t
 Holds state of in progress async authentication. More...
 
struct  ldap_map_ctx_t
 Holds state of in progress LDAP map. More...
 
struct  ldap_update_rules_t
 Parameters to allow ldap_update_section_parse to be reused. More...
 
struct  ldap_user_modify_ctx_t
 Holds state of in progress ldap user modifications. More...
 
struct  ldap_usermod_call_env_t
 
struct  ldap_xlat_profile_call_env_t
 Call environment used in the profile xlat. More...
 
struct  ldap_xlat_profile_ctx_t
 

Macros

#define CHECK_EXPANDED_SPACE(_expanded)   fr_assert((size_t)_expanded->count < (NUM_ELEMENTS(_expanded->attrs) - 1));
 
#define LDAP_URI_SAFE_FOR   (fr_value_box_safe_for_t)fr_ldap_uri_escape_func
 This is the common function that actually ends up doing all the URI escaping. More...
 
#define REPEAT_LDAP_MEMBEROF_XLAT_RESULTS
 
#define REPEAT_MOD_AUTHORIZE_RESUME
 
#define USER_CALL_ENV_COMMON(_struct)
 

Enumerations

enum  ldap_schemes_t {
  LDAP_SCHEME_UNIX = 0 ,
  LDAP_SCHEME_TCP ,
  LDAP_SCHEME_TCP_SSL
}
 

Functions

static int autz_ctx_free (ldap_autz_ctx_t *autz_ctx)
 Ensure authorization context is properly cleared up. More...
 
static char * host_uri_canonify (request_t *request, LDAPURLDesc *url_parsed, fr_value_box_t *url_in)
 Produce canonical LDAP host URI for finding trunks. More...
 
static int ldap_group_filter_parse (TALLOC_CTX *ctx, void *out, tmpl_rules_t const *t_rules, CONF_ITEM *ci, UNUSED char const *section_name1, UNUSED char const *section_name2, void const *data, UNUSED call_env_parser_t const *rule)
 
static int ldap_group_filter_parse (TALLOC_CTX *ctx, void *out, tmpl_rules_t const *t_rules, UNUSED CONF_ITEM *ci, UNUSED char const *section_name1, UNUSED char const *section_name2, void const *data, UNUSED call_env_parser_t const *rule)
 
static int ldap_map_verify (CONF_SECTION *cs, UNUSED void *mod_inst, UNUSED void *proc_inst, tmpl_t const *src, UNUSED map_list_t const *maps)
 
static xlat_action_t ldap_memberof_xlat (TALLOC_CTX *ctx, fr_dcursor_t *out, xlat_ctx_t const *xctx, request_t *request, fr_value_box_list_t *in)
 Check for a user being in a LDAP group. More...
 
static void ldap_memberof_xlat_cancel (UNUSED request_t *request, UNUSED fr_signal_t action, void *uctx)
 Cancel an in-progress query for the LDAP group membership xlat. More...
 
static unlang_action_t ldap_memberof_xlat_results (rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
 Run the state machine for the LDAP membership xlat. More...
 
static xlat_action_t ldap_memberof_xlat_resume (TALLOC_CTX *ctx, fr_dcursor_t *out, xlat_ctx_t const *xctx, UNUSED request_t *request, UNUSED fr_value_box_list_t *in)
 Process the results of evaluating LDAP group membership. More...
 
static unlang_action_t ldap_memberof_xlat_user_find (UNUSED rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
 User object lookup as part of group membership xlat. More...
 
static xlat_action_t ldap_profile_xlat (UNUSED TALLOC_CTX *ctx, UNUSED fr_dcursor_t *out, xlat_ctx_t const *xctx, request_t *request, fr_value_box_list_t *in)
 Expand an LDAP URL into a query, applying the results using the user update map. More...
 
static xlat_action_t ldap_profile_xlat_resume (TALLOC_CTX *ctx, fr_dcursor_t *out, xlat_ctx_t const *xctx, UNUSED request_t *request, UNUSED fr_value_box_list_t *in)
 Return whether evaluating the profile was successful. More...
 
static void ldap_query_timeout (UNUSED fr_event_list_t *el, UNUSED fr_time_t now, void *uctx)
 Callback when LDAP query times out. More...
 
static int ldap_update_section_parse (TALLOC_CTX *ctx, call_env_parsed_head_t *out, tmpl_rules_t const *t_rules, CONF_ITEM *ci, char const *section_name1, char const *section_name2, void const *data, call_env_parser_t const *rule)
 
static int ldap_update_section_parse (TALLOC_CTX *ctx, call_env_parsed_head_t *out, tmpl_rules_t const *t_rules, CONF_ITEM *ci, UNUSED char const *section_name1, UNUSED char const *section_name2, UNUSED void const *data, call_env_parser_t const *rule)
 
static xlat_action_t ldap_uri_escape_xlat (TALLOC_CTX *ctx, fr_dcursor_t *out, UNUSED xlat_ctx_t const *xctx, request_t *request, fr_value_box_list_t *in)
 Escape LDAP string. More...
 
static int ldap_uri_part_escape (fr_value_box_t *vb, UNUSED void *uctx)
 Escape function for a part of an LDAP URI. More...
 
static xlat_action_t ldap_uri_unescape_xlat (TALLOC_CTX *ctx, fr_dcursor_t *out, UNUSED xlat_ctx_t const *xctx, request_t *request, fr_value_box_list_t *in)
 Unescape LDAP string. More...
 
static xlat_action_t ldap_xlat (UNUSED TALLOC_CTX *ctx, UNUSED fr_dcursor_t *out, xlat_ctx_t const *xctx, request_t *request, fr_value_box_list_t *in)
 Expand an LDAP URL into a query, and return a string result from that query. More...
 
static int ldap_xlat_profile_ctx_free (ldap_xlat_profile_ctx_t *to_free)
 
static xlat_action_t ldap_xlat_resume (TALLOC_CTX *ctx, fr_dcursor_t *out, xlat_ctx_t const *xctx, request_t *request, UNUSED fr_value_box_list_t *in)
 Callback when resuming after async ldap query is completed. More...
 
static void ldap_xlat_signal (xlat_ctx_t const *xctx, request_t *request, UNUSED fr_signal_t action)
 Callback for signalling async ldap query. More...
 
static int map_ctx_free (ldap_map_ctx_t *map_ctx)
 Ensure map context is properly cleared up. More...
 
static unlang_action_t mod_accounting (rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request)
 
static unlang_action_t mod_authenticate (rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request)
 
static unlang_action_t mod_authenticate_resume (rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
 Initiate async LDAP bind to authenticate user. More...
 
static unlang_action_t mod_authenticate_start (rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
 Perform async lookup of user DN if required for authentication. More...
 
static unlang_action_t mod_authorize (rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request)
 
static void mod_authorize_cancel (UNUSED request_t *request, UNUSED fr_signal_t action, void *uctx)
 Clear up when cancelling a mod_authorize call. More...
 
static unlang_action_t mod_authorize_resume (rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
 Resume function called after each potential yield in LDAP authorization. More...
 
static unlang_action_t mod_authorize_start (UNUSED rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
 Start LDAP authorization with async lookup of user DN. More...
 
static int mod_bootstrap (module_inst_ctx_t const *mctx)
 Bootstrap the module. More...
 
static int mod_detach (module_detach_ctx_t const *mctx)
 Detach from the LDAP server and cleanup internal state. More...
 
static int mod_instantiate (module_inst_ctx_t const *mctx)
 Instantiate the module. More...
 
static int mod_load (void)
 
static unlang_action_t mod_map_proc (rlm_rcode_t *p_result, void *mod_inst, UNUSED void *proc_inst, request_t *request, fr_value_box_list_t *url, map_list_t const *maps)
 Perform a search and map the result of the search to server attributes. More...
 
static unlang_action_t mod_map_resume (rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
 Process the results of an LDAP map query. More...
 
static unlang_action_t mod_post_auth (rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request)
 
static int mod_thread_detach (module_thread_inst_ctx_t const *mctx)
 Clean up thread specific data structure. More...
 
static int mod_thread_instantiate (module_thread_inst_ctx_t const *mctx)
 Initialise thread specific data structure. More...
 
static void mod_unload (void)
 
static int parse_sub_section (module_inst_ctx_t const *mctx, CONF_SECTION *parent, ldap_acct_section_t **config, rlm_components_t comp)
 Parse an accounting sub section. More...
 
static unlang_action_t user_modify (rlm_rcode_t *p_result, rlm_ldap_t const *inst, request_t *request, ldap_acct_section_t *section, ldap_usermod_call_env_t *call_env)
 Modify user's object in LDAP. More...
 
static void user_modify_cancel (UNUSED request_t *request, UNUSED fr_signal_t action, void *uctx)
 Cancel an in progress user modification. More...
 
static unlang_action_t user_modify_final (rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
 Handle results of user modification. More...
 
static unlang_action_t user_modify_resume (rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
 Take the retrieved user DN and launch the async modification. More...
 
static unlang_action_t user_modify_start (UNUSED rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
 Perform async lookup of user DN if required for user modification. More...
 

Variables

static const conf_parser_t acct_section_config []
 
fr_dict_attr_t const * attr_cleartext_password
 
fr_dict_attr_t const * attr_crypt_password
 
static fr_dict_attr_t const * attr_expr_bool_enum
 
fr_dict_attr_t const * attr_ldap_userdn
 
fr_dict_attr_t const * attr_nt_password
 
fr_dict_attr_t const * attr_password
 
fr_dict_attr_t const * attr_password_with_header
 
static const call_env_method_t authenticate_method_env
 
static const call_env_method_t authorize_method_env
 
static fr_dict_t const * dict_freeradius
 
static conf_parser_t group_config []
 
static fr_uri_part_t const ldap_dn_parts []
 
static xlat_arg_parser_t const ldap_memberof_xlat_arg []
 
static xlat_arg_parser_t const ldap_safe_xlat_arg []
 
static xlat_arg_parser_t const ldap_uri_escape_xlat_arg []
 
static fr_uri_part_t const ldap_uri_parts []
 
static fr_table_num_sorted_t const ldap_uri_scheme_table []
 
static size_t ldap_uri_scheme_table_len = NUM_ELEMENTS(ldap_uri_scheme_table)
 
static xlat_arg_parser_t const ldap_uri_unescape_xlat_arg []
 
static xlat_arg_parser_t const ldap_xlat_arg []
 
static const conf_parser_t module_config []
 
static conf_parser_t profile_config []
 
module_rlm_t rlm_ldap
 
fr_dict_autoload_t rlm_ldap_dict []
 
fr_dict_attr_autoload_t rlm_ldap_dict_attr []
 
global_lib_autoinst_t const * rlm_ldap_lib []
 
static const call_env_parser_t sasl_call_env []
 
static conf_parser_t user_config []
 
static const call_env_method_t usermod_method_env
 
static const call_env_method_t xlat_memberof_method_env
 
static const call_env_method_t xlat_profile_method_env
 

Detailed Description

LDAP authorization and authentication module.

Id
1ddbddd14042f3cf4d39b53aad88e2ded228dc7f
Author
Arran Cudbard-Bell (a.cud.nosp@m.bard.nosp@m.b@fre.nosp@m.erad.nosp@m.ius.o.nosp@m.rg)
Alan DeKok (aland.nosp@m.@fre.nosp@m.eradi.nosp@m.us.o.nosp@m.rg)
Id
fc789e2174ba69fff74e64324902c39ebeeafd2e
Author
Arran Cudbard-Bell (a.cud.nosp@m.bard.nosp@m.b@fre.nosp@m.erad.nosp@m.ius.o.nosp@m.rg)
Alan DeKok (aland.nosp@m.@fre.nosp@m.eradi.nosp@m.us.o.nosp@m.rg)

Definition in file rlm_ldap.c.


Data Structure Documentation

◆ ldap_auth_call_env_t

struct ldap_auth_call_env_t

Definition at line 52 of file rlm_ldap.c.

+ Collaboration diagram for ldap_auth_call_env_t:
Data Fields
fr_value_box_t password
tmpl_t const * password_tmpl
fr_value_box_t user_base
fr_value_box_t user_filter
fr_value_box_t user_sasl_authname
fr_value_box_t user_sasl_mech
fr_value_box_t user_sasl_proxy
fr_value_box_t user_sasl_realm

◆ ldap_auth_ctx_t

struct ldap_auth_ctx_t

Holds state of in progress async authentication.

Definition at line 341 of file rlm_ldap.c.

+ Collaboration diagram for ldap_auth_ctx_t:
Data Fields
ldap_auth_call_env_t * call_env
char const * dn
rlm_ldap_t const * inst
char const * password
fr_ldap_thread_t * thread

◆ ldap_map_ctx_t

struct ldap_map_ctx_t

Holds state of in progress LDAP map.

Definition at line 366 of file rlm_ldap.c.

+ Collaboration diagram for ldap_map_ctx_t:
Data Fields
fr_ldap_map_exp_t expanded
LDAPURLDesc * ldap_url
map_list_t const * maps
fr_ldap_query_t * query

◆ ldap_update_rules_t

struct ldap_update_rules_t

Parameters to allow ldap_update_section_parse to be reused.

Definition at line 203 of file rlm_ldap.c.

Data Fields
ssize_t expect_password_offset
size_t map_offset

◆ ldap_user_modify_ctx_t

struct ldap_user_modify_ctx_t

Holds state of in progress ldap user modifications.

Definition at line 352 of file rlm_ldap.c.

+ Collaboration diagram for ldap_user_modify_ctx_t:
Data Fields
ldap_usermod_call_env_t * call_env
char const * dn
rlm_ldap_t const * inst
LDAPMod * mod_p[LDAP_MAX_ATTRMAP+1]
LDAPMod mod_s[LDAP_MAX_ATTRMAP]
char * passed[LDAP_MAX_ATTRMAP *2]
fr_ldap_query_t * query
fr_ldap_thread_trunk_t * ttrunk

◆ ldap_usermod_call_env_t

struct ldap_usermod_call_env_t

Definition at line 63 of file rlm_ldap.c.

+ Collaboration diagram for ldap_usermod_call_env_t:
Data Fields
fr_value_box_t user_base
fr_value_box_t user_filter

◆ ldap_xlat_profile_call_env_t

struct ldap_xlat_profile_call_env_t

Call environment used in the profile xlat.

Definition at line 70 of file rlm_ldap.c.

+ Collaboration diagram for ldap_xlat_profile_call_env_t:
Data Fields
fr_value_box_t profile_filter Filter to use when searching for users.
map_list_t * profile_map List of maps to apply to the profile.

◆ ldap_xlat_profile_ctx_t

struct ldap_xlat_profile_ctx_t

Definition at line 977 of file rlm_ldap.c.

+ Collaboration diagram for ldap_xlat_profile_ctx_t:
Data Fields
fr_ldap_map_exp_t expanded
fr_ldap_result_code_t ret
LDAPURLDesc * url

Macro Definition Documentation

◆ CHECK_EXPANDED_SPACE

#define CHECK_EXPANDED_SPACE (   _expanded)    fr_assert((size_t)_expanded->count < (NUM_ELEMENTS(_expanded->attrs) - 1));

◆ LDAP_URI_SAFE_FOR

This is the common function that actually ends up doing all the URI escaping.

Definition at line 388 of file rlm_ldap.c.

◆ REPEAT_LDAP_MEMBEROF_XLAT_RESULTS

#define REPEAT_LDAP_MEMBEROF_XLAT_RESULTS
Value:
rcode = RLM_MODULE_FAIL; \
goto finish; \
} while (0)
#define unlang_function_repeat_set(_request, _repeat)
Set a new repeat function for an existing function frame.
Definition: function.h:89
@ RLM_MODULE_FAIL
Module failed, don't reply.
Definition: rcode.h:42
static unlang_action_t ldap_memberof_xlat_results(rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
Run the state machine for the LDAP membership xlat.
Definition: rlm_ldap.c:818

Definition at line 808 of file rlm_ldap.c.

◆ REPEAT_MOD_AUTHORIZE_RESUME

#define REPEAT_MOD_AUTHORIZE_RESUME
Value:
rcode = RLM_MODULE_FAIL; \
goto finish; \
} while (0)
static unlang_action_t mod_authorize_resume(rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx)
Resume function called after each potential yield in LDAP authorization.
Definition: rlm_ldap.c:1502

Definition at line 1483 of file rlm_ldap.c.

◆ USER_CALL_ENV_COMMON

#define USER_CALL_ENV_COMMON (   _struct)
Value:
{ FR_CALL_ENV_OFFSET("base_dn", FR_TYPE_STRING, CALL_ENV_FLAG_REQUIRED | CALL_ENV_FLAG_CONCAT, _struct, user_base), .pair.dflt = "", .pair.dflt_quote = T_SINGLE_QUOTED_STRING }, \
{ FR_CALL_ENV_OFFSET("filter", FR_TYPE_STRING, CALL_ENV_FLAG_NULLABLE | CALL_ENV_FLAG_CONCAT, _struct, user_filter), .pair.dflt = "(&)", .pair.dflt_quote = T_SINGLE_QUOTED_STRING }
@ CALL_ENV_FLAG_CONCAT
If the tmpl produced multiple boxes they should be concatenated.
Definition: call_env.h:74
@ CALL_ENV_FLAG_REQUIRED
Associated conf pair or section is required.
Definition: call_env.h:73
@ CALL_ENV_FLAG_NULLABLE
Tmpl expansions are allowed to produce no output.
Definition: call_env.h:78
#define FR_CALL_ENV_OFFSET(_name, _cast_type, _flags, _struct, _field)
Specify a call_env_parser_t which writes out runtime results to the specified field.
Definition: call_env.h:316
@ FR_TYPE_STRING
String of printable characters.
Definition: merged_model.c:83
@ T_SINGLE_QUOTED_STRING
Definition: token.h:122

Definition at line 180 of file rlm_ldap.c.

Enumeration Type Documentation

◆ ldap_schemes_t

Enumerator
LDAP_SCHEME_UNIX 
LDAP_SCHEME_TCP 
LDAP_SCHEME_TCP_SSL 

Definition at line 373 of file rlm_ldap.c.

Function Documentation

◆ autz_ctx_free()

static int autz_ctx_free ( ldap_autz_ctx_t autz_ctx)
static

Ensure authorization context is properly cleared up.

Definition at line 1796 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ host_uri_canonify()

static char* host_uri_canonify ( request_t request,
LDAPURLDesc *  url_parsed,
fr_value_box_t url_in 
)
inlinestatic

Produce canonical LDAP host URI for finding trunks.

Definition at line 643 of file rlm_ldap.c.

+ Here is the caller graph for this function:

◆ ldap_group_filter_parse() [1/2]

static int ldap_group_filter_parse ( TALLOC_CTX *  ctx,
void *  out,
tmpl_rules_t const *  t_rules,
CONF_ITEM ci,
UNUSED char const *  section_name1,
UNUSED char const *  section_name2,
void const *  data,
UNUSED call_env_parser_t const *  rule 
)
static

◆ ldap_group_filter_parse() [2/2]

static int ldap_group_filter_parse ( TALLOC_CTX *  ctx,
void *  out,
tmpl_rules_t const *  t_rules,
UNUSED CONF_ITEM ci,
UNUSED char const *  section_name1,
UNUSED char const *  section_name2,
void const *  data,
UNUSED call_env_parser_t const *  rule 
)
static

Definition at line 2460 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ ldap_map_verify()

static int ldap_map_verify ( CONF_SECTION cs,
UNUSED void *  mod_inst,
UNUSED void *  proc_inst,
tmpl_t const *  src,
UNUSED map_list_t const *  maps 
)
static

Definition at line 1142 of file rlm_ldap.c.

+ Here is the caller graph for this function:

◆ ldap_memberof_xlat_cancel()

static void ldap_memberof_xlat_cancel ( UNUSED request_t request,
UNUSED fr_signal_t  action,
void *  uctx 
)
static

Cancel an in-progress query for the LDAP group membership xlat.

Definition at line 799 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ldap_memberof_xlat_results()

static unlang_action_t ldap_memberof_xlat_results ( rlm_rcode_t p_result,
UNUSED int *  priority,
request_t request,
void *  uctx 
)
static

Run the state machine for the LDAP membership xlat.

This is called after each async lookup is completed

Definition at line 818 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ldap_memberof_xlat_resume()

static xlat_action_t ldap_memberof_xlat_resume ( TALLOC_CTX *  ctx,
fr_dcursor_t out,
xlat_ctx_t const *  xctx,
UNUSED request_t request,
UNUSED fr_value_box_list_t *  in 
)
static

Process the results of evaluating LDAP group membership.

Definition at line 866 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ldap_memberof_xlat_user_find()

static unlang_action_t ldap_memberof_xlat_user_find ( UNUSED rlm_rcode_t p_result,
UNUSED int *  priority,
request_t request,
void *  uctx 
)
static

User object lookup as part of group membership xlat.

Called if the ldap membership xlat is used and the user DN is not already known

Definition at line 783 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ldap_profile_xlat_resume()

static xlat_action_t ldap_profile_xlat_resume ( TALLOC_CTX *  ctx,
fr_dcursor_t out,
xlat_ctx_t const *  xctx,
UNUSED request_t request,
UNUSED fr_value_box_list_t *  in 
)
static

Return whether evaluating the profile was successful.

Definition at line 986 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ldap_query_timeout()

static void ldap_query_timeout ( UNUSED fr_event_list_t el,
UNUSED fr_time_t  now,
void *  uctx 
)
static

Callback when LDAP query times out.

Definition at line 526 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ldap_update_section_parse() [1/2]

static int ldap_update_section_parse ( TALLOC_CTX *  ctx,
call_env_parsed_head_t *  out,
tmpl_rules_t const *  t_rules,
CONF_ITEM ci,
char const *  section_name1,
char const *  section_name2,
void const *  data,
call_env_parser_t const *  rule 
)
static

◆ ldap_update_section_parse() [2/2]

static int ldap_update_section_parse ( TALLOC_CTX *  ctx,
call_env_parsed_head_t *  out,
tmpl_rules_t const *  t_rules,
CONF_ITEM ci,
UNUSED char const *  section_name1,
UNUSED char const *  section_name2,
UNUSED void const *  data,
call_env_parser_t const *  rule 
)
static

Definition at line 2381 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ ldap_uri_part_escape()

static int ldap_uri_part_escape ( fr_value_box_t vb,
UNUSED void *  uctx 
)
static

Escape function for a part of an LDAP URI.

Definition at line 496 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ ldap_xlat_profile_ctx_free()

static int ldap_xlat_profile_ctx_free ( ldap_xlat_profile_ctx_t to_free)
static

Definition at line 999 of file rlm_ldap.c.

+ Here is the caller graph for this function:

◆ ldap_xlat_resume()

static xlat_action_t ldap_xlat_resume ( TALLOC_CTX *  ctx,
fr_dcursor_t out,
xlat_ctx_t const *  xctx,
request_t request,
UNUSED fr_value_box_list_t *  in 
)
static

Callback when resuming after async ldap query is completed.

Definition at line 552 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ldap_xlat_signal()

static void ldap_xlat_signal ( xlat_ctx_t const *  xctx,
request_t request,
UNUSED fr_signal_t  action 
)
static

Callback for signalling async ldap query.

Definition at line 599 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ map_ctx_free()

static int map_ctx_free ( ldap_map_ctx_t map_ctx)
static

Ensure map context is properly cleared up.

Definition at line 1255 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mod_accounting()

static unlang_action_t mod_accounting ( rlm_rcode_t p_result,
module_ctx_t const *  mctx,
request_t request 
)
static

Definition at line 2154 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ mod_authenticate()

static unlang_action_t mod_authenticate ( rlm_rcode_t p_result,
module_ctx_t const *  mctx,
request_t request 
)
static

Definition at line 1423 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ mod_authenticate_resume()

static unlang_action_t mod_authenticate_resume ( rlm_rcode_t p_result,
UNUSED int *  priority,
request_t request,
void *  uctx 
)
static

Initiate async LDAP bind to authenticate user.

Definition at line 1380 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mod_authenticate_start()

static unlang_action_t mod_authenticate_start ( rlm_rcode_t p_result,
UNUSED int *  priority,
request_t request,
void *  uctx 
)
static

Perform async lookup of user DN if required for authentication.

Definition at line 1362 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mod_authorize()

static unlang_action_t mod_authorize ( rlm_rcode_t p_result,
module_ctx_t const *  mctx,
request_t request 
)
static

Definition at line 1803 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ mod_authorize_cancel()

static void mod_authorize_cancel ( UNUSED request_t request,
UNUSED fr_signal_t  action,
void *  uctx 
)
static

Clear up when cancelling a mod_authorize call.

Definition at line 1786 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mod_authorize_resume()

static unlang_action_t mod_authorize_resume ( rlm_rcode_t p_result,
UNUSED int *  priority,
request_t request,
void *  uctx 
)
static

Resume function called after each potential yield in LDAP authorization.

Some operations may or may not yield. E.g. if group membership is read from an attribute returned with the user object and is already in the correct form, that will not yield. Hence, each state may fall through to the next.

Parameters
p_resultResult of current authorization.
priorityUnused.
requestCurrent request.
uctxCurrent authorization context.
Returns
One of the RLM_MODULE_* values.

Definition at line 1502 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mod_authorize_start()

static unlang_action_t mod_authorize_start ( UNUSED rlm_rcode_t p_result,
UNUSED int *  priority,
request_t request,
void *  uctx 
)
static

Start LDAP authorization with async lookup of user DN.

Definition at line 1474 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mod_bootstrap()

static int mod_bootstrap ( module_inst_ctx_t const *  mctx)
static

Bootstrap the module.

Define attributes.

Parameters
[in]mctxconfiguration data.
Returns
  • 0 on success.
  • < 0 on failure.

Definition at line 2296 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ mod_detach()

static int mod_detach ( module_detach_ctx_t const *  mctx)
static

Detach from the LDAP server and cleanup internal state.

Definition at line 2178 of file rlm_ldap.c.

◆ mod_instantiate()

static int mod_instantiate ( module_inst_ctx_t const *  mctx)
static

Instantiate the module.

Creates a new instance of the module reading parameters from a configuration section.

Parameters
[in]mctxconfiguration data.
Returns
  • 0 on success.
  • < 0 on failure.

Definition at line 2483 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ mod_load()

static int mod_load ( void  )
static

Definition at line 2676 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ mod_map_proc()

static unlang_action_t mod_map_proc ( rlm_rcode_t p_result,
void *  mod_inst,
UNUSED void *  proc_inst,
request_t request,
fr_value_box_list_t *  url,
map_list_t const *  maps 
)
static

Perform a search and map the result of the search to server attributes.

Unlike LDAP xlat, this can be used to process attributes from multiple entries.

Todo:
For xlat expansions we need to parse the raw URL first, and then apply different escape functions to the different parts.
Parameters
[out]p_resultResult of map expansion:
[in]mod_instrlm_ldap_t
[in]proc_instunused.
[in,out]requestThe current request.
[in]urlLDAP url specifying base DN and filter.
[in]mapsHead of the map list.
Returns
UNLANG_ACTION_CALCULATE_RESULT

Definition at line 1280 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mod_map_resume()

static unlang_action_t mod_map_resume ( rlm_rcode_t p_result,
UNUSED int *  priority,
request_t request,
void *  uctx 
)
static

Process the results of an LDAP map query.

Parameters
[out]p_resultResult of applying the map.
[in]priorityUnused.
[in]requestCurrent request.
[in]uctxMap context.
Returns
One of UNLANG_ACTION_*

Definition at line 1162 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mod_post_auth()

static unlang_action_t mod_post_auth ( rlm_rcode_t p_result,
module_ctx_t const *  mctx,
request_t request 
)
static

Definition at line 2164 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ mod_thread_detach()

static int mod_thread_detach ( module_thread_inst_ctx_t const *  mctx)
static

Clean up thread specific data structure.

Definition at line 2272 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ mod_thread_instantiate()

static int mod_thread_instantiate ( module_thread_inst_ctx_t const *  mctx)
static

Initialise thread specific data structure.

Definition at line 2233 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ mod_unload()

static void mod_unload ( void  )
static

Definition at line 2697 of file rlm_ldap.c.

+ Here is the call graph for this function:

◆ parse_sub_section()

static int parse_sub_section ( module_inst_ctx_t const *  mctx,
CONF_SECTION parent,
ldap_acct_section_t **  config,
rlm_components_t  comp 
)
static

Parse an accounting sub section.

Allocate a new ldap_acct_section_t and write the config data into it.

Parameters
[in]mctxrlm_ldap configuration.
[in]parentof the config section.
[out]configto write the sub section parameters to.
[in]compThe section name were parsing the config for.
Returns
  • 0 on success.
  • < 0 on failure.

Definition at line 2199 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ user_modify()

static unlang_action_t user_modify ( rlm_rcode_t p_result,
rlm_ldap_t const *  inst,
request_t request,
ldap_acct_section_t section,
ldap_usermod_call_env_t call_env 
)
static

Modify user's object in LDAP.

Process a modification map to update a user object in the LDAP directory.

Parameters
[out]p_resultthe result of the modification.
[in]instrlm_ldap instance.
[in]requestCurrent request.
[in]sectionthat holds the map to process.
[in]call_envCall environment. Contains expanded base and filter to find user.
Returns
one of the RLM_MODULE_* values.

Definition at line 1959 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ user_modify_cancel()

static void user_modify_cancel ( UNUSED request_t request,
UNUSED fr_signal_t  action,
void *  uctx 
)
static

Cancel an in progress user modification.

Definition at line 1882 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ user_modify_final()

static unlang_action_t user_modify_final ( rlm_rcode_t p_result,
UNUSED int *  priority,
request_t request,
void *  uctx 
)
static

Handle results of user modification.

Definition at line 1894 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ user_modify_resume()

static unlang_action_t user_modify_resume ( rlm_rcode_t p_result,
UNUSED int *  priority,
request_t request,
void *  uctx 
)
static

Take the retrieved user DN and launch the async modification.

Definition at line 1923 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ user_modify_start()

static unlang_action_t user_modify_start ( UNUSED rlm_rcode_t p_result,
UNUSED int *  priority,
request_t request,
void *  uctx 
)
static

Perform async lookup of user DN if required for user modification.

Definition at line 1870 of file rlm_ldap.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ acct_section_config

const conf_parser_t acct_section_config[]
static
Initial value:
= {
{ FR_CONF_OFFSET_FLAGS("reference", CONF_FLAG_XLAT, ldap_acct_section_t, reference), .dflt = "." },
}
#define CONF_PARSER_TERMINATOR
Definition: cf_parse.h:626
#define FR_CONF_OFFSET_FLAGS(_name, _flags, _struct, _field)
conf_parser_t which parses a single CONF_PAIR, writing the result to a field in a struct
Definition: cf_parse.h:256
@ CONF_FLAG_XLAT
string will be dynamically expanded.
Definition: cf_parse.h:417

Definition at line 134 of file rlm_ldap.c.

◆ attr_cleartext_password

fr_dict_attr_t const* attr_cleartext_password

Definition at line 312 of file rlm_ldap.c.

◆ attr_crypt_password

fr_dict_attr_t const* attr_crypt_password

Definition at line 313 of file rlm_ldap.c.

◆ attr_expr_bool_enum

fr_dict_attr_t const* attr_expr_bool_enum
static

Definition at line 317 of file rlm_ldap.c.

◆ attr_ldap_userdn

fr_dict_attr_t const* attr_ldap_userdn

Definition at line 314 of file rlm_ldap.c.

◆ attr_nt_password

fr_dict_attr_t const* attr_nt_password

Definition at line 315 of file rlm_ldap.c.

◆ attr_password

fr_dict_attr_t const* attr_password

Definition at line 311 of file rlm_ldap.c.

◆ attr_password_with_header

fr_dict_attr_t const* attr_password_with_header

Definition at line 316 of file rlm_ldap.c.

◆ authenticate_method_env

const call_env_method_t authenticate_method_env
static
Initial value:
= {
.env = (call_env_parser_t[]) {
{ FR_CALL_ENV_PARSE_OFFSET("password_attribute", FR_TYPE_STRING,
ldap_auth_call_env_t, password, password_tmpl),
.pair.dflt = "&User-Password", .pair.dflt_quote = T_BARE_WORD },
})) },
}
}
#define CALL_ENV_TERMINATOR
Definition: call_env.h:212
#define FR_CALL_ENV_PARSE_OFFSET(_name, _cast_type, _flags, _struct, _field, _parse_field)
Specify a call_env_parser_t which writes out runtime results and the result of the parsing phase to t...
Definition: call_env.h:341
#define FR_CALL_ENV_METHOD_OUT(_inst)
Helper macro for populating the size/type fields of a call_env_method_t from the output structure typ...
Definition: call_env.h:216
@ CALL_ENV_FLAG_ATTRIBUTE
Tmpl must contain an attribute reference.
Definition: call_env.h:84
@ CALL_ENV_FLAG_NONE
Definition: call_env.h:72
#define FR_CALL_ENV_SUBSECTION(_name, _ident2, _flags, _subcs)
Specify a call_env_parser_t which defines a nested subsection.
Definition: call_env.h:378
Per method call config.
Definition: call_env.h:171
#define USER_CALL_ENV_COMMON(_struct)
Definition: rlm_ldap.c:180
static const call_env_parser_t sasl_call_env[]
Definition: rlm_ldap.c:79
@ T_BARE_WORD
Definition: token.h:120

Definition at line 184 of file rlm_ldap.c.

◆ authorize_method_env

const call_env_method_t authorize_method_env
static

Definition at line 208 of file rlm_ldap.c.

◆ dict_freeradius

fr_dict_t const* dict_freeradius
static

Definition at line 303 of file rlm_ldap.c.

◆ group_config

conf_parser_t group_config[]
static
Initial value:
= {
{ FR_CONF_OFFSET("filter", rlm_ldap_t, group.obj_filter) },
{ FR_CONF_OFFSET("scope", rlm_ldap_t, group.obj_scope), .dflt = "sub",
.func = cf_table_parse_int, .uctx = &(cf_table_parse_ctx_t){ .table = fr_ldap_scope, .len = &fr_ldap_scope_len } },
{ FR_CONF_OFFSET("name_attribute", rlm_ldap_t, group.obj_name_attr), .dflt = "cn" },
{ FR_CONF_OFFSET("membership_attribute", rlm_ldap_t, group.userobj_membership_attr) },
{ FR_CONF_OFFSET_FLAGS("membership_filter", CONF_FLAG_XLAT, rlm_ldap_t, group.obj_membership_filter) },
{ FR_CONF_OFFSET("cacheable_name", rlm_ldap_t, group.cacheable_name), .dflt = "no" },
{ FR_CONF_OFFSET("cacheable_dn", rlm_ldap_t, group.cacheable_dn), .dflt = "no" },
{ FR_CONF_OFFSET("cache_attribute", rlm_ldap_t, group.cache_attribute) },
{ FR_CONF_OFFSET("group_attribute", rlm_ldap_t, group.attribute) },
{ FR_CONF_OFFSET("allow_dangling_group_ref", rlm_ldap_t, group.allow_dangling_refs), .dflt = "no" },
{ FR_CONF_OFFSET("skip_on_suspend", rlm_ldap_t, group.skip_on_suspend), .dflt = "yes"},
}
int cf_table_parse_int(UNUSED TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
Generic function for parsing conf pair values as int.
Definition: cf_parse.c:1474
#define FR_CONF_OFFSET(_name, _struct, _field)
conf_parser_t which parses a single CONF_PAIR, writing the result to a field in a struct
Definition: cf_parse.h:268
size_t fr_ldap_scope_len
Definition: base.c:75
fr_table_num_sorted_t const fr_ldap_scope[]
Definition: base.c:69

Definition at line 114 of file rlm_ldap.c.

◆ ldap_dn_parts

fr_uri_part_t const ldap_dn_parts[]
static
Initial value:
= {
{ .name = "dn", .safe_for = LDAP_URI_SAFE_FOR , .func = ldap_uri_part_escape },
}
static int ldap_uri_part_escape(fr_value_box_t *vb, UNUSED void *uctx)
Escape function for a part of an LDAP URI.
Definition: rlm_ldap.c:496
#define LDAP_URI_SAFE_FOR
This is the common function that actually ends up doing all the URI escaping.
Definition: rlm_ldap.c:388
#define XLAT_URI_PART_TERMINATOR
Definition: uri.h:66

Definition at line 629 of file rlm_ldap.c.

◆ ldap_memberof_xlat_arg

xlat_arg_parser_t const ldap_memberof_xlat_arg[]
static
Initial value:
= {
{ .required = true, .concat = true, .type = FR_TYPE_STRING, .safe_for = LDAP_URI_SAFE_FOR },
}
#define XLAT_ARG_PARSER_TERMINATOR
Definition: xlat.h:166

Definition at line 879 of file rlm_ldap.c.

◆ ldap_safe_xlat_arg

xlat_arg_parser_t const ldap_safe_xlat_arg[]
static
Initial value:
= {
{ .required = true, .concat = true, .type = FR_TYPE_STRING },
}

Definition at line 395 of file rlm_ldap.c.

◆ ldap_uri_escape_xlat_arg

xlat_arg_parser_t const ldap_uri_escape_xlat_arg[]
static
Initial value:
= {
{ .required = true, .concat = true, .type = FR_TYPE_STRING, .safe_for = LDAP_URI_SAFE_FOR },
}

Definition at line 390 of file rlm_ldap.c.

◆ ldap_uri_parts

fr_uri_part_t const ldap_uri_parts[]
static
Initial value:
= {
{ .name = "scheme", .safe_for = LDAP_URI_SAFE_FOR, .terminals = &FR_SBUFF_TERMS(L(":")), .part_adv = { [':'] = 1 }, .extra_skip = 2 },
{ .name = "host", .safe_for = LDAP_URI_SAFE_FOR, .terminals = &FR_SBUFF_TERMS(L(":"), L("/")), .part_adv = { [':'] = 1, ['/'] = 2 } },
{ .name = "port", .safe_for = LDAP_URI_SAFE_FOR, .terminals = &FR_SBUFF_TERMS(L("/")), .part_adv = { ['/'] = 1 } },
{ .name = "dn", .safe_for = LDAP_URI_SAFE_FOR, .terminals = &FR_SBUFF_TERMS(L("?")), .part_adv = { ['?'] = 1 }, .func = ldap_uri_part_escape },
{ .name = "attrs", .safe_for = LDAP_URI_SAFE_FOR, .terminals = &FR_SBUFF_TERMS(L("?")), .part_adv = { ['?'] = 1 }},
{ .name = "scope", .safe_for = LDAP_URI_SAFE_FOR, .terminals = &FR_SBUFF_TERMS(L("?")), .part_adv = { ['?'] = 1 }, .func = ldap_uri_part_escape },
{ .name = "filter", .safe_for = LDAP_URI_SAFE_FOR, .terminals = &FR_SBUFF_TERMS(L("?")), .part_adv = { ['?'] = 1}, .func = ldap_uri_part_escape },
{ .name = "exts", .safe_for = LDAP_URI_SAFE_FOR, .func = ldap_uri_part_escape },
}
#define L(_str)
Helper for initialising arrays of string literals.
Definition: build.h:207
#define FR_SBUFF_TERMS(...)
Initialise a terminal structure with a list of sorted strings.
Definition: sbuff.h:167

Definition at line 617 of file rlm_ldap.c.

◆ ldap_uri_scheme_table

fr_table_num_sorted_t const ldap_uri_scheme_table[]
static
Initial value:
= {
{ L("ldap://"), LDAP_SCHEME_UNIX },
{ L("ldapi://"), LDAP_SCHEME_TCP },
{ L("ldaps://"), LDAP_SCHEME_TCP_SSL },
}
@ LDAP_SCHEME_UNIX
Definition: rlm_ldap.c:374
@ LDAP_SCHEME_TCP_SSL
Definition: rlm_ldap.c:376
@ LDAP_SCHEME_TCP
Definition: rlm_ldap.c:375

Definition at line 379 of file rlm_ldap.c.

◆ ldap_uri_scheme_table_len

size_t ldap_uri_scheme_table_len = NUM_ELEMENTS(ldap_uri_scheme_table)
static

Definition at line 384 of file rlm_ldap.c.

◆ ldap_uri_unescape_xlat_arg

xlat_arg_parser_t const ldap_uri_unescape_xlat_arg[]
static
Initial value:
= {
{ .required = true, .concat = true, .type = FR_TYPE_STRING },
}

Definition at line 450 of file rlm_ldap.c.

◆ ldap_xlat_arg

xlat_arg_parser_t const ldap_xlat_arg[]
static
Initial value:
= {
{ .required = true, .type = FR_TYPE_STRING, .safe_for = LDAP_URI_SAFE_FOR },
}

Definition at line 634 of file rlm_ldap.c.

◆ module_config

const conf_parser_t module_config[]
static

Definition at line 139 of file rlm_ldap.c.

◆ profile_config

conf_parser_t profile_config[]
static
Initial value:
= {
{ FR_CONF_OFFSET("scope", rlm_ldap_t, profile_scope), .dflt = "base",
.func = cf_table_parse_int, .uctx = &(cf_table_parse_ctx_t){ .table = fr_ldap_scope, .len = &fr_ldap_scope_len } },
{ FR_CONF_OFFSET("attribute", rlm_ldap_t, profile_attr) },
{ FR_CONF_OFFSET("attribute_suspend", rlm_ldap_t, profile_attr_suspend) },
}

Definition at line 87 of file rlm_ldap.c.

◆ rlm_ldap

module_rlm_t rlm_ldap

Definition at line 2706 of file rlm_ldap.c.

◆ rlm_ldap_dict

fr_dict_autoload_t rlm_ldap_dict
Initial value:
= {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ NULL }
}
static fr_dict_t const * dict_freeradius
Definition: rlm_ldap.c:303

Definition at line 306 of file rlm_ldap.c.

◆ rlm_ldap_dict_attr

fr_dict_attr_autoload_t rlm_ldap_dict_attr
Initial value:
= {
{ .out = &attr_password, .name = "Password", .type = FR_TYPE_TLV, .dict = &dict_freeradius },
{ .out = &attr_cleartext_password, .name = "Password.Cleartext", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_crypt_password, .name = "Password.Crypt", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_ldap_userdn, .name = "LDAP-UserDN", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_nt_password, .name = "Password.NT", .type = FR_TYPE_OCTETS, .dict = &dict_freeradius },
{ .out = &attr_password_with_header, .name = "Password.With-Header", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_expr_bool_enum, .name = "Expr-Bool-Enum", .type = FR_TYPE_BOOL, .dict = &dict_freeradius },
{ NULL }
}
@ FR_TYPE_TLV
Contains nested attributes.
Definition: merged_model.c:118
@ FR_TYPE_BOOL
A truth value.
Definition: merged_model.c:95
@ FR_TYPE_OCTETS
Raw octets.
Definition: merged_model.c:84
fr_dict_attr_t const * attr_nt_password
Definition: rlm_ldap.c:315
fr_dict_attr_t const * attr_ldap_userdn
Definition: rlm_ldap.c:314
fr_dict_attr_t const * attr_crypt_password
Definition: rlm_ldap.c:313
static fr_dict_attr_t const * attr_expr_bool_enum
Definition: rlm_ldap.c:317
fr_dict_attr_t const * attr_password
Definition: rlm_ldap.c:311
fr_dict_attr_t const * attr_password_with_header
Definition: rlm_ldap.c:316
fr_dict_attr_t const * attr_cleartext_password
Definition: rlm_ldap.c:312

Definition at line 320 of file rlm_ldap.c.

◆ rlm_ldap_lib

global_lib_autoinst_t const * rlm_ldap_lib
Initial value:
= {
}
#define GLOBAL_LIB_TERMINATOR
Definition: global_lib.h:51
global_lib_autoinst_t fr_libldap_global_config
Definition: base.c:134

Definition at line 333 of file rlm_ldap.c.

◆ sasl_call_env

const call_env_parser_t sasl_call_env[]
static
Initial value:

Definition at line 79 of file rlm_ldap.c.

◆ user_config

conf_parser_t user_config[]
static
Initial value:
= {
{ FR_CONF_OFFSET("scope", rlm_ldap_t, user.obj_scope), .dflt = "sub",
.func = cf_table_parse_int, .uctx = &(cf_table_parse_ctx_t){ .table = fr_ldap_scope, .len = &fr_ldap_scope_len } },
{ FR_CONF_OFFSET("sort_by", rlm_ldap_t, user.obj_sort_by) },
{ FR_CONF_OFFSET("access_attribute", rlm_ldap_t, user.obj_access_attr) },
{ FR_CONF_OFFSET("access_positive", rlm_ldap_t, user.access_positive), .dflt = "yes" },
{ FR_CONF_OFFSET("access_value_negate", rlm_ldap_t, user.access_value_negate), .dflt = "false" },
{ FR_CONF_OFFSET("access_value_suspend", rlm_ldap_t, user.access_value_suspend), .dflt = "suspended" },
{ FR_CONF_OFFSET_IS_SET("expect_password", FR_TYPE_BOOL, 0, rlm_ldap_t, user.expect_password) },
}
#define FR_CONF_OFFSET_IS_SET(_name, _type, _flags, _struct, _field)
conf_parser_t which parses a single CONF_PAIR, writing the result to a field in a struct,...
Definition: cf_parse.h:282

Definition at line 98 of file rlm_ldap.c.

◆ usermod_method_env

const call_env_method_t usermod_method_env
static

◆ xlat_memberof_method_env

const call_env_method_t xlat_memberof_method_env
static
Initial value:
= {
.env = (call_env_parser_t[]) {
})) },
.pair.escape = {
},
.pair.literals_safe_for = (fr_value_box_safe_for_t)fr_ldap_box_escape,
},
})) },
}
}
#define FR_CALL_ENV_PARSE_ONLY_OFFSET(_name, _cast_type, _flags, _struct, _parse_field)
Specify a call_env_parser_t which writes out the result of the parsing phase to the field specified.
Definition: call_env.h:365
int fr_ldap_box_escape(fr_value_box_t *vb, UNUSED void *uctx)
Definition: util.c:110
static int ldap_group_filter_parse(TALLOC_CTX *ctx, void *out, tmpl_rules_t const *t_rules, CONF_ITEM *ci, UNUSED char const *section_name1, UNUSED char const *section_name2, void const *data, UNUSED call_env_parser_t const *rule)
Call environment used in group membership xlat.
Definition: rlm_ldap.h:155
@ TMPL_ESCAPE_PRE_CONCAT
Pre-concatenation escaping is useful for DSLs where elements of the expansion are static,...
Definition: tmpl_escape.h:61
uintptr_t fr_value_box_safe_for_t
Escaping that's been applied to a value box.
Definition: value.h:155

Definition at line 259 of file rlm_ldap.c.

◆ xlat_profile_method_env

const call_env_method_t xlat_profile_method_env
static
Initial value:
= {
.env = (call_env_parser_t[]) {
.uctx = &(ldap_update_rules_t){
.map_offset = offsetof(ldap_xlat_profile_call_env_t, profile_map),
.expect_password_offset = -1
} },
.pair.dflt = "(&)", .pair.dflt_quote = T_SINGLE_QUOTED_STRING },
})) },
}
}
#define FR_CALL_ENV_SUBSECTION_FUNC(_name, _ident2, _flags, _func)
Specify a call_env_parser_t which parses a subsection using a callback function.
Definition: call_env.h:388
@ CALL_ENV_FLAG_PARSE_MISSING
If this subsection is missing, still parse it.
Definition: call_env.h:86
#define CF_IDENT_ANY
Definition: cf_util.h:78
static int ldap_update_section_parse(TALLOC_CTX *ctx, call_env_parsed_head_t *out, tmpl_rules_t const *t_rules, CONF_ITEM *ci, char const *section_name1, char const *section_name2, void const *data, call_env_parser_t const *rule)
Parameters to allow ldap_update_section_parse to be reused.
Definition: rlm_ldap.c:203
Call environment used in the profile xlat.
Definition: rlm_ldap.c:70

Definition at line 285 of file rlm_ldap.c.