aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS9
-rw-r--r--dnsresolv.inc36
-rw-r--r--pxelinux.doc5
-rw-r--r--tracers.inc2
4 files changed, 30 insertions, 22 deletions
diff --git a/NEWS b/NEWS
index d5bd2705..20bf6b30 100644
--- a/NEWS
+++ b/NEWS
@@ -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