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);
