aboutsummaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport/plugin_transport_unix.c')
-rw-r--r--src/transport/plugin_transport_unix.c51
1 files changed, 15 insertions, 36 deletions
diff --git a/src/transport/plugin_transport_unix.c b/src/transport/plugin_transport_unix.c
index 2087d30e5..4e3038787 100644
--- a/src/transport/plugin_transport_unix.c
+++ b/src/transport/plugin_transport_unix.c
@@ -572,7 +572,6 @@ 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;
576 const char *unix_path; 575 const char *unix_path;
577 576
578 577
@@ -592,21 +591,12 @@ unix_real_send (void *cls,
592 unix_path = (const char *) &addr[1]; 591 unix_path = (const char *) &addr[1];
593 memset (&un, 0, sizeof (un)); 592 memset (&un, 0, sizeof (un));
594 un.sun_family = AF_UNIX; 593 un.sun_family = AF_UNIX;
595 slen = strlen (unix_path); 594 strncpy (un.sun_path, unix_path, sizeof (un.sun_path) - 1);
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
605#if HAVE_SOCKADDR_IN_SIN_LEN 595#if HAVE_SOCKADDR_IN_SIN_LEN
606 un.sun_len = (u_char) slen; 596 un.sun_len = (u_char) sizeof (struct sockaddr_un);
607#endif 597#endif
608 sb = (struct sockaddr *) &un; 598 sb = (struct sockaddr *) &un;
609 sbs = slen; 599 sbs = sizeof (struct sockaddr_un);
610 600
611resend: 601resend:
612 /* Send the data */ 602 /* Send the data */
@@ -1023,19 +1013,18 @@ unix_plugin_select_read (struct Plugin *plugin)
1023 } 1013 }
1024 else 1014 else
1025 { 1015 {
1026#if LINUX 1016 LOG (GNUNET_ERROR_TYPE_DEBUG,
1027 un.sun_path[0] = '/'; 1017 "Read %d bytes from socket %s\n",
1028#endif 1018 (int) ret,
1029 LOG (GNUNET_ERROR_TYPE_DEBUG, "Read %d bytes from socket %s\n", ret, 1019 un.sun_path);
1030 &un.sun_path[0]);
1031 } 1020 }
1032 1021
1033 GNUNET_assert (AF_UNIX == (un.sun_family)); 1022 GNUNET_assert (AF_UNIX == (un.sun_family));
1034 ua_len = sizeof (struct UnixAddress) + strlen (&un.sun_path[0]) +1; 1023 ua_len = sizeof (struct UnixAddress) + strlen (un.sun_path) + 1;
1035 ua = GNUNET_malloc (ua_len); 1024 ua = GNUNET_malloc (ua_len);
1036 ua->addrlen = htonl (strlen (&un.sun_path[0]) +1); 1025 ua->addrlen = htonl (strlen (&un.sun_path[0]) +1);
1037 ua->options = htonl (0); 1026 ua->options = htonl (0);
1038 memcpy (&ua[1], &un.sun_path[0], strlen (&un.sun_path[0]) +1); 1027 memcpy (&ua[1], &un.sun_path[0], strlen (un.sun_path) + 1);
1039 1028
1040 msg = (struct UNIXMessage *) buf; 1029 msg = (struct UNIXMessage *) buf;
1041 csize = ntohs (msg->header.size); 1030 csize = ntohs (msg->header.size);
@@ -1214,7 +1203,7 @@ unix_plugin_select (void *cls,
1214 * Create a slew of UNIX sockets. If possible, use IPv6 and IPv4. 1203 * Create a slew of UNIX sockets. If possible, use IPv6 and IPv4.
1215 * 1204 *
1216 * @param cls closure for server start, should be a struct Plugin * 1205 * @param cls closure for server start, should be a struct Plugin *
1217 * @return number of sockets created or GNUNET_SYSERR on error 1206 * @return number of sockets created or #GNUNET_SYSERR on error
1218 */ 1207 */
1219static int 1208static int
1220unix_transport_server_start (void *cls) 1209unix_transport_server_start (void *cls)
@@ -1223,26 +1212,16 @@ unix_transport_server_start (void *cls)
1223 struct sockaddr *serverAddr; 1212 struct sockaddr *serverAddr;
1224 socklen_t addrlen; 1213 socklen_t addrlen;
1225 struct sockaddr_un un; 1214 struct sockaddr_un un;
1226 size_t slen;
1227 1215
1228 memset (&un, 0, sizeof (un)); 1216 memset (&un, 0, sizeof (un));
1229 un.sun_family = AF_UNIX; 1217 un.sun_family = AF_UNIX;
1230 slen = strlen (plugin->unix_socket_path) + 1; 1218 strncpy (un.sun_path, plugin->unix_socket_path, sizeof (un.sun_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);
1237#if HAVE_SOCKADDR_IN_SIN_LEN 1219#if HAVE_SOCKADDR_IN_SIN_LEN
1238 un.sun_len = (u_char) slen; 1220 un.sun_len = (u_char) sizeof (struct sockaddr_un);
1239#endif 1221#endif
1240 1222
1241 serverAddr = (struct sockaddr *) &un; 1223 serverAddr = (struct sockaddr *) &un;
1242 addrlen = slen; 1224 addrlen = sizeof (struct sockaddr_un);
1243#if LINUX
1244 un.sun_path[0] = '\0';
1245#endif
1246 plugin->ats_network = plugin->env->get_address_type (plugin->env->cls, serverAddr, addrlen); 1225 plugin->ats_network = plugin->env->get_address_type (plugin->env->cls, serverAddr, addrlen);
1247 plugin->unix_sock.desc = 1226 plugin->unix_sock.desc =
1248 GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_DGRAM, 0); 1227 GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_DGRAM, 0);
@@ -1251,8 +1230,8 @@ unix_transport_server_start (void *cls)
1251 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "socket"); 1230 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "socket");
1252 return GNUNET_SYSERR; 1231 return GNUNET_SYSERR;
1253 } 1232 }
1254 if (GNUNET_NETWORK_socket_bind (plugin->unix_sock.desc, serverAddr, addrlen, 0) 1233 if (GNUNET_OK !=
1255 != GNUNET_OK) 1234 GNUNET_NETWORK_socket_bind (plugin->unix_sock.desc, serverAddr, addrlen))
1256 { 1235 {
1257 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "bind"); 1236 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "bind");
1258 GNUNET_NETWORK_socket_close (plugin->unix_sock.desc); 1237 GNUNET_NETWORK_socket_close (plugin->unix_sock.desc);