]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
core: Entity ID is not set or invalid 56/3456/4
authorAlexei Gradinari <alex2grad@gmail.com>
Wed, 10 Aug 2016 19:41:38 +0000 (15:41 -0400)
committerAlexei Gradinari <alex2grad@gmail.com>
Mon, 15 Aug 2016 14:08:43 +0000 (10:08 -0400)
The Exchanging Device and Mailbox States could not working
if the Entity ID (EID) is not set manually and can't be obtained
from ethernet interface.

This patch replaces debug message to warning
and addes missing description about option 'entityid' to
asterisk.conf.sample.

With this patch the asterisk also:
(1) decline loading the modules which won't work without EID:
    res_corosync and res_pjsip_publish_asterisk.
(2) warn if EID is empty on loading next modules:
    pbx_dundi, res_xmpp

Starting with v197 systemd/udev will automatically assign "predictable"
names for all local Ethernet interfaces.
This patch also addes some new ethernet prefixes "eno" and "ens".

ASTERISK-26164 #close

Change-Id: I72d712f1ad5b6f64571bb179c5cb12461e7c58c6

configs/samples/asterisk.conf.sample
include/asterisk/utils.h
main/asterisk.c
main/utils.c
pbx/pbx_dundi.c
res/res_corosync.c
res/res_pjsip_publish_asterisk.c
res/res_xmpp.c

index e4883ec97a19688d4107416de27148339e12d011..b0543d8033f94ff3afc4699d629559c728db530c 100644 (file)
@@ -88,6 +88,14 @@ documentation_language = en_US       ; Set the language you want documentation
                                ; considered dangerous because they can allow
                                ; privilege escalation.
                                ; Default no
+;entityid=00:11:22:33:44:55    ; Entity ID.
+                               ; This is in the form of a MAC address.
+                               ; It should be universally unique.
+                               ; It must be unique between servers communicating
+                               ; with a protocol that uses this value.
+                               ; This is currently is used by DUNDi and
+                               ; Exchanging Device and Mailbox State
+                               ; using protocols: XMPP, Corosync and PJSIP.
 
 ; Changing the following lines may compromise your security.
 ;[files]
index c311e9cd5ea9898fdf78ff75bc287c9c21a72e52..c3df4779ff139eba8f5e3d40eb5a570da1b355f7 100644 (file)
@@ -972,6 +972,14 @@ int ast_str_to_eid(struct ast_eid *eid, const char *s);
  */
 int ast_eid_cmp(const struct ast_eid *eid1, const struct ast_eid *eid2);
 
