diff options
-rw-r--r-- | NEWS | 9 | ||||
-rw-r--r-- | dnsresolv.inc | 36 | ||||
-rw-r--r-- | pxelinux.doc | 5 | ||||
-rw-r--r-- | tracers.inc | 2 |
4 files changed, 30 insertions, 22 deletions
@@ -27,10 +27,11 @@ Changes in 3.00: * New simple menu system, as an alternative to the advanced menu system already present. See README.menu for details. * PXELINUX: Filenames can now be prefixed with an IP address - plus :: (e.g. 192.0.2.1::filename), which downloads a file - from an alternate TFTP server, or just a :: - (e.g. ::filename), which suppresses the common pathname - prefix. See pxelinux.doc. + or *fully qualified* DNS name plus :: + (e.g. 192.0.2.1::filename or server.domain.com::filename), + which downloads a file from an alternate TFTP server, or + just a :: (e.g. ::filename), which suppresses the common + pathname prefix. See pxelinux.doc. * SYSLINUX: Add an -m option to the Win32 installer (only!) to write an MBR and -a to mark the partition SYSLINUX is being installed on active. This will hopefully be added diff --git a/dnsresolv.inc b/dnsresolv.inc index 47573b91..4364c449 100644 --- a/dnsresolv.inc +++ b/dnsresolv.inc @@ -73,6 +73,7 @@ dns_mangle: ; dns_compare: pusha +%if 0 .label: lodsb @@ -94,9 +95,12 @@ dns_compare: ; We have a string of bytes that need to match now repe cmpsb - jz .label + je .label .done: +%else + xor ax,ax +%endif popa ret @@ -179,7 +183,6 @@ LastDNSServer dw DNSServers section .text dns_resolv: - push si push di push cx push dx @@ -201,6 +204,9 @@ dns_resolv: stosw call dns_mangle ; Convert name to DNS labels + + push si ; Save pointer to after DNS string + mov ax,htons(1) stosw ; QTYPE = 1 = A stosw ; QCLASS = 1 = IN @@ -215,9 +221,9 @@ dns_resolv: mov dx,PKT_TIMEOUT mov cx,PKT_RETRY .backoff: - mov di,DNSServers + mov si,DNSServers .servers: - cmp di,[LastDNSServer] + cmp si,[LastDNSServer] jb .moreservers .nomoreservers: @@ -226,19 +232,18 @@ dns_resolv: xor eax,eax ; Nothing... .done: + pop si pop dx pop cx pop di - pop si ret .moreservers: - push di + lodsd ; EAX <- next server + push si push cx push dx - mov eax,[di] - mov word [pxe_udp_write_pkt_dns.status],0 mov [pxe_udp_write_pkt_dns.sip],eax @@ -271,6 +276,8 @@ dns_resolv: call pxenv and ax,ax jnz .waitrecv + cmp [pxe_udp_read_pkt_dns.status],ax + jnz .waitrecv ; Got a packet, deal with it... mov si,DNSRecvBuf @@ -307,13 +314,11 @@ dns_resolv: call dns_compare pushf call dns_skiplabel - mov ax,[si+8] ; RDLENGHT + mov ax,[si+8] ; RDLENGTH xchg ah,al ; ntohs popf jnz .notsame - cmp word [si],htons(1) ; TYPE = A? - jne .notsame - cmp word [si+2],htons(1) ; CLASS = IN? + cmp dword [si],htons(1)*0x10001 ; TYPE = A, CLASS = IN? jne .notsame cmp ax,4 ; RDLENGTH = 4? jne .notsame @@ -326,8 +331,8 @@ dns_resolv: jmp .done .notsame: - add di,10 - add di,ax + add si,10 + add si,ax loop .parseanswer .badness: @@ -350,6 +355,5 @@ dns_resolv: .timeout: pop dx pop cx - pop di - add di,4 + pop si jmp .servers diff --git a/pxelinux.doc b/pxelinux.doc index 2fe2c2aa..d76e3f3e 100644 --- a/pxelinux.doc +++ b/pxelinux.doc @@ -320,7 +320,10 @@ PXELINUX supports the following special pathname conventions: IP address::filename (e.g. 192.0.2.1::filename) Suppresses the common filename prefix, *and* sends a request - to an alternate TFTP server. + to an alternate TFTP server. Instead of an IP address, a + *fully qualified* DNS name can be used, + e.g. "bootserver.domain.com::filename" should work, but + "bootserver::filename" typically will not. :: was chosen because it is unlikely to conflict with operating system usage. However, if you happen to have an environment for which the diff --git a/tracers.inc b/tracers.inc index b158e09a..c67d8a00 100644 --- a/tracers.inc +++ b/tracers.inc @@ -21,7 +21,7 @@ %define _TRACERS_INC ; Note: The Makefile builds one version with DEBUG_MESSAGES automatically. -; %define DEBUG_TRACERS ; Uncomment to get debugging tracers +%define DEBUG_TRACERS 1 ; Uncomment to get debugging tracers ; %define DEBUG_MESSAGES ; Uncomment to get debugging messages %ifdef DEBUG_TRACERS |