Author: vlendec
Date: 2005-08-07 21:23:38 +0000 (Sun, 07 Aug 2005)
New Revision: 9200

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9200

Log:
Add support for REG_BINARY to rpcclient getdata and setprinterdata.

Volker

Modified:
   branches/SAMBA_3_0/source/rpcclient/cmd_spoolss.c
   trunk/source/rpcclient/cmd_spoolss.c


Changeset:
Modified: branches/SAMBA_3_0/source/rpcclient/cmd_spoolss.c
===================================================================
--- branches/SAMBA_3_0/source/rpcclient/cmd_spoolss.c   2005-08-07 21:10:32 UTC 
(rev 9199)
+++ branches/SAMBA_3_0/source/rpcclient/cmd_spoolss.c   2005-08-07 21:23:38 UTC 
(rev 9200)
@@ -690,10 +690,24 @@
                            STR_TERMINATE);
                printf("%s: REG_SZ: %s\n", value.valuename, text);
                break;
-       case REG_BINARY:
-               printf("%s: REG_BINARY: unknown length value not displayed\n",
-                      value.valuename);
+       case REG_BINARY: {
+               char *hex = hex_encode(NULL, value.data_p, value.size);
+               size_t i, len;
+               printf("%s: REG_BINARY:", value.valuename);
+               len = strlen(hex);
+               for (i=0; i<len; i++) {
+                       if (hex[i] == '\0') {
+                               break;
+                       }
+                       if (i%40 == 0) {
+                               putchar('\n');
+                       }
+                       putchar(hex[i]);
+               }
+               talloc_free(hex);
+               putchar('\n');
                break;
+       }
        case REG_MULTI_SZ: {
                uint16 *curstr = (uint16 *) value.data_p;
                uint8 *start = value.data_p;
@@ -1955,7 +1969,7 @@
 
        /* parse the command arguements */
        if (argc < 5) {
-               printf ("Usage: %s <printer> <string|dword|multistring>"
+               printf ("Usage: %s <printer> <string|binary|dword|multistring>"
                        " <value> <data>\n",
                        argv[0]);
                return WERR_INVALID_PARAM;
@@ -1972,11 +1986,9 @@
                value.type = REG_SZ;
        }
 
-#if 0
        if (strequal(argv[2], "binary")) {
                value.type = REG_BINARY;
        }
-#endif
 
        if (strequal(argv[2], "dword")) {
                value.type = REG_DWORD;
@@ -2028,6 +2040,12 @@
                value.data_p = TALLOC_MEMDUP(mem_ctx, &data, sizeof(data));
                break;
        }
+       case REG_BINARY: {
+               DATA_BLOB data = strhex_to_data_blob(mem_ctx, argv[4]);
+               value.data_p = data.data;
+               value.size = data.length;
+               break;
+       }
        case REG_MULTI_SZ: {
                int i;
                size_t len = 0;

Modified: trunk/source/rpcclient/cmd_spoolss.c
===================================================================
--- trunk/source/rpcclient/cmd_spoolss.c        2005-08-07 21:10:32 UTC (rev 
9199)
+++ trunk/source/rpcclient/cmd_spoolss.c        2005-08-07 21:23:38 UTC (rev 
9200)
@@ -690,10 +690,24 @@
                            STR_TERMINATE);
                printf("%s: REG_SZ: %s\n", value.valuename, text);
                break;
-       case REG_BINARY:
-               printf("%s: REG_BINARY: unknown length value not displayed\n",
-                      value.valuename);
+       case REG_BINARY: {
+               char *hex = hex_encode(NULL, value.data_p, value.size);
+               size_t i, len;
+               printf("%s: REG_BINARY:", value.valuename);
+               len = strlen(hex);
+               for (i=0; i<len; i++) {
+                       if (hex[i] == '\0') {
+                               break;
+                       }
+                       if (i%40 == 0) {
+                               putchar('\n');
+                       }
+                       putchar(hex[i]);
+               }
+               talloc_free(hex);
+               putchar('\n');
                break;
+       }
        case REG_MULTI_SZ: {
                uint16 *curstr = (uint16 *) value.data_p;
                uint8 *start = value.data_p;
@@ -1955,7 +1969,7 @@
 
        /* parse the command arguements */
        if (argc < 5) {
-               printf ("Usage: %s <printer> <string|dword|multistring>"
+               printf ("Usage: %s <printer> <string|binary|dword|multistring>"
                        " <value> <data>\n",
                        argv[0]);
                return WERR_INVALID_PARAM;
@@ -1972,11 +1986,9 @@
                value.type = REG_SZ;
        }
 
-#if 0
        if (strequal(argv[2], "binary")) {
                value.type = REG_BINARY;
        }
-#endif
 
        if (strequal(argv[2], "dword")) {
                value.type = REG_DWORD;
@@ -2028,6 +2040,12 @@
                value.data_p = TALLOC_MEMDUP(mem_ctx, &data, sizeof(data));
                break;
        }
+       case REG_BINARY: {
+               DATA_BLOB data = strhex_to_data_blob(mem_ctx, argv[4]);
+               value.data_p = data.data;
+               value.size = data.length;
+               break;
+       }
        case REG_MULTI_SZ: {
                int i;
                size_t len = 0;

Reply via email to