s3-rpcclient: decode OsVersion{Ex} binary blobs when displaying printerdata.
authorGünther Deschner <gd@samba.org>
Tue, 22 Jan 2013 14:57:22 +0000 (15:57 +0100)
committerAndreas Schneider <asn@samba.org>
Thu, 24 Jan 2013 16:42:26 +0000 (17:42 +0100)
Guenther

Signed-off-by: Günther Deschner <gd@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/rpcclient/cmd_spoolss.c

index ced224b4d73b0ffb81a9427be5353e9d67618f6d..35fbb9b8af91a457f2c9518aab1a59a2377a9be6 100644 (file)
@@ -25,6 +25,7 @@
 #include "includes.h"
 #include "rpcclient.h"
 #include "../librpc/gen_ndr/ndr_spoolss_c.h"
+#include "../librpc/gen_ndr/ndr_spoolss.h"
 #include "rpc_client/cli_spoolss.h"
 #include "rpc_client/init_spoolss.h"
 #include "nt_printing.h"
@@ -831,6 +832,7 @@ static void display_printer_data(const char *v,
        union spoolss_PrinterData r;
        DATA_BLOB blob = data_blob_const(data, length);
        WERROR result;
+       enum ndr_err_code ndr_err;
 
        result = pull_spoolss_PrinterData(talloc_tos(), &blob, &r, type);
        if (!W_ERROR_IS_OK(result)) {
@@ -861,6 +863,25 @@ static void display_printer_data(const char *v,
                }
                TALLOC_FREE(hex);
                putchar('\n');
+
+               if (strequal(v, "OsVersion")) {
+                       struct spoolss_OSVersion os;
+                       ndr_err = ndr_pull_struct_blob(&blob, talloc_tos(), &os,
+                               (ndr_pull_flags_fn_t)ndr_pull_spoolss_OSVersion);
+                       if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+                               printf("%s: OsVersion:\n", v);
+                               NDR_PRINT_DEBUG(spoolss_OSVersion, &os);
+                       }
+               }
+               if (strequal(v, "OsVersionEx")) {
+                       struct spoolss_OSVersionEx os;
+                       ndr_err = ndr_pull_struct_blob(&blob, talloc_tos(), &os,
+                               (ndr_pull_flags_fn_t)ndr_pull_spoolss_OSVersionEx);
+                       if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+                               printf("%s: OsVersionEx:\n", v);
+                               NDR_PRINT_DEBUG(spoolss_OSVersionEx, &os);
+                       }
+               }
                break;
        }
        case REG_MULTI_SZ: