aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSchanzenbach, Martin <mschanzenbach@posteo.de>2019-11-30 21:05:25 +0100
committerSchanzenbach, Martin <mschanzenbach@posteo.de>2019-11-30 21:05:25 +0100
commitd817f861e6da2da5759a4b55117a8d8d47a91a87 (patch)
treeeba5c332ebe7bb28832fd60e50ec06473bc5ab18 /src
parent69dda189455dee811675bfb946a3a7e53f787194 (diff)
downloadgnunet-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.c43
-rwxr-xr-xsrc/gns/test_gns_cname_lookup.sh23
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.+"
32TEST_RECORD_CNAME_DNS="gnunet.org" 32TEST_RECORD_CNAME_DNS="gnunet.org"
33TEST_RECORD_NAME_SERVER="server" 33TEST_RECORD_NAME_SERVER="server"
34TEST_RECORD_NAME_PLUS="www" 34TEST_RECORD_NAME_PLUS="www"
35TEST_RECORD_NAME_ZKEY="www2"
35TEST_RECORD_NAME_DNS="www3" 36TEST_RECORD_NAME_DNS="www3"
36MY_EGO="myego" 37MY_EGO="myego"
37TEST_DOMAIN_PLUS="www.$MY_EGO" 38TEST_DOMAIN_PLUS="www.$MY_EGO"
39TEST_DOMAIN_ZKEY="www2.$MY_EGO"
38TEST_DOMAIN_DNS="www3.$MY_EGO" 40TEST_DOMAIN_DNS="www3.$MY_EGO"
39which timeout > /dev/null 2>&1 && DO_TIMEOUT="timeout 15" 41which timeout > /dev/null 2>&1 && DO_TIMEOUT="timeout 15"
40 42
41gnunet-arm -s -c test_gns_lookup.conf 43gnunet-arm -s -c test_gns_lookup.conf
42gnunet-identity -C $MY_EGO -c test_gns_lookup.conf 44gnunet-identity -C $MY_EGO -c test_gns_lookup.conf
45MY_EGO_PKEY=$(gnunet-identity -d -c test_gns_lookup.conf | grep ${MY_EGO} | awk '{print $3}')
46TEST_RECORD_CNAME_ZKEY="server.${MY_EGO_PKEY}"
43gnunet-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 47gnunet-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
44gnunet-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 48gnunet-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
49gnunet-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
45gnunet-namestore -p -z $MY_EGO -a -n $TEST_RECORD_CNAME_SERVER -t A -V $TEST_IP_PLUS -e never -c test_gns_lookup.conf 50gnunet-namestore -p -z $MY_EGO -a -n $TEST_RECORD_CNAME_SERVER -t A -V $TEST_IP_PLUS -e never -c test_gns_lookup.conf
46RES_CNAME=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_PLUS -t A -c test_gns_lookup.conf` 51RES_CNAME=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_PLUS -t A -c test_gns_lookup.conf`
47RES_CNAME_RAW=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_PLUS -t CNAME -c test_gns_lookup.conf` 52RES_CNAME_RAW=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_PLUS -t CNAME -c test_gns_lookup.conf`
53RES_CNAME_ZKEY=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_ZKEY -t A -c test_gns_lookup.conf`
48RES_CNAME_DNS=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_DNS -t A -c test_gns_lookup.conf | grep $TEST_IP_DNS` 54RES_CNAME_DNS=`$DO_TIMEOUT gnunet-gns --raw -u $TEST_DOMAIN_DNS -t A -c test_gns_lookup.conf | grep $TEST_IP_DNS`
49echo NOW 55
50gnunet-gns --raw -u $TEST_DOMAIN_DNS -t A -c test_gns_lookup.conf
51echo WON
52TESTEGOZONE=`gnunet-identity -c test_gns_lookup.conf -d | awk '{print $3}'` 56TESTEGOZONE=`gnunet-identity -c test_gns_lookup.conf -d | awk '{print $3}'`
53gnunet-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 57gnunet-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
54gnunet-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 58gnunet-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
59gnunet-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
55gnunet-namestore -p -z $MY_EGO -d -n $TEST_RECORD_CNAME_SERVER -t A -V $TEST_IP_PLUS -e never -c test_gns_lookup.conf 60gnunet-namestore -p -z $MY_EGO -d -n $TEST_RECORD_CNAME_SERVER -t A -V $TEST_IP_PLUS -e never -c test_gns_lookup.conf
56gnunet-identity -D $MY_EGO -c test_gns_lookup.conf 61gnunet-identity -D $MY_EGO -c test_gns_lookup.conf
57gnunet-arm -e -c test_gns_lookup.conf 62gnunet-arm -e -c test_gns_lookup.conf
@@ -70,9 +75,17 @@ fi
70 75
71if [ "$RES_CNAME" = "$TEST_IP_PLUS" ] 76if [ "$RES_CNAME" = "$TEST_IP_PLUS" ]
72then 77then
73 echo "PASS: IP resolution from GNS" 78 echo "PASS: IP resolution from GNS (.+)"
79else
80 echo "FAIL: IP resolution from GNS (.+), got $RES_CNAME, expected $TEST_IP_PLUS."
81 exit 1
82fi
83
84if [ "$RES_CNAME_ZKEY" = "$TEST_IP_PLUS" ]
85then
86 echo "PASS: IP resolution from GNS (.zkey)"
74else 87else
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
77fi 90fi
78 91