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

smtp server authentication. More...

#include <freeradius-devel/curl/base.h>
#include <freeradius-devel/server/base.h>
#include <freeradius-devel/server/cf_priv.h>
#include <freeradius-devel/server/global_lib.h>
#include <freeradius-devel/server/module_rlm.h>
#include <freeradius-devel/server/tmpl_dcursor.h>
#include <freeradius-devel/util/slab.h>
#include <freeradius-devel/util/token.h>
#include <freeradius-devel/unlang/call_env.h>
+ Include dependency graph for rlm_smtp.c:

Go to the source code of this file.

Data Structures

struct  fr_mail_ctx_t
 
struct  rlm_smtp_auth_env_t
 Call environment for SMTP authentication. More...
 
struct  rlm_smtp_env_t
 Call environment for sending emails. More...
 
struct  rlm_smtp_t
 
struct  rlm_smtp_thread_t
 

Macros

#define SMTP_COMMON_CLEANUP
 

Functions

static int attachments_source (fr_mail_ctx_t *uctx, curl_mime *mime, rlm_smtp_t const *inst, rlm_smtp_env_t const *call_env)
 
static int body_init (fr_mail_ctx_t *uctx, curl_mime *mime)
 
static size_t body_source (char *ptr, size_t size, size_t nmemb, void *mail_ctx)
 
static int da_to_slist (fr_mail_ctx_t *uctx, struct curl_slist **out, const fr_dict_attr_t *dict_attr)
 
static int generate_from_header (fr_mail_ctx_t *uctx, struct curl_slist **out, rlm_smtp_t const *inst, rlm_smtp_env_t const *call_env)
 Generate the From: header. More...
 
static int header_source (fr_mail_ctx_t *uctx, rlm_smtp_t const *inst, rlm_smtp_env_t const *call_env)
 
static unlang_action_t mod_authenticate (rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request)
 
static int mod_instantiate (module_inst_ctx_t const *mctx)
 
static unlang_action_t mod_mail (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)
 
static int mod_thread_instantiate (module_thread_inst_ctx_t const *mctx)
 
static int recipients_source (fr_mail_ctx_t *uctx, rlm_smtp_env_t const *call_env)
 
static int smtp_conn_common_init (fr_curl_io_request_t *randle, rlm_smtp_t const *inst)
 
static int smtp_header_section_parse (TALLOC_CTX *ctx, call_env_parsed_head_t *out, tmpl_rules_t const *t_rules, CONF_ITEM *ci, UNUSED call_env_ctx_t const *cec, UNUSED call_env_parser_t const *rule)
 Parse the header section into tmpls for producing email headers. More...
 
static unlang_action_t smtp_io_module_resume (rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request)
 Callback to process response of SMTP server. More...
 
static void smtp_io_module_signal (module_ctx_t const *mctx, request_t *request, UNUSED fr_signal_t action)
 
static int smtp_mail_ctx_free (fr_mail_ctx_t *mail_ctx)
 
static int smtp_onetime_conn_alloc (fr_curl_io_request_t *randle, UNUSED void *uctx)
 
static int smtp_onetime_conn_init (fr_curl_io_request_t *randle, void *uctx)
 
static int smtp_onetime_request_cleanup (fr_curl_io_request_t *randle, UNUSED void *uctx)
 
static int smtp_persist_conn_alloc (fr_curl_io_request_t *randle, UNUSED void *uctx)
 
static int smtp_persist_conn_init (fr_curl_io_request_t *randle, void *uctx)
 
static int smtp_persist_request_cleanup (fr_curl_io_request_t *randle, UNUSED void *uctx)
 
static int str_to_attachments (fr_mail_ctx_t *uctx, curl_mime *mime, char const *str, size_t len, fr_sbuff_t *path_buffer, fr_sbuff_marker_t *m)
 
