Changeset 318 for asp3_gr_sakura/trunk/tinet/netapp/resolver.c
- Timestamp:
- Aug 3, 2017, 10:46:41 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_gr_sakura/trunk/tinet/netapp/resolver.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 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 … … 86 72 87 73 /* 88 * å±æå¤æ°74 * 局所変数 89 75 */ 90 76 … … 103 89 104 90 /* 105 * get_dns_header -- DNS ã¡ãã»ã¼ã¸ãã DNS ããããåãåºãã91 * get_dns_header -- DNS メッセージから DNS ヘッダを取り出す。 106 92 */ 107 93 … … 111 97 T_DNS_HDR *dns_hdr; 112 98 113 /* DNS ããããåãåºãã*/99 /* DNS ヘッダを取り出す。*/ 114 100 if (length < sizeof(rslv->dns_hdr)) 115 101 return EV_RSLV_ESIZE; … … 125 111 126 112 /* 127 * dns_strtype -- DNS ã® type ã®æååãè¿ãã113 * dns_strtype -- DNS の type の文字列を返す。 128 114 */ 129 115 … … 144 130 145 131 /* 146 * udp6_dns -- UDP/IPv6 ã«ãã DNS ãµã¼ãããã¡ãã»ã¼ã¸ãåä¿¡ããã132 * udp6_dns -- UDP/IPv6 により DNS サーバからメッセージを受信する。 147 133 */ 148 134 … … 154 140 int retry; 155 141 156 /* DNS ãµã¼ãã® IPv6 ã¢ãã¬ã¹ãæªå®ç¾©ã®æã¯ãã©ã¡ã¼ã¿ã¨ã©ã¼*/142 /* DNS サーバの IPv6 アドレスが未定義の時はパラメータエラー */ 157 143 if (IN6_IS_ADDR_UNSPECIFIED(addr) || (in6_is_addr_ipv4mapped(addr) && addr->s6_addr32[3] == IPV4_ADDRANY)) { 158 144 syslog(LOG_NOTICE, "[RSLV] undefined IPv6 DNS server address."); … … 190 176 191 177 /* 192 * udp4_dns -- UDP/IPv4 ã«ãã DNS ãµã¼ãããã¡ãã»ã¼ã¸ãåä¿¡ããã178 * udp4_dns -- UDP/IPv4 により DNS サーバからメッセージを受信する。 193 179 */ 194 180 … … 200 186 int retry; 201 187 202 /* DNS ãµã¼ãã® IPv4 ã¢ãã¬ã¹ãæªå®ç¾©ã®æã¯ãã©ã¡ã¼ã¿ã¨ã©ã¼*/188 /* DNS サーバの IPv4 アドレスが未定義の時はパラメータエラー */ 203 189 if (*addr == IPV4_ADDRANY) { 204 190 syslog(LOG_NOTICE, "[RSLV] undefined IPv4 DNS server address."); … … 234 220 235 221 /* 236 * skip_label -- ã©ãã«ãèªã¿é£ã°ãã222 * skip_label -- ラベルを読み飛ばす。 237 223 */ 238 224 … … 246 232 247 233 /* 248 * add_name -- ã¡ãã»ã¼ã¸ã«ååã追å ããã234 * add_name -- メッセージに名前を追加する。 249 235 */ 250 236 … … 257 243 while (*name != '\0') { 258 244 259 /* ã¡ãã»ã¼ã¸ãµã¤ãºã«éãã¦ãããã¨ã©ã¼*/245 /* メッセージサイズに達していたらエラー */ 260 246 if (offset + 1 > size) 261 247 return E_BOVR; 262 248 263 /* ã©ãã«ã®çµãããè¦ã¤ããã*/249 /* ラベルの終わりを見つける。*/ 264 250 tail = skip_label(name); 265 251 266 /* ã©ãã«é·ãè¨å®ããã*/252 /* ラベル長を設定する。*/ 267 253 label_len = tail - name; 268 if (label_len > DNS_LABEL_LENGTH) { /* 63 ãªã¯ããããè¶ 269 ããã¨ã¨ã©ã¼ */ 254 if (label_len > DNS_LABEL_LENGTH) { /* 63 オクテットを超えるとエラー */ 270 255 syslog(LOG_NOTICE, "[RSLV] label length(%d) too long > %d.", 271 256 label_len, DNS_LABEL_LENGTH); … … 276 261 offset ++; 277 262 278 /* ã©ãã«åãè¨å®ããã*/ 279 if (offset + label_len > size) { /* ã¡ãã»ã¼ã¸ãµã¤ãºãè¶ 280 ããã¨ã¨ã©ã¼ */ 263 /* ラベル名を設定する。*/ 264 if (offset + label_len > size) { /* メッセージサイズを超えるとエラー */ 281 265 syslog(LOG_NOTICE, "[RSLV] message length(%d) too long > %d.", 282 266 offset + label_len, size); … … 287 271 offset += label_len; 288 272 289 /* 次ã®ã©ãã«ã«ç§»åããã*/273 /* 次のラベルに移動する。*/ 290 274 if (*tail == '\0') 291 275 name = tail; 292 276 else 293 name = tail + 1; /* '.' ãã¹ãããããã*/277 name = tail + 1; /* '.' をスキップする。*/ 294 278 } 295 279 … … 298 282 299 283 /* 300 * add_ipv6addr -- ã¡ãã»ã¼ã¸ã« IPv6 ã¢ãã¬ã¹ã追å ããã284 * add_ipv6addr -- メッセージに IPv6 アドレスを追加する。 301 285 */ 302 286 … … 318 302 for (col = sizeof(T_IN6_ADDR) * 2; -- col >= 0; ) { 319 303 320 /* 16 é²æ° 1æ¡ã®å¤ããååã¨ãã¦è¿½å ããã*/304 /* 16進数 1桁の値を、名前として追加する。*/ 321 305 digit[0] = (addr.s6_addr8[col / 2] >> ((1 - (col % 2)) << 2)) & 0x0f; 322 306 if (digit[0] >= 10) … … 329 313 } 330 314 331 /* "ip6" ã追å ããã*/315 /* "ip6" を追加する。*/ 332 316 if ((error = add_name(msg, size, offset, "ip6")) < 0) 333 317 return error; 334 318 335 /* "arpa" ã追å ããã*/319 /* "arpa" を追加する。*/ 336 320 return add_name(msg, size, error, "arpa"); 337 321 } 338 322 339 323 /* 340 * add_ipv4addr -- ã¡ãã»ã¼ã¸ã« IPv4 ã¢ãã¬ã¹ã追å ããã324 * add_ipv4addr -- メッセージに IPv4 アドレスを追加する。 341 325 */ 342 326 … … 358 342 for (col = 0; col < sizeof(T_IN4_ADDR); col ++) { 359 343 360 /* 1 ãªã¯ãããã®å¤ããæ´æ°å¤ãããªãã©ã«ã«å¤æããã*/344 /* 1オクテットの値を、整数値からリテラルに変換する。*/ 361 345 octet = (addr >> (col << 3)) & 0xff; 362 346 op = &ostr[3]; … … 366 350 } 367 351 368 /* 1 ãªã¯ãããã®å¤ããååã¨ãã¦è¿½å ããã*/352 /* 1オクテットの値を、名前として追加する。*/ 369 353 if ((error = add_name(msg, size, offset, op)) < 0) 370 354 return error; … … 372 356 } 373 357 374 /* "in-addr" ã追å ããã*/358 /* "in-addr" を追加する。*/ 375 359 if ((error = add_name(msg, size, offset, "in-addr")) < 0) 376 360 return error; 377 361 378 /* "arpa" ã追å ããã*/362 /* "arpa" を追加する。*/ 379 363 return add_name(msg, size, error, "arpa"); 380 364 } 381 365 382 366 /* 383 * setup_dns_msg -- DNS ã¡ãã»ã¼ã¸ãä½æããã367 * setup_dns_msg -- DNS メッセージを作成する。 384 368 */ 385 369 … … 405 389 case DNS_LUP_FLAGS_NAME_FQDN: 406 390 407 /* ãã¹ãåãã¾ã㯠FQDN ã®æã®å¦çã*/408 /* ãã¹ãåã追å ããã*/391 /* ホスト名、または FQDN の時の処理。*/ 392 /* ホスト名を追加する。*/ 409 393 if ((offset = add_name(msg, msg_size, offset, name)) < 0) 410 394 return offset; 411 395 412 if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) { /* ååã 255 ãªã¯ããããè¶ 413 ããã¨ã¨ã©ã¼ */ 396 if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) { /* 名前が 255 オクテットを超えるとエラー */ 414 397 syslog(LOG_NOTICE, "[RSLV] name length(%d) too long > %d.", 415 398 offset - sizeof(dns_hdr), DNS_NAME_LENGTH); … … 417 400 } 418 401 419 /* ãã¹ãåã ãã®æã¯ããã¡ã¤ã³åã追å ããã*/402 /* ホスト名だけの時は、ドメイン名を追加する。*/ 420 403 if ((flags & DNS_LUP_FLAGS_NAME_MASK) == DNS_LUP_FLAGS_NAME_HOST) { 421 404 422 /* ãã¡ã¤ã³åã追å ããã*/405 /* ドメイン名を追加する。*/ 423 406 if ((offset = add_name(msg, msg_size, offset, (char *)dns_domain_name)) < 0) 424 407 return offset; 425 408 426 if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) { /* ååã 255 ãªã¯ããããè¶ 427 ããã¨ã¨ã©ã¼ */ 409 if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) { /* 名前が 255 オクテットを超えるとエラー */ 428 410 syslog(LOG_NOTICE, "[RSLV] name length(%d) too long > %d.", 429 411 offset - sizeof(dns_hdr), DNS_NAME_LENGTH); … … 450 432 } 451 433 452 /* ååã®çµäºã³ã¼ããTYPEãCLASS ã追å ãã¦ãã¡ãã»ã¼ã¸é·ãè¶ 453 ããªããã¨ã確èªããã*/ 434 /* 名前の終了コード、TYPE、CLASS を追加してもメッセージ長を超えないことを確認する。*/ 454 435 if (offset + sizeof(uint16_t) * 2 + 1 > msg_size) { 455 436 syslog(LOG_NOTICE, "[RSLV] message length(%d) too long > %d.", … … 458 439 } 459 440 460 /* ååã®çµäºã³ã¼ããè¨å®ããã*/441 /* 名前の終了コードを設定する。*/ 461 442 *(msg + offset) = '\0'; 462 443 offset ++; 463 444 464 /* DNS ã® TYPE ãè¨å®ããã*/445 /* DNS の TYPE を設定する。*/ 465 446 if (flags & DNS_LUP_FLAGS_QTYPE_PTR) 466 447 host2msg16(msg + offset, DNS_TYPE_PTR); … … 475 456 offset += sizeof(uint16_t); 476 457 477 /* DNS ã® CLASS ãè¨å®ããã*/458 /* DNS の CLASS を設定する。*/ 478 459 host2msg16(msg + offset, DNS_CLASS_IN); 479 460 … … 482 463 483 464 /* 484 * skip_dns_name -- DNS ã¡ãã»ã¼ã¸ã®ååãèªã¿é£ã°ãã465 * skip_dns_name -- DNS メッセージの名前を読み飛ばす。 485 466 * 486 * 注æ: å§ç¸®å½¢å¼ãèæ 487 ®ãããä¸ä½ 2ãããã 11ãªãå§ç¸®å½¢å¼ã 467 * 注意: 圧縮形式を考慮する。上位 2ビットが 11なら圧縮形式。 488 468 */ 489 469 … … 507 487 508 488 /* 509 * skip_dns_qd -- DNS Question section ãèªã¿é£ã°ãã489 * skip_dns_qd -- DNS Question section を読み飛ばす。 510 490 */ 511 491 … … 516 496 517 497 while (count != 0) { 518 /* name ãèªã¿é£ã°ãã*/498 /* name を読み飛ばす。*/ 519 499 if ((next = skip_dns_name(msg, offset, length)) < 0) 520 500 return next; 521 501 offset = next; 522 502 523 /* type ãclass ãèªã¿é£ã°ãã*/503 /* type、class を読み飛ばす。*/ 524 504 if ((offset + sizeof(uint16_t) + sizeof(uint16_t)) > length) 525 505 return EV_RSLV_ESIZE; … … 533 513 534 514 /* 535 * skip_dns_rr -- DNS RR ãèªã¿é£ã°ãã515 * skip_dns_rr -- DNS RR を読み飛ばす。 536 516 */ 537 517 … … 543 523 544 524 while (count != 0) { 545 /* name ãèªã¿é£ã°ãã*/525 /* name を読み飛ばす。*/ 546 526 if ((next = skip_dns_name(msg, offset, length)) < 0) 547 527 return next; 548 528 offset = next; 549 529 550 /* type ãclassãTTL ãèªã¿é£ã°ãã*/530 /* type、class、TTL を読み飛ばす。*/ 551 531 if (offset + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint32_t) > length) 552 532 return EV_RSLV_ESIZE; 553 533 offset += sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint32_t); 554 534 555 /* RD length 㨠RDATA ãèªã¿é£ã°ãã*/535 /* RD length と RDATA を読み飛ばす。*/ 556 536 if (offset + sizeof(uint16_t) > length) 557 537 return EV_RSLV_ESIZE; … … 569 549 570 550 /* 571 * dns_analyze_qd -- DNS ã¡ãã»ã¼ã¸ã® question section ã解æããã551 * dns_analyze_qd -- DNS メッセージの question section を解析する。 572 552 */ 573 553 … … 582 562 offset = error; 583 563 584 /* DNS ã¡ãã»ã¼ã¸å 585 ã®å½¢å¼ã®ãµã¤ãºã§ãã§ãã¯ããã*/ 564 /* DNS メッセージ内の形式のサイズでチェックする。*/ 586 565 if (offset + T_DNS_QD_SIZE > length) 587 566 return EV_RSLV_ESIZE; 588 567 589 568 /* 590 * DNS ã¡ãã»ã¼ã¸å 591 ã® SOA RDATA ããã¤ããªã¼ãã¼ã調æ´ã㦠592 * å 593 é¨æ§é ä½ã«ã³ãã¼ããã 569 * DNS メッセージ内の SOA RDATA をバイトオーダーを調整して 570 * 内部構造体にコピーする。 594 571 */ 595 572 dns_qd = (T_DNS_QD*)(msg + offset); … … 601 578 602 579 /* 603 * dns_analyze_soa -- DNS ã¡ãã»ã¼ã¸ã® SOA RDATA ã解æããã580 * dns_analyze_soa -- DNS メッセージの SOA RDATA を解析する。 604 581 */ 605 582 … … 610 587 T_DNS_SOA *dns_soa; 611 588 612 /* MNAME ãã¹ãããããã*/589 /* MNAME をスキップする。*/ 613 590 if ((error = skip_dns_name(msg, offset, length)) < 0) 614 591 return error; 615 592 offset = error; 616 593 617 /* RNAME ãã¹ãããããã*/594 /* RNAME をスキップする。*/ 618 595 if ((error = skip_dns_name(msg, offset, length)) < 0) 619 596 return error; 620 597 offset = error; 621 598 622 /* DNS ã¡ãã»ã¼ã¸å 623 ã®å½¢å¼ã®ãµã¤ãºã§ãã§ãã¯ããã*/ 599 /* DNS メッセージ内の形式のサイズでチェックする。*/ 624 600 if (offset + T_DNS_SOA_SIZE > length) 625 601 return EV_RSLV_ESIZE; 626 602 627 603 /* 628 * DNS ã¡ãã»ã¼ã¸å 629 ã® SOA RDATA ããã¤ããªã¼ãã¼ã調æ´ã㦠630 * å 631 é¨æ§é ä½ã«ã³ãã¼ããã 604 * DNS メッセージ内の SOA RDATA をバイトオーダーを調整して 605 * 内部構造体にコピーする。 632 606 */ 633 607 dns_soa = (T_DNS_SOA*)(msg + offset); … … 642 616 643 617 /* 644 * dns_analyze_rr -- DNS ã¡ãã»ã¼ã¸ã® AN/NS/AR section ã解æããã618 * dns_analyze_rr -- DNS メッセージの AN/NS/AR section を解析する。 645 619 */ 646 620 … … 655 629 offset = error; 656 630 657 /* DNS ã¡ãã»ã¼ã¸å 658 ã®å½¢å¼ã®ãµã¤ãºã§ãã§ãã¯ããã*/ 631 /* DNS メッセージ内の形式のサイズでチェックする。*/ 659 632 if (offset + T_DNS_RR_SIZE > length) 660 633 return EV_RSLV_ESIZE; 661 634 662 635 /* 663 * DNS ã¡ãã»ã¼ã¸å 664 ã® SOA RDATA ããã¤ããªã¼ãã¼ã調æ´ã㦠665 * å 666 é¨æ§é ä½ã«ã³ãã¼ããã 636 * DNS メッセージ内の SOA RDATA をバイトオーダーを調整して 637 * 内部構造体にコピーする。 667 638 */ 668 639 dns_rr = (T_DNS_RR*)(msg + offset); … … 678 649 679 650 /* 680 * analyze_dns_msg -- DNS ã¡ãã»ã¼ã¸ã解æããã651 * analyze_dns_msg -- DNS メッセージを解析する。 681 652 */ 682 653 … … 686 657 ER_UINT offset; 687 658 688 /* DNS ããããåãåºãã*/659 /* DNS ヘッダを取り出す。*/ 689 660 if ((offset = get_dns_header(msg, length, rslv)) < 0) 690 661 return offset; 691 662 692 /* question section ãèªã¿é£ã°ãã*/663 /* question section を読み飛ばす。*/ 693 664 rslv->qd_offset = offset; 694 665 if ((offset = skip_dns_qd(msg, offset, length, rslv->dns_hdr.qdcount)) < 0) 695 666 return offset; 696 667 697 /* answer section ãèªã¿é£ã°ãã*/668 /* answer section を読み飛ばす。*/ 698 669 rslv->an_offset = offset; 699 670 if ((offset = skip_dns_rr(msg, offset, length, rslv->dns_hdr.ancount)) < 0) 700 671 return offset; 701 672 702 /* authority records section ãèªã¿é£ã°ãã*/673 /* authority records section を読み飛ばす。*/ 703 674 rslv->ns_offset = offset; 704 675 if ((offset = skip_dns_rr(msg, offset, length, rslv->dns_hdr.nscount)) < 0) 705 676 return offset; 706 677 707 /* additional records section ãèªã¿é£ã°ãã*/678 /* additional records section を読み飛ばす。*/ 708 679 rslv->ar_offset = offset; 709 680 if ((offset = skip_dns_rr(msg, offset, length, rslv->dns_hdr.arcount)) < 0) … … 714 685 715 686 /* 716 * dns_lookup_host_sub -- DNS ã«ãããã¹ãã®æ 717 å ±ãåå¾ããï¼è£å©é¢æ°ï¼ã 687 * dns_lookup_host_sub -- DNS によりホストの情報を取得する(補助関数)。 718 688 */ 719 689 … … 832 802 833 803 /* 834 * udp64_dns -- DNS/IPv6 ãDNS/IPv4 ã«ãã DNS ãµã¼ãããã¡ãã»ã¼ã¸ãåä¿¡ããã804 * udp64_dns -- DNS/IPv6、DNS/IPv4 により DNS サーバからメッセージを受信する。 835 805 */ 836 806 … … 843 813 uint16_t proto; 844 814 845 /* DNS ã¡ãã»ã¼ã¸ãä½æããã*/815 /* DNS メッセージを作成する。*/ 846 816 if ((length = setup_dns_msg(flags, hostname, msg, msg_size)) < 0) 847 817 return length; 848 818 849 /* UDP/IPv6 ã® DNS ãµã¼ãã«ç 850 §ä¼ããã*/ 819 /* UDP/IPv6 の DNS サーバに照会する。*/ 851 820 proto = DNS_LUP_FLAGS_PROTO_IPV6; 852 821 if ((length = udp6_dns(flags, &in6_addr_dns, msg, msg_size, length)) < 0) { 853 /* UDP/IPv6 ã® DNS ãµã¼ãã¸ã®ç 854 §ä¼ãã¨ã©ã¼ã«ãªã£ãæã¯ãUDP/IPv4 ã® DNS ãµã¼ãã«ç 855 §ä¼ããã*/ 822 /* UDP/IPv6 の DNS サーバへの照会がエラーになった時は、UDP/IPv4 の DNS サーバに照会する。*/ 856 823 if ((length = setup_dns_msg(flags, hostname, msg, msg_size)) < 0) 857 824 return length; 858 825 859 /* UDP/IPv4 ã® DNS ãµã¼ãã«ç 860 §ä¼ããã*/ 826 /* UDP/IPv4 の DNS サーバに照会する。*/ 861 827 proto = DNS_LUP_FLAGS_PROTO_IPV4; 862 828 if ((length = udp4_dns(flags, &in4_addr_dns, msg, msg_size, length)) < 0) … … 864 830 } 865 831 866 /* DNS ã¡ãã»ã¼ã¸ã解æããã*/832 /* DNS メッセージを解析する。*/ 867 833 if ((error = analyze_dns_msg(msg, length, rslv)) != E_OK) 868 834 return error; … … 889 855 890 856 /* 891 * dns_lookup_host -- DNS ã«ãããã¹ãã®æ 892 å ±ãåå¾ããã 857 * dns_lookup_host -- DNS によりホストの情報を取得する。 893 858 */ 894 859 … … 904 869 905 870 /* 906 * IPv6/IPv4 ã®ä¸¡æ¹ãæå®ãããæã®å¦ç 907 * ã¾ã type == AAAA 㧠DNS ãµã¼ãã«ç 908 §ä¼ããã 871 * IPv6/IPv4 の両方が指定された時の処理 872 * まず type == AAAA で DNS サーバに照会する。 909 873 */ 910 874 if (flags & DNS_LUP_FLAGS_QTYPE_PTR) { … … 924 888 925 889 /* 926 * type == AAAA ã§ã¢ãã¬ã¹è§£æ±ºãã§ããªãã£ãæã®å¦ç 927 * type == A 㧠DNS ãµã¼ãã«ç 928 §ä¼ããã 890 * type == AAAA でアドレス解決ができなかった時の処理 891 * type == A で DNS サーバに照会する。 929 892 */ 930 893 if (flags & DNS_LUP_FLAGS_QTYPE_A) … … 942 905 943 906 /* 944 * type == AAAA 㨠A ã®ä¸¡æ¹ãæå®ãããæã®å¦ç 945 * ã¾ã type == AAAA 㧠DNS ãµã¼ãã«ç 946 §ä¼ããã 907 * type == AAAA と A の両方が指定された時の処理 908 * まず type == AAAA で DNS サーバに照会する。 947 909 */ 948 910 if ((error = dns_lookup_host_sub(flags & ~DNS_LUP_FLAGS_QTYPE_A, hostname, msg, msg_size, rslv)) < 0) … … 952 914 953 915 /* 954 * type == AAAA ã§ã¢ãã¬ã¹è§£æ±ºãã§ããªãã£ãæã®å¦ç 955 * type == A 㧠DNS ãµã¼ãã«ç 956 §ä¼ããã 916 * type == AAAA でアドレス解決ができなかった時の処理 917 * type == A で DNS サーバに照会する。 957 918 */ 958 919 return dns_lookup_host_sub(flags & ~DNS_LUP_FLAGS_QTYPE_AAAA, hostname, msg, msg_size, rslv); … … 967 928 968 929 else { 969 /* IPv6/IPv4 ã®ã©ã¡ããä¸æ¹ãæå®ãããæã®å¦ç*/930 /* IPv6/IPv4 のどちらか一方が指定された時の処理 */ 970 931 error = dns_lookup_host_sub(flags, hostname, msg, msg_size, rslv); 971 932 } … … 983 944 984 945 /* 985 * dns_in6_set_dname -- DNS ã® ãã¡ã¤ã³åãè¨å®ããï¼DHCPv6ç¨ï¼ã946 * dns_in6_set_dname -- DNS の ドメイン名を設定する(DHCPv6用)。 986 947 * 987 * 注æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã948 * 注意: new に NULL を指定すると、初期値に戻す。 988 949 */ 989 950 … … 1018 979 1019 980 /* 1020 * dns_in6_get_dname -- DNS ã® ãã¡ã¤ã³åãå¾ãã981 * dns_in6_get_dname -- DNS の ドメイン名を得る。 1021 982 */ 1022 983 … … 1028 989 1029 990 /* 1030 * dns_in6_set_addr -- DNS ãµã¼ãã® IPv6 ã¢ãã¬ã¹ãè¨å®ããï¼DHCPv6ç¨ï¼ã991 * dns_in6_set_addr -- DNS サーバの IPv6 アドレスを設定する(DHCPv6用)。 1031 992 * 1032 * 注æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã993 * 注意: new に NULL を指定すると、初期値に戻す。 1033 994 */ 1034 995 … … 1044 1005 1045 1006 /* 1046 * dns_in6_get_addr -- DNS ãµã¼ãã® IPv6 ã¢ãã¬ã¹ãå¾ãã1007 * dns_in6_get_addr -- DNS サーバの IPv6 アドレスを得る。 1047 1008 */ 1048 1009 … … 1063 1024 1064 1025 /* 1065 * dns_in4_set_dname -- DNS ã® ãã¡ã¤ã³åãè¨å®ããï¼DHCPv4ç¨ï¼ã1026 * dns_in4_set_dname -- DNS の ドメイン名を設定する(DHCPv4用)。 1066 1027 * 1067 * 注æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã1028 * 注意: new に NULL を指定すると、初期値に戻す。 1068 1029 */ 1069 1030 … … 1086 1047 1087 1048 /* 1088 * dns_in4_get_dname -- DNS ã® ãã¡ã¤ã³åãå¾ãã1049 * dns_in4_get_dname -- DNS の ドメイン名を得る。 1089 1050 */ 1090 1051 … … 1096 1057 1097 1058 /* 1098 * dns_in4_set_addr -- DNS ãµã¼ãã® IPv4 ã¢ãã¬ã¹ãè¨å®ããï¼DHCPv4ç¨ï¼ã1059 * dns_in4_set_addr -- DNS サーバの IPv4 アドレスを設定する(DHCPv4用)。 1099 1060 * 1100 * 注æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã1061 * 注意: new に NULL を指定すると、初期値に戻す。 1101 1062 */ 1102 1063 … … 1112 1073 1113 1074 /* 1114 * dns_in4_get_addr -- DNS ãµã¼ãã® IPv4 ã¢ãã¬ã¹ãå¾ãã1075 * dns_in4_get_addr -- DNS サーバの IPv4 アドレスを得る。 1115 1076 */ 1116 1077 … … 1129 1090 1130 1091 /* 1131 * dns_host_addr -- ãã¹ãåã IP ã¢ãã¬ã¹ã«å¤æããã1092 * dns_host_addr -- ホスト名を IP アドレスに変換する。 1132 1093 */ 1133 1094
Note:
See TracChangeset
for help on using the changeset viewer.