diff options
author | Christian Grothoff <christian@grothoff.org> | 2018-06-05 10:00:23 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2018-06-05 10:00:23 +0200 |
commit | 1cc9d829c0add9533f1bb7fab59c32a7328086d0 (patch) | |
tree | 82bc36b82747dacd38a41b3771c8db8ef1e668ad /src/gns | |
parent | 09f7c260e7cd3bc0f12ad89e2dcf7d813f4089d8 (diff) | |
download | gnunet-1cc9d829c0add9533f1bb7fab59c32a7328086d0.tar.gz gnunet-1cc9d829c0add9533f1bb7fab59c32a7328086d0.zip |
code cleanup, fix strlen
Diffstat (limited to 'src/gns')
-rw-r--r-- | src/gns/gnunet-gns-proxy.c | 313 |
1 files changed, 230 insertions, 83 deletions
diff --git a/src/gns/gnunet-gns-proxy.c b/src/gns/gnunet-gns-proxy.c index fcd69599b..e4fa5cc10 100644 --- a/src/gns/gnunet-gns-proxy.c +++ b/src/gns/gnunet-gns-proxy.c | |||
@@ -106,7 +106,13 @@ | |||
106 | * @param fun name of curl_easy-function that gave the error | 106 | * @param fun name of curl_easy-function that gave the error |
107 | * @param rc return code from curl | 107 | * @param rc return code from curl |
108 | */ | 108 | */ |
109 | #define LOG_CURL_EASY(level,fun,rc) GNUNET_log(level, _("%s failed at %s:%d: `%s'\n"), fun, __FILE__, __LINE__, curl_easy_strerror (rc)) | 109 | #define LOG_CURL_EASY(level,fun,rc) \ |
110 | GNUNET_log (level, \ | ||
111 | _("%s failed at %s:%d: `%s'\n"), \ | ||
112 | fun, \ | ||
113 | __FILE__, \ | ||
114 | __LINE__, \ | ||
115 | curl_easy_strerror (rc)) | ||
110 | 116 | ||
111 | 117 | ||
112 | /* *************** Socks protocol definitions (move to TUN?) ****************** */ | 118 | /* *************** Socks protocol definitions (move to TUN?) ****************** */ |
@@ -768,21 +774,37 @@ cleanup_s5r (struct Socks5Request *s5r) | |||
768 | } | 774 | } |
769 | if ( (NULL != s5r->response) && | 775 | if ( (NULL != s5r->response) && |
770 | (curl_failure_response != s5r->response) ) | 776 | (curl_failure_response != s5r->response) ) |
777 | { | ||
771 | MHD_destroy_response (s5r->response); | 778 | MHD_destroy_response (s5r->response); |
779 | s5r->response = NULL; | ||
780 | } | ||
772 | if (NULL != s5r->rtask) | 781 | if (NULL != s5r->rtask) |
782 | { | ||
773 | GNUNET_SCHEDULER_cancel (s5r->rtask); | 783 | GNUNET_SCHEDULER_cancel (s5r->rtask); |
784 | s5r->rtask = NULL; | ||
785 | } | ||
774 | if (NULL != s5r->timeout_task) | 786 | if (NULL != s5r->timeout_task) |
787 | { | ||
775 | GNUNET_SCHEDULER_cancel (s5r->timeout_task); | 788 | GNUNET_SCHEDULER_cancel (s5r->timeout_task); |
789 | s5r->timeout_task = NULL; | ||
790 | } | ||
776 | if (NULL != s5r->wtask) | 791 | if (NULL != s5r->wtask) |
792 | { | ||
777 | GNUNET_SCHEDULER_cancel (s5r->wtask); | 793 | GNUNET_SCHEDULER_cancel (s5r->wtask); |
794 | s5r->wtask = NULL; | ||
795 | } | ||
778 | if (NULL != s5r->gns_lookup) | 796 | if (NULL != s5r->gns_lookup) |
797 | { | ||
779 | GNUNET_GNS_lookup_with_tld_cancel (s5r->gns_lookup); | 798 | GNUNET_GNS_lookup_with_tld_cancel (s5r->gns_lookup); |
799 | s5r->gns_lookup = NULL; | ||
800 | } | ||
780 | if (NULL != s5r->sock) | 801 | if (NULL != s5r->sock) |
781 | { | 802 | { |
782 | if (SOCKS5_SOCKET_WITH_MHD <= s5r->state) | 803 | if (SOCKS5_SOCKET_WITH_MHD <= s5r->state) |
783 | GNUNET_NETWORK_socket_free_memory_only_ (s5r->sock); | 804 | GNUNET_NETWORK_socket_free_memory_only_ (s5r->sock); |
784 | else | 805 | else |
785 | GNUNET_NETWORK_socket_close (s5r->sock); | 806 | GNUNET_NETWORK_socket_close (s5r->sock); |
807 | s5r->sock = NULL; | ||
786 | } | 808 | } |
787 | GNUNET_CONTAINER_DLL_remove (s5r_head, | 809 | GNUNET_CONTAINER_DLL_remove (s5r_head, |
788 | s5r_tail, | 810 | s5r_tail, |
@@ -1129,7 +1151,9 @@ curl_check_hdr (void *buffer, | |||
1129 | domain_matched = GNUNET_NO; /* make sure we match domain at most once */ | 1151 | domain_matched = GNUNET_NO; /* make sure we match domain at most once */ |
1130 | for (tok = strtok (hdr_val, ";"); NULL != tok; tok = strtok (NULL, ";")) | 1152 | for (tok = strtok (hdr_val, ";"); NULL != tok; tok = strtok (NULL, ";")) |
1131 | { | 1153 | { |
1132 | if ( (0 == strncasecmp (tok, " domain", strlen (" domain"))) && | 1154 | if ( (0 == strncasecmp (tok, |
1155 | " domain", | ||
1156 | strlen (" domain"))) && | ||
1133 | (GNUNET_NO == domain_matched) ) | 1157 | (GNUNET_NO == domain_matched) ) |
1134 | { | 1158 | { |
1135 | domain_matched = GNUNET_YES; | 1159 | domain_matched = GNUNET_YES; |
@@ -1137,7 +1161,8 @@ curl_check_hdr (void *buffer, | |||
1137 | if (strlen (cookie_domain) < strlen (s5r->leho)) | 1161 | if (strlen (cookie_domain) < strlen (s5r->leho)) |
1138 | { | 1162 | { |
1139 | delta_cdomain = strlen (s5r->leho) - strlen (cookie_domain); | 1163 | delta_cdomain = strlen (s5r->leho) - strlen (cookie_domain); |
1140 | if (0 == strcasecmp (cookie_domain, s5r->leho + delta_cdomain)) | 1164 | if (0 == strcasecmp (cookie_domain, |
1165 | s5r->leho + delta_cdomain)) | ||
1141 | { | 1166 | { |
1142 | offset += sprintf (new_cookie_hdr + offset, | 1167 | offset += sprintf (new_cookie_hdr + offset, |
1143 | " domain=%s;", | 1168 | " domain=%s;", |
@@ -1145,7 +1170,8 @@ curl_check_hdr (void *buffer, | |||
1145 | continue; | 1170 | continue; |
1146 | } | 1171 | } |
1147 | } | 1172 | } |
1148 | else if (0 == strcmp (cookie_domain, s5r->leho)) | 1173 | else if (0 == strcmp (cookie_domain, |
1174 | s5r->leho)) | ||
1149 | { | 1175 | { |
1150 | offset += sprintf (new_cookie_hdr + offset, | 1176 | offset += sprintf (new_cookie_hdr + offset, |
1151 | " domain=%s;", | 1177 | " domain=%s;", |
@@ -1156,7 +1182,9 @@ curl_check_hdr (void *buffer, | |||
1156 | _("Cookie domain `%s' supplied by server is invalid\n"), | 1182 | _("Cookie domain `%s' supplied by server is invalid\n"), |
1157 | tok); | 1183 | tok); |
1158 | } | 1184 | } |
1159 | GNUNET_memcpy (new_cookie_hdr + offset, tok, strlen (tok)); | 1185 | GNUNET_memcpy (new_cookie_hdr + offset, |
1186 | tok, | ||
1187 | strlen (tok)); | ||
1160 | offset += strlen (tok); | 1188 | offset += strlen (tok); |
1161 | new_cookie_hdr[offset++] = ';'; | 1189 | new_cookie_hdr[offset++] = ';'; |
1162 | } | 1190 | } |
@@ -1164,7 +1192,8 @@ curl_check_hdr (void *buffer, | |||
1164 | } | 1192 | } |
1165 | 1193 | ||
1166 | new_location = NULL; | 1194 | new_location = NULL; |
1167 | if (0 == strcasecmp (MHD_HTTP_HEADER_LOCATION, hdr_type)) | 1195 | if (0 == strcasecmp (MHD_HTTP_HEADER_LOCATION, |
1196 | hdr_type)) | ||
1168 | { | 1197 | { |
1169 | char *leho_host; | 1198 | char *leho_host; |
1170 | 1199 | ||
@@ -1251,7 +1280,9 @@ create_mhd_response_from_s5r (struct Socks5Request *s5r) | |||
1251 | s5r->domain, | 1280 | s5r->domain, |
1252 | s5r->url); | 1281 | s5r->url); |
1253 | s5r->response_code = resp_code; | 1282 | s5r->response_code = resp_code; |
1254 | s5r->response = MHD_create_response_from_callback ((-1 == content_length) ? MHD_SIZE_UNKNOWN : content_length, | 1283 | s5r->response = MHD_create_response_from_callback ((-1 == content_length) |
1284 | ? MHD_SIZE_UNKNOWN | ||
1285 | : content_length, | ||
1255 | IO_BUFFERSIZE, | 1286 | IO_BUFFERSIZE, |
1256 | &mhd_content_cb, | 1287 | &mhd_content_cb, |
1257 | s5r, | 1288 | s5r, |
@@ -1480,20 +1511,28 @@ curl_download_prepare () | |||
1480 | return; | 1511 | return; |
1481 | } | 1512 | } |
1482 | to = -1; | 1513 | to = -1; |
1483 | GNUNET_break (CURLM_OK == curl_multi_timeout (curl_multi, &to)); | 1514 | GNUNET_break (CURLM_OK == |
1515 | curl_multi_timeout (curl_multi, | ||
1516 | &to)); | ||
1484 | if (-1 == to) | 1517 | if (-1 == to) |
1485 | rtime = GNUNET_TIME_UNIT_FOREVER_REL; | 1518 | rtime = GNUNET_TIME_UNIT_FOREVER_REL; |
1486 | else | 1519 | else |
1487 | rtime = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, to); | 1520 | rtime = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, |
1521 | to); | ||
1488 | if (-1 != max) | 1522 | if (-1 != max) |
1489 | { | 1523 | { |
1490 | grs = GNUNET_NETWORK_fdset_create (); | 1524 | grs = GNUNET_NETWORK_fdset_create (); |
1491 | gws = GNUNET_NETWORK_fdset_create (); | 1525 | gws = GNUNET_NETWORK_fdset_create (); |
1492 | GNUNET_NETWORK_fdset_copy_native (grs, &rs, max + 1); | 1526 | GNUNET_NETWORK_fdset_copy_native (grs, |
1493 | GNUNET_NETWORK_fdset_copy_native (gws, &ws, max + 1); | 1527 | &rs, |
1528 | max + 1); | ||
1529 | GNUNET_NETWORK_fdset_copy_native (gws, | ||
1530 | &ws, | ||
1531 | max + 1); | ||
1494 | curl_download_task = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT, | 1532 | curl_download_task = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT, |
1495 | rtime, | 1533 | rtime, |
1496 | grs, gws, | 1534 | grs, |
1535 | gws, | ||
1497 | &curl_task_download, | 1536 | &curl_task_download, |
1498 | curl_multi); | 1537 | curl_multi); |
1499 | GNUNET_NETWORK_fdset_destroy (gws); | 1538 | GNUNET_NETWORK_fdset_destroy (gws); |
@@ -1648,12 +1687,15 @@ con_val_iter (void *cls, | |||
1648 | struct Socks5Request *s5r = cls; | 1687 | struct Socks5Request *s5r = cls; |
1649 | char *hdr; | 1688 | char *hdr; |
1650 | 1689 | ||
1651 | if ( (0 == strcasecmp (MHD_HTTP_HEADER_HOST, key)) && | 1690 | if ( (0 == strcasecmp (MHD_HTTP_HEADER_HOST, |
1691 | key)) && | ||
1652 | (NULL != s5r->leho) ) | 1692 | (NULL != s5r->leho) ) |
1653 | value = s5r->leho; | 1693 | value = s5r->leho; |
1654 | if (0 == strcasecmp (MHD_HTTP_HEADER_CONTENT_LENGTH, key)) | 1694 | if (0 == strcasecmp (MHD_HTTP_HEADER_CONTENT_LENGTH, |
1695 | key)) | ||
1655 | return MHD_YES; | 1696 | return MHD_YES; |
1656 | if (0 == strcasecmp (MHD_HTTP_HEADER_ACCEPT_ENCODING, key)) | 1697 | if (0 == strcasecmp (MHD_HTTP_HEADER_ACCEPT_ENCODING, |
1698 | key)) | ||
1657 | return MHD_YES; | 1699 | return MHD_YES; |
1658 | GNUNET_asprintf (&hdr, | 1700 | GNUNET_asprintf (&hdr, |
1659 | "%s: %s", | 1701 | "%s: %s", |
@@ -1774,21 +1816,40 @@ create_response (void *cls, | |||
1774 | return MHD_queue_response (con, | 1816 | return MHD_queue_response (con, |
1775 | MHD_HTTP_INTERNAL_SERVER_ERROR, | 1817 | MHD_HTTP_INTERNAL_SERVER_ERROR, |
1776 | curl_failure_response); | 1818 | curl_failure_response); |
1777 | curl_easy_setopt (s5r->curl, CURLOPT_HEADERFUNCTION, &curl_check_hdr); | 1819 | curl_easy_setopt (s5r->curl, |
1778 | curl_easy_setopt (s5r->curl, CURLOPT_HEADERDATA, s5r); | 1820 | CURLOPT_HEADERFUNCTION, |
1779 | curl_easy_setopt (s5r->curl, CURLOPT_FOLLOWLOCATION, 0); | 1821 | &curl_check_hdr); |
1822 | curl_easy_setopt (s5r->curl, | ||
1823 | CURLOPT_HEADERDATA, | ||
1824 | s5r); | ||
1825 | curl_easy_setopt (s5r->curl, | ||
1826 | CURLOPT_FOLLOWLOCATION, | ||
1827 | 0); | ||
1780 | if (s5r->is_gns) | 1828 | if (s5r->is_gns) |
1781 | curl_easy_setopt (s5r->curl, | 1829 | curl_easy_setopt (s5r->curl, |
1782 | CURLOPT_IPRESOLVE, | 1830 | CURLOPT_IPRESOLVE, |
1783 | CURL_IPRESOLVE_V4); | 1831 | CURL_IPRESOLVE_V4); |
1784 | curl_easy_setopt (s5r->curl, CURLOPT_CONNECTTIMEOUT, 600L); | 1832 | curl_easy_setopt (s5r->curl, |
1785 | curl_easy_setopt (s5r->curl, CURLOPT_TIMEOUT, 600L); | 1833 | CURLOPT_CONNECTTIMEOUT, |
1786 | curl_easy_setopt (s5r->curl, CURLOPT_NOSIGNAL, 1L); | 1834 | 600L); |
1787 | curl_easy_setopt (s5r->curl, CURLOPT_HTTP_CONTENT_DECODING, 0); | 1835 | curl_easy_setopt (s5r->curl, |
1788 | // curl_easy_setopt (s5r->curl, CURLOPT_HTTP_TRANSFER_DECODING, 0); | 1836 | CURLOPT_TIMEOUT, |
1789 | curl_easy_setopt (s5r->curl, CURLOPT_NOSIGNAL, 1L); | 1837 | 600L); |
1790 | curl_easy_setopt (s5r->curl, CURLOPT_PRIVATE, s5r); | 1838 | curl_easy_setopt (s5r->curl, |
1791 | curl_easy_setopt (s5r->curl, CURLOPT_VERBOSE, 0L); | 1839 | CURLOPT_NOSIGNAL, |
1840 | 1L); | ||
1841 | curl_easy_setopt (s5r->curl, | ||
1842 | CURLOPT_HTTP_CONTENT_DECODING, | ||
1843 | 0); | ||
1844 | curl_easy_setopt (s5r->curl, | ||
1845 | CURLOPT_NOSIGNAL, | ||
1846 | 1L); | ||
1847 | curl_easy_setopt (s5r->curl, | ||
1848 | CURLOPT_PRIVATE, | ||
1849 | s5r); | ||
1850 | curl_easy_setopt (s5r->curl, | ||
1851 | CURLOPT_VERBOSE, | ||
1852 | 0L); | ||
1792 | /** | 1853 | /** |
1793 | * Pre-populate cache to resolve Hostname. | 1854 | * Pre-populate cache to resolve Hostname. |
1794 | * This is necessary as the DNS name in the CURLOPT_URL is used | 1855 | * This is necessary as the DNS name in the CURLOPT_URL is used |
@@ -1844,11 +1905,21 @@ create_response (void *cls, | |||
1844 | MHD_HTTP_METHOD_PUT)) | 1905 | MHD_HTTP_METHOD_PUT)) |
1845 | { | 1906 | { |
1846 | s5r->state = SOCKS5_SOCKET_UPLOAD_STARTED; | 1907 | s5r->state = SOCKS5_SOCKET_UPLOAD_STARTED; |
1847 | curl_easy_setopt (s5r->curl, CURLOPT_UPLOAD, 1L); | 1908 | curl_easy_setopt (s5r->curl, |
1848 | curl_easy_setopt (s5r->curl, CURLOPT_WRITEFUNCTION, &curl_download_cb); | 1909 | CURLOPT_UPLOAD, |
1849 | curl_easy_setopt (s5r->curl, CURLOPT_WRITEDATA, s5r); | 1910 | 1L); |
1850 | curl_easy_setopt (s5r->curl, CURLOPT_READFUNCTION, &curl_upload_cb); | 1911 | curl_easy_setopt (s5r->curl, |
1851 | curl_easy_setopt (s5r->curl, CURLOPT_READDATA, s5r); | 1912 | CURLOPT_WRITEFUNCTION, |
1913 | &curl_download_cb); | ||
1914 | curl_easy_setopt (s5r->curl, | ||
1915 | CURLOPT_WRITEDATA, | ||
1916 | s5r); | ||
1917 | curl_easy_setopt (s5r->curl, | ||
1918 | CURLOPT_READFUNCTION, | ||
1919 | &curl_upload_cb); | ||
1920 | curl_easy_setopt (s5r->curl, | ||
1921 | CURLOPT_READDATA, | ||
1922 | s5r); | ||
1852 | { | 1923 | { |
1853 | const char *us; | 1924 | const char *us; |
1854 | long upload_size; | 1925 | long upload_size; |
@@ -1870,11 +1941,21 @@ create_response (void *cls, | |||
1870 | else if (0 == strcasecmp (meth, MHD_HTTP_METHOD_POST)) | 1941 | else if (0 == strcasecmp (meth, MHD_HTTP_METHOD_POST)) |
1871 | { | 1942 | { |
1872 | s5r->state = SOCKS5_SOCKET_UPLOAD_STARTED; | 1943 | s5r->state = SOCKS5_SOCKET_UPLOAD_STARTED; |
1873 | curl_easy_setopt (s5r->curl, CURLOPT_POST, 1L); | 1944 | curl_easy_setopt (s5r->curl, |
1874 | curl_easy_setopt (s5r->curl, CURLOPT_WRITEFUNCTION, &curl_download_cb); | 1945 | CURLOPT_POST, |
1875 | curl_easy_setopt (s5r->curl, CURLOPT_WRITEDATA, s5r); | 1946 | 1L); |
1876 | curl_easy_setopt (s5r->curl, CURLOPT_READFUNCTION, &curl_upload_cb); | 1947 | curl_easy_setopt (s5r->curl, |
1877 | curl_easy_setopt (s5r->curl, CURLOPT_READDATA, s5r); | 1948 | CURLOPT_WRITEFUNCTION, |
1949 | &curl_download_cb); | ||
1950 | curl_easy_setopt (s5r->curl, | ||
1951 | CURLOPT_WRITEDATA, | ||
1952 | s5r); | ||
1953 | curl_easy_setopt (s5r->curl, | ||
1954 | CURLOPT_READFUNCTION, | ||
1955 | &curl_upload_cb); | ||
1956 | curl_easy_setopt (s5r->curl, | ||
1957 | CURLOPT_READDATA, | ||
1958 | s5r); | ||
1878 | { | 1959 | { |
1879 | const char *us; | 1960 | const char *us; |
1880 | long upload_size; | 1961 | long upload_size; |
@@ -1893,22 +1974,35 @@ create_response (void *cls, | |||
1893 | } | 1974 | } |
1894 | } | 1975 | } |
1895 | } | 1976 | } |
1896 | else if (0 == strcasecmp (meth, MHD_HTTP_METHOD_HEAD)) | 1977 | else if (0 == strcasecmp (meth, |
1978 | MHD_HTTP_METHOD_HEAD)) | ||
1897 | { | 1979 | { |
1898 | s5r->state = SOCKS5_SOCKET_DOWNLOAD_STARTED; | 1980 | s5r->state = SOCKS5_SOCKET_DOWNLOAD_STARTED; |
1899 | curl_easy_setopt (s5r->curl, CURLOPT_NOBODY, 1L); | 1981 | curl_easy_setopt (s5r->curl, |
1982 | CURLOPT_NOBODY, | ||
1983 | 1L); | ||
1900 | } | 1984 | } |
1901 | else if (0 == strcasecmp (meth, MHD_HTTP_METHOD_OPTIONS)) | 1985 | else if (0 == strcasecmp (meth, |
1986 | MHD_HTTP_METHOD_OPTIONS)) | ||
1902 | { | 1987 | { |
1903 | s5r->state = SOCKS5_SOCKET_DOWNLOAD_STARTED; | 1988 | s5r->state = SOCKS5_SOCKET_DOWNLOAD_STARTED; |
1904 | curl_easy_setopt (s5r->curl, CURLOPT_CUSTOMREQUEST, "OPTIONS"); | 1989 | curl_easy_setopt (s5r->curl, |
1990 | CURLOPT_CUSTOMREQUEST, | ||
1991 | "OPTIONS"); | ||
1905 | } | 1992 | } |
1906 | else if (0 == strcasecmp (meth, MHD_HTTP_METHOD_GET)) | 1993 | else if (0 == strcasecmp (meth, |
1994 | MHD_HTTP_METHOD_GET)) | ||
1907 | { | 1995 | { |
1908 | s5r->state = SOCKS5_SOCKET_DOWNLOAD_STARTED; | 1996 | s5r->state = SOCKS5_SOCKET_DOWNLOAD_STARTED; |
1909 | curl_easy_setopt (s5r->curl, CURLOPT_HTTPGET, 1L); | 1997 | curl_easy_setopt (s5r->curl, |
1910 | curl_easy_setopt (s5r->curl, CURLOPT_WRITEFUNCTION, &curl_download_cb); | 1998 | CURLOPT_HTTPGET, |
1911 | curl_easy_setopt (s5r->curl, CURLOPT_WRITEDATA, s5r); | 1999 | 1L); |
2000 | curl_easy_setopt (s5r->curl, | ||
2001 | CURLOPT_WRITEFUNCTION, | ||
2002 | &curl_download_cb); | ||
2003 | curl_easy_setopt (s5r->curl, | ||
2004 | CURLOPT_WRITEDATA, | ||
2005 | s5r); | ||
1912 | } | 2006 | } |
1913 | else | 2007 | else |
1914 | { | 2008 | { |
@@ -1922,31 +2016,47 @@ create_response (void *cls, | |||
1922 | 2016 | ||
1923 | if (0 == strcasecmp (ver, MHD_HTTP_VERSION_1_0)) | 2017 | if (0 == strcasecmp (ver, MHD_HTTP_VERSION_1_0)) |
1924 | { | 2018 | { |
1925 | curl_easy_setopt (s5r->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); | 2019 | curl_easy_setopt (s5r->curl, |
2020 | CURLOPT_HTTP_VERSION, | ||
2021 | CURL_HTTP_VERSION_1_0); | ||
1926 | } | 2022 | } |
1927 | else if (0 == strcasecmp (ver, MHD_HTTP_VERSION_1_1)) | 2023 | else if (0 == strcasecmp (ver, MHD_HTTP_VERSION_1_1)) |
1928 | { | 2024 | { |
1929 | curl_easy_setopt (s5r->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); | 2025 | curl_easy_setopt (s5r->curl, |
2026 | CURLOPT_HTTP_VERSION, | ||
2027 | CURL_HTTP_VERSION_1_1); | ||
1930 | } | 2028 | } |
1931 | else | 2029 | else |
1932 | { | 2030 | { |
1933 | curl_easy_setopt (s5r->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_NONE); | 2031 | curl_easy_setopt (s5r->curl, |
2032 | CURLOPT_HTTP_VERSION, | ||
2033 | CURL_HTTP_VERSION_NONE); | ||
1934 | } | 2034 | } |
1935 | 2035 | ||
1936 | if (HTTPS_PORT == s5r->port) | 2036 | if (HTTPS_PORT == s5r->port) |
1937 | { | 2037 | { |
1938 | curl_easy_setopt (s5r->curl, CURLOPT_USE_SSL, CURLUSESSL_ALL); | 2038 | curl_easy_setopt (s5r->curl, |
2039 | CURLOPT_USE_SSL, | ||
2040 | CURLUSESSL_ALL); | ||
1939 | if (NULL != s5r->dane_data) | 2041 | if (NULL != s5r->dane_data) |
1940 | curl_easy_setopt (s5r->curl, CURLOPT_SSL_VERIFYPEER, 0L); | 2042 | curl_easy_setopt (s5r->curl, |
2043 | CURLOPT_SSL_VERIFYPEER, | ||
2044 | 0L); | ||
1941 | else | 2045 | else |
1942 | curl_easy_setopt (s5r->curl, CURLOPT_SSL_VERIFYPEER, 1L); | 2046 | curl_easy_setopt (s5r->curl, |
2047 | CURLOPT_SSL_VERIFYPEER, | ||
2048 | 1L); | ||
1943 | /* Disable cURL checking the hostname, as we will check ourselves | 2049 | /* Disable cURL checking the hostname, as we will check ourselves |
1944 | as only we have the domain name or the LEHO or the DANE record */ | 2050 | as only we have the domain name or the LEHO or the DANE record */ |
1945 | curl_easy_setopt (s5r->curl, CURLOPT_SSL_VERIFYHOST, 0L); | 2051 | curl_easy_setopt (s5r->curl, |
2052 | CURLOPT_SSL_VERIFYHOST, | ||
2053 | 0L); | ||
1946 | } | 2054 | } |
1947 | else | 2055 | else |
1948 | { | 2056 | { |
1949 | curl_easy_setopt (s5r->curl, CURLOPT_USE_SSL, CURLUSESSL_NONE); | 2057 | curl_easy_setopt (s5r->curl, |
2058 | CURLOPT_USE_SSL, | ||
2059 | CURLUSESSL_NONE); | ||
1950 | } | 2060 | } |
1951 | 2061 | ||
1952 | if (CURLM_OK != | 2062 | if (CURLM_OK != |
@@ -1979,7 +2089,9 @@ create_response (void *cls, | |||
1979 | /* FIXME: This must be set or a header with Transfer-Encoding: chunked. Else | 2089 | /* FIXME: This must be set or a header with Transfer-Encoding: chunked. Else |
1980 | * upload callback is not called! | 2090 | * upload callback is not called! |
1981 | */ | 2091 | */ |
1982 | curl_easy_setopt (s5r->curl, CURLOPT_POSTFIELDSIZE, *upload_data_size); | 2092 | curl_easy_setopt (s5r->curl, |
2093 | CURLOPT_POSTFIELDSIZE, | ||
2094 | *upload_data_size); | ||
1983 | 2095 | ||
1984 | left = GNUNET_MIN (*upload_data_size, | 2096 | left = GNUNET_MIN (*upload_data_size, |
1985 | sizeof (s5r->io_buf) - s5r->io_len); | 2097 | sizeof (s5r->io_buf) - s5r->io_len); |
@@ -2372,8 +2484,10 @@ load_file (const char* filename, | |||
2372 | uint64_t fsize; | 2484 | uint64_t fsize; |
2373 | 2485 | ||
2374 | if (GNUNET_OK != | 2486 | if (GNUNET_OK != |
2375 | GNUNET_DISK_file_size (filename, &fsize, | 2487 | GNUNET_DISK_file_size (filename, |
2376 | GNUNET_YES, GNUNET_YES)) | 2488 | &fsize, |
2489 | GNUNET_YES, | ||
2490 | GNUNET_YES)) | ||
2377 | return NULL; | 2491 | return NULL; |
2378 | if (fsize > MAX_PEM_SIZE) | 2492 | if (fsize > MAX_PEM_SIZE) |
2379 | return NULL; | 2493 | return NULL; |
@@ -2405,7 +2519,8 @@ load_key_from_file (gnutls_x509_privkey_t key, | |||
2405 | gnutls_datum_t key_data; | 2519 | gnutls_datum_t key_data; |
2406 | int ret; | 2520 | int ret; |
2407 | 2521 | ||
2408 | key_data.data = load_file (keyfile, &key_data.size); | 2522 | key_data.data = load_file (keyfile, |
2523 | &key_data.size); | ||
2409 | if (NULL == key_data.data) | 2524 | if (NULL == key_data.data) |
2410 | return GNUNET_SYSERR; | 2525 | return GNUNET_SYSERR; |
2411 | ret = gnutls_x509_privkey_import (key, &key_data, | 2526 | ret = gnutls_x509_privkey_import (key, &key_data, |
@@ -2435,15 +2550,18 @@ load_cert_from_file (gnutls_x509_crt_t crt, | |||
2435 | gnutls_datum_t cert_data; | 2550 | gnutls_datum_t cert_data; |
2436 | int ret; | 2551 | int ret; |
2437 | 2552 | ||
2438 | cert_data.data = load_file (certfile, &cert_data.size); | 2553 | cert_data.data = load_file (certfile, |
2554 | &cert_data.size); | ||
2439 | if (NULL == cert_data.data) | 2555 | if (NULL == cert_data.data) |
2440 | return GNUNET_SYSERR; | 2556 | return GNUNET_SYSERR; |
2441 | ret = gnutls_x509_crt_import (crt, &cert_data, | 2557 | ret = gnutls_x509_crt_import (crt, |
2558 | &cert_data, | ||
2442 | GNUTLS_X509_FMT_PEM); | 2559 | GNUTLS_X509_FMT_PEM); |
2443 | if (GNUTLS_E_SUCCESS != ret) | 2560 | if (GNUTLS_E_SUCCESS != ret) |
2444 | { | 2561 | { |
2445 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 2562 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
2446 | _("Unable to import certificate %s\n"), certfile); | 2563 | _("Unable to import certificate from `%s'\n"), |
2564 | certfile); | ||
2447 | } | 2565 | } |
2448 | GNUNET_free_non_null (cert_data.data); | 2566 | GNUNET_free_non_null (cert_data.data); |
2449 | return (GNUTLS_E_SUCCESS != ret) ? GNUNET_SYSERR : GNUNET_OK; | 2567 | return (GNUTLS_E_SUCCESS != ret) ? GNUNET_SYSERR : GNUNET_OK; |
@@ -2473,14 +2591,27 @@ generate_gns_certificate (const char *name) | |||
2473 | GNUNET_break (GNUTLS_E_SUCCESS == gnutls_x509_crt_init (&request)); | 2591 | GNUNET_break (GNUTLS_E_SUCCESS == gnutls_x509_crt_init (&request)); |
2474 | GNUNET_break (GNUTLS_E_SUCCESS == gnutls_x509_crt_set_key (request, proxy_ca.key)); | 2592 | GNUNET_break (GNUTLS_E_SUCCESS == gnutls_x509_crt_set_key (request, proxy_ca.key)); |
2475 | pgc = GNUNET_new (struct ProxyGNSCertificate); | 2593 | pgc = GNUNET_new (struct ProxyGNSCertificate); |
2476 | gnutls_x509_crt_set_dn_by_oid (request, GNUTLS_OID_X520_COUNTRY_NAME, | 2594 | gnutls_x509_crt_set_dn_by_oid (request, |
2477 | 0, "ZZ", 2); | 2595 | GNUTLS_OID_X520_COUNTRY_NAME, |
2478 | gnutls_x509_crt_set_dn_by_oid (request, GNUTLS_OID_X520_ORGANIZATION_NAME, | 2596 | 0, |
2479 | 0, "GNU Name System", 4); | 2597 | "ZZ", |
2480 | gnutls_x509_crt_set_dn_by_oid (request, GNUTLS_OID_X520_COMMON_NAME, | 2598 | strlen ("ZZ")); |
2481 | 0, name, strlen (name)); | 2599 | gnutls_x509_crt_set_dn_by_oid (request, |
2482 | GNUNET_break (GNUTLS_E_SUCCESS == gnutls_x509_crt_set_version (request, 3)); | 2600 | GNUTLS_OID_X520_ORGANIZATION_NAME, |
2483 | gnutls_rnd (GNUTLS_RND_NONCE, &serial, sizeof (serial)); | 2601 | 0, |
2602 | "GNU Name System", | ||
2603 | strlen ("GNU Name System")); | ||
2604 | gnutls_x509_crt_set_dn_by_oid (request, | ||
2605 | GNUTLS_OID_X520_COMMON_NAME, | ||
2606 | 0, | ||
2607 | name, | ||
2608 | strlen (name)); | ||
2609 | GNUNET_break (GNUTLS_E_SUCCESS == | ||
2610 | gnutls_x509_crt_set_version (request, | ||
2611 | 3)); | ||
2612 | gnutls_rnd (GNUTLS_RND_NONCE, | ||
2613 | &serial, | ||
2614 | sizeof (serial)); | ||
2484 | gnutls_x509_crt_set_serial (request, | 2615 | gnutls_x509_crt_set_serial (request, |
2485 | &serial, | 2616 | &serial, |
2486 | sizeof (serial)); | 2617 | sizeof (serial)); |
@@ -2501,10 +2632,14 @@ generate_gns_certificate (const char *name) | |||
2501 | 0); | 2632 | 0); |
2502 | key_buf_size = sizeof (pgc->key); | 2633 | key_buf_size = sizeof (pgc->key); |
2503 | cert_buf_size = sizeof (pgc->cert); | 2634 | cert_buf_size = sizeof (pgc->cert); |
2504 | gnutls_x509_crt_export (request, GNUTLS_X509_FMT_PEM, | 2635 | gnutls_x509_crt_export (request, |
2505 | pgc->cert, &cert_buf_size); | 2636 | GNUTLS_X509_FMT_PEM, |
2506 | gnutls_x509_privkey_export (proxy_ca.key, GNUTLS_X509_FMT_PEM, | 2637 | pgc->cert, |
2507 | pgc->key, &key_buf_size); | 2638 | &cert_buf_size); |
2639 | gnutls_x509_privkey_export (proxy_ca.key, | ||
2640 | GNUTLS_X509_FMT_PEM, | ||
2641 | pgc->key, | ||
2642 | &key_buf_size); | ||
2508 | gnutls_x509_crt_deinit (request); | 2643 | gnutls_x509_crt_deinit (request); |
2509 | return pgc; | 2644 | return pgc; |
2510 | } | 2645 | } |
@@ -2945,7 +3080,8 @@ do_s5r_read (void *cls) | |||
2945 | s5r->rtask = NULL; | 3080 | s5r->rtask = NULL; |
2946 | tc = GNUNET_SCHEDULER_get_task_context (); | 3081 | tc = GNUNET_SCHEDULER_get_task_context (); |
2947 | if ( (NULL != tc->read_ready) && | 3082 | if ( (NULL != tc->read_ready) && |
2948 | (GNUNET_NETWORK_fdset_isset (tc->read_ready, s5r->sock)) ) | 3083 | (GNUNET_NETWORK_fdset_isset (tc->read_ready, |
3084 | s5r->sock)) ) | ||
2949 | { | 3085 | { |
2950 | rlen = GNUNET_NETWORK_socket_recv (s5r->sock, | 3086 | rlen = GNUNET_NETWORK_socket_recv (s5r->sock, |
2951 | &s5r->rbuf[s5r->rbuf_len], | 3087 | &s5r->rbuf[s5r->rbuf_len], |
@@ -3142,17 +3278,22 @@ do_accept (void *cls) | |||
3142 | if (lsock == lsock4) | 3278 | if (lsock == lsock4) |
3143 | ltask4 = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, | 3279 | ltask4 = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, |
3144 | lsock, | 3280 | lsock, |
3145 | &do_accept, lsock); | 3281 | &do_accept, |
3282 | lsock); | ||
3146 | else if (lsock == lsock6) | 3283 | else if (lsock == lsock6) |
3147 | ltask6 = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, | 3284 | ltask6 = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, |
3148 | lsock, | 3285 | lsock, |
3149 | &do_accept, lsock); | 3286 | &do_accept, |
3287 | lsock); | ||
3150 | else | 3288 | else |
3151 | GNUNET_assert (0); | 3289 | GNUNET_assert (0); |
3152 | s = GNUNET_NETWORK_socket_accept (lsock, NULL, NULL); | 3290 | s = GNUNET_NETWORK_socket_accept (lsock, |
3291 | NULL, | ||
3292 | NULL); | ||
3153 | if (NULL == s) | 3293 | if (NULL == s) |
3154 | { | 3294 | { |
3155 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "accept"); | 3295 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, |
3296 | "accept"); | ||
3156 | return; | 3297 | return; |
3157 | } | 3298 | } |
3158 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 3299 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -3165,7 +3306,8 @@ do_accept (void *cls) | |||
3165 | s5r->state = SOCKS5_INIT; | 3306 | s5r->state = SOCKS5_INIT; |
3166 | s5r->rtask = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, | 3307 | s5r->rtask = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, |
3167 | s5r->sock, | 3308 | s5r->sock, |
3168 | &do_s5r_read, s5r); | 3309 | &do_s5r_read, |
3310 | s5r); | ||
3169 | } | 3311 | } |
3170 | 3312 | ||
3171 | 3313 | ||
@@ -3262,7 +3404,8 @@ bind_v4 () | |||
3262 | if (NULL == ls) | 3404 | if (NULL == ls) |
3263 | return NULL; | 3405 | return NULL; |
3264 | if (GNUNET_OK != | 3406 | if (GNUNET_OK != |
3265 | GNUNET_NETWORK_socket_bind (ls, (const struct sockaddr *) &sa4, | 3407 | GNUNET_NETWORK_socket_bind (ls, |
3408 | (const struct sockaddr *) &sa4, | ||
3266 | sizeof (sa4))) | 3409 | sizeof (sa4))) |
3267 | { | 3410 | { |
3268 | eno = errno; | 3411 | eno = errno; |
@@ -3298,7 +3441,8 @@ bind_v6 () | |||
3298 | if (NULL == ls) | 3441 | if (NULL == ls) |
3299 | return NULL; | 3442 | return NULL; |
3300 | if (GNUNET_OK != | 3443 | if (GNUNET_OK != |
3301 | GNUNET_NETWORK_socket_bind (ls, (const struct sockaddr *) &sa6, | 3444 | GNUNET_NETWORK_socket_bind (ls, |
3445 | (const struct sockaddr *) &sa6, | ||
3302 | sizeof (sa6))) | 3446 | sizeof (sa6))) |
3303 | { | 3447 | { |
3304 | eno = errno; | 3448 | eno = errno; |
@@ -3353,7 +3497,8 @@ run (void *cls, | |||
3353 | cafile = cafile_cfg; | 3497 | cafile = cafile_cfg; |
3354 | } | 3498 | } |
3355 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 3499 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
3356 | "Using %s as CA\n", cafile); | 3500 | "Using `%s' as CA\n", |
3501 | cafile); | ||
3357 | 3502 | ||
3358 | gnutls_global_init (); | 3503 | gnutls_global_init (); |
3359 | gnutls_x509_crt_init (&proxy_ca.cert); | 3504 | gnutls_x509_crt_init (&proxy_ca.cert); |
@@ -3488,7 +3633,8 @@ run (void *cls, | |||
3488 | * @return 0 ok, 1 on error | 3633 | * @return 0 ok, 1 on error |
3489 | */ | 3634 | */ |
3490 | int | 3635 | int |
3491 | main (int argc, char *const *argv) | 3636 | main (int argc, |
3637 | char *const *argv) | ||
3492 | { | 3638 | { |
3493 | struct GNUNET_GETOPT_CommandLineOption options[] = { | 3639 | struct GNUNET_GETOPT_CommandLineOption options[] = { |
3494 | GNUNET_GETOPT_option_uint16 ('p', | 3640 | GNUNET_GETOPT_option_uint16 ('p', |
@@ -3509,8 +3655,9 @@ main (int argc, char *const *argv) | |||
3509 | "</head><body>cURL fail</body></html>"; | 3655 | "</head><body>cURL fail</body></html>"; |
3510 | int ret; | 3656 | int ret; |
3511 | 3657 | ||
3512 | if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, | 3658 | if (GNUNET_OK != |
3513 | &argc, &argv)) | 3659 | GNUNET_STRINGS_get_utf8_args (argc, argv, |
3660 | &argc, &argv)) | ||
3514 | return 2; | 3661 | return 2; |
3515 | GNUNET_log_setup ("gnunet-gns-proxy", | 3662 | GNUNET_log_setup ("gnunet-gns-proxy", |
3516 | "WARNING", | 3663 | "WARNING", |