0
0
Fork 0
haikuports/net-dns/yaddns/patches/yaddns-1.1.patchset

233 lines
5.4 KiB
Plaintext

From d10b7fed809920348adeee24fa8c83656df1bc1d Mon Sep 17 00:00:00 2001
From: sfanxiang <sfanxiang@gmail.com>
Date: Mon, 8 Jan 2018 10:10:48 +0000
Subject: port to Haiku
diff --git a/configure.in b/configure.in
index d8c6668..fd6b42d 100644
--- a/configure.in
+++ b/configure.in
@@ -9,6 +9,7 @@ test ".$CFLAGS" = "." && CFLAGS=" "
# programs needed to build/install
AC_PROG_CC
+AC_PROG_CXX
AC_PROG_INSTALL
AC_PROG_RANLIB
@@ -66,6 +67,8 @@ if test "x$enable_log_color" = "xyes"; then
CFLAGS="$CFLAGS -DENABLE_LOG_COLOR"
fi
+CXXFLAGS=$CFLAGS
+
# the generated files
AC_CONFIG_FILES([
Makefile
diff --git a/src/Makefile.am b/src/Makefile.am
index 750ae3a..122a989 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -5,6 +5,7 @@ bin_PROGRAMS = yaddns
yaddns_SOURCES = yaddns.c yaddns.h \
config.c config.h \
account.c account.h \
+ ifaddr.cc ifaddr.h \
request.c request.h \
log.c log.h \
util.c util.h \
diff --git a/src/config.c b/src/config.c
index 8f7b324..2897610 100644
--- a/src/config.c
+++ b/src/config.c
@@ -7,13 +7,15 @@
#include <getopt.h>
#include <limits.h>
+#include <FindDirectory.h>
+#include <fs_info.h>
+
#include "config.h"
#include "log.h"
#include "service.h"
#include "services.h"
#include "util.h"
-#define CFG_DEFAULT_FILENAME "/etc/yaddns.conf"
#define CFG_DEFAULT_WANIFNAME "ppp0"
/*
@@ -228,7 +230,18 @@ int config_parse(struct cfg *cfg, int argc, char **argv)
if(!cfgstr_is_set(&(cfg->cfgfile)))
{
- cfgstr_set(&(cfg->cfgfile), CFG_DEFAULT_FILENAME);
+ const char filename[] = "/yaddns.conf";
+
+ dev_t vol = dev_for_path("/boot");
+ static char buf[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH];
+
+ status_t res = find_directory(
+ B_SYSTEM_SETTINGS_DIRECTORY,
+ vol, 0, buf, sizeof(buf));
+ if (res != B_NO_ERROR) return -1;
+
+ strcpy(&buf[strlen(buf)], filename);
+ cfgstr_set(&(cfg->cfgfile), buf);
}
if(config_parse_file(cfg) != 0)
diff --git a/src/ifaddr.cc b/src/ifaddr.cc
new file mode 100644
index 0000000..650d9a9
--- /dev/null
+++ b/src/ifaddr.cc
@@ -0,0 +1,28 @@
+#include "ifaddr.h"
+
+#include <NetworkInterface.h>
+#include <NetworkRoster.h>
+
+extern "C" {
+
+int getifaddr(const char *ifname, struct in_addr *addr)
+{
+ if(!ifname || ifname[0]=='\0')
+ {
+ return -1;
+ }
+
+ BNetworkInterface interface(ifname);
+ if (!interface.Exists()) return -1;
+
+ BNetworkInterfaceAddress address;
+ if (interface.GetAddressAt(0, address) != B_OK) return -1;
+
+ struct sockaddr sa = address.Address().SockAddr();
+ if (sa.sa_family != AF_INET) return -1;
+
+ *addr = ((struct sockaddr_in *)&sa)->sin_addr;
+ return 0;
+}
+
+}
diff --git a/src/ifaddr.h b/src/ifaddr.h
new file mode 100644
index 0000000..ae723c3
--- /dev/null
+++ b/src/ifaddr.h
@@ -0,0 +1,17 @@
+#ifndef _IFADDR_H
+#define _IFADDR_H
+
+#include <netinet/in.h>
+#include <sys/socket.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int getifaddr(const char *ifname, struct in_addr *addr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/util.c b/src/util.c
index 624ab3e..80fdb4b 100644
--- a/src/util.c
+++ b/src/util.c
@@ -8,6 +8,7 @@
#include <time.h>
#include <errno.h>
+#include "ifaddr.h"
#include "util.h"
#include "log.h"
@@ -90,42 +91,12 @@ time_t util_getuptime(void)
int util_getifaddr(const char *ifname, struct in_addr *addr)
{
- /* SIOCGIFADDR struct ifreq * */
- int s;
- struct ifreq ifr;
- int ifrlen;
-
- if(!ifname || ifname[0]=='\0')
- {
- return -1;
- }
-
- s = socket(PF_INET, SOCK_DGRAM, 0);
- if(s < 0)
- {
- log_error("socket(PF_INET, SOCK_DGRAM): %s",
- strerror(errno));
- return -1;
- }
-
- memset(&ifr, 0, sizeof(ifr));
- ifr.ifr_addr.sa_family = AF_INET; /* IPv4 IP address */
- strncpy(ifr.ifr_name, ifname, IFNAMSIZ-1);
- ifrlen = sizeof(ifr);
-
- if(ioctl(s, SIOCGIFADDR, &ifr, &ifrlen) < 0)
- {
- log_error("ioctl(s, SIOCGIFADDR, ...): %s",
- strerror(errno));
- close(s);
+ if (getifaddr(ifname, addr) == 0) {
+ return 0;
+ } else {
+ log_error("getifaddr(ifname, addr) failed");
return -1;
}
-
- *addr = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr;
-
- close(s);
-
- return 0;
}
char *strdup_trim(const char *s)
diff --git a/src/yaddns.c b/src/yaddns.c
index 722d324..0b53c17 100644
--- a/src/yaddns.c
+++ b/src/yaddns.c
@@ -229,8 +229,6 @@ int main(int argc, char **argv)
goto exit_clean;
}
- sig_blockall();
-
sigemptyset(&unblocked);
/* config */
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 3d03671..baa8cef 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -14,6 +14,7 @@ YADDNS_OBJS = $(top_builddir)/src/request.o \
$(top_builddir)/src/services/libservices.a \
$(top_builddir)/src/account.o \
$(top_builddir)/src/config.o \
+ $(top_builddir)/src/ifaddr.o \
$(top_builddir)/src/util.o \
$(top_builddir)/src/log.o
@@ -31,5 +32,6 @@ check_account_SOURCES = check_account.c $(top_builddir)/src/account.h \
$(top_builddir)/src/service.h
check_account_LDADD = $(YADDNS_OBJS)
-check_util_SOURCES = check_util.c $(top_builddir)/src/util.h
+check_util_SOURCES = check_util.c $(top_builddir)/src/util.h \
+ $(top_builddir)/src/ifaddr.h
check_util_LDADD = $(YADDNS_OBJS)
--
2.15.0