Changeset 389 for azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver.c
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 5 5 * Tomakomai National College of Technology, JAPAN 6 6 * 7 * ä¸è¨èä½æ¨©è 8 ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 9 * ã«ãã£ã¦å 10 ¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨ 11 * è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢ 12 * ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼ 14 * å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 * ã¨ï¼ 29 * (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 * (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 * å ±åãããã¨ï¼ 37 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 * 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 7 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation 8 * によって公表されている GNU General Public License の Version 2 に記 9 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 10 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 11 * 利用と呼ぶ)することを無償で許諾する. 12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 * スコード中に含まれていること. 15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 * の無保証規定を掲載すること. 19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 21 * と. 22 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 23 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 24 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 25 * 報告すること. 26 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 27 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 41 28 * 42 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 43 ã 44 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 45 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 46 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 31 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 32 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 47 33 * 48 34 * @(#) $Id$ … … 50 36 51 37 /* 52 * ãã¹ãåââIP ã¢ãã¬ã¹å¤æ38 * ホスト名←→IP アドレス変換 53 39 */ 54 40 … … 87 73 88 74 /* 89 * å±æå¤æ°75 * 局所変数 90 76 */ 91 77 … … 104 90 105 91 /* 106 * get_dns_header -- DNS ã¡ãã»ã¼ã¸ãã DNS ããããåãåºãã92 * get_dns_header -- DNS メッセージから DNS ヘッダを取り出す。 107 93 */ 108 94 … … 112 98 T_DNS_HDR *dns_hdr; 113 99 114 /* DNS ããããåãåºãã*/100 /* DNS ヘッダを取り出す。*/ 115 101 if (length < sizeof(rslv->dns_hdr)) 116 102 return EV_RSLV_ESIZE; … … 126 112 127 113 /* 128 * dns_strtype -- DNS ã® type ã®æååãè¿ãã114 * dns_strtype -- DNS の type の文字列を返す。 129 115 */ 130 116 … … 145 131 146 132 /* 147 * udp6_dns -- UDP/IPv6 ã«ãã DNS ãµã¼ãããã¡ãã»ã¼ã¸ãåä¿¡ããã133 * udp6_dns -- UDP/IPv6 により DNS サーバからメッセージを受信する。 148 134 */ 149 135 … … 155 141 int retry; 156 142 157 /* DNS ãµã¼ãã® IPv6 ã¢ãã¬ã¹ãæªå®ç¾©ã®æã¯ãã©ã¡ã¼ã¿ã¨ã©ã¼*/143 /* DNS サーバの IPv6 アドレスが未定義の時はパラメータエラー */ 158 144 if (IN6_IS_ADDR_UNSPECIFIED(addr) || (in6_is_addr_ipv4mapped(addr) && addr->s6_addr32[3] == IPV4_ADDRANY)) { 159 145 syslog(LOG_NOTICE, "[RSLV] undefined IPv6 DNS server address."); … … 191 177 192 178 /* 193 * udp4_dns -- UDP/IPv4 ã«ãã DNS ãµã¼ãããã¡ãã»ã¼ã¸ãåä¿¡ããã179 * udp4_dns -- UDP/IPv4 により DNS サーバからメッセージを受信する。 194 180 */ 195 181 … … 201 187 int retry; 202 188 203 /* DNS ãµã¼ãã® IPv4 ã¢ãã¬ã¹ãæªå®ç¾©ã®æã¯ãã©ã¡ã¼ã¿ã¨ã©ã¼*/189 /* DNS サーバの IPv4 アドレスが未定義の時はパラメータエラー */ 204 190 if (*addr == IPV4_ADDRANY) { 205 191 syslog(LOG_NOTICE, "[RSLV] undefined IPv4 DNS server address."); … … 235 221 236 222 /* 237 * skip_label -- ã©ãã«ãèªã¿é£ã°ãã223 * skip_label -- ラベルを読み飛ばす。 238 224 */ 239 225 … … 247 233 248 234 /* 249 * add_name -- ã¡ãã»ã¼ã¸ã«ååã追å ããã235 * add_name -- メッセージに名前を追加する。 250 236 */ 251 237 … … 258 244 while (*name != '\0') { 259 245 260 /* ã¡ãã»ã¼ã¸ãµã¤ãºã«éãã¦ãããã¨ã©ã¼*/246 /* メッセージサイズに達していたらエラー */ 261 247 if (offset + 1 > size) 262 248 return E_BOVR; 263 249 264 /* ã©ãã«ã®çµãããè¦ã¤ããã*/250 /* ラベルの終わりを見つける。*/ 265 251 tail = skip_label(name); 266 252 267 /* ã©ãã«é·ãè¨å®ããã*/253 /* ラベル長を設定する。*/ 268 254 label_len = tail - (uint8_t*)name; 269 if (label_len > DNS_LABEL_LENGTH) { /* 63 ãªã¯ããããè¶ 270 ããã¨ã¨ã©ã¼ */ 255 if (label_len > DNS_LABEL_LENGTH) { /* 63 オクテットを超えるとエラー */ 271 256 syslog(LOG_NOTICE, "[RSLV] label length(%d) too long > %d.", 272 257 label_len, DNS_LABEL_LENGTH); … … 277 262 offset ++; 278 263 279 /* ã©ãã«åãè¨å®ããã*/ 280 if (offset + label_len > size) { /* ã¡ãã»ã¼ã¸ãµã¤ãºãè¶ 281 ããã¨ã¨ã©ã¼ */ 264 /* ラベル名を設定する。*/ 265 if (offset + label_len > size) { /* メッセージサイズを超えるとエラー */ 282 266 syslog(LOG_NOTICE, "[RSLV] message length(%d) too long > %d.", 283 267 offset + label_len, size); … … 288 272 offset += label_len; 289 273 290 /* 次ã®ã©ãã«ã«ç§»åããã*/274 /* 次のラベルに移動する。*/ 291 275 if (*tail == '\0') 292 276 name = tail; 293 277 else 294 name = tail + 1; /* '.' ãã¹ãããããã*/278 name = tail + 1; /* '.' をスキップする。*/ 295 279 } 296 280 … … 299 283 300 284 /* 301 * add_ipv6addr -- ã¡ãã»ã¼ã¸ã« IPv6 ã¢ãã¬ã¹ã追å ããã285 * add_ipv6addr -- メッセージに IPv6 アドレスを追加する。 302 286 */ 303 287 … … 319 303 for (col = sizeof(T_IN6_ADDR) * 2; -- col >= 0; ) { 320 304 321 /* 16 é²æ° 1æ¡ã®å¤ããååã¨ãã¦è¿½å ããã*/305 /* 16進数 1桁の値を、名前として追加する。*/ 322 306 digit[0] = (addr.s6_addr8[col / 2] >> ((1 - (col % 2)) << 2)) & 0x0f; 323 307 if (digit[0] >= 10) … … 330 314 } 331 315 332 /* "ip6" ã追å ããã*/316 /* "ip6" を追加する。*/ 333 317 if ((error = add_name(msg, size, offset, "ip6")) < 0) 334 318 return error; 335 319 336 /* "arpa" ã追å ããã*/320 /* "arpa" を追加する。*/ 337 321 return add_name(msg, size, error, "arpa"); 338 322 } 339 323 340 324 /* 341 * add_ipv4addr -- ã¡ãã»ã¼ã¸ã« IPv4 ã¢ãã¬ã¹ã追å ããã325 * add_ipv4addr -- メッセージに IPv4 アドレスを追加する。 342 326 */ 343 327 … … 359 343 for (col = 0; col < sizeof(T_IN4_ADDR); col ++) { 360 344 361 /* 1 ãªã¯ãããã®å¤ããæ´æ°å¤ãããªãã©ã«ã«å¤æããã*/345 /* 1オクテットの値を、整数値からリテラルに変換する。*/ 362 346 octet = (addr >> (col << 3)) & 0xff; 363 347 op = &ostr[3]; … … 367 351 } 368 352 369 /* 1 ãªã¯ãããã®å¤ããååã¨ãã¦è¿½å ããã*/353 /* 1オクテットの値を、名前として追加する。*/ 370 354 if ((error = add_name(msg, size, offset, op)) < 0) 371 355 return error; … … 373 357 } 374 358 375 /* "in-addr" ã追å ããã*/359 /* "in-addr" を追加する。*/ 376 360 if ((error = add_name(msg, size, offset, "in-addr")) < 0) 377 361 return error; 378 362 379 /* "arpa" ã追å ããã*/363 /* "arpa" を追加する。*/ 380 364 return add_name(msg, size, error, "arpa"); 381 365 } 382 366 383 367 /* 384 * setup_dns_msg -- DNS ã¡ãã»ã¼ã¸ãä½æããã368 * setup_dns_msg -- DNS メッセージを作成する。 385 369 */ 386 370 … … 406 390 case DNS_LUP_FLAGS_NAME_FQDN: 407 391 408 /* ãã¹ãåãã¾ã㯠FQDN ã®æã®å¦çã*/409 /* ãã¹ãåã追å ããã*/392 /* ホスト名、または FQDN の時の処理。*/ 393 /* ホスト名を追加する。*/ 410 394 if ((offset = add_name(msg, msg_size, offset, name)) < 0) 411 395 return offset; 412 396 413 if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) { /* ååã 255 ãªã¯ããããè¶ 414 ããã¨ã¨ã©ã¼ */ 397 if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) { /* 名前が 255 オクテットを超えるとエラー */ 415 398 syslog(LOG_NOTICE, "[RSLV] name length(%d) too long > %d.", 416 399 offset - sizeof(dns_hdr), DNS_NAME_LENGTH); … … 418 401 } 419 402 420 /* ãã¹ãåã ãã®æã¯ããã¡ã¤ã³åã追å ããã*/403 /* ホスト名だけの時は、ドメイン名を追加する。*/ 421 404 if ((flags & DNS_LUP_FLAGS_NAME_MASK) == DNS_LUP_FLAGS_NAME_HOST) { 422 405 423 /* ãã¡ã¤ã³åã追å ããã*/406 /* ドメイン名を追加する。*/ 424 407 if ((offset = add_name(msg, msg_size, offset, dns_domain_name)) < 0) 425 408 return offset; 426 409 427 if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) { /* ååã 255 ãªã¯ããããè¶ 428 ããã¨ã¨ã©ã¼ */ 410 if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) { /* 名前が 255 オクテットを超えるとエラー */ 429 411 syslog(LOG_NOTICE, "[RSLV] name length(%d) too long > %d.", 430 412 offset - sizeof(dns_hdr), DNS_NAME_LENGTH); … … 451 433 } 452 434 453 /* ååã®çµäºã³ã¼ããTYPEãCLASS ã追å ãã¦ãã¡ãã»ã¼ã¸é·ãè¶ 454 ããªããã¨ã確èªããã*/ 435 /* 名前の終了コード、TYPE、CLASS を追加してもメッセージ長を超えないことを確認する。*/ 455 436 if (offset + sizeof(uint16_t) * 2 + 1 > msg_size) { 456 437 syslog(LOG_NOTICE, "[RSLV] message length(%d) too long > %d.", … … 459 440 } 460 441 461 /* ååã®çµäºã³ã¼ããè¨å®ããã*/442 /* 名前の終了コードを設定する。*/ 462 443 *(msg + offset) = '\0'; 463 444 offset ++; 464 445 465 /* DNS ã® TYPE ãè¨å®ããã*/446 /* DNS の TYPE を設定する。*/ 466 447 if (flags & DNS_LUP_FLAGS_QTYPE_PTR) 467 448 host2msg16(msg + offset, DNS_TYPE_PTR); … … 476 457 offset += sizeof(uint16_t); 477 458 478 /* DNS ã® CLASS ãè¨å®ããã*/459 /* DNS の CLASS を設定する。*/ 479 460 host2msg16(msg + offset, DNS_CLASS_IN); 480 461 … … 483 464 484 465 /* 485 * skip_dns_name -- DNS ã¡ãã»ã¼ã¸ã®ååãèªã¿é£ã°ãã466 * skip_dns_name -- DNS メッセージの名前を読み飛ばす。 486 467 * 487 * 注æ: å§ç¸®å½¢å¼ãèæ 488 ®ãããä¸ä½ 2ãããã 11ãªãå§ç¸®å½¢å¼ã 468 * 注意: 圧縮形式を考慮する。上位 2ビットが 11なら圧縮形式。 489 469 */ 490 470 … … 508 488 509 489 /* 510 * skip_dns_qd -- DNS Question section ãèªã¿é£ã°ãã490 * skip_dns_qd -- DNS Question section を読み飛ばす。 511 491 */ 512 492 … … 517 497 518 498 while (count != 0) { 519 /* name ãèªã¿é£ã°ãã*/499 /* name を読み飛ばす。*/ 520 500 if ((next = skip_dns_name(msg, offset, length)) < 0) 521 501 return next; 522 502 offset = next; 523 503 524 /* type ãclass ãèªã¿é£ã°ãã*/504 /* type、class を読み飛ばす。*/ 525 505 if ((offset + sizeof(uint16_t) + sizeof(uint16_t)) > length) 526 506 return EV_RSLV_ESIZE; … … 534 514 535 515 /* 536 * skip_dns_rr -- DNS RR ãèªã¿é£ã°ãã516 * skip_dns_rr -- DNS RR を読み飛ばす。 537 517 */ 538 518 … … 544 524 545 525 while (count != 0) { 546 /* name ãèªã¿é£ã°ãã*/526 /* name を読み飛ばす。*/ 547 527 if ((next = skip_dns_name(msg, offset, length)) < 0) 548 528 return next; 549 529 offset = next; 550 530 551 /* type ãclassãTTL ãèªã¿é£ã°ãã*/531 /* type、class、TTL を読み飛ばす。*/ 552 532 if (offset + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint32_t) > length) 553 533 return EV_RSLV_ESIZE; 554 534 offset += sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint32_t); 555 535 556 /* RD length 㨠RDATA ãèªã¿é£ã°ãã*/536 /* RD length と RDATA を読み飛ばす。*/ 557 537 if (offset + sizeof(uint16_t) > length) 558 538 return EV_RSLV_ESIZE; … … 570 550 571 551 /* 572 * dns_analyze_qd -- DNS ã¡ãã»ã¼ã¸ã® question section ã解æããã552 * dns_analyze_qd -- DNS メッセージの question section を解析する。 573 553 */ 574 554 … … 583 563 offset = error; 584 564 585 /* DNS ã¡ãã»ã¼ã¸å 586 ã®å½¢å¼ã®ãµã¤ãºã§ãã§ãã¯ããã*/ 565 /* DNS メッセージ内の形式のサイズでチェックする。*/ 587 566 if (offset + T_DNS_QD_SIZE > length) 588 567 return EV_RSLV_ESIZE; 589 568 590 569 /* 591 * DNS ã¡ãã»ã¼ã¸å 592 ã® SOA RDATA ããã¤ããªã¼ãã¼ã調æ´ã㦠593 * å 594 é¨æ§é ä½ã«ã³ãã¼ããã 570 * DNS メッセージ内の SOA RDATA をバイトオーダーを調整して 571 * 内部構造体にコピーする。 595 572 */ 596 573 dns_qd = (T_DNS_QD*)(msg + offset); … … 602 579 603 580 /* 604 * dns_analyze_soa -- DNS ã¡ãã»ã¼ã¸ã® SOA RDATA ã解æããã581 * dns_analyze_soa -- DNS メッセージの SOA RDATA を解析する。 605 582 */ 606 583 … … 611 588 T_DNS_SOA *dns_soa; 612 589 613 /* MNAME ãã¹ãããããã*/590 /* MNAME をスキップする。*/ 614 591 if ((error = skip_dns_name(msg, offset, length)) < 0) 615 592 return error; 616 593 offset = error; 617 594 618 /* RNAME ãã¹ãããããã*/595 /* RNAME をスキップする。*/ 619 596 if ((error = skip_dns_name(msg, offset, length)) < 0) 620 597 return error; 621 598 offset = error; 622 599 623 /* DNS ã¡ãã»ã¼ã¸å 624 ã®å½¢å¼ã®ãµã¤ãºã§ãã§ãã¯ããã*/ 600 /* DNS メッセージ内の形式のサイズでチェックする。*/ 625 601 if (offset + T_DNS_SOA_SIZE > length) 626 602 return EV_RSLV_ESIZE; 627 603 628 604 /* 629 * DNS ã¡ãã»ã¼ã¸å 630 ã® SOA RDATA ããã¤ããªã¼ãã¼ã調æ´ã㦠631 * å 632 é¨æ§é ä½ã«ã³ãã¼ããã 605 * DNS メッセージ内の SOA RDATA をバイトオーダーを調整して 606 * 内部構造体にコピーする。 633 607 */ 634 608 dns_soa = (T_DNS_SOA*)(msg + offset); … … 643 617 644 618 /* 645 * dns_analyze_rr -- DNS ã¡ãã»ã¼ã¸ã® AN/NS/AR section ã解æããã619 * dns_analyze_rr -- DNS メッセージの AN/NS/AR section を解析する。 646 620 */ 647 621 … … 656 630 offset = error; 657 631 658 /* DNS ã¡ãã»ã¼ã¸å 659 ã®å½¢å¼ã®ãµã¤ãºã§ãã§ãã¯ããã*/ 632 /* DNS メッセージ内の形式のサイズでチェックする。*/ 660 633 if (offset + T_DNS_RR_SIZE > length) 661 634 return EV_RSLV_ESIZE; 662 635 663 636 /* 664 * DNS ã¡ãã»ã¼ã¸å 665 ã® SOA RDATA ããã¤ããªã¼ãã¼ã調æ´ã㦠666 * å 667 é¨æ§é ä½ã«ã³ãã¼ããã 637 * DNS メッセージ内の SOA RDATA をバイトオーダーを調整して 638 * 内部構造体にコピーする。 668 639 */ 669 640 dns_rr = (T_DNS_RR*)(msg + offset); … … 679 650 680 651 /* 681 * analyze_dns_msg -- DNS ã¡ãã»ã¼ã¸ã解æããã652 * analyze_dns_msg -- DNS メッセージを解析する。 682 653 */ 683 654 … … 687 658 ER_UINT offset; 688 659 689 /* DNS ããããåãåºãã*/660 /* DNS ヘッダを取り出す。*/ 690 661 if ((offset = get_dns_header(msg, length, rslv)) < 0) 691 662 return offset; 692 663 693 /* question section ãèªã¿é£ã°ãã*/664 /* question section を読み飛ばす。*/ 694 665 rslv->qd_offset = offset; 695 666 if ((offset = skip_dns_qd(msg, offset, length, rslv->dns_hdr.qdcount)) < 0) 696 667 return offset; 697 668 698 /* answer section ãèªã¿é£ã°ãã*/669 /* answer section を読み飛ばす。*/ 699 670 rslv->an_offset = offset; 700 671 if ((offset = skip_dns_rr(msg, offset, length, rslv->dns_hdr.ancount)) < 0) 701 672 return offset; 702 673 703 /* authority records section ãèªã¿é£ã°ãã*/674 /* authority records section を読み飛ばす。*/ 704 675 rslv->ns_offset = offset; 705 676 if ((offset = skip_dns_rr(msg, offset, length, rslv->dns_hdr.nscount)) < 0) 706 677 return offset; 707 678 708 /* additional records section ãèªã¿é£ã°ãã*/679 /* additional records section を読み飛ばす。*/ 709 680 rslv->ar_offset = offset; 710 681 if ((offset = skip_dns_rr(msg, offset, length, rslv->dns_hdr.arcount)) < 0) … … 715 686 716 687 /* 717 * dns_lookup_host_sub -- DNS ã«ãããã¹ãã®æ 718 å ±ãåå¾ããï¼è£å©é¢æ°ï¼ã 688 * dns_lookup_host_sub -- DNS によりホストの情報を取得する(補助関数)。 719 689 */ 720 690 … … 833 803 834 804 /* 835 * udp64_dns -- DNS/IPv6 ãDNS/IPv4 ã«ãã DNS ãµã¼ãããã¡ãã»ã¼ã¸ãåä¿¡ããã805 * udp64_dns -- DNS/IPv6、DNS/IPv4 により DNS サーバからメッセージを受信する。 836 806 */ 837 807 … … 844 814 uint16_t proto; 845 815 846 /* DNS ã¡ãã»ã¼ã¸ãä½æããã*/816 /* DNS メッセージを作成する。*/ 847 817 if ((length = setup_dns_msg(flags, hostname, msg, msg_size)) < 0) 848 818 return length; 849 819 850 /* UDP/IPv6 ã® DNS ãµã¼ãã«ç 851 §ä¼ããã*/ 820 /* UDP/IPv6 の DNS サーバに照会する。*/ 852 821 proto = DNS_LUP_FLAGS_PROTO_IPV6; 853 822 if ((length = udp6_dns(flags, &in6_addr_dns, msg, msg_size, length)) < 0) { 854 /* UDP/IPv6 ã® DNS ãµã¼ãã¸ã®ç 855 §ä¼ãã¨ã©ã¼ã«ãªã£ãæã¯ãUDP/IPv4 ã® DNS ãµã¼ãã«ç 856 §ä¼ããã*/ 823 /* UDP/IPv6 の DNS サーバへの照会がエラーになった時は、UDP/IPv4 の DNS サーバに照会する。*/ 857 824 if ((length = setup_dns_msg(flags, hostname, msg, msg_size)) < 0) 858 825 return length; 859 826 860 /* UDP/IPv4 ã® DNS ãµã¼ãã«ç 861 §ä¼ããã*/ 827 /* UDP/IPv4 の DNS サーバに照会する。*/ 862 828 proto = DNS_LUP_FLAGS_PROTO_IPV4; 863 829 if ((length = udp4_dns(flags, &in4_addr_dns, msg, msg_size, length)) < 0) … … 865 831 } 866 832 867 /* DNS ã¡ãã»ã¼ã¸ã解æããã*/833 /* DNS メッセージを解析する。*/ 868 834 if ((error = analyze_dns_msg(msg, length, rslv)) != E_OK) 869 835 return error; … … 890 856 891 857 /* 892 * dns_lookup_host -- DNS ã«ãããã¹ãã®æ 893 å ±ãåå¾ããã 858 * dns_lookup_host -- DNS によりホストの情報を取得する。 894 859 */ 895 860 … … 905 870 906 871 /* 907 * IPv6/IPv4 ã®ä¸¡æ¹ãæå®ãããæã®å¦ç 908 * ã¾ã type == AAAA 㧠DNS ãµã¼ãã«ç 909 §ä¼ããã 872 * IPv6/IPv4 の両方が指定された時の処理 873 * まず type == AAAA で DNS サーバに照会する。 910 874 */ 911 875 if (flags & DNS_LUP_FLAGS_QTYPE_PTR) { … … 925 889 926 890 /* 927 * type == AAAA ã§ã¢ãã¬ã¹è§£æ±ºãã§ããªãã£ãæã®å¦ç 928 * type == A 㧠DNS ãµã¼ãã«ç 929 §ä¼ããã 891 * type == AAAA でアドレス解決ができなかった時の処理 892 * type == A で DNS サーバに照会する。 930 893 */ 931 894 if (flags & DNS_LUP_FLAGS_QTYPE_A) … … 943 906 944 907 /* 945 * type == AAAA 㨠A ã®ä¸¡æ¹ãæå®ãããæã®å¦ç 946 * ã¾ã type == AAAA 㧠DNS ãµã¼ãã«ç 947 §ä¼ããã 908 * type == AAAA と A の両方が指定された時の処理 909 * まず type == AAAA で DNS サーバに照会する。 948 910 */ 949 911 if ((error = dns_lookup_host_sub(flags & ~DNS_LUP_FLAGS_QTYPE_A, hostname, msg, msg_size, rslv)) < 0) … … 953 915 954 916 /* 955 * type == AAAA ã§ã¢ãã¬ã¹è§£æ±ºãã§ããªãã£ãæã®å¦ç 956 * type == A 㧠DNS ãµã¼ãã«ç 957 §ä¼ããã 917 * type == AAAA でアドレス解決ができなかった時の処理 918 * type == A で DNS サーバに照会する。 958 919 */ 959 920 return dns_lookup_host_sub(flags & ~DNS_LUP_FLAGS_QTYPE_AAAA, hostname, msg, msg_size, rslv); … … 968 929 969 930 else { 970 /* IPv6/IPv4 ã®ã©ã¡ããä¸æ¹ãæå®ãããæã®å¦ç*/931 /* IPv6/IPv4 のどちらか一方が指定された時の処理 */ 971 932 error = dns_lookup_host_sub(flags, hostname, msg, msg_size, rslv); 972 933 } … … 984 945 985 946 /* 986 * dns_in6_set_dname -- DNS ã® ãã¡ã¤ã³åãè¨å®ããï¼DHCPv6ç¨ï¼ã947 * dns_in6_set_dname -- DNS の ドメイン名を設定する(DHCPv6用)。 987 948 * 988 * 注æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã949 * 注意: new に NULL を指定すると、初期値に戻す。 989 950 */ 990 951 … … 1019 980 1020 981 /* 1021 * dns_in6_get_dname -- DNS ã® ãã¡ã¤ã³åãå¾ãã982 * dns_in6_get_dname -- DNS の ドメイン名を得る。 1022 983 */ 1023 984 … … 1029 990 1030 991 /* 1031 * dns_in6_set_addr -- DNS ãµã¼ãã® IPv6 ã¢ãã¬ã¹ãè¨å®ããï¼DHCPv6ç¨ï¼ã992 * dns_in6_set_addr -- DNS サーバの IPv6 アドレスを設定する(DHCPv6用)。 1032 993 * 1033 * 注æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã994 * 注意: new に NULL を指定すると、初期値に戻す。 1034 995 */ 1035 996 … … 1045 1006 1046 1007 /* 1047 * dns_in6_get_addr -- DNS ãµã¼ãã® IPv6 ã¢ãã¬ã¹ãå¾ãã1008 * dns_in6_get_addr -- DNS サーバの IPv6 アドレスを得る。 1048 1009 */ 1049 1010 … … 1064 1025 1065 1026 /* 1066 * dns_in4_set_dname -- DNS ã® ãã¡ã¤ã³åãè¨å®ããï¼DHCPv4ç¨ï¼ã1027 * dns_in4_set_dname -- DNS の ドメイン名を設定する(DHCPv4用)。 1067 1028 * 1068 * 注æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã1029 * 注意: new に NULL を指定すると、初期値に戻す。 1069 1030 */ 1070 1031 … … 1087 1048 1088 1049 /* 1089 * dns_in4_get_dname -- DNS ã® ãã¡ã¤ã³åãå¾ãã1050 * dns_in4_get_dname -- DNS の ドメイン名を得る。 1090 1051 */ 1091 1052 … … 1097 1058 1098 1059 /* 1099 * dns_in4_set_addr -- DNS ãµã¼ãã® IPv4 ã¢ãã¬ã¹ãè¨å®ããï¼DHCPv4ç¨ï¼ã1060 * dns_in4_set_addr -- DNS サーバの IPv4 アドレスを設定する(DHCPv4用)。 1100 1061 * 1101 * 注æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã1062 * 注意: new に NULL を指定すると、初期値に戻す。 1102 1063 */ 1103 1064 … … 1113 1074 1114 1075 /* 1115 * dns_in4_get_addr -- DNS ãµã¼ãã® IPv4 ã¢ãã¬ã¹ãå¾ãã1076 * dns_in4_get_addr -- DNS サーバの IPv4 アドレスを得る。 1116 1077 */ 1117 1078 … … 1130 1091 1131 1092 /* 1132 * dns_host_addr -- ãã¹ãåã IP ã¢ãã¬ã¹ã«å¤æããã1093 * dns_host_addr -- ホスト名を IP アドレスに変換する。 1133 1094 */ 1134 1095
Note:
See TracChangeset
for help on using the changeset viewer.