r19049: Samba 3 client fixes
authorGerald Carter <jerry@samba.org>
Mon, 2 Oct 2006 16:19:05 +0000 (16:19 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:20:31 +0000 (14:20 -0500)
* Make sure to check for NULL pointers when dealing with
  [out,unique] before assigning valoues
* Detect RPC faults and return immediately
(This used to be commit c96dae478c2fee2fede9c853a71c8079bbb8ba47)

source4/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm

index 3b75bf33a6578e41b1d183666b0018eb226165b0..c939feb1b91c9716851965aafd720365e656e79e 100644 (file)
@@ -57,6 +57,14 @@ sub ParseFunction($$)
        pidl "\tNDR_PRINT_IN_DEBUG($fn->{NAME}, &r);";
        pidl "";
        pidl "status = cli_do_rpc_ndr(cli, mem_ctx, PI_$uif, $ufn, &r, (ndr_pull_flags_fn_t)ndr_pull_$fn->{NAME}, (ndr_push_flags_fn_t)ndr_push_$fn->{NAME});";
+       pidl "";
+
+       pidl "if ( !NT_STATUS_IS_OK(status) ) {";
+       indent;
+       pidl "return status;";
+       deindent;
+       pidl "}";
+
        pidl "";
        pidl "if (DEBUGLEVEL >= 10)";
        pidl "\tNDR_PRINT_OUT_DEBUG($fn->{NAME}, &r);";
@@ -71,7 +79,16 @@ sub ParseFunction($$)
 
                fatal($e, "[out] argument is not a pointer or array") if ($e->{LEVELS}[0]->{TYPE} ne "POINTER" and $e->{LEVELS}[0]->{TYPE} ne "ARRAY");
 
-               pidl "*$e->{NAME} = *r.out.$e->{NAME};";
+               if ( ($e->{LEVELS}[0]->{TYPE} eq "POINTER") && ($e->{LEVELS}[0]->{POINTER_TYPE} eq "unique") ) {
+                       pidl "if ( $e->{NAME} ) {";
+                       indent;
+                       pidl "*$e->{NAME} = *r.out.$e->{NAME};";
+                       deindent;
+                       pidl "}";
+               } else {
+                       pidl "*$e->{NAME} = *r.out.$e->{NAME};";
+               }
+                       
        }
 
        pidl"";