s4-smbtorture: implement and test level 3 and 5 of PrintQEnum RAP.
authorGünther Deschner <gd@samba.org>
Thu, 29 Apr 2010 00:39:44 +0000 (02:39 +0200)
committerGünther Deschner <gd@samba.org>
Thu, 29 Apr 2010 10:05:42 +0000 (12:05 +0200)
Guenther

source4/torture/rap/printing.c
source4/torture/rap/rap.c

index b57151aee199edde173112fd362265b88a1b22c5..7030c39436c53badd055e283264c4c6435d2e0e3 100644 (file)
@@ -68,7 +68,7 @@ static bool test_netprintqenum(struct torture_context *tctx,
 {
        struct rap_NetPrintQEnum r;
        int i, q;
-       uint16_t levels[] = { 0, 1 };
+       uint16_t levels[] = { 0, 1, 3, 5 };
        NTSTATUS status;
 
        for (i=0; i < ARRAY_SIZE(levels); i++) {
index 49d55b11621279355f87864e2eb23169fd22a086..a81516af6cd97854f1fb505b530671ec0e27b172 100644 (file)
@@ -582,7 +582,7 @@ NTSTATUS smbcli_rap_netprintqenum(struct smbcli_tree *tree,
        NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.count));
        NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
 
-       r->out.info = talloc_array(mem_ctx, union rap_printq_info, r->out.count);
+       r->out.info = talloc_zero_array(mem_ctx, union rap_printq_info, r->out.count);
 
        if (r->out.info == NULL) {
                result = NT_STATUS_NO_MEMORY;
@@ -625,8 +625,51 @@ NTSTATUS smbcli_rap_netprintqenum(struct smbcli_tree *tree,
                                                 NDR_SCALARS,  &r->out.info[i].info1.PrintQStatus));
                        NDR_GOTO(ndr_pull_uint16(call->ndr_pull_data,
                                                 NDR_SCALARS,  &r->out.info[i].info1.PrintJobCount));
-
                        break;
+               case 3:
+                       RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
+                                              r->out.convert,
+                                              &r->out.info[i].info3.PrintQueueName));
+                       NDR_GOTO(ndr_pull_uint16(call->ndr_pull_data,
+                                                NDR_SCALARS,  &r->out.info[i].info3.Priority));
+                       NDR_GOTO(ndr_pull_uint16(call->ndr_pull_data,
+                                                NDR_SCALARS,  &r->out.info[i].info3.StartTime));
+                       NDR_GOTO(ndr_pull_uint16(call->ndr_pull_data,
+                                                NDR_SCALARS,  &r->out.info[i].info3.UntilTime));
+                       NDR_GOTO(ndr_pull_uint16(call->ndr_pull_data,
+                                               NDR_SCALARS, &r->out.info[i].info3.Pad));
+                       RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
+                                              r->out.convert,
+                                              &r->out.info[i].info3.SeparatorPageFilename));
+                       RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
+                                              r->out.convert,
+                                              &r->out.info[i].info3.PrintProcessorDllName));
+                       RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
+                                              r->out.convert,
+                                              &r->out.info[i].info3.PrintParameterString));
+                       RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
+                                              r->out.convert,
+                                              &r->out.info[i].info3.CommentString));
+                       NDR_GOTO(ndr_pull_rap_PrintQStatusCode(call->ndr_pull_data,
+                                                NDR_SCALARS,  &r->out.info[i].info3.PrintQStatus));
+                       NDR_GOTO(ndr_pull_uint16(call->ndr_pull_data,
+                                                NDR_SCALARS,  &r->out.info[i].info3.PrintJobCount));
+                       RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
+                                              r->out.convert,
+                                              &r->out.info[i].info3.Printers));
+                       RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
+                                              r->out.convert,
+                                              &r->out.info[i].info3.DriverName));
+                       RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
+                                              r->out.convert,
+                                              &r->out.info[i].info3.PrintDriverData));
+                       break;
+               case 5:
+                       RAP_GOTO(rap_pull_string(mem_ctx, call->ndr_pull_data,
+                                              r->out.convert,
+                                              &r->out.info[i].info5.PrintQueueName));
+                       break;
+
                }
        }