[svn-commits] russell: branch group/security_events r199284 - in /team/group/security_event...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri Jun 5 14:26:13 CDT 2009


Author: russell
Date: Fri Jun  5 14:26:10 2009
New Revision: 199284

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=199284
Log:
Add memory limit security event and test code

Modified:
    team/group/security_events/include/asterisk/security_events_defs.h
    team/group/security_events/main/security_events.c
    team/group/security_events/tests/test_security_events.c

Modified: team/group/security_events/include/asterisk/security_events_defs.h
URL: http://svn.asterisk.org/svn-view/asterisk/team/group/security_events/include/asterisk/security_events_defs.h?view=diff&rev=199284&r1=199283&r2=199284
==============================================================================
--- team/group/security_events/include/asterisk/security_events_defs.h (original)
+++ team/group/security_events/include/asterisk/security_events_defs.h Fri Jun  5 14:26:10 2009
@@ -65,6 +65,13 @@
 	 * reached.
 	 */
 	AST_SECURITY_EVENT_CALL_LIMIT,
+	/*!
+	 * \brief Memory limit reached
+	 *
+	 * A request has been denied because a configured memory limit has been
+	 * reached.
+	 */
+	AST_SECURITY_EVENT_MEM_LIMIT,
 	/* \brief This _must_ stay at the end. */
 	AST_SECURITY_EVENT_NUM_TYPES
 };
@@ -242,6 +249,49 @@
 	struct ast_security_event_ipv4_addr remote_addr;
 };
 
+/*!
+ * \brief Request denied because of a memory limit
+ */
+struct ast_security_event_mem_limit {
+	/*!
+	 * \brief Event descriptor version
+	 * \note This _must_ be changed if this event descriptor is changed.
+	 */
+	#define AST_SECURITY_EVENT_MEM_LIMIT_VERSION 1
+	/*! \brief Common security event descriptor elements */
+	struct ast_security_event_common common;
+	/*!
+	 * \brief Module, Normally the AST_MODULE define
+	 * \note optional
+	 */
+	const char *module;
+	/*!
+	 * \brief Account ID, specific to the service type
+	 * \note required
+	 */
+	const char *account_id;
+	/*!
+	 * \brief Session ID, specific to the service type
+	 * \note required
+	 */
+	const char *session_id;
+	/*!
+	 * \brief Session timeval, when the session started
+	 * \note optional
+	 */
+	const struct timeval *session_tv;
+	/*!
+	 * \brief Local address the request came in on
+	 * \note required
+	 */
+	struct ast_security_event_ipv4_addr local_addr;
+	/*!
+	 * \brief Remote address the request came from
+	 * \note required
+	 */
+	struct ast_security_event_ipv4_addr remote_addr;
+};
+
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }

Modified: team/group/security_events/main/security_events.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/group/security_events/main/security_events.c?view=diff&rev=199284&r1=199283&r2=199284
==============================================================================
--- team/group/security_events/main/security_events.c (original)
+++ team/group/security_events/main/security_events.c Fri Jun  5 14:26:10 2009
@@ -104,6 +104,25 @@
 	},
 },
 
+[AST_SECURITY_EVENT_MEM_LIMIT] = {
+	.name    = "MemoryLimit",
+	.version = AST_SECURITY_EVENT_MEM_LIMIT_VERSION,
+	.required_ies = {
+		{ AST_EVENT_IE_SERVICE, SEC_EVT_FIELD(common, service) },
+		{ AST_EVENT_IE_EVENT_VERSION, SEC_EVT_FIELD(common, version) },
+		{ AST_EVENT_IE_ACCOUNT_ID, SEC_EVT_FIELD(mem_limit, account_id) },
+		{ AST_EVENT_IE_SESSION_ID, SEC_EVT_FIELD(mem_limit, session_id) },
+		{ AST_EVENT_IE_LOCAL_ADDR, SEC_EVT_FIELD(mem_limit, local_addr) },
+		{ AST_EVENT_IE_REMOTE_ADDR, SEC_EVT_FIELD(mem_limit, remote_addr) },
+		{ AST_EVENT_IE_END, 0 }
+	},
+	.optional_ies = {
+		{ AST_EVENT_IE_MODULE, SEC_EVT_FIELD(mem_limit, module) },
+		{ AST_EVENT_IE_SESSION_TV, SEC_EVT_FIELD(mem_limit, session_tv) },
+		{ AST_EVENT_IE_END, 0 }
+	},
+},
+
 #undef SEC_EVT_FIELD
 
 };

Modified: team/group/security_events/tests/test_security_events.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/group/security_events/tests/test_security_events.c?view=diff&rev=199284&r1=199283&r2=199284
==============================================================================
--- team/group/security_events/tests/test_security_events.c (original)
+++ team/group/security_events/tests/test_security_events.c Fri Jun  5 14:26:10 2009
@@ -39,12 +39,14 @@
 static void evt_gen_failed_acl(void);
 static void evt_gen_inval_acct_id(void);
 static void evt_gen_call_limit(void);
+static void evt_gen_mem_limit(void);
 
 typedef void (*evt_generator)(void);
 evt_generator evt_generators[AST_SECURITY_EVENT_NUM_TYPES] = {
 	[AST_SECURITY_EVENT_FAILED_ACL]    = evt_gen_failed_acl,
 	[AST_SECURITY_EVENT_INVAL_ACCT_ID] = evt_gen_inval_acct_id,
 	[AST_SECURITY_EVENT_CALL_LIMIT]    = evt_gen_call_limit,
+	[AST_SECURITY_EVENT_MEM_LIMIT]     = evt_gen_mem_limit,
 };
 
 static void evt_gen_failed_acl(void)
@@ -160,6 +162,43 @@
 
 }
 
+static void evt_gen_mem_limit(void)
+{
+	struct sockaddr_in sin_local = {
+		.sin_family = AF_INET
+	};
+	struct sockaddr_in sin_remote = {
+		.sin_family = AF_INET
+	};
+	struct timeval session_tv = ast_tvnow();
+	struct ast_security_event_mem_limit mem_limit = {
+		.common.event_type = AST_SECURITY_EVENT_MEM_LIMIT,
+		.common.version    = AST_SECURITY_EVENT_MEM_LIMIT_VERSION,
+		.common.service    = "TEST",
+
+		.module     = AST_MODULE,
+		.account_id = "Felix",
+		.session_id = "Session2604",
+		.session_tv = &session_tv,
+		.local_addr = {
+			.sin  = &sin_local,
+			.transport  = AST_SECURITY_EVENT_TRANSPORT_UDP,
+		},
+		.remote_addr = {
+			.sin = &sin_remote,
+			.transport  = AST_SECURITY_EVENT_TRANSPORT_UDP,
+		},
+	};
+
+	inet_aton("10.10.10.10", &sin_local.sin_addr);
+	sin_local.sin_port = htons(555);
+
+	inet_aton("10.10.10.12", &sin_remote.sin_addr);
+	sin_remote.sin_port = htons(5656);
+
+	ast_security_event_report(AST_SEC_EVT(&mem_limit));
+
+}
 static void gen_events(struct ast_cli_args *a)
 {
 	unsigned int i;




More information about the svn-commits mailing list