static int value_box_list_to_header (fr_mail_ctx_t *uctx, struct curl_slist **out, fr_value_box_list_t const *lists, const char *prefix)
 Converts an array of value box lists to a curl_slist with a prefix. More...
 
static int value_box_list_to_slist (struct curl_slist **out, fr_value_box_list_t const *lists)
 Transform an array of value box lists to entries in a CURL slist. More...
 

Variables

static fr_dict_attr_t const * attr_smtp_body
 
static fr_dict_attr_t const * attr_smtp_header
 
static const call_env_method_t auth_env
 
static fr_dict_t const * dict_freeradius
 
static const call_env_method_t method_env
 
static const conf_parser_t module_config []
 
module_rlm_t rlm_smtp
 
fr_dict_autoload_t rlm_smtp_dict []
 
fr_dict_attr_autoload_t rlm_smtp_dict_attr []
 
global_lib_autoinst_t const *const rlm_smtp_lib []
 

Detailed Description

smtp server authentication.

Id
c29d039f246b55c2f29abd5e6220f2b7f02c3d6f

Definition in file rlm_smtp.c.


Data Structure Documentation

◆ fr_mail_ctx_t

struct fr_mail_ctx_t

Definition at line 136 of file rlm_smtp.c.

+ Collaboration diagram for fr_mail_ctx_t:
Data Fields
fr_dcursor_t body_cursor
struct curl_slist * body_header
fr_dcursor_t cursor
struct curl_slist * header
curl_mime * mime
fr_curl_io_request_t * randle
struct curl_slist * recipients
request_t * request
fr_time_t time
char time_str[60]
fr_dbuff_t vp_in

◆ rlm_smtp_auth_env_t

struct rlm_smtp_auth_env_t

Call environment for SMTP authentication.

Definition at line 79 of file rlm_smtp.c.

+ Collaboration diagram for rlm_smtp_auth_env_t:
Data Fields
fr_value_box_t password Value to use for password.
tmpl_t * password_tmpl tmpl expanded to populate password
fr_value_box_t username Value to use for user name.
tmpl_t * username_tmpl tmpl expanded to populate username

◆ rlm_smtp_env_t

struct rlm_smtp_env_t

Call environment for sending emails.

Definition at line 64 of file rlm_smtp.c.

+ Collaboration diagram for rlm_smtp_env_t:
Data Fields
fr_value_box_list_t * attachments List of files to attach.
fr_value_box_list_t * bcc_addrs The address(es) used for the Bcc: header.
fr_value_box_list_t * cc_addrs The address(es) used for the Cc: header.
fr_value_box_list_t headers Entries to add to email header.
fr_value_box_t password Password for authenticated mails.
fr_value_box_list_t * recipient_addrs The address(es) used as recipients. Overrides elements in to, cc and bcc.
fr_value_box_list_t * sender_address The address(es) used to generate the From: header.
fr_value_box_list_t * to_addrs The address(es) used for the To: header.
fr_value_box_t username User to authenticate as when sending emails.
tmpl_t * username_tmpl The tmpl used to produce the above.

◆ rlm_smtp_t

struct rlm_smtp_t

Definition at line 86 of file rlm_smtp.c.

+ Collaboration diagram for rlm_smtp_t:
Data Fields
fr_curl_conn_config_t conn_config Reusable CURL handle config.
char const * envelope_address The address used to send the message.
bool set_date
char const * template_dir The directory that contains all email attachments.
fr_time_delta_t timeout Timeout for connection and server response.
fr_curl_tls_t tls Used for handled all tls specific curl components.
char const * uri URI of smtp server.

◆ rlm_smtp_thread_t

struct rlm_smtp_thread_t

Definition at line 126 of file rlm_smtp.c.

+ Collaboration diagram for rlm_smtp_thread_t:
Data Fields
fr_curl_handle_t * mhandle Thread specific multi handle.

Serves as the dispatch and coralling structure for smtp requests

