aboutsummaryrefslogtreecommitdiff
path: root/src/util/client.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-06-20 18:45:30 +0000
committerChristian Grothoff <christian@grothoff.org>2012-06-20 18:45:30 +0000
commitadf27a6356d67c4bef76f3560aa4abce5f71528f (patch)
tree8252c4e9d314d721ebe76f8b9a1655de00ddedb3 /src/util/client.c
parent8d9db9ddae163bc412ccfe301ea3d95298bb787f (diff)
downloadgnunet-adf27a6356d67c4bef76f3560aa4abce5f71528f.tar.gz
gnunet-adf27a6356d67c4bef76f3560aa4abce5f71528f.zip
-fixing #2439
Diffstat (limited to 'src/util/client.c')
-rw-r--r--src/util/client.c57
1 files changed, 29 insertions, 28 deletions
diff --git a/src/util/client.c b/src/util/client.c
index c29b48e6b..d9be7f46e 100644
--- a/src/util/client.c
+++ b/src/util/client.c
@@ -738,40 +738,41 @@ GNUNET_CLIENT_service_test (const char *service,
738 { 738 {
739 LOG (GNUNET_ERROR_TYPE_WARNING, 739 LOG (GNUNET_ERROR_TYPE_WARNING,
740 _("UNIXPATH `%s' too long, maximum length is %llu\n"), unixpath, 740 _("UNIXPATH `%s' too long, maximum length is %llu\n"), unixpath,
741 sizeof (s_un.sun_path)); 741 (unsigned long long) sizeof (s_un.sun_path));
742 unixpath = GNUNET_NETWORK_shorten_unixpath (unixpath);
742 } 743 }
743 else 744 }
745 if (NULL != unixpath)
746 {
747 sock = GNUNET_NETWORK_socket_create (PF_UNIX, SOCK_STREAM, 0);
748 if (NULL != sock)
744 { 749 {
745 sock = GNUNET_NETWORK_socket_create (PF_UNIX, SOCK_STREAM, 0); 750 memset (&s_un, 0, sizeof (s_un));
746 if (NULL != sock) 751 s_un.sun_family = AF_UNIX;
747 { 752 slen = strlen (unixpath) + 1;
748 memset (&s_un, 0, sizeof (s_un)); 753 if (slen >= sizeof (s_un.sun_path))
749 s_un.sun_family = AF_UNIX; 754 slen = sizeof (s_un.sun_path) - 1;
750 slen = strlen (unixpath) + 1; 755 memcpy (s_un.sun_path, unixpath, slen);
751 if (slen >= sizeof (s_un.sun_path)) 756 s_un.sun_path[slen] = '\0';
752 slen = sizeof (s_un.sun_path) - 1; 757 slen = sizeof (struct sockaddr_un);
753 memcpy (s_un.sun_path, unixpath, slen);
754 s_un.sun_path[slen] = '\0';
755 slen = sizeof (struct sockaddr_un);
756#if LINUX 758#if LINUX
757 s_un.sun_path[0] = '\0'; 759 s_un.sun_path[0] = '\0';
758#endif 760#endif
759#if HAVE_SOCKADDR_IN_SIN_LEN 761#if HAVE_SOCKADDR_IN_SIN_LEN
760 s_un.sun_len = (u_char) slen; 762 s_un.sun_len = (u_char) slen;
761#endif 763#endif
762 if (GNUNET_OK != 764 if (GNUNET_OK !=
763 GNUNET_NETWORK_socket_bind (sock, (const struct sockaddr *) &s_un, 765 GNUNET_NETWORK_socket_bind (sock, (const struct sockaddr *) &s_un,
764 slen)) 766 slen))
765 { 767 {
766 /* failed to bind => service must be running */ 768 /* failed to bind => service must be running */
767 GNUNET_free (unixpath); 769 GNUNET_free (unixpath);
768 (void) GNUNET_NETWORK_socket_close (sock); 770 (void) GNUNET_NETWORK_socket_close (sock);
769 GNUNET_SCHEDULER_add_continuation (task, task_cls, 771 GNUNET_SCHEDULER_add_continuation (task, task_cls,
770 GNUNET_SCHEDULER_REASON_PREREQ_DONE); 772 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
771 return; 773 return;
772 } 774 }
773 (void) GNUNET_NETWORK_socket_close (sock); 775 (void) GNUNET_NETWORK_socket_close (sock);
774 }
775 /* let's try IP */ 776 /* let's try IP */
776 } 777 }
777 } 778 }