diff options
author | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2019-11-30 21:05:25 +0100 |
---|---|---|
committer | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2019-11-30 21:05:25 +0100 |
commit | d817f861e6da2da5759a4b55117a8d8d47a91a87 (patch) | |
tree | eba5c332ebe7bb28832fd60e50ec06473bc5ab18 /src | |
parent | 69dda189455dee811675bfb946a3a7e53f787194 (diff) | |
download | gnunet-d817f861e6da2da5759a4b55117a8d8d47a91a87.tar.gz gnunet-d817f861e6da2da5759a4b55117a8d8d47a91a87.zip |
add support for zkey CNAMEs #5978
Diffstat (limited to 'src')
-rw-r--r-- | src/gns/gnunet-service-gns_resolver.c | 43 | ||||
-rwxr-xr-x | src/gns/test_gns_cname_lookup.sh | 23 |
2 files changed, 58 insertions, 8 deletions
diff --git a/src/gns/gnunet-service-gns_resolver.c b/src/gns/gnunet-service-gns_resolver.c index 8639a239b..4b2641818 100644 --- a/src/gns/gnunet-service-gns_resolver.c +++ b/src/gns/gnunet-service-gns_resolver.c | |||
@@ -1232,13 +1232,14 @@ handle_gns_cname_result (struct GNS_ResolverHandle *rh, | |||
1232 | { | 1232 | { |
1233 | size_t nlen; | 1233 | size_t nlen; |
1234 | char *res; | 1234 | char *res; |
1235 | const char *tld; | ||
1235 | struct AuthorityChain *ac; | 1236 | struct AuthorityChain *ac; |
1236 | int af; | 1237 | int af; |
1238 | struct GNUNET_CRYPTO_EcdsaPublicKey zone; | ||
1237 | 1239 | ||
1238 | nlen = strlen (cname); | 1240 | nlen = strlen (cname); |
1239 | if ((nlen > 2) && | 1241 | tld = GNS_get_tld (cname); |
1240 | (0 == strcmp (".+", | 1242 | if (0 == strcmp ("+", tld)) |
1241 | &cname[nlen - 2]))) | ||
1242 | { | 1243 | { |
1243 | /* CNAME resolution continues relative to current domain */ | 1244 | /* CNAME resolution continues relative to current domain */ |
1244 | if (0 == rh->name_resolution_pos) | 1245 | if (0 == rh->name_resolution_pos) |
@@ -1272,6 +1273,42 @@ handle_gns_cname_result (struct GNS_ResolverHandle *rh, | |||
1272 | rh); | 1273 | rh); |
1273 | return; | 1274 | return; |
1274 | } | 1275 | } |
1276 | if (GNUNET_OK == GNUNET_GNSRECORD_zkey_to_pkey (tld, &zone)) | ||
1277 | { | ||
1278 | /* CNAME resolution continues relative to current domain */ | ||
1279 | if (0 == rh->name_resolution_pos) | ||
1280 | { | ||
1281 | GNUNET_asprintf (&res, | ||
1282 | "%.*s", | ||
1283 | strlen (cname) - (strlen (tld) + 1), | ||
1284 | cname); | ||
1285 | } | ||
1286 | else | ||
1287 | { | ||
1288 | GNUNET_asprintf (&res, | ||
1289 | "%.*s.%.*s", | ||
1290 | (int) rh->name_resolution_pos, | ||
1291 | rh->name, | ||
1292 | (int) strlen (cname) - (strlen(tld)+1), | ||
1293 | cname); | ||
1294 | } | ||
1295 | rh->name_resolution_pos = strlen (res); | ||
1296 | GNUNET_free (rh->name); | ||
1297 | rh->name = res; | ||
1298 | ac = GNUNET_new (struct AuthorityChain); | ||
1299 | ac->rh = rh; | ||
1300 | ac->gns_authority = GNUNET_YES; | ||
1301 | ac->authority_info.gns_authority = zone; | ||
1302 | ac->label = resolver_lookup_get_next_label (rh); | ||
1303 | /* add AC to tail */ | ||
1304 | GNUNET_CONTAINER_DLL_insert_tail (rh->ac_head, | ||
1305 | rh->ac_tail, | ||
1306 | ac); | ||
1307 | rh->task_id = GNUNET_SCHEDULER_add_now (&recursive_resolution, | ||
1308 | rh); | ||
1309 | return; | ||
1310 | } | ||
1311 | |||
1275 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 1312 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
1276 | "Got CNAME `%s' from GNS for `%s'\n", | 1313 | "Got CNAME `%s' from GNS for `%s'\n", |
1277 | cname, | 1314 | cname, |
diff --git a/src/gns/test_gns_cname_lookup.sh b/src/gns/test_gns_cname_lookup.sh index f71346127..748198074 100755 --- a/src/gns/test_gns_cname_lookup.sh +++ b/src/gns/test_gns_cname_lookup.sh | |||
@@ -32,26 +32,31 @@ TEST_RECORD_CNAME_PLUS="server.+" | |||
32 | TEST_RECORD_CNAME_DNS="gnunet.org" | 32 | TEST_RECORD_CNAME_DNS="gnunet.org" |
33 | TEST_RECORD_NAME_SERVER="server" | 33 | TEST_RECORD_NAME_SERVER="server" |
34 | TEST_RECORD_NAME_PLUS="www" | 34 | TEST_RECORD_NAME_PLUS="www" |
35 | TEST_RECORD_NAME_ZKEY="www2" | ||
35 | TEST_RECORD_NAME_DNS="www3" | 36 | TEST_RECORD_NAME_DNS="www3" |
36 | MY_EGO="myego" | 37 | MY_EGO="myego" |
37 | TEST_DOMAIN_PLUS="www.$MY_EGO" | 38 | TEST_DOMAIN_PLUS="www.$MY_EGO" |
39 | TEST_DOMAIN_ZKEY="www2.$MY_EGO" | ||
38 | TEST_DOMAIN_DNS="www3.$MY_EGO" | 40 | TEST_DOMAIN_DNS="www3.$MY_EGO" |
39 | which timeout > /dev/null 2>&1 && DO_TIMEOUT="timeout 15" | 41 | which timeout > /dev/null 2>&1 && DO_TIMEOUT="timeout 15" |
40 | 42 | ||
41 | gnunet-arm -s -c test_gns_lookup.conf | 43 | gnunet-arm -s -c test_gns_lookup.conf |
42 | gnunet-identity -C $MY_EGO -c test_gns_lookup.conf | 44 | gnunet-identity -C $MY_EGO -c test_gns_lookup.conf |
45 | MY_EGO_PKEY=$(gnunet-identity -d -c test_gns_lookup.conf | grep ${MY_EGO} | awk '{print $3}') | ||
46 | TEST_RECORD_CNAME_ZKEY="server.${MY_EGO_PKEY}" | ||
43 | gnunet-namestore -p -z $MY_EGO -a -n $TEST_RECORD_NAME_DNS -t CNAME -V $TEST_RECORD_CNAME_DNS -e never -c test_gns_lookup.conf | 47 | gnunet-namestore -p -z $MY_EGO -a -n $TEST_RECORD_NAME_DNS -t CNAME -V $TEST_RECORD_CNAME_DNS -e never -c test_gns_lookup.conf |
44 | gnunet-namestore -p -z $MY_EGO -a -n $TEST_RECORD_NAME_PLUS -t CNAME -V $TEST_RECORD_CNAME_PLUS -e never -c test_gns_lookup.conf | 48 | gnunet-namestore -p -z $MY_EGO -a -n $TEST_RECORD_NAME_PLUS -t CNAME -V $TEST_RECORD_CNAME_PLUS -e never -c test_gns_lookup.conf |
49 | gnunet-namestore -p -z $MY_EGO -a -n $TEST_RECORD_NAME_ZKEY -t CNAME -V $TEST_RECORD_CNAME_ZKEY -e never -c test_gns_lookup.conf | ||
45 | gnunet-namestore -p -z $MY_EGO -a -n $TEST_RECORD_CNAME_SERVER -t A -V $TEST_IP_PLUS -e never -c test_gns_lookup.conf | 50 | gnunet-namestore -p -z $MY_EGO -a -n $TEST_RECORD_CNAME_SERVER -t A -V $TEST_IP_PLUS -e never -c test_gns_lookup.conf |
46 | RES_CNAME=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_PLUS -t A -c test_gns_lookup.conf` | 51 | RES_CNAME=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_PLUS -t A -c test_gns_lookup.conf` |
47 | RES_CNAME_RAW=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_PLUS -t CNAME -c test_gns_lookup.conf` | 52 | RES_CNAME_RAW=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_PLUS -t CNAME -c test_gns_lookup.conf` |
53 | RES_CNAME_ZKEY=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_ZKEY -t A -c test_gns_lookup.conf` | ||
48 | RES_CNAME_DNS=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_DNS -t A -c test_gns_lookup.conf | grep $TEST_IP_DNS` | 54 | RES_CNAME_DNS=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_DNS -t A -c test_gns_lookup.conf | grep $TEST_IP_DNS` |
49 | echo NOW | 55 | |
50 | gnunet-gns --raw -u $TEST_DOMAIN_DNS -t A -c test_gns_lookup.conf | ||
51 | echo WON | ||
52 | TESTEGOZONE=`gnunet-identity -c test_gns_lookup.conf -d | awk '{print $3}'` | 56 | TESTEGOZONE=`gnunet-identity -c test_gns_lookup.conf -d | awk '{print $3}'` |
53 | gnunet-namestore -p -z $MY_EGO -d -n $TEST_RECORD_NAME_DNS -t CNAME -V $TEST_RECORD_CNAME_DNS -e never -c test_gns_lookup.conf | 57 | gnunet-namestore -p -z $MY_EGO -d -n $TEST_RECORD_NAME_DNS -t CNAME -V $TEST_RECORD_CNAME_DNS -e never -c test_gns_lookup.conf |
54 | gnunet-namestore -p -z $MY_EGO -d -n $TEST_RECORD_NAME_PLUS -t CNAME -V $TEST_RECORD_CNAME_PLUS -e never -c test_gns_lookup.conf | 58 | gnunet-namestore -p -z $MY_EGO -d -n $TEST_RECORD_NAME_PLUS -t CNAME -V $TEST_RECORD_CNAME_PLUS -e never -c test_gns_lookup.conf |
59 | gnunet-namestore -p -z $MY_EGO -d -n $TEST_RECORD_NAME_ZKEY -t CNAME -V $TEST_RECORD_CNAME_ZKEY -e never -c test_gns_lookup.conf | ||
55 | gnunet-namestore -p -z $MY_EGO -d -n $TEST_RECORD_CNAME_SERVER -t A -V $TEST_IP_PLUS -e never -c test_gns_lookup.conf | 60 | gnunet-namestore -p -z $MY_EGO -d -n $TEST_RECORD_CNAME_SERVER -t A -V $TEST_IP_PLUS -e never -c test_gns_lookup.conf |
56 | gnunet-identity -D $MY_EGO -c test_gns_lookup.conf | 61 | gnunet-identity -D $MY_EGO -c test_gns_lookup.conf |
57 | gnunet-arm -e -c test_gns_lookup.conf | 62 | gnunet-arm -e -c test_gns_lookup.conf |
@@ -70,9 +75,17 @@ fi | |||
70 | 75 | ||
71 | if [ "$RES_CNAME" = "$TEST_IP_PLUS" ] | 76 | if [ "$RES_CNAME" = "$TEST_IP_PLUS" ] |
72 | then | 77 | then |
73 | echo "PASS: IP resolution from GNS" | 78 | echo "PASS: IP resolution from GNS (.+)" |
79 | else | ||
80 | echo "FAIL: IP resolution from GNS (.+), got $RES_CNAME, expected $TEST_IP_PLUS." | ||
81 | exit 1 | ||
82 | fi | ||
83 | |||
84 | if [ "$RES_CNAME_ZKEY" = "$TEST_IP_PLUS" ] | ||
85 | then | ||
86 | echo "PASS: IP resolution from GNS (.zkey)" | ||
74 | else | 87 | else |
75 | echo "FAIL: IP resolution from GNS, got $RES_CNAME, expected $TEST_IP_PLUS." | 88 | echo "FAIL: IP resolution from GNS (.zkey), got $RES_CNAME, expected $TEST_IP_PLUS." |
76 | exit 1 | 89 | exit 1 |
77 | fi | 90 | fi |
78 | 91 | ||