From a22d785d7cdfbb662a0755552acfbf995d865d0c Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 2 Oct 2006 16:19:05 +0000 Subject: r19049: Samba 3 client fixes * 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 | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'source4/pidl/lib') diff --git a/source4/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm b/source4/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm index 3b75bf33a6..c939feb1b9 100644 --- a/source4/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm +++ b/source4/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm @@ -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""; -- cgit