re-run make samba3-idl.
authorGünther Deschner <gd@samba.org>
Thu, 12 Feb 2009 17:04:06 +0000 (18:04 +0100)
committerGünther Deschner <gd@samba.org>
Thu, 12 Feb 2009 17:04:06 +0000 (18:04 +0100)
Guenther

librpc/gen_ndr/cli_spoolss.c
librpc/gen_ndr/cli_spoolss.h
librpc/gen_ndr/ndr_spoolss.c
librpc/gen_ndr/ndr_spoolss.h
librpc/gen_ndr/spoolss.h
librpc/gen_ndr/srv_spoolss.c

index 2f15cb30bb8bcb9b1b82388f935b91340a75eb2e..6225d2dba5976f07df5656da8d359a33ea23fe2a 100644 (file)
@@ -3314,6 +3314,7 @@ NTSTATUS rpccli_spoolss_AddPrinterEx(struct rpc_pipe_client *cli,
                                     struct security_descriptor *secdesc /* [in] [unique] */,
                                     uint32_t ulevel /* [in]  */,
                                     union spoolss_UserLevel userlevel /* [in] [switch_is(ulevel)] */,
+                                    struct policy_handle *handle /* [out] [ref] */,
                                     WERROR *werror)
 {
        struct spoolss_AddPrinterEx r;
@@ -3351,6 +3352,7 @@ NTSTATUS rpccli_spoolss_AddPrinterEx(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
+       *handle = *r.out.handle;
 
        /* Return result */
        if (werror) {
index 6903aa69097cd98f574ba6190fa6da4a1739c65f..34c50a0891d504166e8a8ca897e1d2ec92044e6c 100644 (file)
@@ -420,6 +420,7 @@ NTSTATUS rpccli_spoolss_AddPrinterEx(struct rpc_pipe_client *cli,
                                     struct security_descriptor *secdesc /* [in] [unique] */,
                                     uint32_t ulevel /* [in]  */,
                                     union spoolss_UserLevel userlevel /* [in] [switch_is(ulevel)] */,
+                                    struct policy_handle *handle /* [out] [ref] */,
                                     WERROR *werror);
 NTSTATUS rpccli_spoolss_47(struct rpc_pipe_client *cli,
                           TALLOC_CTX *mem_ctx,
index 5525ad45864b1bb4866a0efa007d39815dd42d64..1bb419bc3a5ec5a89c2fc3efbdc2e9ef27d8aca2 100644 (file)
@@ -57,6 +57,65 @@ _PUBLIC_ void ndr_print_spoolss_Time(struct ndr_print *ndr, const char *name, co
        ndr->depth--;
 }
 
+static size_t ndr_size_spoolss_Time(const struct spoolss_Time *r, struct smb_iconv_convenience *ic, int flags)
+{
+       return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_spoolss_Time, ic);
+}
+
+static enum ndr_err_code ndr_push_spoolss_TimeCtr(struct ndr_push *ndr, int ndr_flags, const struct spoolss_TimeCtr *r)
+{
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_push_align(ndr, 4));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_spoolss_Time(r->time, ndr->iconv_convenience, ndr->flags)));
+               NDR_CHECK(ndr_push_unique_ptr(ndr, r->time));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               if (r->time) {
+                       NDR_CHECK(ndr_push_spoolss_Time(ndr, NDR_SCALARS, r->time));
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_TimeCtr(struct ndr_pull *ndr, int ndr_flags, struct spoolss_TimeCtr *r)
+{
+       uint32_t _ptr_time;
+       TALLOC_CTX *_mem_save_time_0;
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_pull_align(ndr, 4));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->size));
+               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_time));
+               if (_ptr_time) {
+                       NDR_PULL_ALLOC(ndr, r->time);
+               } else {
+                       r->time = NULL;
+               }
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               if (r->time) {
+                       _mem_save_time_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                       NDR_PULL_SET_MEM_CTX(ndr, r->time, 0);
+                       NDR_CHECK(ndr_pull_spoolss_Time(ndr, NDR_SCALARS, r->time));
+                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_time_0, 0);
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_TimeCtr(struct ndr_print *ndr, const char *name, const struct spoolss_TimeCtr *r)
+{
+       ndr_print_struct(ndr, name, "spoolss_TimeCtr");
+       ndr->depth++;
+       ndr_print_uint32(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_spoolss_Time(r->time, ndr->iconv_convenience, ndr->flags):r->size);
+       ndr_print_ptr(ndr, "time", r->time);
+       ndr->depth++;
+       if (r->time) {
+               ndr_print_spoolss_Time(ndr, "time", r->time);
+       }
+       ndr->depth--;
+       ndr->depth--;
+}
+
 static enum ndr_err_code ndr_push_spoolss_PrinterInfo0(struct ndr_push *ndr, int ndr_flags, const struct spoolss_PrinterInfo0 *r)
 {
        if (ndr_flags & NDR_SCALARS) {
@@ -10023,7 +10082,7 @@ static enum ndr_err_code ndr_push_spoolss_NotifyOptionsContainer(struct ndr_push
        uint32_t cntr_options_1;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->options));
@@ -10089,7 +10148,7 @@ _PUBLIC_ void ndr_print_spoolss_NotifyOptionsContainer(struct ndr_print *ndr, co
        uint32_t cntr_options_1;
        ndr_print_struct(ndr, name, "spoolss_NotifyOptionsContainer");
        ndr->depth++;
-       ndr_print_uint32(ndr, "version", r->version);
+       ndr_print_uint32(ndr, "version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?2:r->version);
        ndr_print_uint32(ndr, "flags", r->flags);
        ndr_print_uint32(ndr, "count", r->count);
        ndr_print_ptr(ndr, "options", r->options);
@@ -10110,7 +10169,7 @@ _PUBLIC_ void ndr_print_spoolss_NotifyOptionsContainer(struct ndr_print *ndr, co
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_spoolss_NotifyUTF16String(struct ndr_push *ndr, int ndr_flags, const struct spoolss_NotifyUTF16String *r)
+static enum ndr_err_code ndr_push_spoolss_NotifyString(struct ndr_push *ndr, int ndr_flags, const struct spoolss_NotifyString *r)
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
@@ -10126,7 +10185,7 @@ static enum ndr_err_code ndr_push_spoolss_NotifyUTF16String(struct ndr_push *ndr
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_spoolss_NotifyUTF16String(struct ndr_pull *ndr, int ndr_flags, struct spoolss_NotifyUTF16String *r)
+static enum ndr_err_code ndr_pull_spoolss_NotifyString(struct ndr_pull *ndr, int ndr_flags, struct spoolss_NotifyString *r)
 {
        uint32_t _ptr_string;
        TALLOC_CTX *_mem_save_string_0;
@@ -10155,68 +10214,9 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyUTF16String(struct ndr_pull *ndr
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ void ndr_print_spoolss_NotifyUTF16String(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyUTF16String *r)
-{
-       ndr_print_struct(ndr, name, "spoolss_NotifyUTF16String");
-       ndr->depth++;
-       ndr_print_uint32(ndr, "size", r->size);
-       ndr_print_ptr(ndr, "string", r->string);
-       ndr->depth++;
-       if (r->string) {
-               ndr_print_string(ndr, "string", r->string);
-       }
-       ndr->depth--;
-       ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_spoolss_NotifyDOSString(struct ndr_push *ndr, int ndr_flags, const struct spoolss_NotifyDOSString *r)
-{
-       if (ndr_flags & NDR_SCALARS) {
-               NDR_CHECK(ndr_push_align(ndr, 4));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-               NDR_CHECK(ndr_push_unique_ptr(ndr, r->string));
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               if (r->string) {
-                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-                       NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->string, r->size, sizeof(uint8_t), CH_DOS));
-               }
-       }
-       return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_spoolss_NotifyDOSString(struct ndr_pull *ndr, int ndr_flags, struct spoolss_NotifyDOSString *r)
+_PUBLIC_ void ndr_print_spoolss_NotifyString(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyString *r)
 {
-       uint32_t _ptr_string;
-       TALLOC_CTX *_mem_save_string_0;
-       if (ndr_flags & NDR_SCALARS) {
-               NDR_CHECK(ndr_pull_align(ndr, 4));
-               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->size));
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_string));
-               if (_ptr_string) {
-                       NDR_PULL_ALLOC(ndr, r->string);
-               } else {
-                       r->string = NULL;
-               }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               if (r->string) {
-                       _mem_save_string_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->string, 0);
-                       NDR_CHECK(ndr_pull_array_size(ndr, &r->string));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->string, ndr_get_array_size(ndr, &r->string), sizeof(uint8_t), CH_DOS));
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_string_0, 0);
-               }
-               if (r->string) {
-                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->string, r->size));
-               }
-       }
-       return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_spoolss_NotifyDOSString(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyDOSString *r)
-{
-       ndr_print_struct(ndr, name, "spoolss_NotifyDOSString");
+       ndr_print_struct(ndr, name, "spoolss_NotifyString");
        ndr->depth++;
        ndr_print_uint32(ndr, "size", r->size);
        ndr_print_ptr(ndr, "string", r->string);
@@ -10228,104 +10228,32 @@ _PUBLIC_ void ndr_print_spoolss_NotifyDOSString(struct ndr_print *ndr, const cha
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_spoolss_NotifyBlobData(struct ndr_push *ndr, int ndr_flags, const struct spoolss_NotifyBlobData *r)
-{
-       uint32_t cntr_data_0;
-       if (ndr_flags & NDR_SCALARS) {
-               NDR_CHECK(ndr_push_align(ndr, 2));
-               for (cntr_data_0 = 0; cntr_data_0 < 8; cntr_data_0++) {
-                       NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->data[cntr_data_0]));
-               }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-       }
-       return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_spoolss_NotifyBlobData(struct ndr_pull *ndr, int ndr_flags, struct spoolss_NotifyBlobData *r)
+static enum ndr_err_code ndr_push_spoolss_NotifyTable(struct ndr_push *ndr, int ndr_flags, enum spoolss_NotifyTable r)
 {
-       uint32_t cntr_data_0;
-       if (ndr_flags & NDR_SCALARS) {
-               NDR_CHECK(ndr_pull_align(ndr, 2));
-               for (cntr_data_0 = 0; cntr_data_0 < 8; cntr_data_0++) {
-                       NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->data[cntr_data_0]));
-               }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-       }
+       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ void ndr_print_spoolss_NotifyBlobData(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyBlobData *r)
+static enum ndr_err_code ndr_pull_spoolss_NotifyTable(struct ndr_pull *ndr, int ndr_flags, enum spoolss_NotifyTable *r)
 {
-       uint32_t cntr_data_0;
-       ndr_print_struct(ndr, name, "spoolss_NotifyBlobData");
-       ndr->depth++;
-       ndr->print(ndr, "%s: ARRAY(%d)", "data", (int)8);
-       ndr->depth++;
-       for (cntr_data_0=0;cntr_data_0<8;cntr_data_0++) {
-               char *idx_0=NULL;
-               if (asprintf(&idx_0, "[%d]", cntr_data_0) != -1) {
-                       ndr_print_uint16(ndr, "data", r->data[cntr_data_0]);
-                       free(idx_0);
-               }
-       }
-       ndr->depth--;
-       ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_spoolss_NotifyBlob(struct ndr_push *ndr, int ndr_flags, const struct spoolss_NotifyBlob *r)
-{
-       if (ndr_flags & NDR_SCALARS) {
-               NDR_CHECK(ndr_push_align(ndr, 4));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->len));
-               NDR_CHECK(ndr_push_unique_ptr(ndr, r->data));
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               if (r->data) {
-                       NDR_CHECK(ndr_push_spoolss_NotifyBlobData(ndr, NDR_SCALARS, r->data));
-               }
-       }
+       uint32_t v;
+       NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
+       *r = v;
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_spoolss_NotifyBlob(struct ndr_pull *ndr, int ndr_flags, struct spoolss_NotifyBlob *r)
+_PUBLIC_ void ndr_print_spoolss_NotifyTable(struct ndr_print *ndr, const char *name, enum spoolss_NotifyTable r)
 {
-       uint32_t _ptr_data;
-       TALLOC_CTX *_mem_save_data_0;
-       if (ndr_flags & NDR_SCALARS) {
-               NDR_CHECK(ndr_pull_align(ndr, 4));
-               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->len));
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-               if (_ptr_data) {
-                       NDR_PULL_ALLOC(ndr, r->data);
-               } else {
-                       r->data = NULL;
-               }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               if (r->data) {
-                       _mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
-                       NDR_CHECK(ndr_pull_spoolss_NotifyBlobData(ndr, NDR_SCALARS, r->data));
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-               }
-       }
-       return NDR_ERR_SUCCESS;
-}
+       const char *val = NULL;
 
