Public bug reported:
The command "adsysctl" fails due to python's struct.unpack dont handle
zero padding for GUIDs.
In AD domain registry this key:
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group
Policy
Has data like this:
{AAAAAAAA-BBBB-4EA4-8761-0CCCCCCCCCCC}
(A version 4 GUID Variant 8, with last part starting with value "0C")
Running "adsysctl update -a" fails on above key/data with:
gensec_update_done: spnego[0x17c799f0]: NT_STATUS_OK
tevent_req[0x17cc10f0/auth/gensec/spnego.c:1631]: state[2] error[0 (0x0)]
state[struct gensec_spnego_update_state (0x17cc12d0)] timer[(nil)]
finish[auth/gensec/spnego.c:2116]
Traceback (most recent call last):
File "<string>", line 142, in <module>
File "<string>", line 89, in main
File "<string>", line 20, in enroll
File "/usr/share/adsys/python/vendor_samba/gp/gp_cert_auto_enroll_ext.py",
line 517, in __enroll
ca_names.extend(self.__read_cep_data(guid, ldb,
TypeError: 'NoneType' object is not iterable
In "gp_cert_auto_enroll_ext.py" "0CCCCCCCCCCC" is unpacked as "CCCCCCCCCCC" -
as python won't pad begining/end of structs:
"Padding is only automatically added between successive structure
members. **No padding is added at the beginning or the end of the
encoded struct.**"
From:
https://docs.python.org/3/library/struct.html#byte-order-size-and-alignment
One solution is to zfill(length) to ensure prepended zeros:
"Return a copy of the string left filled with ASCII '0' digits to make a
string of length width"
From:
https://docs.python.org/3/library/stdtypes.html#str.zfill
Diff:
diff -Naur /usr/share/adsys/python/vendor_samba/gp/gp_cert_auto_enroll_ext.py
/tmp/gp_cert_auto_enroll_ext.py
--- /usr/share/adsys/python/vendor_samba/gp/gp_cert_auto_enroll_ext.py
2024-03-21 11:27:01.000000000 +0100
+++ /tmp/gp_cert_auto_enroll_ext.py 2025-03-03 22:49:14.673889413 +0100
@@ -54,11 +54,11 @@
def octet_string_to_objectGUID(data):
"""Convert an octet string to an objectGUID."""
- return '%s-%s-%s-%s-%s' % ('%02x' % struct.unpack('<L', data[0:4])[0],
- '%02x' % struct.unpack('<H', data[4:6])[0],
- '%02x' % struct.unpack('<H', data[6:8])[0],
- '%02x' % struct.unpack('>H', data[8:10])[0],
- '%02x%02x' % struct.unpack('>HL', data[10:]))
+ return '%s-%s-%s-%s-%s' % (('%02x' % struct.unpack('<L',
data[0:4])[0]).zfill(8),
+ ('%02x' % struct.unpack('<H',
data[4:6])[0]).zfill(4),
+ ('%02x' % struct.unpack('<H',
data[6:8])[0]).zfill(4),
+ ('%02x' % struct.unpack('>H',
data[8:10])[0]).zfill(4),
+ ('%02x%02x' % struct.unpack('>HL',
data[10:])).zfill(12))
def group_and_sort_end_point_information(end_point_information):
** Affects: adsys (Ubuntu)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to adsys in Ubuntu.
https://bugs.launchpad.net/bugs/2100868
Title:
adsys has problem unpacking GUIDs with initial 0
Status in adsys package in Ubuntu:
New
Bug description:
The command "adsysctl" fails due to python's struct.unpack dont handle
zero padding for GUIDs.
In AD domain registry this key:
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group
Policy
Has data like this:
{AAAAAAAA-BBBB-4EA4-8761-0CCCCCCCCCCC}
(A version 4 GUID Variant 8, with last part starting with value "0C")
Running "adsysctl update -a" fails on above key/data with:
gensec_update_done: spnego[0x17c799f0]: NT_STATUS_OK
tevent_req[0x17cc10f0/auth/gensec/spnego.c:1631]: state[2] error[0 (0x0)]
state[struct gensec_spnego_update_state (0x17cc12d0)] timer[(nil)]
finish[auth/gensec/spnego.c:2116]
Traceback (most recent call last):
File "<string>", line 142, in <module>
File "<string>", line 89, in main
File "<string>", line 20, in enroll
File "/usr/share/adsys/python/vendor_samba/gp/gp_cert_auto_enroll_ext.py",
line 517, in __enroll
ca_names.extend(self.__read_cep_data(guid, ldb,
TypeError: 'NoneType' object is not iterable
In "gp_cert_auto_enroll_ext.py" "0CCCCCCCCCCC" is unpacked as "CCCCCCCCCCC" -
as python won't pad begining/end of structs:
"Padding is only automatically added between successive structure
members. **No padding is added at the beginning or the end of the
encoded struct.**"
From:
https://docs.python.org/3/library/struct.html#byte-order-size-and-alignment
One solution is to zfill(length) to ensure prepended zeros:
"Return a copy of the string left filled with ASCII '0' digits to make a
string of length width"
From:
https://docs.python.org/3/library/stdtypes.html#str.zfill
Diff:
diff -Naur /usr/share/adsys/python/vendor_samba/gp/gp_cert_auto_enroll_ext.py
/tmp/gp_cert_auto_enroll_ext.py
--- /usr/share/adsys/python/vendor_samba/gp/gp_cert_auto_enroll_ext.py
2024-03-21 11:27:01.000000000 +0100
+++ /tmp/gp_cert_auto_enroll_ext.py 2025-03-03 22:49:14.673889413 +0100
@@ -54,11 +54,11 @@
def octet_string_to_objectGUID(data):
"""Convert an octet string to an objectGUID."""
- return '%s-%s-%s-%s-%s' % ('%02x' % struct.unpack('<L', data[0:4])[0],
- '%02x' % struct.unpack('<H', data[4:6])[0],
- '%02x' % struct.unpack('<H', data[6:8])[0],
- '%02x' % struct.unpack('>H', data[8:10])[0],
- '%02x%02x' % struct.unpack('>HL', data[10:]))
+ return '%s-%s-%s-%s-%s' % (('%02x' % struct.unpack('<L',
data[0:4])[0]).zfill(8),
+ ('%02x' % struct.unpack('<H',
data[4:6])[0]).zfill(4),
+ ('%02x' % struct.unpack('<H',
data[6:8])[0]).zfill(4),
+ ('%02x' % struct.unpack('>H',
data[8:10])[0]).zfill(4),
+ ('%02x%02x' % struct.unpack('>HL',
data[10:])).zfill(12))
def group_and_sort_end_point_information(end_point_information):
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/adsys/+bug/2100868/+subscriptions
--
Mailing list: https://launchpad.net/~desktop-packages
Post to : [email protected]
Unsubscribe : https://launchpad.net/~desktop-packages
More help : https://help.launchpad.net/ListHelp