Asterisk - The Open Source Telephony Project GIT-master-7921072
Functions | Variables
config_auth.c File Reference
#include "asterisk.h"
#include <pjsip.h>
#include <pjlib.h>
#include "asterisk/res_pjsip.h"
#include "asterisk/logger.h"
#include "asterisk/sorcery.h"
#include "asterisk/cli.h"
#include "include/res_pjsip_private.h"
#include "asterisk/res_pjsip_cli.h"
Include dependency graph for config_auth.c:

Go to the source code of this file.

Functions

static int ami_show_auths (struct mansession *s, const struct message *m)
 
const char * ast_sip_auth_type_to_str (enum ast_sip_auth_type type)
 Converts the given auth type to a string. More...
 
int ast_sip_destroy_sorcery_auth (void)
 
int ast_sip_for_each_auth (const struct ast_sip_auth_vector *vector, ao2_callback_fn on_auth, void *arg)
 For every auth in the array call the given 'on_auth' handler. More...
 
int ast_sip_format_auths_ami (const struct ast_sip_auth_vector *auths, struct ast_sip_ami *ami)
 Format auth details for AMI. More...
 
int ast_sip_initialize_sorcery_auth (void)
 Initialize sorcery with auth support. More...
 
static void * auth_alloc (const char *name)
 
static int auth_apply (const struct ast_sorcery *sorcery, void *obj)
 
static void auth_destroy (void *obj)
 
static int auth_type_handler (const struct aco_option *opt, struct ast_variable *var, void *obj)
 
static int auth_type_to_str (const void *obj, const intptr_t *args, char **buf)
 
static struct ao2_containercli_get_auths (void)
 
static struct ao2_containercli_get_container (const char *regex)
 
static int cli_iterator (void *container, ao2_callback_fn callback, void *args)
 
static int cli_print_body (void *obj, void *arg, int flags)
 
static int cli_print_header (void *obj, void *arg, int flags)
 
static void * cli_retrieve_by_id (const char *id)
 
static int format_ami_auth_handler (void *obj, void *arg, int flags)
 
static int format_ami_authlist_handler (void *obj, void *arg, int flags)
 
static int format_ami_endpoint_auth (const struct ast_sip_endpoint *endpoint, struct ast_sip_ami *ami)
 
static int sip_auth_to_ami (const struct ast_sip_auth *auth, struct ast_str **buf)
 

Variables

static const char * auth_types_map []
 
static struct ast_cli_entry cli_commands []
 
static struct ast_sip_cli_formatter_entrycli_formatter
 
static struct ast_sip_endpoint_formatter endpoint_auth_formatter
 

Function Documentation

◆ ami_show_auths()

static int ami_show_auths ( struct mansession s,
const struct message m 
)
static

Definition at line 247 of file config_auth.c.

248{
249 struct ast_sip_ami ami = { .s = s, .m = m, .action_id = astman_get_header(m, "ActionID"), };
250 struct ao2_container *auths;
251
252 auths = cli_get_auths();
253 if (!auths) {
254 astman_send_error(s, m, "Could not get Auths\n");
255 return 0;
256 }
257
258 if (!ao2_container_count(auths)) {
259 astman_send_error(s, m, "No Auths found\n");
260 ao2_ref(auths, -1);
261 return 0;
262 }
263
264 astman_send_listack(s, m, "A listing of Auths follows, presented as AuthList events",
265 "start");
266
268
269 astman_send_list_complete_start(s, m, "AuthListComplete", ami.count);
271
272 ao2_ref(auths, -1);
273
274 return 0;
275}
#define ao2_callback(c, flags, cb_fn, arg)
ao2_callback() is a generic function that applies cb_fn() to all objects in a container,...
Definition: astobj2.h:1693
int ao2_container_count(struct ao2_container *c)
Returns the number of elements in a container.
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
Definition: astobj2.h:459
@ OBJ_NODATA
Definition: astobj2.h:1044
static int format_ami_authlist_handler(void *obj, void *arg, int flags)
Definition: config_auth.c:226
static struct ao2_container * cli_get_auths(void)
Definition: config_auth.c:216
void astman_send_listack(struct mansession *s, const struct message *m, char *msg, char *listflag)
Send ack in manager transaction to begin a list.
Definition: manager.c:3423
void astman_send_error(struct mansession *s, const struct message *m, char *error)
Send error in manager transaction.
Definition: manager.c:3381
void astman_send_list_complete_start(struct mansession *s, const struct message *m, const char *event_name, int count)
Start the list complete event.
Definition: manager.c:3459
const char * astman_get_header(const struct message *m, char *var)
Get header from manager transaction.
Definition: manager.c:3042
void astman_send_list_complete_end(struct mansession *s)
End the list complete event.
Definition: manager.c:3467
Generic container type.
AMI variable container.
Definition: res_pjsip.h:3047
struct mansession * s
Definition: res_pjsip.h:3049
const struct message * m
Definition: res_pjsip.h:3051

