bind to config option (default localhost) for GNS
authorSchanzenbach, Martin <mschanzenbach@posteo.de>
Sat, 9 Mar 2019 15:10:53 +0000 (16:10 +0100)
committerSchanzenbach, Martin <mschanzenbach@posteo.de>
Sat, 9 Mar 2019 15:10:53 +0000 (16:10 +0100)
ChangeLog
src/gns/gns.conf.in
src/gns/gnunet-dns2gns.c
src/gns/gnunet-gns-proxy.c

index f1c0bfa7ec54ecbca6f26b80dad7128228e6f993..c33c6071b268cca5b94a81eb90cc81f0f454a3ee 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
 Sat Mar 9 15:58:45 2019 +0100
   REST: Config option for address bind. Defaults to localhost.
+  GNS: dns2gns/gns-proxy config option for address bind. Defaults to localhost.
 
 Sat Mar 9 01:58:22 CET 2019
   gnunet-publish now by default does not expose the creation time,
index 2e6a02b07c831cf0c9cc5c2ae43c7cf24134d05f..3252e48880a545b289c63cbd903225d3f991d8b0 100644 (file)
@@ -32,6 +32,8 @@ INTERCEPT_DNS = NO
 BINARY = gnunet-gns-proxy
 START_ON_DEMAND = NO
 RUN_PER_USER = YES
+BIND_TO=127.0.0.1
+BIND_TO6=::1
 
 # Where is the certificate for the GNS proxy stored?
 PROXY_CACERT = $GNUNET_DATA_HOME/gns/gns_ca_cert.pem
@@ -42,6 +44,8 @@ PROXY_UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-gns-proxy.sock
 BINARY = gnunet-dns2gns
 START_ON_DEMAND = NO
 RUN_PER_USER = YES
+BIND_TO=127.0.0.1
+BIND_TO6=::1
 
 # -d: DNS resolver to use, -s: suffix to use, -f: fcfs suffix to use
 OPTIONS = -d 8.8.8.8
index 68d090579af0a8123d048b581534651ff4ebf4bc..a4d3ffedc2b0c26d7d88525eef06ab4650e993db 100644 (file)
@@ -92,6 +92,17 @@ struct Request
   uint16_t original_request_id;
 };
 
+/**
+ * The address to bind to
+ */
+static in_addr_t address;
+
+/**
+ * The IPv6 address to bind to
+ */
+static struct in6_addr address6;
+
+
 
 /**
  * Handle to GNS resolver.
@@ -578,6 +589,7 @@ run (void *cls,
      const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
+  char *addr_str;
   (void) cls;
   (void) args;
   (void) cfgfile;
@@ -602,6 +614,52 @@ run (void *cls,
     gns = NULL;
     return;
   }
+
+  /* Get address to bind to */
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (c, "dnns2gns",
+                                                          "BIND_TO",
+                                                          &addr_str))
+  {
+    //No address specified
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Don't know what to bind to...\n");
+    GNUNET_free (addr_str);
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  if (1 != inet_pton (AF_INET, addr_str, &address))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Unable to parse address %s\n",
+                addr_str);
+    GNUNET_free (addr_str);
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  GNUNET_free (addr_str);
+  /* Get address to bind to */
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (c, "dns2gns",
+                                                          "BIND_TO6",
+                                                          &addr_str))
+  {
+    //No address specified
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Don't know what to bind6 to...\n");
+    GNUNET_free (addr_str);
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  if (1 != inet_pton (AF_INET6, addr_str, &address6))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Unable to parse IPv6 address %s\n",
+                addr_str);
+    GNUNET_free (addr_str);
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  GNUNET_free (addr_str);
+
   listen_socket4 = GNUNET_NETWORK_socket_create (PF_INET,
                                                 SOCK_DGRAM,
                                                 IPPROTO_UDP);
@@ -611,6 +669,7 @@ run (void *cls,
 
     memset (&v4, 0, sizeof (v4));
     v4.sin_family = AF_INET;
+    v4.sin_addr.s_addr = address;
 #if HAVE_SOCKADDR_IN_SIN_LEN
     v4.sin_len = sizeof (v4);
 #endif
@@ -634,6 +693,7 @@ run (void *cls,
 
     memset (&v6, 0, sizeof (v6));
     v6.sin6_family = AF_INET6;
+    v6.sin6_addr = address6;
 #if HAVE_SOCKADDR_IN_SIN_LEN
     v6.sin6_len = sizeof (v6);
 #endif
index 65a7b60183487a72893057e8ac38c3d1f62f7d92..a6b053e563c65b54057801fe91d4a720d4149855 100644 (file)
@@ -661,6 +661,15 @@ struct Socks5Request
 
 /* *********************** Globals **************************** */
 
+/**
+ * The address to bind to
+ */
+static in_addr_t address;
+
+/**
+ * The IPv6 address to bind to
+ */
+static struct in6_addr address6;
 
 /**
  * The port the proxy is running on (default 7777)
@@ -3516,6 +3525,7 @@ bind_v4 ()
   memset (&sa4, 0, sizeof (sa4));
   sa4.sin_family = AF_INET;
   sa4.sin_port = htons (port);
+  sa4.sin_addr.s_addr = address;
 #if HAVE_SOCKADDR_IN_SIN_LEN
   sa4.sin_len = sizeof (sa4);
 #endif
@@ -3553,6 +3563,7 @@ bind_v6 ()
   memset (&sa6, 0, sizeof (sa6));
   sa6.sin6_family = AF_INET6;
   sa6.sin6_port = htons (port);
+  sa6.sin6_addr = address6;
 #if HAVE_SOCKADDR_IN_SIN_LEN
   sa6.sin6_len = sizeof (sa6);
 #endif
@@ -3591,10 +3602,56 @@ run (void *cls,
 {
   char* cafile_cfg = NULL;
   char* cafile;
+  char* addr_str;
   struct MhdHttpList *hd;
 
   cfg = c;
 
+  /* Get address to bind to */
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "gns-proxy",
+                                                          "BIND_TO",
+                                                          &addr_str))
+  {
+    //No address specified
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Don't know what to bind to...\n");
+    GNUNET_free (addr_str);
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  if (1 != inet_pton (AF_INET, addr_str, &address))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Unable to parse address %s\n",
+                addr_str);
+    GNUNET_free (addr_str);
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  GNUNET_free (addr_str);
+  /* Get address to bind to */
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "gns-proxy",
+                                                          "BIND_TO6",
+                                                          &addr_str))
+  {
+    //No address specified
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Don't know what to bind6 to...\n");
+    GNUNET_free (addr_str);
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  if (1 != inet_pton (AF_INET6, addr_str, &address6))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Unable to parse IPv6 address %s\n",
+                addr_str);
+    GNUNET_free (addr_str);
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  GNUNET_free (addr_str);
+
   if (NULL == (curl_multi = curl_multi_init ()))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,