+/*!
+ * \brief Check if EID is empty
+ *
+ * \return 1 if the EID is empty, zero otherwise
+ * \since 13.12.0
+ */
+int ast_eid_is_empty(const struct ast_eid *eid);
+
 /*!
  * \brief Get current thread ID
  * \return the ID if platform is supported, else -1
index 772c3dce964be70265a33944c043ebe3cf9eacff..b23ddfc554971f6495ff897f63c53f0f2abc7181 100644 (file)
@@ -3752,10 +3752,10 @@ static void ast_readconfig(void)
                } else if (!strcasecmp(v->name, "entityid")) {
                        struct ast_eid tmp_eid;
                        if (!ast_str_to_eid(&tmp_eid, v->value)) {
-                               ast_verbose("Successfully set global EID to '%s'\n", v->value);
                                ast_eid_default = tmp_eid;
-                       } else
-                               ast_verbose("Invalid Entity ID '%s' provided\n", v->value);
+                       } else {
+                               ast_log(LOG_WARNING, "Invalid Entity ID '%s' provided\n", v->value);
+                       }
                } else if (!strcasecmp(v->name, "lightbackground")) {
                        ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_LIGHT_BACKGROUND);
                } else if (!strcasecmp(v->name, "forceblackbackground")) {
index bd74ee24dcbe0c7535530d00ef5d42299a564c96..1a034c1019144e7d0ae6c39c4c46a95ad9645ad9 100644 (file)
@@ -2493,7 +2493,7 @@ void ast_set_default_eid(struct ast_eid *eid)
                return;
        }
        for (x = 0; x < MAXIF; x++) {
-               static const char *prefixes[] = { "eth", "em" };
+               static const char *prefixes[] = { "eth", "em", "eno", "ens" };
                unsigned int i;
 
                for (i = 0; i < ARRAY_LEN(prefixes); i++) {
@@ -2544,7 +2544,7 @@ void ast_set_default_eid(struct ast_eid *eid)
        }
 #endif
 #endif
-       ast_debug(1, "No ethernet interface found for seeding global EID. You will have to set it manually.\n");
+       ast_log(LOG_WARNING, "No ethernet interface found for seeding global EID. You will have to set it manually.\n");
 }
 
 int ast_str_to_eid(struct ast_eid *eid, const char *s)
@@ -2569,6 +2569,14 @@ int ast_eid_cmp(const struct ast_eid *eid1, const struct ast_eid *eid2)
        return memcmp(eid1, eid2, sizeof(*eid1));
 }
 
+int ast_eid_is_empty(const struct ast_eid *eid)
+{
+       struct ast_eid empty_eid;
+
+       memset(&empty_eid, 0, sizeof(empty_eid));
+       return memcmp(eid, &empty_eid, sizeof(empty_eid)) ? 0 : 1;
+}
+
 int ast_file_is_readable(const char *filename)
 {
 #if defined(HAVE_EACCESS) || defined(HAVE_EUIDACCESS)
index 51801f45f7fb16f664451922f875e84631552953..5ca8a8568ad49e3b4c5088c963159deae5c92824 100644 (file)
@@ -4847,6 +4847,9 @@ static int set_config(char *config_file, struct sockaddr_in* sin, int reload)
                ast_log(LOG_WARNING, "Unable to get host name!\n");
        AST_LIST_LOCK(&peers);
 
+       if (ast_eid_is_empty(&ast_eid_default)) {
+               ast_log(LOG_WARNING, "Entity ID is not set.\n");
+       }
        memcpy(&global_eid, &ast_eid_default, sizeof(global_eid));
 
        global_storehistory = 0;
index 9ffffaacac88e22e68b89b514d6e8fc5843854d6..6bbbc34b97b050386fdd090e5e21d3b98f0cd4b7 100644 (file)
@@ -1103,6 +1103,11 @@ static int load_module(void)
        cs_error_t cs_err;
        struct cpg_name name;
 
+       if (ast_eid_is_empty(&ast_eid_default)) {
+               ast_log(LOG_ERROR, "Entity ID is not set.\n");
+               return AST_MODULE_LOAD_DECLINE;
+       }
+
        nodes = ao2_container_alloc(23, corosync_node_hash_fn, corosync_node_cmp_fn);
        if (!nodes) {
                goto failed;
@@ -1162,6 +1167,7 @@ static int load_module(void)
 
        ast_cli_register_multiple(corosync_cli, ARRAY_LEN(corosync_cli));
 
+
        return AST_MODULE_LOAD_SUCCESS;
 
 failed:
index 002d976d42e93dd828ede0e418adffea339bab69..b32408aa3fdfdfc355aa9204069d0802d25d8268 100644 (file)
@@ -858,6 +858,11 @@ static int load_module(void)
 {
        CHECK_PJSIP_PUBSUB_MODULE_LOADED();
 
+       if (ast_eid_is_empty(&ast_eid_default)) {
+               ast_log(LOG_ERROR, "Entity ID is not set.\n");
+               return AST_MODULE_LOAD_DECLINE;
+       }
+
        ast_sorcery_apply_config(ast_sip_get_sorcery(), "asterisk-publication");
        ast_sorcery_apply_default(ast_sip_get_sorcery(), "asterisk-publication", "config", "pjsip.conf,criteria=type=asterisk-publication");
 
index ed35cd169ea8f852311049a46c0b9478f43ac309..d7f2b5478c3fd483f12bc9f0552dadabba4e3a29 100644 (file)
@@ -4652,6 +4652,10 @@ static int load_module(void)
        ast_mutex_init(&messagelock);
        ast_cond_init(&message_received_condition, NULL);
 
+       if (ast_eid_is_empty(&ast_eid_default)) {
+               ast_log(LOG_WARNING, "Entity ID is not set. The distributing device state or MWI will not work.\n");
+       }
+
        return AST_MODULE_LOAD_SUCCESS;
 }