aboutsummaryrefslogtreecommitdiff
path: root/src/gns/gnunet-gns.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2019-05-02 08:00:21 +0200
committerChristian Grothoff <christian@grothoff.org>2019-05-02 08:00:21 +0200
commite46a601f124108ec5e76a22998618b0c630eae74 (patch)
treedbec145dfc14b011a4cfce6e4ecde5f71af70526 /src/gns/gnunet-gns.c
parentb930db26d6b166404a3262687750e5aec2b3befc (diff)
downloadgnunet-e46a601f124108ec5e76a22998618b0c630eae74.tar.gz
gnunet-e46a601f124108ec5e76a22998618b0c630eae74.zip
reject '@' as a label in domain names, this is usually a mistake
Diffstat (limited to 'src/gns/gnunet-gns.c')
-rw-r--r--src/gns/gnunet-gns.c115
1 files changed, 55 insertions, 60 deletions
diff --git a/src/gns/gnunet-gns.c b/src/gns/gnunet-gns.c
index 83dd7b27b..1cda84c59 100644
--- a/src/gns/gnunet-gns.c
+++ b/src/gns/gnunet-gns.c
@@ -106,13 +106,13 @@ do_shutdown (void *cls)
106 */ 106 */
107static void 107static void
108process_lookup_result (void *cls, 108process_lookup_result (void *cls,
109 int was_gns, 109 int was_gns,
110 uint32_t rd_count, 110 uint32_t rd_count,
111 const struct GNUNET_GNSRECORD_Data *rd) 111 const struct GNUNET_GNSRECORD_Data *rd)
112{ 112{
113 const char *name = cls; 113 const char *name = cls;
114 const char *typename; 114 const char *typename;
115 char* string_val; 115 char *string_val;
116 116
117 lr = NULL; 117 lr = NULL;
118 if (GNUNET_NO == was_gns) 118 if (GNUNET_NO == was_gns)
@@ -126,33 +126,28 @@ process_lookup_result (void *cls,
126 if (0 == rd_count) 126 if (0 == rd_count)
127 printf ("No results.\n"); 127 printf ("No results.\n");
128 else 128 else
129 printf ("%s:\n", 129 printf ("%s:\n", name);
130 name);
131 } 130 }
132 for (uint32_t i=0; i<rd_count; i++) 131 for (uint32_t i = 0; i < rd_count; i++)
133 { 132 {
134 if ( (rd[i].record_type != rtype) && 133 if ((rd[i].record_type != rtype) && (GNUNET_GNSRECORD_TYPE_ANY != rtype))
135 (GNUNET_GNSRECORD_TYPE_ANY != rtype) )
136 continue; 134 continue;
137 typename = GNUNET_GNSRECORD_number_to_typename (rd[i].record_type); 135 typename = GNUNET_GNSRECORD_number_to_typename (rd[i].record_type);
138 string_val = GNUNET_GNSRECORD_value_to_string (rd[i].record_type, 136 string_val = GNUNET_GNSRECORD_value_to_string (rd[i].record_type,
139 rd[i].data, 137 rd[i].data,
140 rd[i].data_size); 138 rd[i].data_size);
141 if (NULL == string_val) 139 if (NULL == string_val)
142 { 140 {
143 fprintf (stderr, 141 fprintf (stderr,
144 "Record %u of type %d malformed, skipping\n", 142 "Record %u of type %d malformed, skipping\n",
145 (unsigned int) i, 143 (unsigned int) i,
146 (int) rd[i].record_type); 144 (int) rd[i].record_type);
147 continue; 145 continue;
148 } 146 }
149 if (raw) 147 if (raw)
150 printf ("%s\n", 148 printf ("%s\n", string_val);
151 string_val);
152 else 149 else
153 printf ("Got `%s' record: %s\n", 150 printf ("Got `%s' record: %s\n", typename, string_val);
154 typename,
155 string_val);
156 GNUNET_free (string_val); 151 GNUNET_free (string_val);
157 } 152 }
158 GNUNET_SCHEDULER_shutdown (); 153 GNUNET_SCHEDULER_shutdown ();
@@ -178,33 +173,35 @@ run (void *cls,
178 (void) cfgfile; 173 (void) cfgfile;
179 174
180 cfg = c; 175 cfg = c;
176 if (GNUNET_OK != GNUNET_DNSPARSER_check_name (lookup_name))
177 {
178 fprintf (stderr, _ ("`%s' is not a valid domain name\n"), lookup_name);
179 global_ret = 3;
180 return;
181 }
181 gns = GNUNET_GNS_connect (cfg); 182 gns = GNUNET_GNS_connect (cfg);
182 if (NULL == gns) 183 if (NULL == gns)
183 { 184 {
184 fprintf (stderr, 185 fprintf (stderr, _ ("Failed to connect to GNS\n"));
185 _("Failed to connect to GNS\n"));
186 global_ret = 2; 186 global_ret = 2;
187 return; 187 return;
188 } 188 }
189 GNUNET_SCHEDULER_add_shutdown (&do_shutdown, 189 GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
190 NULL);
191
192 if (NULL != lookup_type) 190 if (NULL != lookup_type)
193 rtype = GNUNET_GNSRECORD_typename_to_number (lookup_type); 191 rtype = GNUNET_GNSRECORD_typename_to_number (lookup_type);
194 else 192 else
195 rtype = GNUNET_DNSPARSER_TYPE_A; 193 rtype = GNUNET_DNSPARSER_TYPE_A;
196 if (UINT32_MAX == rtype) 194 if (UINT32_MAX == rtype)
197 { 195 {
198 fprintf (stderr, 196 fprintf (stderr, _ ("Invalid typename specified, assuming `ANY'\n"));
199 _("Invalid typename specified, assuming `ANY'\n"));
200 rtype = GNUNET_GNSRECORD_TYPE_ANY; 197 rtype = GNUNET_GNSRECORD_TYPE_ANY;
201 } 198 }
202 lr = GNUNET_GNS_lookup_with_tld (gns, 199 lr = GNUNET_GNS_lookup_with_tld (gns,
203 lookup_name, 200 lookup_name,
204 rtype, 201 rtype,
205 GNUNET_GNS_LO_DEFAULT, 202 GNUNET_GNS_LO_DEFAULT,
206 &process_lookup_result, 203 &process_lookup_result,
207 lookup_name); 204 lookup_name);
208 if (NULL == lr) 205 if (NULL == lr)
209 { 206 {
210 global_ret = 2; 207 global_ret = 2;
@@ -222,43 +219,41 @@ run (void *cls,
222 * @return 0 ok, 1 on error 219 * @return 0 ok, 1 on error
223 */ 220 */
224int 221int
225main (int argc, 222main (int argc, char *const *argv)
226 char *const *argv)
227{ 223{
228 struct GNUNET_GETOPT_CommandLineOption options[] = { 224 struct GNUNET_GETOPT_CommandLineOption options[] =
229 GNUNET_GETOPT_option_mandatory 225 {GNUNET_GETOPT_option_mandatory (
230 (GNUNET_GETOPT_option_string ('u', 226 GNUNET_GETOPT_option_string ('u',
231 "lookup", 227 "lookup",
232 "NAME", 228 "NAME",
233 gettext_noop ("Lookup a record for the given name"), 229 gettext_noop (
234 &lookup_name)), 230 "Lookup a record for the given name"),
235 GNUNET_GETOPT_option_string ('t', 231 &lookup_name)),
236 "type", 232 GNUNET_GETOPT_option_string ('t',
237 "TYPE", 233 "type",
238 gettext_noop ("Specify the type of the record to lookup"), 234 "TYPE",
239 &lookup_type), 235 gettext_noop (
240 GNUNET_GETOPT_option_flag ('r', 236 "Specify the type of the record to lookup"),
241 "raw", 237 &lookup_type),
242 gettext_noop ("No unneeded output"), 238 GNUNET_GETOPT_option_flag ('r',
243 &raw), 239 "raw",
244 GNUNET_GETOPT_OPTION_END 240 gettext_noop ("No unneeded output"),
245 }; 241 &raw),
242 GNUNET_GETOPT_OPTION_END};
246 int ret; 243 int ret;
247 244
248 if (GNUNET_OK != 245 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
249 GNUNET_STRINGS_get_utf8_args (argc, argv,
250 &argc, &argv))
251 return 2; 246 return 2;
252 247
253 GNUNET_log_setup ("gnunet-gns", 248 GNUNET_log_setup ("gnunet-gns", "WARNING", NULL);
254 "WARNING", 249 ret = GNUNET_PROGRAM_run (argc,
255 NULL); 250 argv,
256 ret = GNUNET_PROGRAM_run (argc, argv,
257 "gnunet-gns", 251 "gnunet-gns",
258 _("GNUnet GNS resolver tool"), 252 _ ("GNUnet GNS resolver tool"),
259 options, 253 options,
260 &run, NULL); 254 &run,
261 GNUNET_free ((void*) argv); 255 NULL);
256 GNUNET_free ((void *) argv);
262 if (GNUNET_OK != ret) 257 if (GNUNET_OK != ret)
263 return 1; 258 return 1;
264 return global_ret; 259 return global_ret;