diff options
author | Christian Grothoff <christian@grothoff.org> | 2019-05-02 08:00:21 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2019-05-02 08:00:21 +0200 |
commit | e46a601f124108ec5e76a22998618b0c630eae74 (patch) | |
tree | dbec145dfc14b011a4cfce6e4ecde5f71af70526 /src/gns/gnunet-gns.c | |
parent | b930db26d6b166404a3262687750e5aec2b3befc (diff) | |
download | gnunet-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.c | 115 |
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 | */ |
107 | static void | 107 | static void |
108 | process_lookup_result (void *cls, | 108 | process_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 | */ |
224 | int | 221 | int |
225 | main (int argc, | 222 | main (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; |