aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2013-09-27 09:49:39 +0000
committerChristian Grothoff <christian@grothoff.org>2013-09-27 09:49:39 +0000
commitbcdae74167d2e1f9d8dd9b01fb368bf8bcc2287d (patch)
treeb1f47d243e677d53de0c3503a1d5caf43dba073e /src/transport
parentdd22c2132e58ba4ac960337efc0f843c12f58780 (diff)
downloadgnunet-bcdae74167d2e1f9d8dd9b01fb368bf8bcc2287d.tar.gz
gnunet-bcdae74167d2e1f9d8dd9b01fb368bf8bcc2287d.zip
-undo #29640, somehow causes problems
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/gnunet-helper-transport-bluetooth.c4
-rw-r--r--src/transport/plugin_transport_udp.c4
-rw-r--r--src/transport/plugin_transport_unix.c51
-rw-r--r--src/transport/transport.conf.in2
4 files changed, 40 insertions, 21 deletions
diff --git a/src/transport/gnunet-helper-transport-bluetooth.c b/src/transport/gnunet-helper-transport-bluetooth.c
index f12303982..43eccf0aa 100644
--- a/src/transport/gnunet-helper-transport-bluetooth.c
+++ b/src/transport/gnunet-helper-transport-bluetooth.c
@@ -1070,7 +1070,6 @@ read_from_the_socket (void *sock,
1070 return count; 1070 return count;
1071} 1071}
1072 1072
1073
1074/** 1073/**
1075 * Open the bluetooth interface for reading/writing 1074 * Open the bluetooth interface for reading/writing
1076 * 1075 *
@@ -1088,8 +1087,7 @@ open_device (struct HardwareInfos *dev)
1088 addr.btAddr = 0; 1087 addr.btAddr = 0;
1089 addr.port = BT_PORT_ANY; 1088 addr.port = BT_PORT_ANY;
1090 1089
1091 if (GNUNET_OK != 1090 if (GNUNET_NETWORK_socket_bind (dev->handle, (const SOCKADDR*)&addr, sizeof (SOCKADDR_BTH), 0) != GNUNET_OK)
1092 GNUNET_NETWORK_socket_bind (dev->handle, (const SOCKADDR*)&addr, sizeof (SOCKADDR_BTH)))
1093 { 1091 {
1094 fprintf (stderr, "Failed to bind the socket: "); 1092 fprintf (stderr, "Failed to bind the socket: ");
1095 if (GetLastError() == WSAENETDOWN) 1093 if (GetLastError() == WSAENETDOWN)
diff --git a/src/transport/plugin_transport_udp.c b/src/transport/plugin_transport_udp.c
index eb3d92163..bc64fd5d2 100644
--- a/src/transport/plugin_transport_udp.c
+++ b/src/transport/plugin_transport_udp.c
@@ -2808,7 +2808,7 @@ setup_sockets (struct Plugin *plugin,
2808 GNUNET_a2s (serverAddr, addrlen)); 2808 GNUNET_a2s (serverAddr, addrlen));
2809 /* binding */ 2809 /* binding */
2810 if (GNUNET_OK == GNUNET_NETWORK_socket_bind (plugin->sockv6, 2810 if (GNUNET_OK == GNUNET_NETWORK_socket_bind (plugin->sockv6,
2811 serverAddr, addrlen)) 2811 serverAddr, addrlen, 0))
2812 break; 2812 break;
2813 eno = errno; 2813 eno = errno;
2814 if (0 != plugin->port) 2814 if (0 != plugin->port)
@@ -2885,7 +2885,7 @@ setup_sockets (struct Plugin *plugin,
2885 2885
2886 /* binding */ 2886 /* binding */
2887 if (GNUNET_OK == GNUNET_NETWORK_socket_bind (plugin->sockv4, 2887 if (GNUNET_OK == GNUNET_NETWORK_socket_bind (plugin->sockv4,
2888 serverAddr, addrlen)) 2888 serverAddr, addrlen, 0))
2889 break; 2889 break;
2890 eno = errno; 2890 eno = errno;
2891 if (0 != plugin->port) 2891 if (0 != plugin->port)
diff --git a/src/transport/plugin_transport_unix.c b/src/transport/plugin_transport_unix.c
index 4e3038787..2087d30e5 100644
--- a/src/transport/plugin_transport_unix.c
+++ b/src/transport/plugin_transport_unix.c
@@ -572,6 +572,7 @@ unix_real_send (void *cls,
572 const void *sb; 572 const void *sb;
573 size_t sbs; 573 size_t sbs;
574 struct sockaddr_un un; 574 struct sockaddr_un un;
575 size_t slen;
575 const char *unix_path; 576 const char *unix_path;
576 577
577 578
@@ -591,12 +592,21 @@ unix_real_send (void *cls,
591 unix_path = (const char *) &addr[1]; 592 unix_path = (const char *) &addr[1];
592 memset (&un, 0, sizeof (un)); 593 memset (&un, 0, sizeof (un));
593 un.sun_family = AF_UNIX; 594 un.sun_family = AF_UNIX;
594 strncpy (un.sun_path, unix_path, sizeof (un.sun_path) - 1); 595 slen = strlen (unix_path);
596 if (slen >= sizeof (un.sun_path))
597 slen = sizeof (un.sun_path) - 1;
598 GNUNET_assert (slen < sizeof (un.sun_path));
599 memcpy (un.sun_path, unix_path, slen);
600 un.sun_path[slen] = '\0';
601 slen = sizeof (struct sockaddr_un);
602#if LINUX
603 un.sun_path[0] = '\0';
604#endif
595#if HAVE_SOCKADDR_IN_SIN_LEN 605#if HAVE_SOCKADDR_IN_SIN_LEN
596 un.sun_len = (u_char) sizeof (struct sockaddr_un); 606 un.sun_len = (u_char) slen;
597#endif 607#endif
598 sb = (struct sockaddr *) &un; 608 sb = (struct sockaddr *) &un;
599 sbs = sizeof (struct sockaddr_un); 609 sbs = slen;
600 610
601resend: 611resend:
602 /* Send the data */ 612 /* Send the data */
@@ -1013,18 +1023,19 @@ unix_plugin_select_read (struct Plugin *plugin)
1013 } 1023 }
1014 else 1024 else
1015 { 1025 {
1016 LOG (GNUNET_ERROR_TYPE_DEBUG, 1026#if LINUX
1017 "Read %d bytes from socket %s\n", 1027 un.sun_path[0] = '/';
1018 (int) ret, 1028#endif
1019 un.sun_path); 1029 LOG (GNUNET_ERROR_TYPE_DEBUG, "Read %d bytes from socket %s\n", ret,
1030 &un.sun_path[0]);
1020 } 1031 }
1021 1032
1022 GNUNET_assert (AF_UNIX == (un.sun_family)); 1033 GNUNET_assert (AF_UNIX == (un.sun_family));
1023 ua_len = sizeof (struct UnixAddress) + strlen (un.sun_path) + 1; 1034 ua_len = sizeof (struct UnixAddress) + strlen (&un.sun_path[0]) +1;
1024 ua = GNUNET_malloc (ua_len); 1035 ua = GNUNET_malloc (ua_len);
1025 ua->addrlen = htonl (strlen (&un.sun_path[0]) +1); 1036 ua->addrlen = htonl (strlen (&un.sun_path[0]) +1);
1026 ua->options = htonl (0); 1037 ua->options = htonl (0);
1027 memcpy (&ua[1], &un.sun_path[0], strlen (un.sun_path) + 1); 1038 memcpy (&ua[1], &un.sun_path[0], strlen (&un.sun_path[0]) +1);
1028 1039
1029 msg = (struct UNIXMessage *) buf; 1040 msg = (struct UNIXMessage *) buf;
1030 csize = ntohs (msg->header.size); 1041 csize = ntohs (msg->header.size);
@@ -1203,7 +1214,7 @@ unix_plugin_select (void *cls,
1203 * Create a slew of UNIX sockets. If possible, use IPv6 and IPv4. 1214 * Create a slew of UNIX sockets. If possible, use IPv6 and IPv4.
1204 * 1215 *
1205 * @param cls closure for server start, should be a struct Plugin * 1216 * @param cls closure for server start, should be a struct Plugin *
1206 * @return number of sockets created or #GNUNET_SYSERR on error 1217 * @return number of sockets created or GNUNET_SYSERR on error
1207 */ 1218 */
1208static int 1219static int
1209unix_transport_server_start (void *cls) 1220unix_transport_server_start (void *cls)
@@ -1212,16 +1223,26 @@ unix_transport_server_start (void *cls)
1212 struct sockaddr *serverAddr; 1223 struct sockaddr *serverAddr;
1213 socklen_t addrlen; 1224 socklen_t addrlen;
1214 struct sockaddr_un un; 1225 struct sockaddr_un un;
1226 size_t slen;
1215 1227
1216 memset (&un, 0, sizeof (un)); 1228 memset (&un, 0, sizeof (un));
1217 un.sun_family = AF_UNIX; 1229 un.sun_family = AF_UNIX;
1218 strncpy (un.sun_path, plugin->unix_socket_path, sizeof (un.sun_path) - 1); 1230 slen = strlen (plugin->unix_socket_path) + 1;
1231 if (slen >= sizeof (un.sun_path))
1232 slen = sizeof (un.sun_path) - 1;
1233
1234 memcpy (un.sun_path, plugin->unix_socket_path, slen);
1235 un.sun_path[slen] = '\0';
1236 slen = sizeof (struct sockaddr_un);
1219#if HAVE_SOCKADDR_IN_SIN_LEN 1237#if HAVE_SOCKADDR_IN_SIN_LEN
1220 un.sun_len = (u_char) sizeof (struct sockaddr_un); 1238 un.sun_len = (u_char) slen;
1221#endif 1239#endif
1222 1240
1223 serverAddr = (struct sockaddr *) &un; 1241 serverAddr = (struct sockaddr *) &un;
1224 addrlen = sizeof (struct sockaddr_un); 1242 addrlen = slen;
1243#if LINUX
1244 un.sun_path[0] = '\0';
1245#endif
1225 plugin->ats_network = plugin->env->get_address_type (plugin->env->cls, serverAddr, addrlen); 1246 plugin->ats_network = plugin->env->get_address_type (plugin->env->cls, serverAddr, addrlen);
1226 plugin->unix_sock.desc = 1247 plugin->unix_sock.desc =
1227 GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_DGRAM, 0); 1248 GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_DGRAM, 0);
@@ -1230,8 +1251,8 @@ unix_transport_server_start (void *cls)
1230 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "socket"); 1251 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "socket");
1231 return GNUNET_SYSERR; 1252 return GNUNET_SYSERR;
1232 } 1253 }
1233 if (GNUNET_OK != 1254 if (GNUNET_NETWORK_socket_bind (plugin->unix_sock.desc, serverAddr, addrlen, 0)
1234 GNUNET_NETWORK_socket_bind (plugin->unix_sock.desc, serverAddr, addrlen)) 1255 != GNUNET_OK)
1235 { 1256 {
1236 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "bind"); 1257 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "bind");
1237 GNUNET_NETWORK_socket_close (plugin->unix_sock.desc); 1258 GNUNET_NETWORK_socket_close (plugin->unix_sock.desc);
diff --git a/src/transport/transport.conf.in b/src/transport/transport.conf.in
index d33fa99fe..fd8b5dbbb 100644
--- a/src/transport/transport.conf.in
+++ b/src/transport/transport.conf.in
@@ -9,7 +9,7 @@ NEIGHBOUR_LIMIT = 50
9ACCEPT_FROM = 127.0.0.1; 9ACCEPT_FROM = 127.0.0.1;
10ACCEPT_FROM6 = ::1; 10ACCEPT_FROM6 = ::1;
11PLUGINS = tcp udp 11PLUGINS = tcp udp
12UNIXPATH = $SERVICEHOME/gnunet-service-transport.sock 12UNIXPATH = /tmp/gnunet-service-transport.sock
13BLACKLIST_FILE = $SERVICEHOME/blacklist 13BLACKLIST_FILE = $SERVICEHOME/blacklist
14UNIX_MATCH_UID = NO 14UNIX_MATCH_UID = NO
15UNIX_MATCH_GID = YES 15UNIX_MATCH_GID = YES