mirror of
https://github.com/eblot/pybootd.git
synced 2024-09-11 22:17:44 +03:00
Fix a regression when no UUID is emitted.
This commit is contained in:
parent
8888451fcb
commit
3561be6722
@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2019 Emmanuel Blot <emmanuel.blot@free.fr>
|
# Copyright (c) 2010-2020 Emmanuel Blot <emmanuel.blot@free.fr>
|
||||||
# Copyright (c) 2010-2011 Neotion
|
# Copyright (c) 2010-2011 Neotion
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
@ -25,6 +25,7 @@
|
|||||||
#pylint: disable-msg=too-many-nested-blocks
|
#pylint: disable-msg=too-many-nested-blocks
|
||||||
#pylint: disable-msg=too-many-instance-attributes
|
#pylint: disable-msg=too-many-instance-attributes
|
||||||
#pylint: disable-msg=no-name-in-module
|
#pylint: disable-msg=no-name-in-module
|
||||||
|
#pylint: disable-msg=no-self-use
|
||||||
|
|
||||||
|
|
||||||
from binascii import hexlify
|
from binascii import hexlify
|
||||||
@ -149,6 +150,8 @@ DHCP_OPTIONS = {0: 'Byte padding',
|
|||||||
93: 'System architecture',
|
93: 'System architecture',
|
||||||
94: 'Network type',
|
94: 'Network type',
|
||||||
97: 'UUID',
|
97: 'UUID',
|
||||||
|
119: 'Domain search',
|
||||||
|
121: 'Classless static route',
|
||||||
128: 'DOCSIS full security server',
|
128: 'DOCSIS full security server',
|
||||||
# --- PXE vendor-specific (and other crap) ---
|
# --- PXE vendor-specific (and other crap) ---
|
||||||
129: 'PXE vendor-specific',
|
129: 'PXE vendor-specific',
|
||||||
@ -158,6 +161,9 @@ DHCP_OPTIONS = {0: 'Byte padding',
|
|||||||
133: 'PXE vendor-specific',
|
133: 'PXE vendor-specific',
|
||||||
134: 'PXE vendor-specific',
|
134: 'PXE vendor-specific',
|
||||||
135: 'PXE vendor-specific',
|
135: 'PXE vendor-specific',
|
||||||
|
# ---
|
||||||
|
249: 'Private/Classless static route',
|
||||||
|
252: 'Private/Proxy autodiscovery',
|
||||||
255: 'End of DHCP options'}
|
255: 'End of DHCP options'}
|
||||||
|
|
||||||
DHCP_DISCOVER = 1
|
DHCP_DISCOVER = 1
|
||||||
@ -392,8 +398,8 @@ class BootpServer:
|
|||||||
try:
|
try:
|
||||||
if 97 in client_params:
|
if 97 in client_params:
|
||||||
uuid = options[97]
|
uuid = options[97]
|
||||||
buf += spack('!BB%ds' % len(uuid),
|
buf += spack('!BB%ds' % len(uuid),
|
||||||
97, len(uuid), uuid)
|
97, len(uuid), uuid)
|
||||||
if 13 in client_params:
|
if 13 in client_params:
|
||||||
path = self.config.get(TftpServer.TFTP_SECTION, 'root', '')
|
path = self.config.get(TftpServer.TFTP_SECTION, 'root', '')
|
||||||
pathname = realpath(joinpath(path,
|
pathname = realpath(joinpath(path,
|
||||||
@ -444,7 +450,9 @@ class BootpServer:
|
|||||||
12, len(clientname), clientname)
|
12, len(clientname), clientname)
|
||||||
|
|
||||||
def handle(self, sock, addr, data):
|
def handle(self, sock, addr, data):
|
||||||
self.log.info('Sender: %s on socket %s' % (addr, sock.getsockname()))
|
sockname = sock.getsockname()
|
||||||
|
self.log.debug('Sender %s:%d on socket %s:%d',
|
||||||
|
addr[0], addr[1], sockname[0], sockname[1])
|
||||||
if len(data) < DHCPFORMATSIZE:
|
if len(data) < DHCPFORMATSIZE:
|
||||||
self.log.error('Cannot be a DHCP or BOOTP request - too small!')
|
self.log.error('Cannot be a DHCP or BOOTP request - too small!')
|
||||||
tail = data[DHCPFORMATSIZE:]
|
tail = data[DHCPFORMATSIZE:]
|
||||||
@ -470,12 +478,12 @@ class BootpServer:
|
|||||||
if 97 in options and len(options[97]) == 17:
|
if 97 in options and len(options[97]) == 17:
|
||||||
uuid = options[97][1:]
|
uuid = options[97][1:]
|
||||||
pxe = True
|
pxe = True
|
||||||
self.log.info('PXE UUID has been received')
|
self.log.debug('PXE UUID has been received')
|
||||||
# or retrieved from the cache (DHCP mode)
|
# or retrieved from the cache (DHCP mode)
|
||||||
else:
|
else:
|
||||||
uuid = self.uuidpool.get(mac_addr, None)
|
uuid = self.uuidpool.get(mac_addr, None)
|
||||||
pxe = False
|
pxe = False
|
||||||
self.log.info('PXE UUID not present in request')
|
self.log.debug('PXE UUID not present in request')
|
||||||
uuid_str = (':'.join(hexlify(x).decode() for x in
|
uuid_str = (':'.join(hexlify(x).decode() for x in
|
||||||
(uuid[0:4], uuid[4:6], uuid[6:8], uuid[8:10],
|
(uuid[0:4], uuid[4:6], uuid[6:8], uuid[8:10],
|
||||||
uuid[10:16]))).upper() if uuid else None
|
uuid[10:16]))).upper() if uuid else None
|
||||||
|
Loading…
Reference in New Issue
Block a user