References ao2_callback, ao2_container_count(), ao2_ref, astman_get_header(), astman_send_error(), astman_send_list_complete_end(), astman_send_list_complete_start(), astman_send_listack(), cli_get_auths(), ast_sip_ami::count, format_ami_authlist_handler(), ast_sip_ami::m, OBJ_NODATA, and ast_sip_ami::s.

Referenced by ast_sip_initialize_sorcery_auth().

◆ ast_sip_auth_type_to_str()

const char * ast_sip_auth_type_to_str ( enum ast_sip_auth_type  type)

Converts the given auth type to a string.

Parameters
typethe auth type to convert
Return values
astring representative of the auth type

Definition at line 80 of file config_auth.c.

81{
83 auth_types_map[type] : "";
84}
static const char type[]
Definition: chan_ooh323.c:109
static const char * auth_types_map[]
Definition: config_auth.c:74
#define ARRAY_IN_BOUNDS(v, a)
Checks to see if value is within the bounds of the given array.
Definition: utils.h:687

References ARRAY_IN_BOUNDS, auth_types_map, and type.

Referenced by auth_type_to_str().

◆ ast_sip_destroy_sorcery_auth()

int ast_sip_destroy_sorcery_auth ( void  )

Definition at line 426 of file config_auth.c.

427{
431
432 ast_manager_unregister("PJSIPShowAuths");
433
434 return 0;
435}
int ast_cli_unregister_multiple(struct ast_cli_entry *e, int len)
Unregister multiple commands.
Definition: clicompat.c:30
static struct ast_cli_entry cli_commands[]
Definition: config_auth.c:350
static struct ast_sip_endpoint_formatter endpoint_auth_formatter
Definition: config_auth.c:212
static struct ast_sip_cli_formatter_entry * cli_formatter
Definition: config_auth.c:367
int ast_manager_unregister(const char *action)
Unregister a registered manager command.
Definition: manager.c:8041
void ast_sip_unregister_endpoint_formatter(struct ast_sip_endpoint_formatter *obj)
Unregister an endpoint formatter.
Definition: res_pjsip.c:487
int ast_sip_unregister_cli_formatter(struct ast_sip_cli_formatter_entry *formatter)
Unregisters a CLI formatter.
Definition: pjsip_cli.c:326
#define ARRAY_LEN(a)
Definition: utils.h:666

References ARRAY_LEN, ast_cli_unregister_multiple(), ast_manager_unregister(), ast_sip_unregister_cli_formatter(), ast_sip_unregister_endpoint_formatter(), cli_commands, cli_formatter, and endpoint_auth_formatter.

Referenced by ast_res_pjsip_destroy_configuration().

◆ ast_sip_for_each_auth()

int ast_sip_for_each_auth ( const struct ast_sip_auth_vector array,
ao2_callback_fn  on_auth,
void *  arg 
)

For every auth in the array call the given 'on_auth' handler.

Parameters
arrayan array of auths
on_authcallback for each auth
arguser data passed to handler
Return values
0Success, non-zero on failure

Definition at line 135 of file config_auth.c.

137{
138 int i;
139
140 if (!vector || !AST_VECTOR_SIZE(vector)) {
141 return 0;
142 }
143
144 for (i = 0; i < AST_VECTOR_SIZE(vector); ++i) {
145 /* AST_VECTOR_GET is safe to use since the vector is immutable */
148 AST_VECTOR_GET(vector,i)), ao2_cleanup);
149
150 if (!auth) {
151 continue;
152 }
153
154 if (on_auth(auth, arg, 0)) {
155 return -1;
156 }
157 }
158
159 return 0;
160}
#define ao2_cleanup(obj)
Definition: astobj2.h:1934
#define SIP_SORCERY_AUTH_TYPE
Definition: res_pjsip.h:577
struct ast_sorcery * ast_sip_get_sorcery(void)
Get a pointer to the SIP sorcery structure.
void * ast_sorcery_retrieve_by_id(const struct ast_sorcery *sorcery, const char *type, const char *id)
Retrieve an object using its unique identifier.
Definition: sorcery.c:1853
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.
Definition: utils.h:941
#define AST_VECTOR_SIZE(vec)
Get the number of elements in a vector.
Definition: vector.h:609
#define AST_VECTOR_GET(vec, idx)
Get an element from a vector.
Definition: vector.h:680

