Fix hostname guessing to work when some stupid DNS server resolves 0.0.0.0
Also, fix names containing a @ to work right
This commit is contained in:
parent
04b9b3e2a6
commit
08d6b4339c
|
@ -327,6 +327,8 @@ switch_status_t initialise_ei(struct ei_cnode_s *ec)
|
||||||
struct hostent *nodehost;
|
struct hostent *nodehost;
|
||||||
char thishostname[EI_MAXHOSTNAMELEN + 1] = "";
|
char thishostname[EI_MAXHOSTNAMELEN + 1] = "";
|
||||||
char thisnodename[MAXNODELEN + 1];
|
char thisnodename[MAXNODELEN + 1];
|
||||||
|
char thisalivename[MAXNODELEN + 1];
|
||||||
|
char *atsign;
|
||||||
|
|
||||||
/* zero out the struct before we use it */
|
/* zero out the struct before we use it */
|
||||||
memset(&server_addr, 0, sizeof(server_addr));
|
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_family = AF_INET;
|
||||||
server_addr.sin_port = htons(prefs.port);
|
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 */
|
/* we got a qualified node name, don't guess the host/domain */
|
||||||
snprintf(thisnodename, MAXNODELEN + 1, "%s", prefs.nodename);
|
snprintf(thisnodename, MAXNODELEN + 1, "%s", prefs.nodename);
|
||||||
|
/* truncate the alivename at the @ */
|
||||||
|
*atsign = '\0';
|
||||||
} else {
|
} else {
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
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)))
|
||||||
#else
|
#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
|
#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);
|
gethostname(thishostname, EI_MAXHOSTNAMELEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,7 +387,7 @@ switch_status_t initialise_ei(struct ei_cnode_s *ec)
|
||||||
|
|
||||||
|
|
||||||
/* init the ei stuff */
|
/* 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");
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to init ei connection\n");
|
||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue