diff options
-rw-r--r-- | plugins/check_radius.c | 19 | ||||
-rw-r--r-- | plugins/check_smtp.c | 4 | ||||
-rw-r--r-- | plugins/netutils.c | 15 | ||||
-rw-r--r-- | plugins/netutils.h | 7 |
4 files changed, 23 insertions, 22 deletions
diff --git a/plugins/check_radius.c b/plugins/check_radius.c index 518f1588..b3b8c829 100644 --- a/plugins/check_radius.c +++ b/plugins/check_radius.c @@ -62,14 +62,12 @@ void print_usage (void); #else #define my_rc_buildreq(a,b,c,d,e,f) rc_buildreq(rch,a,b,c,d,e,f) #endif -#define my_rc_own_ipaddress() rc_own_ipaddress(rch) #define my_rc_avpair_add(a,b,c,d) rc_avpair_add(rch,a,b,c,-1,d) #define my_rc_read_dictionary(a) rc_read_dictionary(rch, a) #else #define my_rc_conf_str(a) rc_conf_str(a) #define my_rc_send_server(a,b) rc_send_server(a, b) #define my_rc_buildreq(a,b,c,d,e,f) rc_buildreq(a,b,c,d,e,f) -#define my_rc_own_ipaddress() rc_own_ipaddress() #define my_rc_avpair_add(a,b,c,d) rc_avpair_add(a, b, c, d) #define my_rc_read_dictionary(a) rc_read_dictionary(a) #endif @@ -155,6 +153,8 @@ Please note that all tags must be lowercase to use the DocBook XML DTD. int main (int argc, char **argv) { + struct sockaddr_storage ss; + char name[HOST_NAME_MAX]; char msg[BUFFER_LEN]; SEND_DATA data; int result = STATE_UNKNOWN; @@ -190,15 +190,14 @@ main (int argc, char **argv) die (STATE_UNKNOWN, _("Invalid NAS-Identifier\n")); } - if (nasipaddress != NULL) { - if (rc_good_ipaddr (nasipaddress)) - die (STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); - if ((client_id = rc_get_ipaddr(nasipaddress)) == 0) - die (STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); - } else { - if ((client_id = my_rc_own_ipaddress ()) == 0) - die (STATE_UNKNOWN, _("Can't find local IP for NAS-IP-Address\n")); + if (nasipaddress == NULL) { + if (gethostname (name, sizeof(name)) != 0) + die (STATE_UNKNOWN, _("gethostname() failed!\n")); + nasipaddress = name; } + if (!dns_lookup (nasipaddress, &ss, AF_INET)) /* TODO: Support IPv6. */ + die (STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); + client_id = ntohl (((struct sockaddr_in *)&ss)->sin_addr.s_addr); if (my_rc_avpair_add (&(data.send_pairs), PW_NAS_IP_ADDRESS, &client_id, 0) == NULL) die (STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); diff --git a/plugins/check_smtp.c b/plugins/check_smtp.c index 1996c6d3..05e81f2c 100644 --- a/plugins/check_smtp.c +++ b/plugins/check_smtp.c @@ -59,10 +59,6 @@ enum { #define SMTP_STARTTLS "STARTTLS\r\n" #define SMTP_AUTH_LOGIN "AUTH LOGIN\r\n" -#ifndef HOST_MAX_BYTES -#define HOST_MAX_BYTES 255 -#endif - #define EHLO_SUPPORTS_STARTTLS 1 int process_arguments (int, char **); diff --git a/plugins/netutils.c b/plugins/netutils.c index 705aaf09..1bb4f076 100644 --- a/plugins/netutils.c +++ b/plugins/netutils.c @@ -359,20 +359,21 @@ is_addr (const char *address) } int -resolve_host_or_addr (const char *address, int family) +dns_lookup (const char *in, struct sockaddr_storage *ss, int family) { struct addrinfo hints; struct addrinfo *res; int retval; - memset (&hints, 0, sizeof (hints)); + memset (&hints, 0, sizeof(struct addrinfo)); hints.ai_family = family; - retval = getaddrinfo (address, NULL, &hints, &res); + retval = getaddrinfo (in, NULL, &hints, &res); if (retval != 0) return FALSE; - else { - freeaddrinfo (res); - return TRUE; - } + + if (ss != NULL) + memcpy (ss, res->ai_addr, res->ai_addrlen); + freeaddrinfo (res); + return TRUE; } diff --git a/plugins/netutils.h b/plugins/netutils.h index 2766029e..d7ee0ddd 100644 --- a/plugins/netutils.h +++ b/plugins/netutils.h @@ -45,6 +45,10 @@ # endif /* UNIX_PATH_MAX */ #endif /* HAVE_SYS_UN_H */ +#ifndef HOST_MAX_BYTES +# define HOST_MAX_BYTES 255 +#endif + /* process_request and wrapper macros */ #define process_tcp_request(addr, port, sbuf, rbuf, rsize) \ process_request(addr, port, IPPROTO_TCP, sbuf, rbuf, rsize) @@ -71,8 +75,9 @@ int send_request (int sd, int proto, const char *send_buffer, char *recv_buffer, /* "is_*" wrapper macros and functions */ int is_host (const char *); int is_addr (const char *); -int resolve_host_or_addr (const char *, int); +int dns_lookup (const char *, struct sockaddr_storage *, int); void host_or_die(const char *str); +#define resolve_host_or_addr(addr, family) dns_lookup(addr, NULL, family) #define is_inet_addr(addr) resolve_host_or_addr(addr, AF_INET) #ifdef USE_IPV6 # define is_inet6_addr(addr) resolve_host_or_addr(addr, AF_INET6) |