References ao2_cleanup, ast_sip_get_sorcery(), ast_sorcery_retrieve_by_id(), AST_VECTOR_GET, AST_VECTOR_SIZE, RAII_VAR, and SIP_SORCERY_AUTH_TYPE.

Referenced by ast_sip_format_auths_ami(), and cli_iterator().

◆ ast_sip_format_auths_ami()

int ast_sip_format_auths_ami ( const struct ast_sip_auth_vector auths,
struct ast_sip_ami ami 
)

Format auth details for AMI.

Parameters
authsan auth array
amiami variable container
Return values
0Success, non-zero on failure

Definition at line 195 of file config_auth.c.

197{
199}
static int format_ami_auth_handler(void *obj, void *arg, int flags)
Definition: config_auth.c:168
int ast_sip_for_each_auth(const struct ast_sip_auth_vector *vector, ao2_callback_fn on_auth, void *arg)
For every auth in the array call the given 'on_auth' handler.
Definition: config_auth.c:135

References ast_sip_for_each_auth(), and format_ami_auth_handler().

Referenced by ami_outbound_registration_task(), and format_ami_endpoint_auth().

◆ ast_sip_initialize_sorcery_auth()

int ast_sip_initialize_sorcery_auth ( void  )

Initialize sorcery with auth support.

Definition at line 370 of file config_auth.c.

371{
373
374 ast_sorcery_apply_default(sorcery, SIP_SORCERY_AUTH_TYPE, "config", "pjsip.conf,criteria=type=auth");
375
377 return -1;
378 }
379
381 OPT_NOOP_T, 0, 0);
383 "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_auth, auth_user));
385 "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_auth, auth_pass));
387 "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_auth, refresh_token));
389 "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_auth, oauth_clientid));
391 "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_auth, oauth_secret));
393 "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_auth, md5_creds));
395 "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_auth, realm));
397 "32", OPT_UINT_T, 0, FLDSET(struct ast_sip_auth, nonce_lifetime));
399 "userpass", auth_type_handler, auth_type_to_str, NULL, 0, 0);
400
402
404 if (!cli_formatter) {
405 ast_log(LOG_ERROR, "Unable to allocate memory for cli formatter\n");
406 return -1;
407 }
415
418
420 return -1;
421 }
422
423 return 0;
424}
#define ast_log
Definition: astobj2.c:42
#define ao2_alloc(data_size, destructor_fn)
Definition: astobj2.h:409
#define ast_cli_register_multiple(e, len)
Register multiple commands.
Definition: cli.h:265
static int cli_print_header(void *obj, void *arg, int flags)
Definition: config_auth.c:311
static int cli_iterator(void *container, ao2_callback_fn callback, void *args)
Definition: config_auth.c:301
static void * auth_alloc(const char *name)
Definition: config_auth.c:36
static void * cli_retrieve_by_id(const char *id)
Definition: config_auth.c:306
static int auth_type_handler(const struct aco_option *opt, struct ast_variable *var, void *obj)
Definition: config_auth.c:52
static int auth_apply(const struct ast_sorcery *sorcery, void *obj)
Definition: config_auth.c:93
static struct ao2_container * cli_get_container(const char *regex)
Definition: config_auth.c:277
static int cli_print_body(void *obj, void *arg, int flags)
Definition: config_auth.c:326
static int ami_show_auths(struct mansession *s, const struct message *m)
Definition: config_auth.c:247
static int auth_type_to_str(const void *obj, const intptr_t *args, char **buf)
Definition: config_auth.c:86
#define STRFLDSET(type,...)
Convert a struct and a list of stringfield fields to an argument list of field offsets.
#define FLDSET(type,...)
Convert a struct and list of fields to an argument list of field offsets.
@ OPT_UINT_T
Type for default option handler for unsigned integers.
@ OPT_NOOP_T
Type for a default handler that should do nothing.
@ OPT_STRINGFIELD_T
Type for default option handler for stringfields.
#define LOG_ERROR
#define EVENT_FLAG_SYSTEM
Definition: manager.h:75
#define ast_manager_register_xml(action, authority, func)
Register a manager callback using XML documentation to describe the manager.
Definition: manager.h:191
void ast_sip_register_endpoint_formatter(struct ast_sip_endpoint_formatter *obj)
Register an endpoint formatter.
Definition: res_pjsip.c:481
int ast_sip_register_cli_formatter(struct ast_sip_cli_formatter_entry *formatter)
Registers a CLI formatter.
Definition: pjsip_cli.c:310
static struct ast_sorcery * sorcery
#define NULL
Definition: resample.c:96
const char * ast_sorcery_object_get_id(const void *object)
Get the unique identifier of a sorcery object.
Definition: sorcery.c:2312
#define ast_sorcery_object_register(sorcery, type, alloc, transform, apply)
Register an object type.
Definition: sorcery.h:837
#define ast_sorcery_object_field_register_custom(sorcery, type, name, default_val, config_handler, sorcery_handler, multiple_handler, flags,...)
Register a field within an object with custom handlers.
Definition: sorcery.h:1005
#define ast_sorcery_object_field_register(sorcery, type, name, default_val, opt_type, flags,...)
Register a field within an object.
Definition: sorcery.h:955
#define ast_sorcery_apply_default(sorcery, type, name, data)
Definition: sorcery.h:476
CLI Formatter Registry Entry.
Definition: res_pjsip_cli.h:52
int(* iterate)(void *container, ao2_callback_fn callback, void *args)
Definition: res_pjsip_cli.h:66
ao2_callback_fn * print_header
Definition: res_pjsip_cli.h:60
void *(* retrieve_by_id)(const char *id)
Definition: res_pjsip_cli.h:68
const char *(* get_id)(const void *obj)
Definition: res_pjsip_cli.h:70
const char * name
Definition: res_pjsip_cli.h:58
ao2_callback_fn * print_body
Definition: res_pjsip_cli.h:62
struct ao2_container *(* get_container)(const char *regex)
Definition: res_pjsip_cli.h:64
Full structure for sorcery.
Definition: sorcery.c:230