-_PUBLIC_ void ndr_print_spoolss_NotifyBlob(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyBlob *r)
-{
-       ndr_print_struct(ndr, name, "spoolss_NotifyBlob");
-       ndr->depth++;
-       ndr_print_uint32(ndr, "len", r->len);
-       ndr_print_ptr(ndr, "data", r->data);
-       ndr->depth++;
-       if (r->data) {
-               ndr_print_spoolss_NotifyBlobData(ndr, "data", r->data);
+       switch (r) {
+               case NOTIFY_TABLE_DWORD: val = "NOTIFY_TABLE_DWORD"; break;
+               case NOTIFY_TABLE_STRING: val = "NOTIFY_TABLE_STRING"; break;
+               case NOTIFY_TABLE_DEVMODE: val = "NOTIFY_TABLE_DEVMODE"; break;
+               case NOTIFY_TABLE_TIME: val = "NOTIFY_TABLE_TIME"; break;
+               case NOTIFY_TABLE_SECURITYDESCRIPTOR: val = "NOTIFY_TABLE_SECURITYDESCRIPTOR"; break;
        }
-       ndr->depth--;
-       ndr->depth--;
+       ndr_print_enum(ndr, name, "ENUM", val, r);
 }
 
 static enum ndr_err_code ndr_push_spoolss_NotifyData(struct ndr_push *ndr, int ndr_flags, const union spoolss_NotifyData *r)
@@ -10335,23 +10263,26 @@ static enum ndr_err_code ndr_push_spoolss_NotifyData(struct ndr_push *ndr, int n
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
                switch (level) {
                        case 1: {
-                               NDR_CHECK(ndr_push_dlong(ndr, NDR_SCALARS, r->integer));
+                               uint32_t cntr_integer_0;
+                               for (cntr_integer_0 = 0; cntr_integer_0 < 2; cntr_integer_0++) {
+                                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->integer[cntr_integer_0]));
+                               }
                        break; }
 
                        case 2: {
-                               NDR_CHECK(ndr_push_spoolss_NotifyUTF16String(ndr, NDR_SCALARS, &r->utf16_string));
+                               NDR_CHECK(ndr_push_spoolss_NotifyString(ndr, NDR_SCALARS, &r->string));
                        break; }
 
                        case 3: {
-                               NDR_CHECK(ndr_push_spoolss_NotifyDOSString(ndr, NDR_SCALARS, &r->ascii_string));
+                               NDR_CHECK(ndr_push_unique_ptr(ndr, r->devmode));
                        break; }
 
                        case 4: {
-                               NDR_CHECK(ndr_push_spoolss_NotifyBlob(ndr, NDR_SCALARS, &r->blob));
+                               NDR_CHECK(ndr_push_spoolss_TimeCtr(ndr, NDR_SCALARS, &r->time));
                        break; }
 
                        case 5: {
-                               NDR_CHECK(ndr_push_spoolss_NotifyDOSString(ndr, NDR_SCALARS, &r->ascii_string));
+                               NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sd));
                        break; }
 
                        default:
