chan_pjsip: Creating Channel Causes Asterisk to Crash When Duplicate AOR
authorAshley Sanders <asanders@digium.com>
Tue, 28 Apr 2015 05:29:42 +0000 (00:29 -0500)
committerAshley Sanders <asanders@digium.com>
Tue, 28 Apr 2015 19:01:54 +0000 (14:01 -0500)
            Sections Exist in pjsip.conf

This patch modifies the current loading strategy of the pjsip configuration. If
duplicate sections (e.g. sections containing the same [id/type]) are defined in
[pjsip.conf], the loader will consider the configuration for the given type as
invalid when the duplicate section is encountered. The entire configuration
(including what was previously loaded) for the duplicate [id/type] sections
will be rejected and destroyed, an error message is logged and the load
processing for the given stops.

ASTERISK-24996
Reported By: Ashley Sanders

Change-Id: I35090ca4cd40f1f34881dfe701a329145c347aef

res/res_sorcery_config.c

index 60ecb83..deb2ffa 100644 (file)
@@ -294,6 +294,18 @@ static void sorcery_config_internal_load(void *data, const struct ast_sorcery *s
                        continue;
                }
 
+               /*  Confirm an object with this id does not already exist in the bucket.
+                *  If it exists, however, the configuration is invalid so stop
+                *  processing and destroy it. */
+               obj = ao2_find(objects, id, OBJ_KEY;
+
+               if (obj) {
+                       ast_log(LOG_ERROR, "Config file '%s' could not be loaded; configuration contains a duplicate object: '%s' of type '%s'\n",
+                               config->filename, id, type);
+                       ast_config_destroy(cfg);
+                       return;
+               }
+
                if (!(obj = ast_sorcery_alloc(sorcery, type, id)) ||
                    ast_sorcery_objectset_apply(sorcery, obj, ast_category_first(category))) {