Index: src/transport/plugin_transport_unix.c =================================================================== --- src/transport/plugin_transport_unix.c (revision 29604) +++ src/transport/plugin_transport_unix.c (working copy) @@ -572,7 +572,6 @@ const void *sb; size_t sbs; struct sockaddr_un un; - size_t slen; const char *unix_path; @@ -592,21 +591,16 @@ unix_path = (const char *) &addr[1]; memset (&un, 0, sizeof (un)); un.sun_family = AF_UNIX; - slen = strlen (unix_path); - if (slen >= sizeof (un.sun_path)) - slen = sizeof (un.sun_path) - 1; - GNUNET_assert (slen < sizeof (un.sun_path)); - memcpy (un.sun_path, unix_path, slen); - un.sun_path[slen] = '\0'; - slen = sizeof (struct sockaddr_un); #if LINUX - un.sun_path[0] = '\0'; + strncpy (un.sun_path + 1, unix_path, sizeof (un.sun_path) - 2); +#else + strncpy (un.sun_path, unix_path, sizeof (un.sun_path) - 1); #endif #if HAVE_SOCKADDR_IN_SIN_LEN - un.sun_len = (u_char) slen; + un.sun_len = (u_char) sizeof (struct sockaddr_un); #endif sb = (struct sockaddr *) &un; - sbs = slen; + sbs = sizeof (struct sockaddr_un); resend: /* Send the data */ @@ -1223,26 +1217,21 @@ struct sockaddr *serverAddr; socklen_t addrlen; struct sockaddr_un un; - size_t slen; memset (&un, 0, sizeof (un)); un.sun_family = AF_UNIX; - slen = strlen (plugin->unix_socket_path) + 1; - if (slen >= sizeof (un.sun_path)) - slen = sizeof (un.sun_path) - 1; +#if LINUX + strncpy (un.sun_path + 1, plugin->unix_socket_path, sizeof (un.sun_path) - 2); +#else + strncpy (un.sun_path, plugin->unix_socket_path, sizeof (un.sun_path) - 1); +#endif - memcpy (un.sun_path, plugin->unix_socket_path, slen); - un.sun_path[slen] = '\0'; - slen = sizeof (struct sockaddr_un); #if HAVE_SOCKADDR_IN_SIN_LEN - un.sun_len = (u_char) slen; + un.sun_len = (u_char) sizeof (struct sockaddr_un); #endif serverAddr = (struct sockaddr *) &un; - addrlen = slen; -#if LINUX - un.sun_path[0] = '\0'; -#endif + addrlen = sizeof (struct sockaddr_un); plugin->ats_network = plugin->env->get_address_type (plugin->env->cls, serverAddr, addrlen); plugin->unix_sock.desc = GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_DGRAM, 0); Index: src/util/client.c =================================================================== --- src/util/client.c (revision 29604) +++ src/util/client.c (working copy) @@ -829,7 +829,6 @@ { /* probe UNIX support */ struct sockaddr_un s_un; - size_t slen; char *unixpath; unixpath = NULL; @@ -852,21 +851,17 @@ { memset (&s_un, 0, sizeof (s_un)); s_un.sun_family = AF_UNIX; - slen = strlen (unixpath) + 1; - if (slen >= sizeof (s_un.sun_path)) - slen = sizeof (s_un.sun_path) - 1; - memcpy (s_un.sun_path, unixpath, slen); - s_un.sun_path[slen] = '\0'; - slen = sizeof (struct sockaddr_un); #if LINUX - s_un.sun_path[0] = '\0'; + strncpy (s_un.sun_path + 1, unixpath, sizeof (s_un.sun_path) - 2); +#else + strncpy (s_un.sun_path, unixpath, sizeof (s_un.sun_path) - 1); #endif #if HAVE_SOCKADDR_IN_SIN_LEN - s_un.sun_len = (u_char) slen; + s_un.sun_len = (u_char) sizeof (struct sockaddr_un); #endif if (GNUNET_OK != GNUNET_NETWORK_socket_bind (sock, (const struct sockaddr *) &s_un, - slen, GNUNET_BIND_EXCLUSIVE)) + sizeof (struct sockaddr_un), GNUNET_BIND_EXCLUSIVE)) { /* failed to bind => service must be running */ GNUNET_free (unixpath); Index: src/util/connection.c =================================================================== --- src/util/connection.c (revision 29604) +++ src/util/connection.c (working copy) @@ -828,23 +828,18 @@ #ifdef AF_UNIX struct GNUNET_CONNECTION_Handle *connection; struct sockaddr_un *un; - size_t slen; GNUNET_assert (0 < strlen (unixpath)); /* sanity check */ un = GNUNET_new (struct sockaddr_un); un->sun_family = AF_UNIX; - slen = strlen (unixpath); - if (slen >= sizeof (un->sun_path)) - slen = sizeof (un->sun_path) - 1; - memcpy (un->sun_path, unixpath, slen); - un->sun_path[slen] = '\0'; - slen = sizeof (struct sockaddr_un); +#if LINUX + strncpy(un->sun_path + 1, unixpath, sizeof(un->sun_path) - 2); +#else + strncpy(un->sun_path, unixpath, sizeof(un->sun_path) - 1); +#endif #if HAVE_SOCKADDR_IN_SIN_LEN - un->sun_len = (u_char) slen; + un->sun_len = (u_char) sizeof (struct sockaddr_un); #endif -#if LINUX - un->sun_path[0] = '\0'; -#endif connection = GNUNET_new (struct GNUNET_CONNECTION_Handle); connection->cfg = cfg; connection->write_buffer_size = GNUNET_SERVER_MIN_BUFFER_SIZE; @@ -852,7 +847,7 @@ connection->port = 0; connection->hostname = NULL; connection->addr = (struct sockaddr *) un; - connection->addrlen = slen; + connection->addrlen = sizeof (struct sockaddr_un); connection->sock = GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_STREAM, 0); if (NULL == connection->sock) { Index: src/util/service.c =================================================================== --- src/util/service.c (revision 29604) +++ src/util/service.c (working copy) @@ -841,24 +841,19 @@ { #ifdef AF_UNIX struct sockaddr_un *un; - size_t slen; un = GNUNET_malloc (sizeof (struct sockaddr_un)); un->sun_family = AF_UNIX; - slen = strlen (unixpath) + 1; - if (slen >= sizeof (un->sun_path)) - slen = sizeof (un->sun_path) - 1; - memcpy (un->sun_path, unixpath, slen); - un->sun_path[slen] = '\0'; - slen = sizeof (struct sockaddr_un); #if LINUX - un->sun_path[0] = '\0'; + strncpy (un->sun_path + 1, unixpath, sizeof (un->sun_path) - 2); +#else + strncpy (un->sun_path, unixpath, sizeof (un->sun_path) - 1); #endif #if HAVE_SOCKADDR_IN_SIN_LEN - un->sun_len = (u_char) slen; + un->sun_len = (u_char) sizeof (struct sockaddr_un); #endif *saddrs = (struct sockaddr *) un; - *saddrlens = slen; + *saddrlens = sizeof (struct sockaddr_un); #else /* this function should never be called * unless AF_UNIX is defined! */ Index: src/util/test_server_with_client_unix.c =================================================================== --- src/util/test_server_with_client_unix.c (revision 29604) +++ src/util/test_server_with_client_unix.c (working copy) @@ -134,20 +134,19 @@ { struct sockaddr_un un; const char *unixpath = "/tmp/testsock"; - size_t slen = strlen (unixpath); struct sockaddr *sap[2]; socklen_t slens[2]; memset (&un, 0, sizeof (un)); un.sun_family = AF_UNIX; - memcpy (un.sun_path, unixpath, slen); - un.sun_path[slen] = '\0'; +#if LINUX + strncpy(un.sun_path + 1, unixpath, sizeof (un.sun_path) - 2); +#else + strncpy(un.sun_path, unixpath, sizeof (un.sun_path) - 1); +#endif #if HAVE_SOCKADDR_IN_SIN_LEN un.sun_len = (u_char) sizeof (un); #endif -#if LINUX - un.sun_path[0] = '\0'; -#endif sap[0] = (struct sockaddr *) &un; slens[0] = sizeof (un);