Security Event Logging. More...
#include "asterisk.h"
#include "asterisk/module.h"
#include "asterisk/logger.h"
#include "asterisk/event.h"
#include "asterisk/threadstorage.h"
#include "asterisk/strings.h"
#include "asterisk/security_events.h"
Go to the source code of this file.
Enumerations | |
enum | ie_required { NOT_REQUIRED, REQUIRED, NOT_REQUIRED, REQUIRED } |
Functions | |
static void | __init_security_event_buf (void) |
static void | __reg_module (void) |
static void | __unreg_module (void) |
static void | append_ie (struct ast_str **str, const struct ast_event *event, const enum ast_event_ie_type ie_type, enum ie_required required) |
static void | append_ies (struct ast_str **str, const struct ast_event *event, const struct ast_security_event_ie_type *ies, enum ie_required required) |
ASTERISK_FILE_VERSION (__FILE__,"$Revision: 328209 $") | |
static int | ie_is_present (const struct ast_event *event, const enum ast_event_ie_type ie_type) |
static int | load_module (void) |
static void | security_event_cb (const struct ast_event *event, void *data) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Security Event Logging" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "ac1f6a56484a8820659555499174e588" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } |
static struct ast_module_info * | ast_module_info = &__mod_info |
static int | LOG_SECURITY |
static const char | LOG_SECURITY_NAME [] = "SECURITY" |
static struct ast_threadstorage | security_event_buf = { .once = PTHREAD_ONCE_INIT , .key_init = __init_security_event_buf , .custom_init = NULL , } |
static const size_t | SECURITY_EVENT_BUF_INIT_LEN = 256 |
static struct ast_event_sub * | security_event_sub |
Security Event Logging.
Make informational security events optional
Escape quotes in string payload IE contents
Definition in file res_security_log.c.
enum ie_required |
Definition at line 54 of file res_security_log.c.
00054 { 00055 NOT_REQUIRED, 00056 REQUIRED 00057 };
static void __init_security_event_buf | ( | void | ) | [static] |
Definition at line 51 of file res_security_log.c.
static void __reg_module | ( | void | ) | [static] |
Definition at line 167 of file res_security_log.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 167 of file res_security_log.c.
static void append_ie | ( | struct ast_str ** | str, | |
const struct ast_event * | event, | |||
const enum ast_event_ie_type | ie_type, | |||
enum ie_required | required | |||
) | [static] |
Definition at line 65 of file res_security_log.c.
References ast_assert, ast_event_get_ie_bitflags(), ast_event_get_ie_pltype(), ast_event_get_ie_str(), ast_event_get_ie_type_name(), ast_event_get_ie_uint(), AST_EVENT_IE_PLTYPE_BITFLAGS, AST_EVENT_IE_PLTYPE_EXISTS, AST_EVENT_IE_PLTYPE_RAW, AST_EVENT_IE_PLTYPE_STR, AST_EVENT_IE_PLTYPE_UINT, AST_EVENT_IE_PLTYPE_UNKNOWN, ast_log(), ast_str_append(), ie_is_present(), and LOG_WARNING.
Referenced by append_ies().
00067 { 00068 if (!required && !ie_is_present(event, ie_type)) { 00069 /* Optional IE isn't present. Ignore. */ 00070 return; 00071 } 00072 00073 /* At this point, it _better_ be there! */ 00074 ast_assert(ie_is_present(event, ie_type)); 00075 00076 switch (ast_event_get_ie_pltype(ie_type)) { 00077 case AST_EVENT_IE_PLTYPE_UINT: 00078 ast_str_append(str, 0, ",%s=\"%u\"", 00079 ast_event_get_ie_type_name(ie_type), 00080 ast_event_get_ie_uint(event, ie_type)); 00081 break; 00082 case AST_EVENT_IE_PLTYPE_STR: 00083 ast_str_append(str, 0, ",%s=\"%s\"", 00084 ast_event_get_ie_type_name(ie_type), 00085 ast_event_get_ie_str(event, ie_type)); 00086 break; 00087 case AST_EVENT_IE_PLTYPE_BITFLAGS: 00088 ast_str_append(str, 0, ",%s=\"%u\"", 00089 ast_event_get_ie_type_name(ie_type), 00090 ast_event_get_ie_bitflags(event, ie_type)); 00091 break; 00092 case AST_EVENT_IE_PLTYPE_UNKNOWN: 00093 case AST_EVENT_IE_PLTYPE_EXISTS: 00094 case AST_EVENT_IE_PLTYPE_RAW: 00095 ast_log(LOG_WARNING, "Unexpected payload type for IE '%s'\n", 00096 ast_event_get_ie_type_name(ie_type)); 00097 break; 00098 } 00099 }
static void append_ies | ( | struct ast_str ** | str, | |
const struct ast_event * | event, | |||
const struct ast_security_event_ie_type * | ies, | |||
enum ie_required | required | |||
) | [static] |
Definition at line 101 of file res_security_log.c.
References append_ie(), AST_EVENT_IE_END, and ast_security_event_ie_type::ie_type.
Referenced by security_event_cb().
00103 { 00104 unsigned int i; 00105 00106 for (i = 0; ies[i].ie_type != AST_EVENT_IE_END; i++) { 00107 append_ie(str, event, ies[i].ie_type, required); 00108 } 00109 }
ASTERISK_FILE_VERSION | ( | __FILE__ | , | |
"$Revision: 328209 $" | ||||
) |
static int ie_is_present | ( | const struct ast_event * | event, | |
const enum ast_event_ie_type | ie_type | |||
) | [static] |
Definition at line 59 of file res_security_log.c.
References ast_event_get_ie_raw().
Referenced by append_ie().
00061 { 00062 return (ast_event_get_ie_raw(event, ie_type) != NULL); 00063 }
static int load_module | ( | void | ) | [static] |
Definition at line 137 of file res_security_log.c.
References AST_EVENT_IE_END, AST_EVENT_SECURITY, ast_event_subscribe(), ast_logger_register_level(), ast_logger_unregister_level(), AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, ast_verb, LOG_SECURITY, LOG_SECURITY_NAME, and security_event_cb().
00138 { 00139 if ((LOG_SECURITY = ast_logger_register_level(LOG_SECURITY_NAME)) == -1) { 00140 return AST_MODULE_LOAD_DECLINE; 00141 } 00142 00143 if (!(security_event_sub = ast_event_subscribe(AST_EVENT_SECURITY, 00144 security_event_cb, "Security Event Logger", 00145 NULL, AST_EVENT_IE_END))) { 00146 ast_logger_unregister_level(LOG_SECURITY_NAME); 00147 LOG_SECURITY = -1; 00148 return AST_MODULE_LOAD_DECLINE; 00149 } 00150 00151 ast_verb(3, "Security Logging Enabled\n"); 00152 00153 return AST_MODULE_LOAD_SUCCESS; 00154 }
static void security_event_cb | ( | const struct ast_event * | event, | |
void * | data | |||
) | [static] |
Definition at line 111 of file res_security_log.c.
References append_ies(), ast_assert, ast_event_get_ie_type_name(), ast_event_get_ie_uint(), AST_EVENT_IE_SECURITY_EVENT, ast_log_dynamic_level, ast_security_event_get_name(), ast_security_event_get_optional_ies(), ast_security_event_get_required_ies(), AST_SECURITY_EVENT_NUM_TYPES, ast_str_buffer(), ast_str_set(), ast_str_thread_get(), LOG_SECURITY, NOT_REQUIRED, REQUIRED, security_event_buf, SECURITY_EVENT_BUF_INIT_LEN, and str.
Referenced by load_module().
00112 { 00113 struct ast_str *str; 00114 enum ast_security_event_type event_type; 00115 00116 if (!(str = ast_str_thread_get(&security_event_buf, 00117 SECURITY_EVENT_BUF_INIT_LEN))) { 00118 return; 00119 } 00120 00121 /* Note that the event type is guaranteed to be valid here. */ 00122 event_type = ast_event_get_ie_uint(event, AST_EVENT_IE_SECURITY_EVENT); 00123 ast_assert(event_type >= 0 && event_type < AST_SECURITY_EVENT_NUM_TYPES); 00124 00125 ast_str_set(&str, 0, "%s=\"%s\"", 00126 ast_event_get_ie_type_name(AST_EVENT_IE_SECURITY_EVENT), 00127 ast_security_event_get_name(event_type)); 00128 00129 append_ies(&str, event, 00130 ast_security_event_get_required_ies(event_type), REQUIRED); 00131 append_ies(&str, event, 00132 ast_security_event_get_optional_ies(event_type), NOT_REQUIRED); 00133 00134 ast_log_dynamic_level(LOG_SECURITY, "%s\n", ast_str_buffer(str)); 00135 }
static int unload_module | ( | void | ) | [static] |
Definition at line 156 of file res_security_log.c.
References ast_event_unsubscribe(), and ast_verb.
00157 { 00158 if (security_event_sub) { 00159 security_event_sub = ast_event_unsubscribe(security_event_sub); 00160 } 00161 00162 ast_verb(3, "Security Logging Disabled\n"); 00163 00164 return 0; 00165 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Security Event Logging" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "ac1f6a56484a8820659555499174e588" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static] |
Definition at line 167 of file res_security_log.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 167 of file res_security_log.c.
int LOG_SECURITY [static] |
Definition at line 47 of file res_security_log.c.
Referenced by load_module(), and security_event_cb().
const char LOG_SECURITY_NAME[] = "SECURITY" [static] |
Definition at line 45 of file res_security_log.c.
Referenced by load_module().
struct ast_threadstorage security_event_buf = { .once = PTHREAD_ONCE_INIT , .key_init = __init_security_event_buf , .custom_init = NULL , } [static] |
Definition at line 51 of file res_security_log.c.
Referenced by security_event_cb().
const size_t SECURITY_EVENT_BUF_INIT_LEN = 256 [static] |
Definition at line 52 of file res_security_log.c.
Referenced by security_event_cb().
struct ast_event_sub* security_event_sub [static] |
Definition at line 49 of file res_security_log.c.