smtp_slab_list_t * slab_onetime Slab list for onetime use connections.
smtp_slab_list_t * slab_persist Slab list for persistent connections.

Macro Definition Documentation

◆ SMTP_COMMON_CLEANUP

#define SMTP_COMMON_CLEANUP
Value:
fr_mail_ctx_t *mail_ctx = talloc_get_type_abort(randle->uctx, fr_mail_ctx_t); \
if (mail_ctx->mime) curl_mime_free(mail_ctx->mime); \
if (mail_ctx->header) curl_slist_free_all(mail_ctx->header); \
if (mail_ctx->recipients) curl_slist_free_all(mail_ctx->recipients)
if(rcode > 0)
Definition: fd_read.h:9
curl_mime * mime
Definition: rlm_smtp.c:149

Definition at line 787 of file rlm_smtp.c.

Function Documentation

◆ attachments_source()

static int attachments_source ( fr_mail_ctx_t uctx,
curl_mime *  mime,
rlm_smtp_t const *  inst,
rlm_smtp_env_t const *  call_env 
)
static

Definition at line 515 of file rlm_smtp.c.

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

◆ body_init()

static int body_init ( fr_mail_ctx_t uctx,
curl_mime *  mime 
)
static

Definition at line 468 of file rlm_smtp.c.

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

◆ body_source()

static size_t body_source ( char *  ptr,
size_t  size,
size_t  nmemb,
void *  mail_ctx 
)
static

Definition at line 427 of file rlm_smtp.c.

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

◆ da_to_slist()

static int da_to_slist ( fr_mail_ctx_t uctx,
struct curl_slist **  out,
const fr_dict_attr_t dict_attr 
)
static

Definition at line 155 of file rlm_smtp.c.

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

◆ generate_from_header()

static int generate_from_header ( fr_mail_ctx_t uctx,
struct curl_slist **  out,
rlm_smtp_t const *  inst,
rlm_smtp_env_t const *  call_env 
)
static

Generate the From: header.

Defaults to using sender_address values, falls back to envelope_address

Definition at line 301 of file rlm_smtp.c.

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

◆ header_source()

static int header_source ( fr_mail_ctx_t uctx,
rlm_smtp_t const *  inst,
rlm_smtp_env_t const *  call_env 
)
static

Definition at line 376 of file rlm_smtp.c.

+ Here is the call graph for this function:
+ Here is the caller 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 748 of file rlm_smtp.c.

+ Here is the call graph for this function:

◆ mod_instantiate()

static int mod_instantiate ( module_inst_ctx_t const *  mctx)
static

Definition at line 777 of file rlm_smtp.c.

◆ mod_mail()

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

Definition at line 632 of file rlm_smtp.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

Definition at line 931 of file rlm_smtp.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

Definition at line 902 of file rlm_smtp.c.

+ Here is the call graph for this function:

◆ recipients_source()

static int recipients_source ( fr_mail_ctx_t uctx,
rlm_smtp_env_t const *  call_env 
)
static

Definition at line 333 of file rlm_smtp.c.

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

◆ smtp_conn_common_init()

static int smtp_conn_common_init ( fr_curl_io_request_t randle,
rlm_smtp_t const *  inst 
)
inlinestatic

Definition at line 849 of file rlm_smtp.c.

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

◆ smtp_header_section_parse()

static int smtp_header_section_parse ( TALLOC_CTX *  ctx,
call_env_parsed_head_t *  out,
tmpl_rules_t const *  t_rules,
CONF_ITEM ci,
UNUSED call_env_ctx_t const *  cec,
UNUSED call_env_parser_t const *  rule 
)
static

Parse the header section into tmpls for producing email headers.

Definition at line 944 of file rlm_smtp.c.

+ Here is the call graph for this function:

◆ smtp_io_module_resume()

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

Callback to process response of SMTP server.