References ami_show_auths(), ao2_alloc, ARRAY_LEN, ast_cli_register_multiple, ast_log, ast_manager_register_xml, ast_sip_get_sorcery(), ast_sip_register_cli_formatter(), ast_sip_register_endpoint_formatter(), ast_sorcery_apply_default, ast_sorcery_object_field_register, ast_sorcery_object_field_register_custom, ast_sorcery_object_get_id(), ast_sorcery_object_register, auth_alloc(), auth_apply(), auth_type_handler(), auth_type_to_str(), cli_commands, cli_formatter, cli_get_container(), cli_iterator(), cli_print_body(), cli_print_header(), cli_retrieve_by_id(), endpoint_auth_formatter, EVENT_FLAG_SYSTEM, FLDSET, ast_sip_cli_formatter_entry::get_container, ast_sip_cli_formatter_entry::get_id, ast_sip_cli_formatter_entry::iterate, LOG_ERROR, ast_sip_cli_formatter_entry::name, NULL, OPT_NOOP_T, OPT_STRINGFIELD_T, OPT_UINT_T, ast_sip_cli_formatter_entry::print_body, ast_sip_cli_formatter_entry::print_header, ast_sip_cli_formatter_entry::retrieve_by_id, SIP_SORCERY_AUTH_TYPE, sorcery, and STRFLDSET.

Referenced by ast_res_pjsip_initialize_configuration().

◆ auth_alloc()

static void * auth_alloc ( const char *  name)
static

Definition at line 36 of file config_auth.c.

37{
38 struct ast_sip_auth *auth = ast_sorcery_generic_alloc(sizeof(*auth), auth_destroy);
39
40 if (!auth) {
41 return NULL;
42 }
43
44 if (ast_string_field_init(auth, 64)) {
45 ao2_cleanup(auth);
46 return NULL;
47 }
48
49 return auth;
50}
static void auth_destroy(void *obj)
Definition: config_auth.c:30
void * ast_sorcery_generic_alloc(size_t size, ao2_destructor_fn destructor)
Allocate a generic sorcery capable object.
Definition: sorcery.c:1728
#define ast_string_field_init(x, size)
Initialize a field pool and fields.
Definition: stringfields.h:359