@@ -10365,19 +10296,21 @@ static enum ndr_err_code ndr_push_spoolss_NotifyData(struct ndr_push *ndr, int n
                        break;
 
                        case 2:
-                               NDR_CHECK(ndr_push_spoolss_NotifyUTF16String(ndr, NDR_BUFFERS, &r->utf16_string));
+                               NDR_CHECK(ndr_push_spoolss_NotifyString(ndr, NDR_BUFFERS, &r->string));
                        break;
 
                        case 3:
-                               NDR_CHECK(ndr_push_spoolss_NotifyDOSString(ndr, NDR_BUFFERS, &r->ascii_string));
+                               if (r->devmode) {
+                                       NDR_CHECK(ndr_push_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode));
+                               }
                        break;
 
                        case 4:
-                               NDR_CHECK(ndr_push_spoolss_NotifyBlob(ndr, NDR_BUFFERS, &r->blob));
+                               NDR_CHECK(ndr_push_spoolss_TimeCtr(ndr, NDR_BUFFERS, &r->time));
                        break;
 
                        case 5:
-                               NDR_CHECK(ndr_push_spoolss_NotifyDOSString(ndr, NDR_BUFFERS, &r->ascii_string));
+                               NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sd));
                        break;
 
                        default:
@@ -10391,6 +10324,7 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyData(struct ndr_pull *ndr, int n
 {
        int level;
        uint32_t _level;
+       TALLOC_CTX *_mem_save_devmode_0;
        level = ndr_pull_get_switch_value(ndr, r);
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
@@ -10399,23 +10333,32 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyData(struct ndr_pull *ndr, int n
                }
                switch (level) {
                        case 1: {
-                               NDR_CHECK(ndr_pull_dlong(ndr, NDR_SCALARS, &r->integer));
+                               uint32_t cntr_integer_0;
+                               for (cntr_integer_0 = 0; cntr_integer_0 < 2; cntr_integer_0++) {
+                                       NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->integer[cntr_integer_0]));
+                               }
                        break; }
 
                        case 2: {
-                               NDR_CHECK(ndr_pull_spoolss_NotifyUTF16String(ndr, NDR_SCALARS, &r->utf16_string));
+                               NDR_CHECK(ndr_pull_spoolss_NotifyString(ndr, NDR_SCALARS, &r->string));
                        break; }
 
                        case 3: {
-                               NDR_CHECK(ndr_pull_spoolss_NotifyDOSString(ndr, NDR_SCALARS, &r->ascii_string));
+                               uint32_t _ptr_devmode;
+                               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devmode));
+                               if (_ptr_devmode) {
+                                       NDR_PULL_ALLOC(ndr, r->devmode);
+                               } else {
+                                       r->devmode = NULL;
+                               }
                        break; }
 
                        case 4: {
-                               NDR_CHECK(ndr_pull_spoolss_NotifyBlob(ndr, NDR_SCALARS, &r->blob));
+                               NDR_CHECK(ndr_pull_spoolss_TimeCtr(ndr, NDR_SCALARS, &r->time));
                        break; }
 
                        case 5: {
-                               NDR_CHECK(ndr_pull_spoolss_NotifyDOSString(ndr, NDR_SCALARS, &r->ascii_string));
+                               NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sd));
                        break; }
 
                        default:
