aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2018-06-05 10:00:23 +0200
committerChristian Grothoff <christian@grothoff.org>2018-06-05 10:00:23 +0200
commit1cc9d829c0add9533f1bb7fab59c32a7328086d0 (patch)
tree82bc36b82747dacd38a41b3771c8db8ef1e668ad /src
parent09f7c260e7cd3bc0f12ad89e2dcf7d813f4089d8 (diff)
downloadgnunet-1cc9d829c0add9533f1bb7fab59c32a7328086d0.tar.gz
gnunet-1cc9d829c0add9533f1bb7fab59c32a7328086d0.zip
code cleanup, fix strlen
Diffstat (limited to 'src')
-rw-r--r--src/gns/gnunet-gns-proxy.c313
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 */
3490int 3635int
3491main (int argc, char *const *argv) 3636main (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",