mirror of
https://github.com/samhocevar/rinetd.git
synced 2025-04-26 04:50:21 +08:00
Minor refactoring in getAddress().
This commit is contained in:
parent
ed7fe3ce9d
commit
4feb1ecd4f
71
rinetd.c
71
rinetd.c
@ -169,7 +169,7 @@ void RegisterPID(void);
|
||||
|
||||
void logEvent(ConnectionInfo const *cnx, int i, int result);
|
||||
|
||||
int getAddress(char *host, struct in_addr *iaddr);
|
||||
static int getAddress(char const *host, struct in_addr *iaddr);
|
||||
|
||||
char const *logMessages[] = {
|
||||
"done-local-closed",
|
||||
@ -615,7 +615,6 @@ void handleCloseFromLocal(ConnectionInfo *cnx);
|
||||
void handleCloseFromRemote(ConnectionInfo *cnx);
|
||||
void handleAccept(int i);
|
||||
void openLocalFd(int se, ConnectionInfo *cnx);
|
||||
int getAddress(char *host, struct in_addr *iaddr);
|
||||
|
||||
static void selectPass(void) {
|
||||
|
||||
@ -1057,48 +1056,46 @@ void openLocalFd(int se, ConnectionInfo *cnx)
|
||||
logEvent(cnx, cnx->server, logOpened);
|
||||
}
|
||||
|
||||
int getAddress(char *host, struct in_addr *iaddr)
|
||||
static int getAddress(char const *host, struct in_addr *iaddr)
|
||||
{
|
||||
char *p = host;
|
||||
int ishost = 0;
|
||||
while (*p) {
|
||||
if (!isdigit(*p) && (*p) != '.') {
|
||||
ishost = 1;
|
||||
/* If this is an IP address, use inet_addr() */
|
||||
int is_ipaddr = 1;
|
||||
for (char const *p = host; *p; ++p) {
|
||||
if (!isdigit(*p) && *p != '.') {
|
||||
is_ipaddr = 0;
|
||||
break;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
if (ishost) {
|
||||
struct hostent *h = gethostbyname(host);
|
||||
if (!h) {
|
||||
const char *msg = "(unknown DNS error)";
|
||||
switch(h_errno)
|
||||
{
|
||||
case HOST_NOT_FOUND:
|
||||
msg = "The specified host is unknown.";
|
||||
break;
|
||||
case NO_ADDRESS:
|
||||
msg = "The requested name is valid but does not have an IP address.";
|
||||
break;
|
||||
case NO_RECOVERY:
|
||||
msg = "A non-recoverable name server error occurred.";
|
||||
break;
|
||||
case TRY_AGAIN:
|
||||
msg = "A temporary error occurred on an authoritative name server. Try again later.";
|
||||
break;
|
||||
}
|
||||
syslog(LOG_ERR, "While resolving `%s' got: %s", host, msg);
|
||||
return 0;
|
||||
}
|
||||
memcpy(
|
||||
(void *) &iaddr->s_addr,
|
||||
(void *) h->h_addr,
|
||||
4);
|
||||
return 1;
|
||||
} else {
|
||||
if (is_ipaddr) {
|
||||
iaddr->s_addr = inet_addr(host);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Otherwise, use gethostbyname() */
|
||||
struct hostent *h = gethostbyname(host);
|
||||
if (h) {
|
||||
memcpy(&iaddr->s_addr, h->h_addr, 4);
|
||||
return 1;
|
||||
}
|
||||
|
||||
char const *msg = "(unknown DNS error)";
|
||||
switch (h_errno)
|
||||
{
|
||||
case HOST_NOT_FOUND:
|
||||
msg = "The specified host is unknown.";
|
||||
break;
|
||||
case NO_ADDRESS:
|
||||
msg = "The requested name is valid but does not have an IP address.";
|
||||
break;
|
||||
case NO_RECOVERY:
|
||||
msg = "A non-recoverable name server error occurred.";
|
||||
break;
|
||||
case TRY_AGAIN:
|
||||
msg = "A temporary error occurred on an authoritative name server. Try again later.";
|
||||
break;
|
||||
}
|
||||
syslog(LOG_ERR, "While resolving `%s' got: %s", host, msg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef WIN32
|
||||
|
Loading…
Reference in New Issue
Block a user