It checks if the response was CURLE_OK If it was, it tries to extract the certificate attributes If the response was not OK, we REJECT the request When responding to requests initiated by mod_authenticate this is simply a check on the username and password. When responding to requests initiated by mod_mail this indicates the mail has been queued.

Definition at line 585 of file rlm_smtp.c.

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

◆ smtp_io_module_signal()

static void smtp_io_module_signal ( module_ctx_t const *  mctx,
request_t request,
UNUSED fr_signal_t  action 
)
static

Definition at line 558 of file rlm_smtp.c.

+ Here is the caller graph for this function:

◆ smtp_mail_ctx_free()

static int smtp_mail_ctx_free ( fr_mail_ctx_t mail_ctx)
static

Definition at line 823 of file rlm_smtp.c.

+ Here is the caller graph for this function:

◆ smtp_onetime_conn_alloc()

static int smtp_onetime_conn_alloc ( fr_curl_io_request_t randle,
UNUSED void *  uctx 
)
static

Definition at line 811 of file rlm_smtp.c.

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

◆ smtp_onetime_conn_init()

static int smtp_onetime_conn_init ( fr_curl_io_request_t randle,
void *  uctx 
)
static

Definition at line 872 of file rlm_smtp.c.

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

◆ smtp_onetime_request_cleanup()

static int smtp_onetime_request_cleanup ( fr_curl_io_request_t randle,
UNUSED void *  uctx 
)
static

Definition at line 793 of file rlm_smtp.c.

+ Here is the caller graph for this function:

◆ smtp_persist_conn_alloc()

static int smtp_persist_conn_alloc ( fr_curl_io_request_t randle,
UNUSED void *  uctx 
)
static

Definition at line 830 of file rlm_smtp.c.

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

◆ smtp_persist_conn_init()

static int smtp_persist_conn_init ( fr_curl_io_request_t randle,
void *  uctx 
)
static

Definition at line 889 of file rlm_smtp.c.

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

◆ smtp_persist_request_cleanup()

static int smtp_persist_request_cleanup ( fr_curl_io_request_t randle,
UNUSED void *  uctx 
)
static

Definition at line 802 of file rlm_smtp.c.

+ Here is the caller graph for this function:

◆ str_to_attachments()

static int str_to_attachments ( fr_mail_ctx_t uctx,
curl_mime *  mime,
char const *  str,
size_t  len,
fr_sbuff_t path_buffer,
fr_sbuff_marker_t m 
)
static

Definition at line 258 of file rlm_smtp.c.

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

◆ value_box_list_to_header()

static int value_box_list_to_header ( fr_mail_ctx_t uctx,
struct curl_slist **  out,
fr_value_box_list_t const *  lists,
const char *  prefix 
)
static

Converts an array of value box lists to a curl_slist with a prefix.

Parameters
uctxMail context.
outCURL slist to write to.
listsArray of value box lists to copy.
prefixto prepend to the output slist
Returns
  • 1 on success
  • 0 if no slist entry was created
  • -1 on failure

Definition at line 207 of file rlm_smtp.c.

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

◆ value_box_list_to_slist()

static int value_box_list_to_slist ( struct curl_slist **  out,
fr_value_box_list_t const *  lists 
)
static

Transform an array of value box lists to entries in a CURL slist.

Definition at line 178 of file rlm_smtp.c.

+ Here is the caller graph for this function:

Variable Documentation

◆ attr_smtp_body

fr_dict_attr_t const* attr_smtp_body
static

Definition at line 47 of file rlm_smtp.c.

◆ attr_smtp_header

fr_dict_attr_t const* attr_smtp_header
static

Definition at line 46 of file rlm_smtp.c.

◆ auth_env

const call_env_method_t auth_env
static
Initial value:
= {
.env = (call_env_parser_t[]) {
{ FR_CALL_ENV_PARSE_OFFSET("username_attribute", FR_TYPE_STRING,
rlm_smtp_auth_env_t, username, username_tmpl), .pair.dflt = "&User-Name", .pair.dflt_quote = T_BARE_WORD },
{ FR_CALL_ENV_PARSE_OFFSET("password_attribute", FR_TYPE_STRING,
rlm_smtp_auth_env_t, password, password_tmpl), .pair.dflt = "&User-Password", .pair.dflt_quote = T_BARE_WORD },
}
}
#define CALL_ENV_TERMINATOR
Definition: call_env.h:231
#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:360
#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:235
@ CALL_ENV_FLAG_CONCAT
If the tmpl produced multiple boxes they should be concatenated.
Definition: call_env.h:76
@ CALL_ENV_FLAG_ATTRIBUTE
Tmpl must contain an attribute reference.
Definition: call_env.h:86
@ CALL_ENV_FLAG_SECRET
The value is a secret, and should not be logged.
Definition: call_env.h:91
@ CALL_ENV_FLAG_REQUIRED
Associated conf pair or section is required.
Definition: call_env.h:75
@ CALL_ENV_FLAG_NULLABLE
Tmpl expansions are allowed to produce no output.
Definition: call_env.h:80
Per method call config.
Definition: call_env.h:175
@ FR_TYPE_STRING
String of printable characters.
Definition: merged_model.c:83
username
Definition: rlm_securid.c:420
Call environment for SMTP authentication.
Definition: rlm_smtp.c:79
@ T_BARE_WORD
Definition: token.h:120

Definition at line 1020 of file rlm_smtp.c.

◆ dict_freeradius

fr_dict_t const* dict_freeradius
static

Definition at line 38 of file rlm_smtp.c.

◆ method_env

const call_env_method_t method_env
static
Initial value:
= {
.env = (call_env_parser_t[]) {
.pair.dflt_quote = T_DOUBLE_QUOTED_STRING },
{ FR_CALL_ENV_OFFSET("sender_address", FR_TYPE_STRING, CALL_ENV_FLAG_NONE, rlm_smtp_env_t, sender_address) },
.pair.dflt = "&SMTP-Recipients[*]", .pair.dflt_quote = T_BARE_WORD },
.pair.dflt = "&SMTP-TO[*]", .pair.dflt_quote = T_BARE_WORD },
.pair.dflt = "&SMTP-CC[*]", .pair.dflt_quote = T_BARE_WORD },
.pair.dflt = "&SMTP-BCC[*]", .pair.dflt_quote = T_BARE_WORD },
.pair.dflt = "&SMTP-Attachments[*]", .pair.dflt_quote = T_BARE_WORD },
}
}
@ CALL_ENV_FLAG_SUBSECTION
This is a subsection.
Definition: call_env.h:87
@ CALL_ENV_FLAG_NONE
Definition: call_env.h:74
#define FR_CALL_ENV_SUBSECTION_FUNC(_name, _name2, _flags, _func)
Specify a call_env_parser_t which parses a subsection using a callback function.
Definition: call_env.h:407
#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:335
#define CF_IDENT_ANY
Definition: cf_util.h:78
static int smtp_header_section_parse(TALLOC_CTX *ctx, call_env_parsed_head_t *out, tmpl_rules_t const *t_rules, CONF_ITEM *ci, UNUSED call_env_ctx_t const *cec, UNUSED call_env_parser_t const *rule)
Parse the header section into tmpls for producing email headers.
Definition: rlm_smtp.c:944
Call environment for sending emails.
Definition: rlm_smtp.c:64
@ T_DOUBLE_QUOTED_STRING
Definition: token.h:121

Definition at line 997 of file rlm_smtp.c.

◆ module_config

