diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-06-20 18:45:30 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-06-20 18:45:30 +0000 |
commit | adf27a6356d67c4bef76f3560aa4abce5f71528f (patch) | |
tree | 8252c4e9d314d721ebe76f8b9a1655de00ddedb3 /src/util/client.c | |
parent | 8d9db9ddae163bc412ccfe301ea3d95298bb787f (diff) | |
download | gnunet-adf27a6356d67c4bef76f3560aa4abce5f71528f.tar.gz gnunet-adf27a6356d67c4bef76f3560aa4abce5f71528f.zip |
-fixing #2439
Diffstat (limited to 'src/util/client.c')
-rw-r--r-- | src/util/client.c | 57 |
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 | } |