@@ -10428,19 +10371,24 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyData(struct ndr_pull *ndr, int n
                        break;
 
                        case 2:
-                               NDR_CHECK(ndr_pull_spoolss_NotifyUTF16String(ndr, NDR_BUFFERS, &r->utf16_string));
+                               NDR_CHECK(ndr_pull_spoolss_NotifyString(ndr, NDR_BUFFERS, &r->string));
                        break;
 
                        case 3:
-                               NDR_CHECK(ndr_pull_spoolss_NotifyDOSString(ndr, NDR_BUFFERS, &r->ascii_string));
+                               if (r->devmode) {
+                                       _mem_save_devmode_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                                       NDR_PULL_SET_MEM_CTX(ndr, r->devmode, 0);
+                                       NDR_CHECK(ndr_pull_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode));
+                                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0);
+                               }
                        break;
 
                        case 4:
-                               NDR_CHECK(ndr_pull_spoolss_NotifyBlob(ndr, NDR_BUFFERS, &r->blob));
+                               NDR_CHECK(ndr_pull_spoolss_TimeCtr(ndr, NDR_BUFFERS, &r->time));
                        break;
 
                        case 5:
-                               NDR_CHECK(ndr_pull_spoolss_NotifyDOSString(ndr, NDR_BUFFERS, &r->ascii_string));
+                               NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sd));
                        break;
 
                        default:
