aboutsummaryrefslogtreecommitdiff
path: root/src/gns/gnunet-service-gns_resolver.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gns/gnunet-service-gns_resolver.c')
-rw-r--r--src/gns/gnunet-service-gns_resolver.c61
1 files changed, 51 insertions, 10 deletions
diff --git a/src/gns/gnunet-service-gns_resolver.c b/src/gns/gnunet-service-gns_resolver.c
index 1bbb431e0..4ac6cea36 100644
--- a/src/gns/gnunet-service-gns_resolver.c
+++ b/src/gns/gnunet-service-gns_resolver.c
@@ -1164,26 +1164,26 @@ pop_tld(char* name, char* dest)
1164} 1164}
1165 1165
1166/** 1166/**
1167 * Checks if name is in .zkey TLD 1167 * Checks if name is in tld
1168 * 1168 *
1169 * @param name the name to check 1169 * @param name the name to check
1170 * @return GNUNET_YES or GNUNET_NO 1170 * @return GNUNET_YES or GNUNET_NO
1171 */ 1171 */
1172int 1172int
1173is_zkey_tld(const char* name) 1173is_tld(const char* name, const char* tld)
1174{ 1174{
1175 int offset = 0; 1175 int offset = 0;
1176 1176
1177 if (strlen(name) <= strlen(GNUNET_GNS_TLD_ZKEY)) 1177 if (strlen(name) <= strlen(tld))
1178 { 1178 {
1179 return GNUNET_NO; 1179 return GNUNET_NO;
1180 } 1180 }
1181 1181
1182 offset = strlen(name)-strlen(GNUNET_GNS_TLD_ZKEY); 1182 offset = strlen(name)-strlen(tld);
1183 if (strcmp(name+offset, GNUNET_GNS_TLD_ZKEY) != 0) 1183 if (strcmp(name+offset, tld) != 0)
1184 { 1184 {
1185 GNUNET_log(GNUNET_ERROR_TYPE_INFO, 1185 GNUNET_log(GNUNET_ERROR_TYPE_INFO,
1186 "%s is not in zkey TLD\n", name); 1186 "%s is not in .%s TLD\n", name, tld);
1187 return GNUNET_NO; 1187 return GNUNET_NO;
1188 } 1188 }
1189 return GNUNET_YES; 1189 return GNUNET_YES;
@@ -1823,6 +1823,7 @@ gns_resolver_shorten_name(GNUNET_HashCode zone,
1823{ 1823{
1824 struct ResolverHandle *rh; 1824 struct ResolverHandle *rh;
1825 struct NameShortenHandle *nsh; 1825 struct NameShortenHandle *nsh;
1826 char string_hash[MAX_DNS_NAME_LENGTH]; //FIXME LABEL length when shorthash
1826 1827
1827 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1828 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1828 "Starting shorten for %s!\n", name); 1829 "Starting shorten for %s!\n", name);
@@ -1843,10 +1844,50 @@ gns_resolver_shorten_name(GNUNET_HashCode zone,
1843 1844
1844 rh = GNUNET_malloc(sizeof (struct ResolverHandle)); 1845 rh = GNUNET_malloc(sizeof (struct ResolverHandle));
1845 rh->authority = zone; 1846 rh->authority = zone;
1846 memset(rh->name, 0, 1847
1847 strlen(name)-strlen(GNUNET_GNS_TLD)); 1848 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1848 memcpy(rh->name, name, 1849 "Checking for TLD...\n");
1849 strlen(name)-strlen(GNUNET_GNS_TLD)-1); 1850 if (is_zkey_tld(name) == GNUNET_YES)
1851 {
1852 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1853 "TLD is zkey\n");
1854 /**
1855 * This is a zkey tld
1856 * build hash and use as initial authority
1857 */
1858 memset(rh->name, 0,
1859 strlen(name)-strlen(GNUNET_GNS_TLD_ZKEY));
1860 memcpy(rh->name, name,
1861 strlen(name)-strlen(GNUNET_GNS_TLD_ZKEY) - 1);
1862 pop_tld(rh->name, string_hash);
1863
1864 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1865 "ZKEY is %s!\n", string_hash);
1866
1867 if (GNUNET_OK != GNUNET_CRYPTO_hash_from_string(string_hash,
1868 &rh->authority))
1869 {
1870 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
1871 "Cannot convert ZKEY %s to hash!\n", string_hash);
1872 GNUNET_free(rh);
1873 GNUNET_free(nsh);
1874 proc(cls, name);
1875 return;
1876 }
1877
1878 }
1879 else
1880 {
1881 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1882 "TLD is gnunet\n");
1883 /**
1884 * Presumably GNUNET tld
1885 */
1886 memset(rh->name, 0,
1887 strlen(name)-strlen(GNUNET_GNS_TLD));
1888 memcpy(rh->name, name,
1889 strlen(name)-strlen(GNUNET_GNS_TLD) - 1);
1890 }
1850 1891
1851 rh->authority_chain_head = GNUNET_malloc(sizeof(struct AuthorityChain)); 1892 rh->authority_chain_head = GNUNET_malloc(sizeof(struct AuthorityChain));
1852 rh->authority_chain_tail = rh->authority_chain_head; 1893 rh->authority_chain_tail = rh->authority_chain_head;