27 #include "stir_shaken.h"
29 #define CONFIG_TYPE "tn"
31 #define DEFAULT_check_tn_cert_public_url check_tn_cert_public_url_NO
32 #define DEFAULT_private_key_file NULL
33 #define DEFAULT_public_cert_url NULL
34 #define DEFAULT_attest_level attest_level_NOT_SET
35 #define DEFAULT_send_mky send_mky_NO
37 struct tn_cfg *tn_get_cfg(
const char *
id)
48 generate_sorcery_enum_from_str(
tn_cfg, acfg_common., check_tn_cert_public_url, UNKNOWN)
49 generate_sorcery_enum_to_str(
tn_cfg, acfg_common., check_tn_cert_public_url)
51 generate_sorcery_enum_from_str(tn_cfg, acfg_common., attest_level, UNKNOWN)
52 generate_sorcery_enum_to_str(tn_cfg, acfg_common., attest_level)
54 generate_sorcery_enum_from_str(tn_cfg, acfg_common., send_mky, UNKNOWN)
55 generate_sorcery_enum_to_str(tn_cfg, acfg_common., send_mky)
57 static
void tn_destructor(
void *obj)
59 struct tn_cfg *cfg = obj;
62 acfg_cleanup(&cfg->acfg_common);
65 static int init_tn(
struct tn_cfg *cfg)
84 static void *tn_alloc(
const char *name)
93 if (init_tn(cfg) != 0) {
100 static void *etn_alloc(
const char *name)
109 if (init_tn(cfg) != 0) {
121 struct tn_cfg *etn = etn_alloc(
id);
124 if (!tn || !eprofile || !etn) {
130 rc = as_copy_cfg_common(
id, &etn->acfg_common,
131 &eprofile->acfg_common);
138 rc = as_copy_cfg_common(
id, &etn->acfg_common,
154 static int tn_apply(
const struct ast_sorcery *sorcery,
void *obj)
160 if (as_check_common_config(
id, &cfg->acfg_common) != 0) {
172 .object_type = config_object_type_tn,
177 e->
command =
"stir_shaken show tns";
179 "Usage: stir_shaken show tns\n"
180 " Show all attestation TNs\n";
187 return CLI_SHOWUSAGE;
190 container = get_tn_all();
192 ast_cli(a->fd,
"No stir/shaken TNs found\n");
193 ao2_cleanup(container);
197 ao2_callback_data(container,
OBJ_NODATA, config_object_cli_show, a,&data);
208 .object_type = config_object_type_tn,
213 e->
command =
"stir_shaken show tn";
215 "Usage: stir_shaken show tn <id>\n"
216 " Show the settings for a given TN\n";
220 return config_object_tab_complete_name(a->word, get_tn_all());
227 return CLI_SHOWUSAGE;
230 cfg = tn_get_cfg(a->argv[3]);
231 config_object_cli_show(cfg, a, &data, 0);
238 static struct ast_cli_entry stir_shaken_certificate_cli[] = {
239 AST_CLI_DEFINE(cli_tn_show,
"Show stir/shaken TN configuration by id"),
240 AST_CLI_DEFINE(cli_tn_show_all,
"Show all stir/shaken attestation TN configurations"),
243 int tn_config_reload(
void)
250 int tn_config_unload(
void)
253 ARRAY_LEN(stir_shaken_certificate_cli));
258 int tn_config_load(
void)
262 ast_sorcery_apply_default(sorcery, CONFIG_TYPE,
"config",
"stir_shaken.conf,criteria=type=tn");
266 ast_log(LOG_ERROR,
"stir/shaken - failed to register '%s' sorcery object\n", CONFIG_TYPE);
273 register_common_attestation_fields(sorcery,
tn_cfg, CONFIG_TYPE,);
278 ARRAY_LEN(stir_shaken_certificate_cli));
Asterisk main include file. File version handling, generic pbx functions.
int ao2_container_count(struct ao2_container *c)
Returns the number of elements in a container.
TN configuration for stir/shaken.
int ast_cli_unregister_multiple(struct ast_cli_entry *e, int len)
Unregister multiple commands.
void ast_sorcery_force_reload_object(const struct ast_sorcery *sorcery, const char *type)
Inform any wizards of a specific object type to reload persistent objects even if no changes determin...
descriptor for a cli entry.
Perform no matching, return all objects.
Full structure for sorcery.
Type for a default handler that should do nothing.
#define ast_cli_register_multiple(e, len)
Register multiple commands.
Return all matching objects.
void ast_sorcery_load_object(const struct ast_sorcery *sorcery, const char *type)
Inform any wizards of a specific object type to load persistent objects.
void * ast_sorcery_retrieve_by_id(const struct ast_sorcery *sorcery, const char *type, const char *id)
Retrieve an object using its unique identifier.
#define ast_string_field_init(x, size)
Initialize a field pool and fields.
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
const char * ast_sorcery_object_get_id(const void *object)
Get the unique identifier of a sorcery object.
struct ao2_container * container
#define ast_sorcery_object_register(sorcery, type, alloc, transform, apply)
Register an object type.
Module has failed to load, may be in an inconsistent state.
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.
#define ast_sorcery_object_field_register(sorcery, type, name, default_val, opt_type, flags,...)
Register a field within an object.
Standard Command Line Interface.
#define S_OR(a, b)
returns the equivalent of logic or for strings: first one if not empty, otherwise second one...
Profile configuration for stir/shaken.
void * ast_sorcery_generic_alloc(size_t size, ao2_destructor_fn destructor)
Allocate a generic sorcery capable object.
Asterisk module definitions.
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.
#define ast_string_field_free_memory(x)
free all memory - to be called before destroying the object
Sorcery Data Access Layer API.