References ao2_cleanup, ast_sorcery_generic_alloc(), ast_string_field_init, auth_destroy(), and NULL.

Referenced by ast_sip_initialize_sorcery_auth().

◆ auth_apply()

static int auth_apply ( const struct ast_sorcery sorcery,
void *  obj 
)
static

Definition at line 93 of file config_auth.c.

94{
95 struct ast_sip_auth *auth = obj;
96 int res = 0;
97
98 if (ast_strlen_zero(auth->auth_user)) {
99 ast_log(LOG_ERROR, "No authentication username for auth '%s'\n",
101 return -1;
102 }
103
104 switch (auth->type) {
106 if (ast_strlen_zero(auth->md5_creds)) {
107 ast_log(LOG_ERROR, "'md5' authentication specified but no md5_cred "
108 "specified for auth '%s'\n", ast_sorcery_object_get_id(auth));
109 res = -1;
110 } else if (strlen(auth->md5_creds) != PJSIP_MD5STRLEN) {
111 ast_log(LOG_ERROR, "'md5' authentication requires digest of size '%d', but "
112 "digest is '%d' in size for auth '%s'\n", PJSIP_MD5STRLEN, (int)strlen(auth->md5_creds),
114 res = -1;
115 }
116 break;
120 || ast_strlen_zero(auth->oauth_secret)) {
121 ast_log(LOG_ERROR, "'google_oauth' authentication specified but refresh_token,"
122 " oauth_clientid, or oauth_secret not specified for auth '%s'\n",
124 res = -1;
125 }
126 break;
129 break;
130 }
131
132 return res;
133}
@ AST_SIP_AUTH_TYPE_GOOGLE_OAUTH
Definition: res_pjsip.h:572
@ AST_SIP_AUTH_TYPE_ARTIFICIAL
Definition: res_pjsip.h:574
@ AST_SIP_AUTH_TYPE_MD5
Definition: res_pjsip.h:570
@ AST_SIP_AUTH_TYPE_USER_PASS
Definition: res_pjsip.h:568
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
const ast_string_field oauth_clientid
Definition: res_pjsip.h:597
const ast_string_field oauth_secret
Definition: res_pjsip.h:597
const ast_string_field md5_creds
Definition: res_pjsip.h:597
const ast_string_field auth_user
Definition: res_pjsip.h:597
const ast_string_field refresh_token
Definition: res_pjsip.h:597
enum ast_sip_auth_type type
Definition: res_pjsip.h:601

References ast_log, AST_SIP_AUTH_TYPE_ARTIFICIAL, AST_SIP_AUTH_TYPE_GOOGLE_OAUTH, AST_SIP_AUTH_TYPE_MD5, AST_SIP_AUTH_TYPE_USER_PASS, ast_sorcery_object_get_id(), ast_strlen_zero(), ast_sip_auth::auth_user, LOG_ERROR, ast_sip_auth::md5_creds, ast_sip_auth::oauth_clientid, ast_sip_auth::oauth_secret, ast_sip_auth::refresh_token, and ast_sip_auth::type.

Referenced by ast_sip_initialize_sorcery_auth().

◆ auth_destroy()

static void auth_destroy ( void *  obj)
static

Definition at line 30 of file config_auth.c.

31{
32 struct ast_sip_auth *auth = obj;
34}
#define ast_string_field_free_memory(x)
free all memory - to be called before destroying the object
Definition: stringfields.h:374

References ast_string_field_free_memory.

Referenced by auth_alloc().

◆ auth_type_handler()

static int auth_type_handler ( const struct aco_option opt,
struct ast_variable var,
void *  obj 
)
static

Definition at line 52 of file config_auth.c.

53{
54 struct ast_sip_auth *auth = obj;
55 if (!strcasecmp(var->value, "userpass")) {
57 } else if (!strcasecmp(var->value, "md5")) {
59 } else if (!strcasecmp(var->value, "google_oauth")) {
60#ifdef HAVE_PJSIP_OAUTH_AUTHENTICATION
62#else
63 ast_log(LOG_WARNING, "OAuth support is not available in the version of PJSIP in use\n");
64 return -1;
65#endif
66 } else {
67 ast_log(LOG_WARNING, "Unknown authentication storage type '%s' specified for %s\n",
68 var->value, var->name);
69 return -1;
70 }
71 return 0;
72}
#define var
Definition: ast_expr2f.c:605
#define LOG_WARNING

References ast_log, AST_SIP_AUTH_TYPE_GOOGLE_OAUTH, AST_SIP_AUTH_TYPE_MD5, AST_SIP_AUTH_TYPE_USER_PASS, LOG_WARNING, ast_sip_auth::type, and var.

Referenced by ast_sip_initialize_sorcery_auth().

◆ auth_type_to_str()

static int auth_type_to_str ( const void *  obj,
const intptr_t *  args,
char **  buf 
)
static

Definition at line 86 of file config_auth.c.

87{
88 const struct ast_sip_auth *auth = obj;
90 return 0;
91}
#define ast_strdup(str)
A wrapper for strdup()
Definition: astmm.h:241
const char * ast_sip_auth_type_to_str(enum ast_sip_auth_type type)
Converts the given auth type to a string.
Definition: config_auth.c:80
char buf[BUFSIZE]
Definition: eagi_proxy.c:66

References ast_sip_auth_type_to_str(), ast_strdup, buf, and ast_sip_auth::type.

Referenced by ast_sip_initialize_sorcery_auth().

◆ cli_get_auths()

static struct ao2_container * cli_get_auths ( void  )
static

Definition at line 216 of file config_auth.c.

217{
218 struct ao2_container *auths;
219
222
223 return auths;
224}
@ AST_RETRIEVE_FLAG_MULTIPLE
Return all matching objects.
Definition: sorcery.h:120
@ AST_RETRIEVE_FLAG_ALL
Perform no matching, return all objects.
Definition: sorcery.h:123
void * ast_sorcery_retrieve_by_fields(const struct ast_sorcery *sorcery, const char *type, unsigned int flags, struct ast_variable *fields)
Retrieve an object or multiple objects using specific fields.
Definition: sorcery.c:1897

References AST_RETRIEVE_FLAG_ALL, AST_RETRIEVE_FLAG_MULTIPLE, ast_sip_get_sorcery(), ast_sorcery_retrieve_by_fields(), and NULL.

Referenced by ami_show_auths().

◆ cli_get_container()

static struct ao2_container * cli_get_container ( const char *  regex)
static

Definition at line 277 of file config_auth.c.

278{
280 struct ao2_container *s_container;
281
283 if (!container) {
284 return NULL;
285 }
286
289 if (!s_container) {
290 return NULL;
291 }
292
293 if (ao2_container_dup(s_container, container, 0)) {
294 ao2_ref(s_container, -1);
295 return NULL;
296 }
297
298 return s_container;
299}
int ao2_container_dup(struct ao2_container *dest, struct ao2_container *src, enum search_flags flags)
Copy all object references in the src container into the dest container.
@ AO2_ALLOC_OPT_LOCK_NOLOCK
Definition: astobj2.h:367
#define ao2_container_alloc_list(ao2_options, container_options, sort_fn, cmp_fn)
Allocate and initialize a list container.
Definition: astobj2.h:1327
static int regex(struct ast_channel *chan, const char *cmd, char *parse, char *buf, size_t len)
struct ao2_container * container
Definition: res_fax.c:501
struct ao2_container * ast_sorcery_retrieve_by_regex(const struct ast_sorcery *sorcery, const char *type, const char *regex)
Retrieve multiple objects using a regular expression on their id.
Definition: sorcery.c:1949
int ast_sorcery_object_id_compare(void *obj, void *arg, int flags)
ao2 object comparator based on sorcery id.
Definition: sorcery.c:2459
int ast_sorcery_object_id_sort(const void *obj, const void *arg, int flags)
ao2 object sorter based on sorcery id.
Definition: sorcery.c:2435

References AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_cleanup, ao2_container_alloc_list, ao2_container_dup(), ao2_ref, ast_sip_get_sorcery(), ast_sorcery_object_id_compare(), ast_sorcery_object_id_sort(), ast_sorcery_retrieve_by_regex(), container, NULL, RAII_VAR, and regex().

Referenced by ast_sip_initialize_sorcery_auth().

◆ cli_iterator()

static int cli_iterator ( void *  container,
ao2_callback_fn  callback,
void *  args 
)
static

Definition at line 301 of file config_auth.c.

302{
303 return ast_sip_for_each_auth(container, callback, args);
304}
const char * args

References args, ast_sip_for_each_auth(), and container.

Referenced by ast_sip_initialize_sorcery_auth().

◆ cli_print_body()

static int cli_print_body ( void *  obj,
void *  arg,
int  flags 
)
static

Definition at line 326 of file config_auth.c.

327{
328 struct ast_sip_auth *auth = obj;
329 struct ast_sip_cli_context *context = arg;
330 char title[32];
331
332 ast_assert(context->output_buffer != NULL);
333
334 snprintf(title, sizeof(title), "%sAuth",
335 context->auth_direction ? context->auth_direction : "");
336
337 ast_str_append(&context->output_buffer, 0, "%*s: %s/%s\n",
338 CLI_INDENT_TO_SPACES(context->indent_level), title,
340
341 if (context->show_details
342 || (context->show_details_only_level_0 && context->indent_level == 0)) {
343 ast_str_append(&context->output_buffer, 0, "\n");
345 }
346
347 return 0;
348}
int ast_sip_cli_print_sorcery_objectset(void *obj, void *arg, int flags)
Prints a sorcery object's ast_variable list.
Definition: pjsip_cli.c:36
#define CLI_INDENT_TO_SPACES(x)
Definition: res_pjsip_cli.h:29
int ast_str_append(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Append to a thread local dynamic string.
Definition: strings.h:1139
CLI Formatter Context passed to all formatters.
Definition: res_pjsip_cli.h:34
#define ast_assert(a)
Definition: utils.h:739

References ast_assert, ast_sip_cli_print_sorcery_objectset(), ast_sorcery_object_get_id(), ast_str_append(), ast_sip_auth::auth_user, CLI_INDENT_TO_SPACES, voicemailpwcheck::context, and NULL.

Referenced by ast_sip_initialize_sorcery_auth().

◆ cli_print_header()

static int cli_print_header ( void *  obj,
void *  arg,
int  flags 
)
static

Definition at line 311 of file config_auth.c.

312{
313 struct ast_sip_cli_context *context = arg;
314 int indent = CLI_INDENT_TO_SPACES(context->indent_level);
315 int filler = CLI_MAX_WIDTH - indent - 20;
316
317 ast_assert(context->output_buffer != NULL);
318
319 ast_str_append(&context->output_buffer, 0,
320 "%*s: <AuthId/UserName%*.*s>\n", indent, "I/OAuth", filler, filler,
322
323 return 0;
324}
#define CLI_HEADER_FILLER
Definition: res_pjsip_cli.h:24
#define CLI_MAX_WIDTH
Definition: res_pjsip_cli.h:26

References ast_assert, ast_str_append(), CLI_HEADER_FILLER, CLI_INDENT_TO_SPACES, CLI_MAX_WIDTH, voicemailpwcheck::context, and NULL.

Referenced by ast_sip_initialize_sorcery_auth().

◆ cli_retrieve_by_id()

static void * cli_retrieve_by_id ( const char *  id)
static

◆ format_ami_auth_handler()

static int format_ami_auth_handler ( void *  obj,
void *  arg,
int  flags 
)
static

Definition at line 168 of file config_auth.c.

169{
170 const struct ast_sip_auth *auth = obj;
171 struct ast_sip_ami *ami = arg;
172 const struct ast_sip_endpoint *endpoint = ami->arg;
173 RAII_VAR(struct ast_str *, buf,
174 ast_sip_create_ami_event("AuthDetail", ami), ast_free);
175
176 if (!buf) {
177 return -1;
178 }
179
180 if (sip_auth_to_ami(auth, &buf)) {
181 return -1;
182 }
183
184 if (endpoint) {
185 ast_str_append(&buf, 0, "EndpointName: %s\r\n",
186 ast_sorcery_object_get_id(endpoint));
187 }
188
189 astman_append(ami->s, "%s\r\n", ast_str_buffer(buf));
190 ami->count++;
191
192 return 0;
193}
#define ast_free(a)
Definition: astmm.h:180
static int sip_auth_to_ami(const struct ast_sip_auth *auth, struct ast_str **buf)
Definition: config_auth.c:162
void astman_append(struct mansession *s, const char *fmt,...)
Definition: manager.c:3302
struct ast_str * ast_sip_create_ami_event(const char *event, struct ast_sip_ami *ami)
Creates a string to store AMI event data in.
char * ast_str_buffer(const struct ast_str *buf)
Returns the string buffer within the ast_str buf.
Definition: strings.h:761
void * arg
Definition: res_pjsip.h:3055
An entity with which Asterisk communicates.
Definition: res_pjsip.h:963
Support for dynamic strings.
Definition: strings.h:623

References ast_sip_ami::arg, ast_free, ast_sip_create_ami_event(), ast_sorcery_object_get_id(), ast_str_append(), ast_str_buffer(), astman_append(), buf, ast_sip_ami::count, RAII_VAR, ast_sip_ami::s, and sip_auth_to_ami().

Referenced by ast_sip_format_auths_ami().

◆ format_ami_authlist_handler()

static int format_ami_authlist_handler ( void *  obj,
void *  arg,
int  flags 
)
static

Definition at line 226 of file config_auth.c.

227{
228 struct ast_sip_auth *auth = obj;
229 struct ast_sip_ami *ami = arg;
230 struct ast_str *buf;
231
232 buf = ast_sip_create_ami_event("AuthList", ami);
233 if (!buf) {
234 return CMP_STOP;
235 }
236
237 sip_auth_to_ami(auth, &buf);
238
239 astman_append(ami->s, "%s\r\n", ast_str_buffer(buf));
240 ami->count++;
241
242 ast_free(buf);
243
244 return 0;
245}
@ CMP_STOP
Definition: astobj2.h:1028

References ast_sip_ami::arg, ast_free, ast_sip_create_ami_event(), ast_str_buffer(), astman_append(), buf, CMP_STOP, ast_sip_ami::count, ast_sip_ami::s, and sip_auth_to_ami().

Referenced by ami_show_auths().

◆ format_ami_endpoint_auth()

static int format_ami_endpoint_auth ( const struct ast_sip_endpoint endpoint,
struct ast_sip_ami ami 
)
static

Definition at line 201 of file config_auth.c.

203{
204 ami->arg = (void *)endpoint;
205 if (ast_sip_format_auths_ami(&endpoint->inbound_auths, ami)) {
206 return -1;
207 }
208
209 return ast_sip_format_auths_ami(&endpoint->outbound_auths, ami);
210}
int ast_sip_format_auths_ami(const struct ast_sip_auth_vector *auths, struct ast_sip_ami *ami)
Format auth details for AMI.
Definition: config_auth.c:195
struct ast_sip_auth_vector outbound_auths
Definition: res_pjsip.h:1010
struct ast_sip_auth_vector inbound_auths
Definition: res_pjsip.h:1008

References ast_sip_ami::arg, ast_sip_format_auths_ami(), ast_sip_endpoint::inbound_auths, and ast_sip_endpoint::outbound_auths.

◆ sip_auth_to_ami()

static int sip_auth_to_ami ( const struct ast_sip_auth auth,
struct ast_str **  buf 
)
static

Definition at line 162 of file config_auth.c.

164{
166}
int ast_sip_sorcery_object_to_ami(const void *obj, struct ast_str **buf)
Converts a sorcery object to a string of object properties.

References ast_sip_sorcery_object_to_ami(), and buf.

Referenced by format_ami_auth_handler(), and format_ami_authlist_handler().

Variable Documentation

◆ auth_types_map

const char* auth_types_map[]
static
Initial value:
= {
[AST_SIP_AUTH_TYPE_GOOGLE_OAUTH] = "google_oauth"
}

Definition at line 74 of file config_auth.c.

Referenced by ast_sip_auth_type_to_str().

◆ cli_commands

struct ast_cli_entry cli_commands[]
static

Definition at line 350 of file config_auth.c.

Referenced by ast_sip_destroy_sorcery_auth(), and ast_sip_initialize_sorcery_auth().

◆ cli_formatter

struct ast_sip_cli_formatter_entry* cli_formatter
static

Definition at line 367 of file config_auth.c.

Referenced by ast_sip_destroy_sorcery_auth(), and ast_sip_initialize_sorcery_auth().

◆ endpoint_auth_formatter

struct ast_sip_endpoint_formatter endpoint_auth_formatter
static
Initial value:
= {
}
static int format_ami_endpoint_auth(const struct ast_sip_endpoint *endpoint, struct ast_sip_ami *ami)
Definition: config_auth.c:201

Definition at line 212 of file config_auth.c.

Referenced by ast_sip_destroy_sorcery_auth(), and ast_sip_initialize_sorcery_auth().