From: Matthias Wachs Date: Tue, 30 Aug 2011 12:23:34 +0000 (+0000) Subject: tests now use GNUNET_OS_check_helper_binary to find helper executables X-Git-Tag: initial-import-from-subversion-38251~17287 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=7797282ed6e91e3af427cbf9bae5372d2de2f79e;p=oweals%2Fgnunet.git tests now use GNUNET_OS_check_helper_binary to find helper executables --- diff --git a/src/transport/test_transport_api.c b/src/transport/test_transport_api.c index 29b465845..8f05d996d 100644 --- a/src/transport/test_transport_api.c +++ b/src/transport/test_transport_api.c @@ -260,117 +260,6 @@ check () return ok; } -/** - * Return the actual path to a file found in the current - * PATH environment variable. - * - * @param binary the name of the file to find - */ -static char * -get_path_from_PATH (char *binary) -{ - char *path; - char *pos; - char *end; - char *buf; - const char *p; - - p = getenv ("PATH"); - if (p == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("PATH environment variable is unset.\n")); - return NULL; - } - path = GNUNET_strdup (p); /* because we write on it */ - buf = GNUNET_malloc (strlen (path) + 20); - pos = path; - - while (NULL != (end = strchr (pos, PATH_SEPARATOR))) - { - *end = '\0'; - sprintf (buf, "%s/%s", pos, binary); - if (GNUNET_DISK_file_test (buf) == GNUNET_YES) - { - GNUNET_free (path); - return buf; - } - pos = end + 1; - } - sprintf (buf, "%s/%s", pos, binary); - if (GNUNET_DISK_file_test (buf) == GNUNET_YES) - { - GNUNET_free (path); - return buf; - } - GNUNET_free (buf); - GNUNET_free (path); - return NULL; -} - -/** - * Check whether the suid bit is set on a file. - * Attempts to find the file using the current - * PATH environment variable as a search path. - * - * @param binary the name of the file to check - * - * @return GNUNET_YES if the binary is found and - * can be run properly, GNUNET_NO otherwise - */ -static int -check_gnunet_nat_binary (char *binary) -{ - struct stat statbuf; - char *p; - -#ifdef MINGW - SOCKET rawsock; -#endif - -#ifdef MINGW - char *binaryexe; - - GNUNET_asprintf (&binaryexe, "%s.exe", binary); - p = get_path_from_PATH (binaryexe); - free (binaryexe); -#else - p = get_path_from_PATH (binary); -#endif - if (p == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Could not find binary `%s' in PATH!\n"), binary); - return GNUNET_NO; - } - if (0 != STAT (p, &statbuf)) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _("stat (%s) failed: %s\n"), p, - STRERROR (errno)); - GNUNET_free (p); - return GNUNET_SYSERR; - } - GNUNET_free (p); -#ifndef MINGW - if ((0 != (statbuf.st_mode & S_ISUID)) && (statbuf.st_uid == 0)) - return GNUNET_YES; - return GNUNET_NO; -#else - rawsock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP); - if (INVALID_SOCKET == rawsock) - { - DWORD err = GetLastError (); - - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "socket (AF_INET, SOCK_RAW, IPPROTO_ICMP) have failed! GLE = %d\n", - err); - return GNUNET_NO; /* not running as administrator */ - } - closesocket (rawsock); - return GNUNET_YES; -#endif -} - int main (int argc, char *argv[]) { @@ -388,6 +277,7 @@ main (int argc, char *argv[]) char *backup = pch; char *filename = NULL; char *dotexe; + int nat_res; /* get executable filename */ pch = strtok (pch, "/"); @@ -407,27 +297,27 @@ main (int argc, char *argv[]) GNUNET_asprintf (&cfg_file_p2, "%s_peer2.conf", filename); GNUNET_free (backup); - if (strstr (argv[0], "tcp_nat") != NULL) + if ((strstr (argv[0], "tcp_nat") != NULL) || (strstr (argv[0], "udp_nat") != NULL)) { - if (GNUNET_YES != check_gnunet_nat_binary ("gnunet-nat-server")) + nat_res = GNUNET_OS_check_helper_binary ("gnunet-nat-server"); + if (GNUNET_NO == nat_res) { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "`%s' not properly installed, cannot run NAT test!\n", - "gnunet-nat-server"); + "Cannot run NAT test: `%s' %s \n", + "gnunet-nat-server", + "SUID not set"); return 0; } - } - else if (strstr (argv[0], "udp_nat") != NULL) - { - if (GNUNET_YES != check_gnunet_nat_binary ("gnunet-nat-server")) + if (GNUNET_SYSERR == nat_res) { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "`%s' not properly installed, cannot run NAT test!\n", - "gnunet-nat-server"); + "Cannot run NAT test: `%s' %s \n", + "gnunet-nat-server", + "file not found"); return 0; } - } + } ret = check (); GNUNET_free (cfg_file_p1); diff --git a/src/transport/test_transport_api_reliability.c b/src/transport/test_transport_api_reliability.c index 008bb9019..617092676 100644 --- a/src/transport/test_transport_api_reliability.c +++ b/src/transport/test_transport_api_reliability.c @@ -398,121 +398,11 @@ check () return ok; } -/** - * Return the actual path to a file found in the current - * PATH environment variable. - * - * @param binary the name of the file to find - */ -static char * -get_path_from_PATH (char *binary) -{ - char *path; - char *pos; - char *end; - char *buf; - const char *p; - - p = getenv ("PATH"); - if (p == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("PATH environment variable is unset.\n")); - return NULL; - } - path = GNUNET_strdup (p); /* because we write on it */ - buf = GNUNET_malloc (strlen (path) + 20); - pos = path; - - while (NULL != (end = strchr (pos, PATH_SEPARATOR))) - { - *end = '\0'; - sprintf (buf, "%s/%s", pos, binary); - if (GNUNET_DISK_file_test (buf) == GNUNET_YES) - { - GNUNET_free (path); - return buf; - } - pos = end + 1; - } - sprintf (buf, "%s/%s", pos, binary); - if (GNUNET_DISK_file_test (buf) == GNUNET_YES) - { - GNUNET_free (path); - return buf; - } - GNUNET_free (buf); - GNUNET_free (path); - return NULL; -} - -/** - * Check whether the suid bit is set on a file. - * Attempts to find the file using the current - * PATH environment variable as a search path. - * - * @param binary the name of the file to check - * - * @return GNUNET_YES if the binary is found and - * can be run properly, GNUNET_NO otherwise - */ -static int -check_gnunet_nat_binary (char *binary) -{ - struct stat statbuf; - char *p; - -#ifdef MINGW - SOCKET rawsock; -#endif - -#ifdef MINGW - char *binaryexe; - - GNUNET_asprintf (&binaryexe, "%s.exe", binary); - p = get_path_from_PATH (binaryexe); - free (binaryexe); -#else - p = get_path_from_PATH (binary); -#endif - if (p == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Could not find binary `%s' in PATH!\n"), binary); - return GNUNET_NO; - } - if (0 != STAT (p, &statbuf)) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _("stat (%s) failed: %s\n"), p, - STRERROR (errno)); - GNUNET_free (p); - return GNUNET_SYSERR; - } - GNUNET_free (p); -#ifndef MINGW - if ((0 != (statbuf.st_mode & S_ISUID)) && (statbuf.st_uid == 0)) - return GNUNET_YES; - return GNUNET_NO; -#else - rawsock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP); - if (INVALID_SOCKET == rawsock) - { - DWORD err = GetLastError (); - - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "socket (AF_INET, SOCK_RAW, IPPROTO_ICMP) have failed! GLE = %d\n", - err); - return GNUNET_NO; /* not running as administrator */ - } - closesocket (rawsock); - return GNUNET_YES; -#endif -} - int main (int argc, char *argv[]) { int ret; + int nat_res; GNUNET_log_setup ("test-transport-api", #if VERBOSE @@ -545,27 +435,26 @@ main (int argc, char *argv[]) GNUNET_asprintf (&cfg_file_p2, "%s_peer2.conf", filename); GNUNET_free (backup); - if (strstr (argv[0], "tcp_nat") != NULL) + if ((strstr (argv[0], "tcp_nat") != NULL) || (strstr (argv[0], "udp_nat") != NULL)) { - if (GNUNET_YES != check_gnunet_nat_binary ("gnunet-nat-server")) + nat_res = GNUNET_OS_check_helper_binary ("gnunet-nat-server"); + if (GNUNET_NO == nat_res) { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "`%s' not properly installed, cannot run NAT test!\n", - "gnunet-nat-server"); + "Cannot run NAT test: `%s' %s \n", + "gnunet-nat-server", + "SUID not set"); return 0; } - } - else if (strstr (argv[0], "udp_nat") != NULL) - { - if (GNUNET_YES != check_gnunet_nat_binary ("gnunet-nat-server")) + if (GNUNET_SYSERR == nat_res) { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "`%s' not properly installed, cannot run NAT test!\n", - "gnunet-nat-server"); + "Cannot run NAT test: `%s' %s \n", + "gnunet-nat-server", + "file not found"); return 0; } } - ret = check (); GNUNET_free (cfg_file_p1); diff --git a/src/transport/test_transport_api_unreliability.c b/src/transport/test_transport_api_unreliability.c index 5eed408c0..32ebea221 100644 --- a/src/transport/test_transport_api_unreliability.c +++ b/src/transport/test_transport_api_unreliability.c @@ -598,119 +598,6 @@ setup_peer (struct PeerContext *p, const char *cfgname) GNUNET_assert (p->th != NULL); } - -/** - * Return the actual path to a file found in the current - * PATH environment variable. - * - * @param binary the name of the file to find - */ -static char * -get_path_from_PATH (char *binary) -{ - char *path; - char *pos; - char *end; - char *buf; - const char *p; - - p = getenv ("PATH"); - if (p == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("PATH environment variable is unset.\n")); - return NULL; - } - path = GNUNET_strdup (p); /* because we write on it */ - buf = GNUNET_malloc (strlen (path) + 20); - pos = path; - - while (NULL != (end = strchr (pos, PATH_SEPARATOR))) - { - *end = '\0'; - sprintf (buf, "%s/%s", pos, binary); - if (GNUNET_DISK_file_test (buf) == GNUNET_YES) - { - GNUNET_free (path); - return buf; - } - pos = end + 1; - } - sprintf (buf, "%s/%s", pos, binary); - if (GNUNET_DISK_file_test (buf) == GNUNET_YES) - { - GNUNET_free (path); - return buf; - } - GNUNET_free (buf); - GNUNET_free (path); - return NULL; -} - -/** - * Check whether the suid bit is set on a file. - * Attempts to find the file using the current - * PATH environment variable as a search path. - * - * @param binary the name of the file to check - * - * @return GNUNET_YES if the binary is found and - * can be run properly, GNUNET_NO otherwise - */ -static int -check_gnunet_nat_binary (char *binary) -{ - struct stat statbuf; - char *p; - -#ifdef MINGW - SOCKET rawsock; -#endif - -#ifdef MINGW - char *binaryexe; - - GNUNET_asprintf (&binaryexe, "%s.exe", binary); - p = get_path_from_PATH (binaryexe); - free (binaryexe); -#else - p = get_path_from_PATH (binary); -#endif - if (p == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Could not find binary `%s' in PATH!\n"), binary); - return GNUNET_NO; - } - if (0 != STAT (p, &statbuf)) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _("stat (%s) failed: %s\n"), p, - STRERROR (errno)); - GNUNET_free (p); - return GNUNET_SYSERR; - } - GNUNET_free (p); -#ifndef MINGW - if ((0 != (statbuf.st_mode & S_ISUID)) && (statbuf.st_uid == 0)) - return GNUNET_YES; - return GNUNET_NO; -#else - rawsock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP); - if (INVALID_SOCKET == rawsock) - { - DWORD err = GetLastError (); - - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "socket (AF_INET, SOCK_RAW, IPPROTO_ICMP) have failed! GLE = %d\n", - err); - return GNUNET_NO; /* not running as administrator */ - } - closesocket (rawsock); - return GNUNET_YES; -#endif -} - - static void try_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { @@ -796,14 +683,6 @@ check () #endif ok = 1; - if ((GNUNET_YES == is_tcp_nat) && - (check_gnunet_nat_binary ("gnunet-nat-server") != GNUNET_YES)) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "Not running NAT test case, binaries not properly installed.\n"); - return 0; - } - GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv, "test-transport-api-unreliability", "nohelp", options, &run, &ok); @@ -881,6 +760,7 @@ int main (int argc, char *argv[]) { int ret; + int nat_res; test_failed = GNUNET_NO; @@ -928,6 +808,29 @@ main (int argc, char *argv[]) "WARNING", #endif NULL); + + + if ((strstr (argv[0], "tcp_nat") != NULL) || (strstr (argv[0], "udp_nat") != NULL)) + { + nat_res = GNUNET_OS_check_helper_binary ("gnunet-nat-server"); + if (GNUNET_NO == nat_res) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Cannot run NAT test: `%s' %s \n", + "gnunet-nat-server", + "SUID not set"); + return 0; + } + if (GNUNET_SYSERR == nat_res) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Cannot run NAT test: `%s' %s \n", + "gnunet-nat-server", + "file not found"); + return 0; + } + } + ret = check (); GNUNET_free_non_null (test_name);