68 lines
2.4 KiB
Diff
68 lines
2.4 KiB
Diff
|
--- powerd.c
|
||
|
+++ powerd.c 2010-05-12 16:12:45.167591612 +0200
|
||
|
@@ -625,7 +625,8 @@ void openconfig(int *delay) {
|
||
|
int line=0;
|
||
|
char *host, *port;
|
||
|
int iport;
|
||
|
- struct hostent *hname;
|
||
|
+ struct addrinfo *hname;
|
||
|
+ struct addrinfo *hiter;
|
||
|
struct in_addr addr;
|
||
|
|
||
|
// printf("Opening config\n");
|
||
|
@@ -664,6 +665,8 @@ void openconfig(int *delay) {
|
||
|
device = strdup(parameter);
|
||
|
// printf("Monitoring %s\n", device);
|
||
|
} else if (!strcasecmp(command, "notify")) {
|
||
|
+ int ret;
|
||
|
+
|
||
|
if (strlen(password) < 5) {
|
||
|
fprintf(stderr, "Password is too short/invalid. Line %d\n", line);
|
||
|
exit(-1);
|
||
|
@@ -674,27 +677,32 @@ void openconfig(int *delay) {
|
||
|
else
|
||
|
iport = PORT;
|
||
|
|
||
|
- if ((hname = gethostbyname(host))) {
|
||
|
- while(*hname->h_addr_list != 0) {
|
||
|
+ if (!(ret = getaddrinfo(host, NULL, NULL, &hname))) {
|
||
|
+ for(hiter = hname; hiter != NULL; hiter = hiter->ai_next) {
|
||
|
memset(&addr.s_addr, 0, sizeof(addr.s_addr));
|
||
|
- memcpy(&addr.s_addr, *hname->h_addr_list, hname->h_length);
|
||
|
+ memcpy(&addr.s_addr, hiter->ai_addr, hiter->ai_addrlen);
|
||
|
addclient(inet_ntoa(addr), password, iport);
|
||
|
- hname->h_addr_list++;
|
||
|
}
|
||
|
+ freeaddrinfo(hname);
|
||
|
}
|
||
|
- }
|
||
|
+ else
|
||
|
+ fprintf(stderr, "getaddrinfo : %s\n", gai_strerror(ret));
|
||
|
+ }
|
||
|
} else if (!strcasecmp(command, "listen")) {
|
||
|
+ int ret;
|
||
|
if (strlen(password) < 5) {
|
||
|
fprintf(stderr, "Password is too short/invalid. Line %d\n", line);
|
||
|
exit(-1);
|
||
|
- } else if ((hname = gethostbyname(parameter))) {
|
||
|
- while(*hname->h_addr_list != 0) {
|
||
|
- memset(&addr.s_addr, 0, sizeof(addr.s_addr));
|
||
|
- memcpy(&addr.s_addr, *hname->h_addr_list, hname->h_length);
|
||
|
- addlisten(inet_ntoa(addr), password);
|
||
|
- hname->h_addr_list++;
|
||
|
- }
|
||
|
- }
|
||
|
+ } else if (! (ret = getaddrinfo(parameter, NULL, NULL, &hname))) {
|
||
|
+ for(hiter = hname; hiter != NULL; hiter = hiter->ai_next) {
|
||
|
+ memset(&addr.s_addr, 0, sizeof(addr.s_addr));
|
||
|
+ memcpy(&addr.s_addr, hiter->ai_addr, hiter->ai_addrlen);
|
||
|
+ addlisten(inet_ntoa(addr), password);
|
||
|
+ }
|
||
|
+ freeaddrinfo(hname);
|
||
|
+ }
|
||
|
+ else
|
||
|
+ fprintf(stderr, "getaddrinfo : %s\n", gai_strerror(ret));
|
||
|
} else if (!strcasecmp(command, "listenport")) {
|
||
|
if ((listenport = atoi(parameter)) < 1) {
|
||
|
fprintf(stderr, "Listen port is invalid. Line %d\n", line);
|