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 Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2100868

Title:
  adsys has problem unpacking GUIDs with initial 0

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/adsys/+bug/2100868/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to