s3-rpcclient: Fix enumdata spoolss display of REG_DWORD
authorGünther Deschner <gd@samba.org>
Wed, 3 May 2017 09:31:20 +0000 (11:31 +0200)
committerJeremy Allison <jra@samba.org>
Sun, 7 May 2017 01:28:21 +0000 (03:28 +0200)
One should not assume a REG_DWORD is always 4 byte long.

In an enumdata(ex) context, the first reply will return with content
in a buffer that can fill the largest entry in the array of attributes.
All subsequent queries then reuse this buffer even if the key/value
pair in question then is just a 4 byte DWORD. The remaining buffer
will be just empty and of no interest.

Signed-off-by: Guenther Deschner <gd@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Sun May  7 03:28:21 CEST 2017 on sn-devel-144

source3/rpcclient/cmd_spoolss.c

index 00dc2e0e817cfadb43db8b7c6a9b237dc0455f44..34cbb7e0cdb552de2f0f8122250f72da36a5c394 100644 (file)
@@ -770,7 +770,7 @@ static void display_reg_value(const char *name, enum winreg_Type type, DATA_BLOB
 
        switch(type) {
        case REG_DWORD:
-               if (blob.length == sizeof(uint32_t)) {
+               if (blob.length >= sizeof(uint32_t)) {
                        printf("%s: REG_DWORD: 0x%08x\n", name, IVAL(blob.data,0));
                } else {
                        printf("%s: REG_DWORD: <invalid>\n", name);