From: Andrew Thompson Date: Sun, 29 Aug 2010 14:59:10 +0000 (-0400) Subject: Fix hostname guessing to work when some stupid DNS server resolves 0.0.0.0 X-Git-Tag: v1.2-rc1~439 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=08d6b4339ce8eb5dcf9504e78a22a022fb1ecddc;p=thirdparty%2Ffreeswitch.git Fix hostname guessing to work when some stupid DNS server resolves 0.0.0.0 Also, fix names containing a @ to work right --- diff --git a/src/mod/event_handlers/mod_erlang_event/ei_helpers.c b/src/mod/event_handlers/mod_erlang_event/ei_helpers.c index 45b655380b..9935aff075 100644 --- a/src/mod/event_handlers/mod_erlang_event/ei_helpers.c +++ b/src/mod/event_handlers/mod_erlang_event/ei_helpers.c @@ -327,6 +327,8 @@ switch_status_t initialise_ei(struct ei_cnode_s *ec) struct hostent *nodehost; char thishostname[EI_MAXHOSTNAMELEN + 1] = ""; char thisnodename[MAXNODELEN + 1]; + char thisalivename[MAXNODELEN + 1]; + char *atsign; /* zero out the struct before we use it */ memset(&server_addr, 0, sizeof(server_addr)); @@ -345,18 +347,23 @@ switch_status_t initialise_ei(struct ei_cnode_s *ec) server_addr.sin_family = AF_INET; server_addr.sin_port = htons(prefs.port); - if (strchr(prefs.nodename, '@')) { + /* copy the prefs.nodename into something we can modify */ + strncpy(thisalivename, prefs.nodename, MAXNODELEN); + + if ((atsign = strchr(thisalivename, '@'))) { /* we got a qualified node name, don't guess the host/domain */ snprintf(thisnodename, MAXNODELEN + 1, "%s", prefs.nodename); + /* truncate the alivename at the @ */ + *atsign = '\0'; } else { #ifdef WIN32 if ((nodehost = gethostbyaddr((const char *) &server_addr.sin_addr.s_addr, sizeof(server_addr.sin_addr.s_addr), AF_INET))) #else - if ((nodehost = gethostbyaddr((const char *) &server_addr.sin_addr.s_addr, sizeof(server_addr.sin_addr.s_addr), AF_INET))) + if ((nodehost = gethostbyaddr((const char *) &server_addr.sin_addr.s_addr, sizeof(server_addr.sin_addr.s_addr), AF_INET))) #endif - memcpy(thishostname, nodehost->h_name, EI_MAXHOSTNAMELEN); + memcpy(thishostname, nodehost->h_name, EI_MAXHOSTNAMELEN); - if (zstr_buf(thishostname)) { + if (zstr_buf(thishostname) || !strncasecmp(prefs.ip, "0.0.0.0", 7)) { gethostname(thishostname, EI_MAXHOSTNAMELEN); } @@ -380,7 +387,7 @@ switch_status_t initialise_ei(struct ei_cnode_s *ec) /* init the ei stuff */ - if (ei_connect_xinit(ec, thishostname, prefs.nodename, thisnodename, (Erl_IpAddr) (&server_addr.sin_addr.s_addr), prefs.cookie, 0) < 0) { + if (ei_connect_xinit(ec, thishostname, thisalivename, thisnodename, (Erl_IpAddr) (&server_addr.sin_addr.s_addr), prefs.cookie, 0) < 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to init ei connection\n"); return SWITCH_STATUS_FALSE; }