@@ -10453,27 +10401,42 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyData(struct ndr_pull *ndr, int n
 _PUBLIC_ void ndr_print_spoolss_NotifyData(struct ndr_print *ndr, const char *name, const union spoolss_NotifyData *r)
 {
        int level;
+       uint32_t cntr_integer_0;
        level = ndr_print_get_switch_value(ndr, r);
        ndr_print_union(ndr, name, level, "spoolss_NotifyData");
        switch (level) {
                case 1:
-                       ndr_print_dlong(ndr, "integer", r->integer);
+                       ndr->print(ndr, "%s: ARRAY(%d)", "integer", (int)2);
+                       ndr->depth++;
+                       for (cntr_integer_0=0;cntr_integer_0<2;cntr_integer_0++) {
+                               char *idx_0=NULL;
+                               if (asprintf(&idx_0, "[%d]", cntr_integer_0) != -1) {
+                                       ndr_print_uint32(ndr, "integer", r->integer[cntr_integer_0]);
+                                       free(idx_0);
+                               }
+                       }
+                       ndr->depth--;
                break;
 
                case 2:
-                       ndr_print_spoolss_NotifyUTF16String(ndr, "utf16_string", &r->utf16_string);
+                       ndr_print_spoolss_NotifyString(ndr, "string", &r->string);
                break;
 
                case 3:
-                       ndr_print_spoolss_NotifyDOSString(ndr, "ascii_string", &r->ascii_string);
+                       ndr_print_ptr(ndr, "devmode", r->devmode);
+                       ndr->depth++;
+                       if (r->devmode) {
+                               ndr_print_spoolss_DeviceMode(ndr, "devmode", r->devmode);
+                       }
+                       ndr->depth--;
                break;
 
                case 4:
-                       ndr_print_spoolss_NotifyBlob(ndr, "blob", &r->blob);
+                       ndr_print_spoolss_TimeCtr(ndr, "time", &r->time);
                break;
 
                case 5:
-                       ndr_print_spoolss_NotifyDOSString(ndr, "ascii_string", &r->ascii_string);
+                       ndr_print_sec_desc_buf(ndr, "sd", &r->sd);
                break;
 
                default:
@@ -10487,7 +10450,7 @@ static enum ndr_err_code ndr_push_spoolss_Notify(struct ndr_push *ndr, int ndr_f
                NDR_CHECK(ndr_push_align(ndr, 4));
                NDR_CHECK(ndr_push_spoolss_NotifyType(ndr, NDR_SCALARS, r->type));
                NDR_CHECK(ndr_push_spoolss_Field(ndr, NDR_SCALARS, r->field));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->variable_type));
+               NDR_CHECK(ndr_push_spoolss_NotifyTable(ndr, NDR_SCALARS, r->variable_type));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->job_id));
                NDR_CHECK(ndr_push_set_switch_value(ndr, &r->data, r->variable_type));
                NDR_CHECK(ndr_push_spoolss_NotifyData(ndr, NDR_SCALARS, &r->data));