const conf_parser_t module_config[]
static
Initial value:
= {
{ FR_CONF_OFFSET("uri", rlm_smtp_t, uri) },
{ FR_CONF_OFFSET("template_directory", rlm_smtp_t, template_dir) },
{ FR_CONF_OFFSET("envelope_address", rlm_smtp_t, envelope_address) },
{ FR_CONF_OFFSET("timeout", rlm_smtp_t, timeout) },
{ FR_CONF_OFFSET("set_date", rlm_smtp_t, set_date), .dflt = "yes" },
{ FR_CONF_OFFSET_SUBSECTION("connection", 0, rlm_smtp_t, conn_config, fr_curl_conn_config) },
}
#define CONF_PARSER_TERMINATOR
Definition: cf_parse.h:627
#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
#define FR_CONF_OFFSET_SUBSECTION(_name, _flags, _struct, _field, _subcs)
conf_parser_t which populates a sub-struct using a CONF_SECTION
Definition: cf_parse.h:297
static fr_time_delta_t timeout
Definition: dhcpclient.c:54
conf_parser_t fr_curl_conn_config[]
Definition: base.c:99
conf_parser_t fr_curl_tls_config[]
Definition: base.c:68

Definition at line 102 of file rlm_smtp.c.

◆ rlm_smtp

module_rlm_t rlm_smtp
Initial value:
= {
.common = {
.name = "smtp",
.inst_size = sizeof(rlm_smtp_t),
.thread_inst_size = sizeof(rlm_smtp_thread_t),
.config = module_config,
.instantiate = mod_instantiate,
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach,
},
.method_group = {
.bindings = (module_method_binding_t[]){
{ .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &auth_env },
{ .section = SECTION_NAME("mail", CF_IDENT_ANY), .method = mod_mail, .method_env = &method_env },
}
}
}
#define MODULE_MAGIC_INIT
Stop people using different module/library/server versions together.
Definition: dl_module.h:63
static const call_env_method_t auth_env
Definition: rlm_smtp.c:1020
static unlang_action_t mod_mail(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request)
Definition: rlm_smtp.c:632
static const call_env_method_t method_env
Definition: rlm_smtp.c:997
static unlang_action_t mod_authenticate(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request)
Definition: rlm_smtp.c:748
static int mod_thread_instantiate(module_thread_inst_ctx_t const *mctx)
Definition: rlm_smtp.c:902
static const conf_parser_t module_config[]
Definition: rlm_smtp.c:102
static int mod_thread_detach(module_thread_inst_ctx_t const *mctx)
Definition: rlm_smtp.c:931
static int mod_instantiate(module_inst_ctx_t const *mctx)
Definition: rlm_smtp.c:777
#define SECTION_NAME(_name1, _name2)
Define a section name consisting of a verb and a noun.
Definition: section.h:40
#define MODULE_BINDING_TERMINATOR
Terminate a module binding list.
Definition: module.h:151
Named methods exported by a module.
Definition: module.h:173

Definition at line 1043 of file rlm_smtp.c.

◆ rlm_smtp_dict

fr_dict_autoload_t rlm_smtp_dict
Initial value:
= {
{ .out = &dict_freeradius, .proto = "freeradius"},
{ NULL }
}
static fr_dict_t const * dict_freeradius
Definition: rlm_smtp.c:38

Definition at line 41 of file rlm_smtp.c.

◆ rlm_smtp_dict_attr

fr_dict_attr_autoload_t rlm_smtp_dict_attr
Initial value:
= {
{ .out = &attr_smtp_header, .name = "SMTP-Mail-Header", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_smtp_body, .name = "SMTP-Mail-Body", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ NULL },
}
static fr_dict_attr_t const * attr_smtp_body
Definition: rlm_smtp.c:47
static fr_dict_attr_t const * attr_smtp_header
Definition: rlm_smtp.c:46

Definition at line 50 of file rlm_smtp.c.

◆ rlm_smtp_lib

global_lib_autoinst_t const *const rlm_smtp_lib
Initial value:
= {
}
#define GLOBAL_LIB_TERMINATOR
Definition: global_lib.h:51
global_lib_autoinst_t fr_curl_autoinst
Definition: base.c:400

Definition at line 57 of file rlm_smtp.c.