From dfda83926c50297d7c315f743b4514f687469c9c Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Tue, 10 May 2016 16:33:53 +0200 Subject: ipcpd: Allow disabling of DNS This allows someone to disable the use of DNS in the shim UDP. It also adds a config file specific for the shim UDP (which holds the nsupdate location). Certain defines were also moved to the global config file. --- src/ipcpd/shim-udp/CMakeLists.txt | 40 +++++++++++++++++++++++---------- src/ipcpd/shim-udp/main.c | 40 +++++++++++++++++++-------------- src/ipcpd/shim-udp/shim_udp_config.h.in | 28 +++++++++++++++++++++++ 3 files changed, 79 insertions(+), 29 deletions(-) create mode 100644 src/ipcpd/shim-udp/shim_udp_config.h.in (limited to 'src/ipcpd/shim-udp') diff --git a/src/ipcpd/shim-udp/CMakeLists.txt b/src/ipcpd/shim-udp/CMakeLists.txt index c71fa00b..a50fe8bd 100644 --- a/src/ipcpd/shim-udp/CMakeLists.txt +++ b/src/ipcpd/shim-udp/CMakeLists.txt @@ -1,5 +1,7 @@ -get_filename_component(CURRENT_SOURCE_PARENT_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) -get_filename_component(CURRENT_BINARY_PARENT_DIR ${CMAKE_CURRENT_BINARY_DIR} DIRECTORY) +get_filename_component(CURRENT_SOURCE_PARENT_DIR + ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) +get_filename_component(CURRENT_BINARY_PARENT_DIR + ${CMAKE_CURRENT_BINARY_DIR} DIRECTORY) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) @@ -18,33 +20,47 @@ IF(NOT CMAKE_HAVE_GETHOSTBYNAME) IF (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME) SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lnsl) ELSE (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME) - CHECK_LIBRARY_EXISTS("bsd" "gethostbyname" "" CMAKE_LIB_BSD_HAS_GETHOSTBYNAME) + CHECK_LIBRARY_EXISTS("bsd" "gethostbyname" "" + CMAKE_LIB_BSD_HAS_GETHOSTBYNAME) IF (CMAKE_LIB_BSD_HAS_GETHOSTBYNAME) SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lbsd) ENDIF (CMAKE_LIB_BSD_HAS_GETHOSTBYNAME) ENDIF (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME) ENDIF(NOT CMAKE_HAVE_GETHOSTBYNAME) -# Find the nsupdate executable -find_program(NSUPDATE_EXECUTABLE - NAMES nsupdate - DOC "The nsupdate tool that enables DDNS") +# Enable DNS by default +if (NOT DISABLE_DNS MATCHES True) + # Find the nsupdate executable + find_program(NSUPDATE_EXECUTABLE + NAMES nsupdate + DOC "The nsupdate tool that enables DDNS") -if (${NSUPDATE_EXECUTABLE} STREQUAL "NSUPDATE_EXECUTABLE-NOTFOUND") - message(FATAL_ERROR "Could not find nsupdate, which is needed for DDNS") -else() - message("-- Found nsupdate: ${NSUPDATE_EXECUTABLE}") + if (${NSUPDATE_EXECUTABLE} STREQUAL "NSUPDATE_EXECUTABLE-NOTFOUND") + message(FATAL_ERROR "Could not find nsupdate, which is needed for DDNS") + else() + message("-- Found nsupdate: ${NSUPDATE_EXECUTABLE}") + endif() endif() +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/shim_udp_config.h.in" + "${CMAKE_CURRENT_BINARY_DIR}/shim_udp_config.h") + SET(IPCP_SHIM_UDP_TARGET ipcpd-shim-udp CACHE STRING "IPCP_SHIM_UDP_TARGET") set(SHIM_UDP_SOURCES # Add source files here ${CMAKE_CURRENT_SOURCE_DIR}/main.c) -add_executable (ipcpd-shim-udp ${SHIM_UDP_SOURCES} ${IPCP_SOURCES}) +add_executable (ipcpd-shim-udp ${SHIM_UDP_SOURCES} ${IPCP_SOURCES} + "${CMAKE_CURRENT_BINARY_DIR}/shim_udp_config.h") target_link_libraries (ipcpd-shim-udp LINK_PUBLIC ouroboros) +# Enable DNS by default +if (NOT DISABLE_DNS MATCHES True) + MACRO_ADD_COMPILE_FLAGS(ipcpd-shim-udp -DCONFIG_OUROBOROS_ENABLE_DNS) +endif() + include(MacroAddCompileFlags) if (CMAKE_BUILD_TYPE MATCHES Debug) MACRO_ADD_COMPILE_FLAGS(ipcpd-shim-udp -DCONFIG_OUROBOROS_DEBUG) diff --git a/src/ipcpd/shim-udp/main.c b/src/ipcpd/shim-udp/main.c index e213f019..b45bee76 100644 --- a/src/ipcpd/shim-udp/main.c +++ b/src/ipcpd/shim-udp/main.c @@ -23,6 +23,7 @@ #include #include "ipcp.h" #include "flow.h" +#include "shim_udp_config.h" #include #include #include @@ -31,6 +32,7 @@ #include #include #include +#include #define OUROBOROS_PREFIX "ipcpd/shim-udp" @@ -74,19 +76,6 @@ struct ipcp * _ipcp; * the info */ -#define UNKNOWN_AP "__UNKNOWN_AP__" -#define UNKNOWN_AE "__UNKNOWN_AE__" - -#define AP_MAX_FLOWS 256 - -#ifndef DU_BUFF_HEADSPACE - #define DU_BUFF_HEADSPACE 128 -#endif - -#ifndef DU_BUFF_TAILSPACE - #define DU_BUFF_TAILSPACE 0 -#endif - /* the shim needs access to these internals */ struct shim_ap_data { instance_name_t * api; @@ -332,8 +321,11 @@ static void * ipcp_udp_listener() } /* echo back the packet */ - while(send(fd, buf, strlen(buf), 0) < 0) - ; + if (send(fd, buf, strlen(buf), 0) < 0) { + LOG_ERR("Failed to echo back the packet."); + close(fd); + continue; + } /* reply to IRM */ @@ -413,12 +405,16 @@ int ipcp_udp_bootstrap(struct dif_config * conf) ipstr, INET_ADDRSTRLEN); - if (conf->dns_addr != 0) + if (conf->dns_addr != 0) { inet_ntop(AF_INET, &conf->dns_addr, dnsstr, INET_ADDRSTRLEN); - else +#ifndef CONFIG_OUROBOROS_ENABLE_DNS + LOG_WARN("DNS address ignored since shim-udp was " + "compiled without DNS support."); +#endif + } else strcpy(dnsstr, "not set"); shim_data(_ipcp)->ip_addr = conf->ip_addr; @@ -480,6 +476,7 @@ int ipcp_udp_bootstrap(struct dif_config * conf) return 0; } +#ifdef CONFIG_OUROBOROS_ENABLE_DNS /* FIXME: Dependency on nsupdate to be removed in the end */ static int ddns_send(char * cmd) { @@ -524,15 +521,18 @@ static int ddns_send(char * cmd) close(pipe_fd[1]); return 0; } +#endif int ipcp_udp_name_reg(char * name) { +#ifdef CONFIG_OUROBOROS_ENABLE_DNS char ipstr[INET_ADDRSTRLEN]; char dnsstr[INET_ADDRSTRLEN]; /* max DNS name length + max IP length + command length */ char cmd[100]; uint32_t dns_addr; uint32_t ip_addr; +#endif if (_ipcp->state != IPCP_ENROLLED) { LOG_DBGF("Won't register with non-enrolled IPCP."); @@ -549,6 +549,7 @@ int ipcp_udp_name_reg(char * name) return -1; } +#ifdef CONFIG_OUROBOROS_ENABLE_DNS /* register application with DNS server */ dns_addr = shim_data(_ipcp)->dns_addr; @@ -565,6 +566,7 @@ int ipcp_udp_name_reg(char * name) return -1; } } +#endif LOG_DBG("Registered %s.", name); @@ -573,16 +575,19 @@ int ipcp_udp_name_reg(char * name) int ipcp_udp_name_unreg(char * name) { +#ifdef CONFIG_OUROBOROS_ENABLE_DNS char dnsstr[INET_ADDRSTRLEN]; /* max DNS name length + max IP length + max command length */ char cmd[100]; uint32_t dns_addr; +#endif if (strlen(name) > 24) { LOG_ERR("DNS names cannot be longer than 24 chars."); return -1; } +#ifdef CONFIG_OUROBOROS_ENABLE_DNS /* unregister application with DNS server */ dns_addr = shim_data(_ipcp)->dns_addr; @@ -593,6 +598,7 @@ int ipcp_udp_name_unreg(char * name) ddns_send(cmd); } +#endif ipcp_data_del_reg_entry(_ipcp->data, name); diff --git a/src/ipcpd/shim-udp/shim_udp_config.h.in b/src/ipcpd/shim-udp/shim_udp_config.h.in new file mode 100644 index 00000000..00b0b910 --- /dev/null +++ b/src/ipcpd/shim-udp/shim_udp_config.h.in @@ -0,0 +1,28 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Configuration information specific for the shim UDP + * + * Sander Vrijders + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef OUROBOROS_SHIM_UDP_CONFIG +#define OUROBOROS_SHIM_UDP_CONFIG + +#define NSUPDATE_EXEC "@NSUPDATE_EXECUTABLE@" + +#endif -- cgit v1.2.3