@@ -10504,7 +10467,7 @@ static enum ndr_err_code ndr_pull_spoolss_Notify(struct ndr_pull *ndr, int ndr_f
                NDR_CHECK(ndr_pull_align(ndr, 4));
                NDR_CHECK(ndr_pull_spoolss_NotifyType(ndr, NDR_SCALARS, &r->type));
                NDR_CHECK(ndr_pull_spoolss_Field(ndr, NDR_SCALARS, &r->field));
-               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->variable_type));
+               NDR_CHECK(ndr_pull_spoolss_NotifyTable(ndr, NDR_SCALARS, &r->variable_type));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->job_id));
                NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->data, r->variable_type));
                NDR_CHECK(ndr_pull_spoolss_NotifyData(ndr, NDR_SCALARS, &r->data));
@@ -10521,7 +10484,7 @@ _PUBLIC_ void ndr_print_spoolss_Notify(struct ndr_print *ndr, const char *name,
        ndr->depth++;
        ndr_print_spoolss_NotifyType(ndr, "type", r->type);
        ndr_print_spoolss_Field(ndr, "field", r->field);
-       ndr_print_uint32(ndr, "variable_type", r->variable_type);
+       ndr_print_spoolss_NotifyTable(ndr, "variable_type", r->variable_type);
        ndr_print_uint32(ndr, "job_id", r->job_id);
        ndr_print_set_switch_value(ndr, &r->data, r->variable_type);
        ndr_print_spoolss_NotifyData(ndr, "data", &r->data);
@@ -10534,7 +10497,7 @@ static enum ndr_err_code ndr_push_spoolss_NotifyInfo(struct ndr_push *ndr, int n
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
                NDR_CHECK(ndr_push_align(ndr, 4));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
                for (cntr_notifies_0 = 0; cntr_notifies_0 < r->count; cntr_notifies_0++) {
@@ -10586,7 +10549,7 @@ _PUBLIC_ void ndr_print_spoolss_NotifyInfo(struct ndr_print *ndr, const char *na
        uint32_t cntr_notifies_0;
        ndr_print_struct(ndr, name, "spoolss_NotifyInfo");
        ndr->depth++;
-       ndr_print_uint32(ndr, "version", r->version);
+       ndr_print_uint32(ndr, "version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?2:r->version);
        ndr_print_uint32(ndr, "flags", r->flags);
        ndr_print_uint32(ndr, "count", r->count);
        ndr->print(ndr, "%s: ARRAY(%d)", "notifies", (int)r->count);
@@ -17211,6 +17174,10 @@ static enum ndr_err_code ndr_push_spoolss_AddPrinterEx(struct ndr_push *ndr, int
                NDR_CHECK(ndr_push_spoolss_UserLevel(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.userlevel));
        }
        if (flags & NDR_OUT) {
+               if (r->out.handle == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.handle));
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -17224,7 +17191,10 @@ static enum ndr_err_code ndr_pull_spoolss_AddPrinterEx(struct ndr_pull *ndr, int
        TALLOC_CTX *_mem_save_server_0;
        TALLOC_CTX *_mem_save_info_0;
        TALLOC_CTX *_mem_save_secdesc_0;
+       TALLOC_CTX *_mem_save_handle_0;
        if (flags & NDR_IN) {
+               ZERO_STRUCT(r->out);
+
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server));
                if (_ptr_server) {
                        NDR_PULL_ALLOC(ndr, r->in.server);
@@ -17273,8 +17243,17 @@ static enum ndr_err_code ndr_pull_spoolss_AddPrinterEx(struct ndr_pull *ndr, int
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.ulevel));
                NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.userlevel, r->in.ulevel));
                NDR_CHECK(ndr_pull_spoolss_UserLevel(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.userlevel));
+               NDR_PULL_ALLOC(ndr, r->out.handle);
+               ZERO_STRUCTP(r->out.handle);
        }
        if (flags & NDR_OUT) {
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, r->out.handle);
+               }
+               _mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.handle));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
        return NDR_ERR_SUCCESS;
@@ -17319,6 +17298,10 @@ _PUBLIC_ void ndr_print_spoolss_AddPrinterEx(struct ndr_print *ndr, const char *
        if (flags & NDR_OUT) {
                ndr_print_struct(ndr, "out", "spoolss_AddPrinterEx");
                ndr->depth++;
+               ndr_print_ptr(ndr, "handle", r->out.handle);
+               ndr->depth++;
+               ndr_print_policy_handle(ndr, "handle", r->out.handle);
+               ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
                ndr->depth--;
        }
index ef97a01ecde19b6a8b16fe9cb57a048ccd4ee7df..3bf74e5ff9d08ff52fc481539f03f43951755e53 100644 (file)
@@ -206,6 +206,7 @@ extern const struct ndr_interface_table ndr_table_spoolss;
 
 #define NDR_SPOOLSS_CALL_COUNT (96)
 void ndr_print_spoolss_Time(struct ndr_print *ndr, const char *name, const struct spoolss_Time *r);
+void ndr_print_spoolss_TimeCtr(struct ndr_print *ndr, const char *name, const struct spoolss_TimeCtr *r);
 void ndr_print_spoolss_PrinterInfo0(struct ndr_print *ndr, const char *name, const struct spoolss_PrinterInfo0 *r);
 void ndr_print_spoolss_DeviceModeFields(struct ndr_print *ndr, const char *name, uint32_t r);
 enum ndr_err_code ndr_push_spoolss_DeviceMode(struct ndr_push *ndr, int ndr_flags, const struct spoolss_DeviceMode *r);
@@ -308,10 +309,8 @@ void ndr_print_spoolss_Field(struct ndr_print *ndr, const char *name, enum spool
 void ndr_print_spoolss_NotifyType(struct ndr_print *ndr, const char *name, enum spoolss_NotifyType r);
 void ndr_print_spoolss_NotifyOptionsArray(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyOptionsArray *r);
 void ndr_print_spoolss_NotifyOptionsContainer(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyOptionsContainer *r);
-void ndr_print_spoolss_NotifyUTF16String(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyUTF16String *r);
-void ndr_print_spoolss_NotifyDOSString(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyDOSString *r);
-void ndr_print_spoolss_NotifyBlobData(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyBlobData *r);
-void ndr_print_spoolss_NotifyBlob(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyBlob *r);
+void ndr_print_spoolss_NotifyString(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyString *r);
+void ndr_print_spoolss_NotifyTable(struct ndr_print *ndr, const char *name, enum spoolss_NotifyTable r);
 void ndr_print_spoolss_NotifyData(struct ndr_print *ndr, const char *name, const union spoolss_NotifyData *r);
 void ndr_print_spoolss_Notify(struct ndr_print *ndr, const char *name, const struct spoolss_Notify *r);
 void ndr_print_spoolss_NotifyInfo(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyInfo *r);
index 3554d37b398442b961e11c6aa59098de0604d10a..d60aea582a4417d396e1421bd3972e37594e15c3 100644 (file)
@@ -41,6 +41,11 @@ struct spoolss_Time {
        uint16_t minute;
        uint16_t second;
        uint16_t millisecond;
+}/* [gensize] */;
+
+struct spoolss_TimeCtr {
+       uint32_t size;/* [value(ndr_size_spoolss_Time(time,ndr->iconv_convenience,ndr->flags))] */
+       struct spoolss_Time *time;/* [unique] */
 };
 
 struct spoolss_PrinterInfo0 {
@@ -555,6 +560,34 @@ struct spoolss_DriverInfo6 {
        const char * provider;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
 };
 
+struct spoolss_DriverInfo8 {
+       enum spoolss_DriverOSVersion version;
+       const char * driver_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * architecture;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * driver_path;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * data_file;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * config_file;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * help_file;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * monitor_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * default_datatype;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char ** dependent_files;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char ** previous_names;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       NTTIME driver_data;
+       uint64_t driver_version;
+       const char * manufacturer_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * manufacturer_url;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * hardware_id;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * provider;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * print_processor;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * vendor_setup;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char ** color_profiles;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       const char * inf_path;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       uint32_t printer_driver_attributes;
+       const char ** core_driver_dependencies;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
+       NTTIME min_inbox_driver_ver_date;
+       uint64_t min_inbox_driver_ver_version;
+};
+
 union spoolss_DriverInfo {
        struct spoolss_DriverInfo1 info1;/* [case] */
        struct spoolss_DriverInfo2 info2;/* [case(2)] */
@@ -830,48 +863,54 @@ struct spoolss_NotifyOptionsArray {
 };
 
 struct spoolss_NotifyOptionsContainer {
-       uint32_t version;
+       uint32_t version;/* [value(2)] */
        uint32_t flags;
        uint32_t count;
        struct spoolss_NotifyOptionsArray *options;/* [unique,size_is(count)] */
 };
 
-struct spoolss_NotifyUTF16String {
+struct spoolss_NotifyString {
        uint32_t size;
        const char *string;/* [unique,charset(UTF16),size_is(size/2)] */
 };
 
-struct spoolss_NotifyDOSString {
-       uint32_t size;
-       const char *string;/* [unique,charset(DOS),size_is(size)] */
-};
-
-struct spoolss_NotifyBlobData {
-       uint16_t data[8];
-};
-
-struct spoolss_NotifyBlob {
-       uint32_t len;
-       struct spoolss_NotifyBlobData *data;/* [unique] */
-};
+enum spoolss_NotifyTable
+#ifndef USE_UINT_ENUMS
+ {
+       NOTIFY_TABLE_DWORD=0x0001,
+       NOTIFY_TABLE_STRING=0x0002,
+       NOTIFY_TABLE_DEVMODE=0x0003,
+       NOTIFY_TABLE_TIME=0x0004,
+       NOTIFY_TABLE_SECURITYDESCRIPTOR=0x0005
+}
+#else
+ { __donnot_use_enum_spoolss_NotifyTable=0x7FFFFFFF}
+#define NOTIFY_TABLE_DWORD ( 0x0001 )
+#define NOTIFY_TABLE_STRING ( 0x0002 )
+#define NOTIFY_TABLE_DEVMODE ( 0x0003 )
+#define NOTIFY_TABLE_TIME ( 0x0004 )
+#define NOTIFY_TABLE_SECURITYDESCRIPTOR ( 0x0005 )
+#endif
+;
 
 union spoolss_NotifyData {
-       int64_t integer;/* [case] */
-       struct spoolss_NotifyUTF16String utf16_string;/* [case(2)] */
-       struct spoolss_NotifyDOSString ascii_string;/* [case(3)] */
-       struct spoolss_NotifyBlob blob;/* [case(4)] */
+       uint32_t integer[2];/* [case] */
+       struct spoolss_NotifyString string;/* [case(2)] */
+       struct spoolss_DeviceMode *devmode;/* [unique,case(3)] */
+       struct spoolss_TimeCtr time;/* [case(4)] */
+       struct sec_desc_buf sd;/* [case(5)] */
 }/* [switch_type(uint32)] */;
 
 struct spoolss_Notify {
        enum spoolss_NotifyType type;
        enum spoolss_Field field;
-       uint32_t variable_type;
+       enum spoolss_NotifyTable variable_type;
        uint32_t job_id;
        union spoolss_NotifyData data;/* [switch_is(variable_type)] */
 };
 
 struct spoolss_NotifyInfo {
-       uint32_t version;
+       uint32_t version;/* [value(2)] */
        uint32_t flags;
        uint32_t count;
        struct spoolss_Notify *notifies;/* [size_is(count)] */
@@ -2106,6 +2145,7 @@ struct spoolss_AddPrinterEx {
        } in;
 
        struct {
+               struct policy_handle *handle;/* [ref] */
                WERROR result;
        } out;
 
index 1f8c89a53ffebd109d534b1726e81df37992e858..eaee600b62db12de977ffa4819721d40af417560 100644 (file)
@@ -5409,6 +5409,13 @@ static bool api_spoolss_AddPrinterEx(pipes_struct *p)
                NDR_PRINT_IN_DEBUG(spoolss_AddPrinterEx, r);
        }
 
+       ZERO_STRUCT(r->out);
+       r->out.handle = talloc_zero(r, struct policy_handle);
+       if (r->out.handle == NULL) {
+               talloc_free(r);
+               return false;
+       }
+
        r->out.result = _spoolss_AddPrinterEx(p, r);
 
        if (p->rng_fault_state) {
@@ -8120,6 +8127,12 @@ NTSTATUS rpc_spoolss_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
 
                case NDR_SPOOLSS_ADDPRINTEREX: {
                        struct spoolss_AddPrinterEx *r = (struct spoolss_AddPrinterEx *)_r;
+                       ZERO_STRUCT(r->out);
+                       r->out.handle = talloc_zero(mem_ctx, struct policy_handle);
+                       if (r->out.handle == NULL) {
+                       return NT_STATUS_NO_MEMORY;
+                       }
+
                        r->out.result = _spoolss_AddPrinterEx(cli->pipes_struct, r);
                        return NT_STATUS_OK;
                }