aboutsummaryrefslogtreecommitdiffstats
path: root/tools/pidl
diff options
context:
space:
mode:
authorJörg Mayer <jmayer@loplof.de>2007-11-06 18:31:26 +0000
committerJörg Mayer <jmayer@loplof.de>2007-11-06 18:31:26 +0000
commitb349ff3e87dc869eba2abb29737b149acf13ce8e (patch)
tree2ba820dd77f568a4264b5221bfab2a93fe44ead8 /tools/pidl
parenta1347fde05423854038c13db70d16a8501355222 (diff)
Update from samba tree revision 25306 to 25880
============================ Samba log start ============ ------------------------------------------------------------------------ r25453 | jelmer | 2007-10-01 23:38:15 +0200 (Mon, 01 Oct 2007) | 1 line Fix include for NTSTATUS. ------------------------------------------------------------------------ r25457 | jelmer | 2007-10-02 06:45:25 +0200 (Tue, 02 Oct 2007) | 1 line use different location for out-of-tree builds ------------------------------------------------------------------------ r25674 | metze | 2007-10-17 10:26:55 +0200 (Wed, 17 Oct 2007) | 13 lines fix crash bug in pidl generated client code, this could have happend with [in,out,unique] pointers when the clients sends a valid pointer, but the server reponse with a NULL pointer (as samba-3.0.26a do for some calls). I've tested with midl to see how windows handles this situation and also the reverse case where the client sends NULL and the server reposnse with non-NULL. It appears that midl generated code just ignores this and only copies the result if both pointers are non-NULL. metze ------------------------------------------------------------------------ r25700 | jra | 2007-10-19 02:40:51 +0200 (Fri, 19 Oct 2007) | 3 lines Now BOOL no longer exists in Samba 3.2, use bool instead. Jeremy. ------------------------------------------------------------------------ r25745 | metze | 2007-10-27 11:57:09 +0200 (Sat, 27 Oct 2007) | 6 lines [pidl] ndr_pull/push_error(ndr, NDR_ERR_INVALID_POINTER,..) instead NT_STATUS_INVALID_PARAMETER_MIX metze ------------------------------------------------------------------------ r25751 | metze | 2007-10-30 07:24:43 +0100 (Tue, 30 Oct 2007) | 4 lines use EJS_CHECK() instead of NDR_CHECK() in ejs code metze ------------------------------------------------------------------------ r25765 | metze | 2007-10-31 17:25:44 +0100 (Wed, 31 Oct 2007) | 3 lines pidl: fix compiler warning in ndr_align test metze ------------------------------------------------------------------------ r25766 | metze | 2007-10-31 17:27:21 +0100 (Wed, 31 Oct 2007) | 3 lines pidl: fix bugs in ndr_tagtype tests found by compiler warnings metze ------------------------------------------------------------------------ r25767 | metze | 2007-10-31 17:29:32 +0100 (Wed, 31 Oct 2007) | 5 lines pidl: make it easier to debug errors in pidl tests we now print the C program that we tried to compile metze ------------------------------------------------------------------------ r25768 | metze | 2007-10-31 17:44:42 +0100 (Wed, 31 Oct 2007) | 5 lines pidl: NT_STATUS_IS_ERR() is NOT the same as !NT_STATUS_IS_OK() Everything but success should be handled as error in the tests. metze ------------------------------------------------------------------------ r25795 | metze | 2007-11-02 11:35:09 +0100 (Fri, 02 Nov 2007) | 3 lines whitespace cleanup... metze ------------------------------------------------------------------------ r25804 | metze | 2007-11-02 14:02:25 +0100 (Fri, 02 Nov 2007) | 4 lines move including ndr_compression.h into HeaderInterface() metze ------------------------------------------------------------------------ r25805 | metze | 2007-11-02 14:05:43 +0100 (Fri, 02 Nov 2007) | 4 lines pidl: include libndr.h as first header in ndr_foo.h metze ------------------------------------------------------------------------ r25806 | metze | 2007-11-02 14:48:11 +0100 (Fri, 02 Nov 2007) | 5 lines let libndr.h include needed stuff and remove pidl magic for choosing common required headers metze ------------------------------------------------------------------------ ------------------------------------------------------------------------ ============================ Samba log end ============== svn path=/trunk/; revision=23378
Diffstat (limited to 'tools/pidl')
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm2
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm2
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/EJS.pm32
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/Header.pm4
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm2
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm54
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/TDR.pm2
-rw-r--r--tools/pidl/tests/Util.pm69
-rwxr-xr-xtools/pidl/tests/ndr_align.pl14
-rwxr-xr-xtools/pidl/tests/ndr_alloc.pl8
-rwxr-xr-xtools/pidl/tests/ndr_array.pl2
-rwxr-xr-xtools/pidl/tests/ndr_fullptr.pl2
-rwxr-xr-xtools/pidl/tests/ndr_refptr.pl28
-rw-r--r--tools/pidl/tests/ndr_represent.pl8
-rwxr-xr-xtools/pidl/tests/ndr_simple.pl30
-rwxr-xr-xtools/pidl/tests/ndr_string.pl6
-rwxr-xr-xtools/pidl/tests/ndr_tagtype.pl16
17 files changed, 157 insertions, 124 deletions
diff --git a/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm b/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
index 9c3f01ad93..f6c9a04a8e 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
@@ -91,7 +91,7 @@ sub ParseFunction($$$)
if ($e->{LEVELS}[0]->{TYPE} eq "POINTER") {
$level = 1;
if ($e->{LEVELS}[0]->{POINTER_TYPE} ne "ref") {
- $self->pidl("if ( $e->{NAME} ) {");
+ $self->pidl("if ($e->{NAME} && r.out.$e->{NAME}) {");
$self->indent;
}
}
diff --git a/tools/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm b/tools/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm
index b3aa98ee0a..82cadd9bcc 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm
@@ -84,7 +84,7 @@ sub ParseFunction($$)
my $op = "NDR_".uc($fn->{NAME});
- pidl "static BOOL api_$fn->{NAME}(pipes_struct *p)";
+ pidl "static bool api_$fn->{NAME}(pipes_struct *p)";
pidl "{";
indent;
pidl "const struct ndr_interface_call *call;";
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/EJS.pm b/tools/pidl/lib/Parse/Pidl/Samba4/EJS.pm
index 13e38545a7..2e9bc0953c 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/EJS.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/EJS.pm
@@ -128,7 +128,7 @@ sub EjsPullScalar($$$$$$$)
} else {
$t = $e->{TYPE};
}
- $self->pidl("NDR_CHECK(ejs_pull_$t(ejs, v, $name, $var));");
+ $self->pidl("EJS_CHECK(ejs_pull_$t(ejs, v, $name, $var));");
}
}
@@ -164,7 +164,7 @@ sub EjsPullString($$$$$$)
if (defined($pl) and $pl->{TYPE} eq "POINTER") {
$var = get_pointer_to($var);
}
- $self->pidl("NDR_CHECK(ejs_pull_string(ejs, v, $name, $var));");
+ $self->pidl("EJS_CHECK(ejs_pull_string(ejs, v, $name, $var));");
}
###########################
@@ -255,7 +255,7 @@ sub EjsStructPull($$$)
{
my ($self, $d, $varname) = @_;
my $env = GenerateStructEnv($d, $varname);
- $self->pidl("NDR_CHECK(ejs_pull_struct_start(ejs, &v, name));");
+ $self->pidl("EJS_CHECK(ejs_pull_struct_start(ejs, &v, name));");
foreach my $e (@{$d->{ELEMENTS}}) {
$self->EjsPullElementTop($e, $env);
}
@@ -267,7 +267,7 @@ sub EjsUnionPull($$$)
{
my ($self, $d, $varname) = @_;
my $have_default = 0;
- $self->pidl("NDR_CHECK(ejs_pull_struct_start(ejs, &v, name));");
+ $self->pidl("EJS_CHECK(ejs_pull_struct_start(ejs, &v, name));");
$self->pidl("switch (ejs->switch_var) {");
$self->indent;
foreach my $e (@{$d->{ELEMENTS}}) {
@@ -317,7 +317,7 @@ sub EjsEnumPull($$$)
my ($self, $d, $varname) = @_;
$self->EjsEnumConstant($d);
$self->pidl("unsigned e;");
- $self->pidl("NDR_CHECK(ejs_pull_enum(ejs, v, name, &e));");
+ $self->pidl("EJS_CHECK(ejs_pull_enum(ejs, v, name, &e));");
$self->pidl("*$varname = e;");
}
@@ -327,7 +327,7 @@ sub EjsBitmapPull($$$)
{
my ($self, $d, $varname) = @_;
my $type_fn = $d->{BASE_TYPE};
- $self->pidl("NDR_CHECK(ejs_pull_$type_fn(ejs, v, name, $varname));");
+ $self->pidl("EJS_CHECK(ejs_pull_$type_fn(ejs, v, name, $varname));");
}
sub EjsTypePullFunction($$$)
@@ -388,7 +388,7 @@ sub EjsPullFunction($$)
$self->pidl("\nstatic NTSTATUS ejs_pull_$name(struct ejs_rpc *ejs, struct MprVar *v, struct $name *r)");
$self->pidl("{");
$self->indent;
- $self->pidl("NDR_CHECK(ejs_pull_struct_start(ejs, &v, \"input\"));");
+ $self->pidl("EJS_CHECK(ejs_pull_struct_start(ejs, &v, \"input\"));");
# we pull non-array elements before array elements as arrays
# may have length_is() or size_is() properties that depend
@@ -427,7 +427,7 @@ sub EjsPushScalar($$$$$$)
$var = get_pointer_to($var);
}
- $self->pidl("NDR_CHECK(".TypeFunctionName("ejs_push", $e->{TYPE})."(ejs, v, $name, $var));");
+ $self->pidl("EJS_CHECK(".TypeFunctionName("ejs_push", $e->{TYPE})."(ejs, v, $name, $var));");
}
}
@@ -440,7 +440,7 @@ sub EjsPushString($$$$$$)
if (defined($pl) and $pl->{TYPE} eq "POINTER") {
$var = get_pointer_to($var);
}
- $self->pidl("NDR_CHECK(ejs_push_string(ejs, v, $name, $var));");
+ $self->pidl("EJS_CHECK(ejs_push_string(ejs, v, $name, $var));");
}
###########################
@@ -453,7 +453,7 @@ sub EjsPushPointer($$$$$$)
if ($l->{POINTER_TYPE} eq "ref") {
$self->pidl("return NT_STATUS_INVALID_PARAMETER_MIX;");
} else {
- $self->pidl("NDR_CHECK(ejs_push_null(ejs, v, $name));");
+ $self->pidl("EJS_CHECK(ejs_push_null(ejs, v, $name));");
}
$self->deindent;
$self->pidl("} else {");
@@ -543,7 +543,7 @@ sub EjsStructPush($$$)
{
my ($self, $d, $varname) = @_;
my $env = GenerateStructEnv($d, $varname);
- $self->pidl("NDR_CHECK(ejs_push_struct_start(ejs, &v, name));");
+ $self->pidl("EJS_CHECK(ejs_push_struct_start(ejs, &v, name));");
foreach my $e (@{$d->{ELEMENTS}}) {
$self->EjsPushElementTop($e, $env);
}
@@ -555,7 +555,7 @@ sub EjsUnionPush($$$)
{
my ($self, $d, $varname) = @_;
my $have_default = 0;
- $self->pidl("NDR_CHECK(ejs_push_struct_start(ejs, &v, name));");
+ $self->pidl("EJS_CHECK(ejs_push_struct_start(ejs, &v, name));");
$self->pidl("switch (ejs->switch_var) {");
$self->indent;
foreach my $e (@{$d->{ELEMENTS}}) {
@@ -587,7 +587,7 @@ sub EjsEnumPush($$$)
my ($self, $d, $varname) = @_;
$self->EjsEnumConstant($d);
$self->pidl("unsigned e = ".get_value_of($varname).";");
- $self->pidl("NDR_CHECK(ejs_push_enum(ejs, v, name, &e));");
+ $self->pidl("EJS_CHECK(ejs_push_enum(ejs, v, name, &e));");
}
###########################
@@ -604,7 +604,7 @@ sub EjsBitmapPush($$$)
$self->{constants}->{$bname} = $v;
}
}
- $self->pidl("NDR_CHECK(ejs_push_$type_fn(ejs, v, name, $varname));");
+ $self->pidl("EJS_CHECK(ejs_push_$type_fn(ejs, v, name, $varname));");
}
sub EjsTypePushFunction($$$)
@@ -667,7 +667,7 @@ sub EjsPushFunction($$)
$self->pidl("\nstatic NTSTATUS ejs_push_$d->{NAME}(struct ejs_rpc *ejs, struct MprVar *v, const struct $d->{NAME} *r)");
$self->pidl("{");
$self->indent;
- $self->pidl("NDR_CHECK(ejs_push_struct_start(ejs, &v, \"output\"));");
+ $self->pidl("EJS_CHECK(ejs_push_struct_start(ejs, &v, \"output\"));");
foreach my $e (@{$d->{ELEMENTS}}) {
next unless (grep(/out/, @{$e->{DIRECTION}}));
@@ -675,7 +675,7 @@ sub EjsPushFunction($$)
}
if ($d->{RETURN_TYPE}) {
- $self->pidl("NDR_CHECK(".TypeFunctionName("ejs_push", $d->{RETURN_TYPE})."(ejs, v, \"result\", &r->out.result));");
+ $self->pidl("EJS_CHECK(".TypeFunctionName("ejs_push", $d->{RETURN_TYPE})."(ejs, v, \"result\", &r->out.result));");
}
$self->pidl("return NT_STATUS_OK;");
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm b/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm
index 75d4c235cb..7a6ffa46d6 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm
@@ -10,7 +10,7 @@ use strict;
use Parse::Pidl qw(fatal);
use Parse::Pidl::Typelist qw(mapTypeName scalar_is_reference);
use Parse::Pidl::Util qw(has_property is_constant unmake_str);
-use Parse::Pidl::Samba4 qw(is_intree ElementStars ArrayBrackets);
+use Parse::Pidl::Samba4 qw(is_intree ElementStars ArrayBrackets choose_header);
use vars qw($VERSION);
$VERSION = '0.01';
@@ -326,7 +326,7 @@ sub HeaderImport
foreach (@imports) {
s/\.idl\"$//;
s/^\"//;
- pidl "#include \"librpc/gen_ndr/$_\.h\"\n";
+ pidl choose_header("librpc/gen_ndr/$_\.h", "gen_ndr/$_.h") . "\n";
}
}
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm b/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm
index cf14b645a9..e9c158e933 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm
@@ -109,7 +109,7 @@ sub Parse($$$$)
$res .= "#include <stdlib.h>\n";
$res .= "#include <stdint.h>\n";
$res .= "#include <stdarg.h>\n";
- $res .= "#include <core/nterr.h>\n";
+ $res .= "#include <core/ntstatus.h>\n";
}
$res .= "#include \"$ndr_header\"\n";
$res .= "#include \"$client_header\"\n";
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
index cd3981bb28..3ad9231740 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
@@ -423,8 +423,10 @@ sub ParseArrayPullHeader($$$$$$)
} elsif ($l->{IS_ZERO_TERMINATED}) { # Noheader arrays
$length = $size = "ndr_get_string_size($ndr, sizeof(*$var_name))";
} else {
- $length = $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL},
- check_null_pointer($e, $env, sub { $self->pidl(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
+ $length = $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL},
+ check_null_pointer($e, $env, sub { $self->pidl(shift); },
+ "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for size_is()\");"),
+ check_fully_dereferenced($e, $env));
}
if ((!$l->{IS_SURROUNDING}) and $l->{IS_CONFORMANT}) {
@@ -447,7 +449,10 @@ sub ParseArrayPullHeader($$$$$$)
if ($l->{IS_CONFORMANT} and not $l->{IS_ZERO_TERMINATED}) {
$self->defer("if ($var_name) {");
$self->defer_indent;
- my $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL}, check_null_pointer($e, $env, sub { $self->defer(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
+ my $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL},
+ check_null_pointer($e, $env, sub { $self->defer(shift); },
+ "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for size_is()\");"),
+ check_fully_dereferenced($e, $env));
$self->defer("NDR_CHECK(ndr_check_array_size(ndr, (void*)" . get_pointer_to($var_name) . ", $size));");
$self->defer_deindent;
$self->defer("}");
@@ -457,7 +462,8 @@ sub ParseArrayPullHeader($$$$$$)
$self->defer("if ($var_name) {");
$self->defer_indent;
my $length = ParseExprExt($l->{LENGTH_IS}, $env, $e->{ORIGINAL},
- check_null_pointer($e, $env, sub { $self->defer(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"),
+ check_null_pointer($e, $env, sub { $self->defer(shift); },
+ "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for length_is()\");"),
check_fully_dereferenced($e, $env));
$self->defer("NDR_CHECK(ndr_check_array_length(ndr, (void*)" . get_pointer_to($var_name) . ", $length));");
$self->defer_deindent;
@@ -740,7 +746,11 @@ sub ParsePtrPush($$$$)
my ($self,$e,$l,$var_name) = @_;
if ($l->{POINTER_TYPE} eq "ref") {
- $self->pidl("if ($var_name == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;");
+ $self->pidl("if ($var_name == NULL) {");
+ $self->indent;
+ $self->pidl("return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL [ref] pointer\");");
+ $self->deindent;
+ $self->pidl("}");
if ($l->{LEVEL} eq "EMBEDDED") {
$self->pidl("NDR_CHECK(ndr_push_ref_ptr(ndr));");
}
@@ -875,7 +885,9 @@ sub ParseSwitchPull($$$$$$)
{
my($self,$e,$l,$ndr,$var_name,$env) = @_;
my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e->{ORIGINAL},
- check_null_pointer($e, $env, sub { $self->pidl(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
+ check_null_pointer($e, $env, sub { $self->pidl(shift); },
+ "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for switch_is()\");"),
+ check_fully_dereferenced($e, $env));
$var_name = get_pointer_to($var_name);
$self->pidl("NDR_CHECK(ndr_pull_set_switch_value($ndr, $var_name, $switch_var));");
@@ -887,7 +899,9 @@ sub ParseSwitchPush($$$$$$)
{
my($self,$e,$l,$ndr,$var_name,$env) = @_;
my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e->{ORIGINAL},
- check_null_pointer($e, $env, sub { $self->pidl(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
+ check_null_pointer($e, $env, sub { $self->pidl(shift); },
+ "return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for switch_is()\");"),
+ check_fully_dereferenced($e, $env));
$var_name = get_pointer_to($var_name);
$self->pidl("NDR_CHECK(ndr_push_set_switch_value($ndr, $var_name, $switch_var));");
@@ -2222,9 +2236,10 @@ sub ParseFunctionPull($$)
and $e->{LEVELS}[1]->{IS_ZERO_TERMINATED});
if ($e->{LEVELS}[1]->{TYPE} eq "ARRAY") {
- my $size = ParseExprExt($e->{LEVELS}[1]->{SIZE_IS}, $env, $e->{ORIGINAL}, check_null_pointer($e, $env, sub { $self->pidl(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"),
+ my $size = ParseExprExt($e->{LEVELS}[1]->{SIZE_IS}, $env, $e->{ORIGINAL},
+ check_null_pointer($e, $env, sub { $self->pidl(shift); },
+ "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for size_is()\");"),
check_fully_dereferenced($e, $env));
-
$self->pidl("NDR_PULL_ALLOC_N(ndr, r->out.$e->{NAME}, $size);");
if (grep(/in/, @{$e->{DIRECTION}})) {
@@ -2377,13 +2392,15 @@ sub HeaderInclude
# generate prototypes and defines for the interface definitions
# FIXME: these prototypes are for the DCE/RPC client functions, not the
# NDR parser and so do not belong here, technically speaking
-sub HeaderInterface($$)
+sub HeaderInterface($$$)
{
- my($self,$interface) = @_;
+ my($self,$interface,$needed) = @_;
my $count = 0;
- $self->pidl_hdr(choose_header("librpc/ndr/libndr.h", "ndr.h"));
+ if ($needed->{"compression"}) {
+ $self->pidl(choose_header("librpc/ndr/ndr_compression.h", "ndr/compression.h"));
+ }
if (has_property($interface, "object")) {
$self->pidl(choose_header("librpc/gen_ndr/ndr_orpc.h", "ndr/orpc.h"));
@@ -2544,11 +2561,7 @@ sub ParseInterface($$$)
$self->pidl_hdr("");
- if ($needed->{"compression"}) {
- $self->pidl(choose_header("librpc/ndr/ndr_compression.h", "ndr/compression.h"));
- }
-
- $self->HeaderInterface($interface);
+ $self->HeaderInterface($interface, $needed);
# Typedefs
foreach my $d (@{$interface->{TYPES}}) {
@@ -2594,12 +2607,6 @@ sub GenerateIncludes($)
$self->pidl("#include <stdarg.h>");
$self->pidl("#include <string.h>");
}
-
- # Samba3 has everything in include/includes.h
- if (is_intree() != 3) {
- $self->pidl(choose_header("libcli/util/ntstatus.h", "core/ntstatus.h"));
- $self->pidl(choose_header("librpc/gen_ndr/ndr_misc.h", "gen_ndr/ndr_misc.h"));
- }
}
#####################################################################
@@ -2610,6 +2617,7 @@ sub Parse($$$$)
$self->pidl_hdr("/* header auto-generated by pidl */");
$self->pidl_hdr("");
+ $self->pidl_hdr(choose_header("librpc/ndr/libndr.h", "ndr.h"));
$self->pidl_hdr("#include \"$gen_header\"") if ($gen_header);
$self->pidl_hdr("");
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/TDR.pm b/tools/pidl/lib/Parse/Pidl/Samba4/TDR.pm
index 832a2c5463..568dff5adf 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/TDR.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/TDR.pm
@@ -265,7 +265,7 @@ sub Parser($$$$)
$self->pidl("#include <stdint.h>");
$self->pidl("#include <stdarg.h>");
$self->pidl("#include <string.h>");
- $self->pidl("#include <core/nterr.h>");
+ $self->pidl("#include <core/ntstatus.h>");
}
$self->pidl("#include \"$hdrname\"");
$self->pidl("");
diff --git a/tools/pidl/tests/Util.pm b/tools/pidl/tests/Util.pm
index c7fca95aaa..82ab130e5a 100644
--- a/tools/pidl/tests/Util.pm
+++ b/tools/pidl/tests/Util.pm
@@ -47,6 +47,9 @@ use Parse::Pidl::Samba4::Header;
sub test_samba4_ndr
{
my ($name,$idl,$c,$extra) = @_;
+
+ $extra = "" unless defined($extra);
+
my $pidl = Parse::Pidl::IDL::parse_string("interface echo { $idl }; ", "<$name>");
ok(defined($pidl), "($name) parse idl");
@@ -66,8 +69,49 @@ SKIP: {
skip "no samba environment available, skipping compilation", 3
if (system("pkg-config --exists ndr") != 0);
- my $test_data_prefix = $ENV{TEST_DATA_PREFIX};
+ my $main = "
+#define uint_t unsigned int
+#define _GNU_SOURCE
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdarg.h>
+#include <util/data_blob.h>
+
+/* header start */
+$header
+/* header end */
+
+/* ndrheader start */
+$ndrheader
+/* ndrheader end */
+
+/* extra start */
+$extra
+/* extra end */
+
+/* ndrparser start */
+$ndrparser
+/* ndrparser end */
+
+/* main start */
+int main(int argc, const char **argv)
+{
+ TALLOC_CTX *mem_ctx = talloc_init(NULL);
+
+$c
+
+ talloc_free(mem_ctx);
+ return 0;
+}
+/* main end */
+\n";
+
+ my $main_debug = "# ".join("\n# ", split("\n", $main));
+
+ my $test_data_prefix = $ENV{TEST_DATA_PREFIX};
my $outfile;
if (defined($test_data_prefix)) {
$outfile = "$test_data_prefix/test-$name";
@@ -95,32 +139,13 @@ SKIP: {
my $cmd = "$cc $cflags -x c - -o $outfile $flags $ldflags";
$cmd =~ s/\n//g;
open CC, "|$cmd";
- print CC "#define uint_t unsigned int\n";
- print CC "#define _GNU_SOURCE\n";
- print CC "#include <stdint.h>\n";
- print CC "#include <stdlib.h>\n";
- print CC "#include <stdio.h>\n";
- print CC "#include <stdbool.h>\n";
- print CC "#include <stdarg.h>\n";
- print CC "#include <util/data_blob.h>\n";
- print CC $header;
- print CC $ndrheader;
- print CC $extra if ($extra);
- print CC $ndrparser;
- print CC "int main(int argc, const char **argv)
-{
- TALLOC_CTX *mem_ctx = talloc_init(NULL);
-
- $c
-
- talloc_free(mem_ctx);
-
- return 0; }\n";
+ print CC $main;
close CC;
ok(-f $outfile, "($name) compile");
my $ret = system($outfile, ()) >> 8;
+ print "# code:\n#\n$main_debug\n" if ($ret != 0);
print "# cmd: $cmd\n" if ($ret != 0);
print "# return code: $ret\n" if ($ret != 0);
diff --git a/tools/pidl/tests/ndr_align.pl b/tools/pidl/tests/ndr_align.pl
index 0824acc501..28b29d9196 100755
--- a/tools/pidl/tests/ndr_align.pl
+++ b/tools/pidl/tests/ndr_align.pl
@@ -24,7 +24,7 @@ test_samba4_ndr('align-uint8-uint16',
r.x = 13;
r.y = 0xbeef;
- if (NT_STATUS_IS_ERR(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -49,7 +49,7 @@ test_samba4_ndr('align-uint8-uint32',
r.x = 13;
r.y = 0xbeefbeef;
- if (NT_STATUS_IS_ERR(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -70,13 +70,13 @@ test_samba4_ndr('align-uint8-hyper',
struct ndr_push *ndr = ndr_push_init_ctx(NULL);
struct bla r;
uint8_t expected[] = { 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xef, 0xbe, 0xef, 0xbe, 0xef, 0xbe, 0xef, 0xbe };
+ 0xef, 0xbe, 0xef, 0xbe, 0xef, 0xbe, 0xef, 0xbe };
DATA_BLOB expected_blob = { expected, 16 };
DATA_BLOB result_blob;
r.x = 13;
- r.y = 0xbeefbeefbeefbeef;
+ r.y = 0xbeefbeefbeefbeefLLU;
- if (NT_STATUS_IS_ERR(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -103,7 +103,7 @@ test_samba4_ndr('noalignflag-uint8-uint16',
r.x = 13;
r.y = 0xbeef;
- if (NT_STATUS_IS_ERR(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -133,7 +133,7 @@ test_samba4_ndr('align-blob-align2',
r.data.data = data;
r.data.length = 2;
- if (NT_STATUS_IS_ERR(ndr_push_blie(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_blie(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
diff --git a/tools/pidl/tests/ndr_alloc.pl b/tools/pidl/tests/ndr_alloc.pl
index 61df1c3548..b1c7ae08c3 100755
--- a/tools/pidl/tests/ndr_alloc.pl
+++ b/tools/pidl/tests/ndr_alloc.pl
@@ -23,7 +23,7 @@ test_samba4_ndr("alloc-scalar",
struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL);
struct TestAlloc r;
- if (NT_STATUS_IS_ERR(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
return 1;
if (r.in.foo.x == NULL)
@@ -47,7 +47,7 @@ test_samba4_ndr("alloc-buffer",
struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL);
struct TestAlloc r;
- if (NT_STATUS_IS_ERR(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
return 1;
if (r.in.foo.x == NULL)
@@ -86,7 +86,7 @@ test_samba4_ndr("ref-noalloc",
uint8_t x;
r.in.t = &x;
- if (NT_STATUS_IS_ERR(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
return 1;
if (*r.in.t != 0x03)
@@ -106,7 +106,7 @@ test_samba4_ndr("ref-alloc",
ndr->flags |= LIBNDR_FLAG_REF_ALLOC;
r.in.t = NULL;
- if (NT_STATUS_IS_ERR(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
return 1;
if (r.in.t == NULL)
diff --git a/tools/pidl/tests/ndr_array.pl b/tools/pidl/tests/ndr_array.pl
index 27f42cd391..8e40d36a10 100755
--- a/tools/pidl/tests/ndr_array.pl
+++ b/tools/pidl/tests/ndr_array.pl
@@ -25,7 +25,7 @@ test_samba4_ndr(
b.length = 10;
ndr = ndr_pull_init_blob(&b, mem_ctx);
- if (NT_STATUS_IS_ERR(ndr_pull_Test(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_Test(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 10)
diff --git a/tools/pidl/tests/ndr_fullptr.pl b/tools/pidl/tests/ndr_fullptr.pl
index 482edcf030..2188905b13 100755
--- a/tools/pidl/tests/ndr_fullptr.pl
+++ b/tools/pidl/tests/ndr_fullptr.pl
@@ -23,7 +23,7 @@ test_samba4_ndr("fullptr-push-dup",
r.in.x = &v;
r.in.y = &v;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestFull(ndr, NDR_IN, &r))) {
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestFull(ndr, NDR_IN, &r))) {
fprintf(stderr, "push failed\n");
return 1;
}
diff --git a/tools/pidl/tests/ndr_refptr.pl b/tools/pidl/tests/ndr_refptr.pl
index 4a56e3ca38..d5e73559d9 100755
--- a/tools/pidl/tests/ndr_refptr.pl
+++ b/tools/pidl/tests/ndr_refptr.pl
@@ -23,7 +23,7 @@ test_samba4_ndr("noptr-push",
struct echo_TestRef r;
r.in.foo.x = v;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r))) {
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r))) {
fprintf(stderr, "push failed\n");
return 1;
}
@@ -52,7 +52,7 @@ test_samba4_ndr("ptr-embedded-push",
struct echo_TestRef r;
r.in.foo.x = &v;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 6)
@@ -78,7 +78,7 @@ test_samba4_ndr("ptr-embedded-push-null",
struct echo_TestRef r;
r.in.foo.x = NULL;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 4)
@@ -103,7 +103,7 @@ test_samba4_ndr("refptr-embedded-push",
struct echo_TestRef r;
r.in.foo.x = &v;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 6)
@@ -150,7 +150,7 @@ test_samba4_ndr("ptr-top-push",
s.x = 13;
r.in.foo = &s;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 2)
@@ -195,7 +195,7 @@ test_samba4_ndr("refptr-top-push",
s.x = 13;
r.in.foo = &s;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 2)
@@ -239,7 +239,7 @@ test_samba4_ndr("uniqueptr-top-push",
s.x = 13;
r.in.foo = &s;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 6)
@@ -265,7 +265,7 @@ test_samba4_ndr("uniqueptr-top-push-null",
struct echo_TestRef r;
r.in.foo = NULL;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 4)
@@ -294,7 +294,7 @@ test_samba4_ndr("ptr-top-out-pull",
r.out.foo = &s;
- if (NT_STATUS_IS_ERR(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))
return 1;
if (!r.out.foo)
@@ -344,7 +344,7 @@ test_samba4_ndr("refptr-top-out-pull",
r.out.foo = &s;
- if (NT_STATUS_IS_ERR(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))
return 1;
if (!r.out.foo)
@@ -387,7 +387,7 @@ test_samba4_ndr("ptr-top-push-double",
uint16_t *pv = &v;
r.in.foo = &pv;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 6)
@@ -413,7 +413,7 @@ test_samba4_ndr("ptr-top-push-double-sndnull",
uint16_t *pv = NULL;
r.in.foo = &pv;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 4)
@@ -451,7 +451,7 @@ test_samba4_ndr("refptr-top-push-double",
uint16_t *pv = &v;
r.in.foo = &pv;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 6)
@@ -478,7 +478,7 @@ test_samba4_ndr("refptr-top-push-double-sndnull",
uint16_t *pv = NULL;
r.in.foo = &pv;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 4)
diff --git a/tools/pidl/tests/ndr_represent.pl b/tools/pidl/tests/ndr_represent.pl
index 52cd06f817..b5ee312668 100644
--- a/tools/pidl/tests/ndr_represent.pl
+++ b/tools/pidl/tests/ndr_represent.pl
@@ -18,14 +18,14 @@ test_samba4_ndr('represent_as-simple',
struct ndr_pull *ndr = ndr_pull_init_blob(&in_blob, NULL);
struct bla r;
- if (NT_STATUS_IS_ERR(ndr_pull_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
if (r.in.x != 13)
return 2;
',
'
-#include <libcli/util/nterr.h>
+#include <libcli/util/ntstatus.h>
NTSTATUS ndr_uint8_to_uint32(uint8_t from, uint32_t *to)
{
@@ -51,14 +51,14 @@ test_samba4_ndr('transmit_as-simple',
struct ndr_pull *ndr = ndr_pull_init_blob(&in_blob, NULL);
struct bla r;
- if (NT_STATUS_IS_ERR(ndr_pull_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
if (r.in.x != 13)
return 2;
',
'
-#include <libcli/util/nterr.h>
+#include <libcli/util/ntstatus.h>
NTSTATUS ndr_uint8_to_uint32(uint8_t from, uint32_t *to)
{
diff --git a/tools/pidl/tests/ndr_simple.pl b/tools/pidl/tests/ndr_simple.pl
index 02803ceea9..466a164df4 100755
--- a/tools/pidl/tests/ndr_simple.pl
+++ b/tools/pidl/tests/ndr_simple.pl
@@ -9,20 +9,20 @@ use FindBin qw($RealBin);
use lib "$RealBin";
use Util qw(test_samba4_ndr);
-test_samba4_ndr("simple", "void Test(); ",
+test_samba4_ndr("simple", "void Test(); ",
"
- uint8_t data[] = { 0x02 };
- uint8_t result;
- DATA_BLOB b;
- struct ndr_pull *ndr;
-
- b.data = data;
- b.length = 1;
- ndr = ndr_pull_init_blob(&b, mem_ctx);
-
- if (NT_STATUS_IS_ERR(ndr_pull_uint8(ndr, NDR_SCALARS, &result)))
- return 1;
-
- if (result != 0x02)
- return 2;
+ uint8_t data[] = { 0x02 };
+ uint8_t result;
+ DATA_BLOB b;
+ struct ndr_pull *ndr;
+
+ b.data = data;
+ b.length = 1;
+ ndr = ndr_pull_init_blob(&b, mem_ctx);
+
+ if (!NT_STATUS_IS_OK(ndr_pull_uint8(ndr, NDR_SCALARS, &result)))
+ return 1;
+
+ if (result != 0x02)
+ return 2;
");
diff --git a/tools/pidl/tests/ndr_string.pl b/tools/pidl/tests/ndr_string.pl
index 23d94be640..4568ec89b8 100755
--- a/tools/pidl/tests/ndr_string.pl
+++ b/tools/pidl/tests/ndr_string.pl
@@ -18,7 +18,7 @@ test_samba4_ndr("string-pull-empty",
struct TestString r;
r.in.data = NULL;
- if (NT_STATUS_IS_ERR(ndr_pull_TestString(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestString(ndr, NDR_IN, &r)))
return 1;
if (r.in.data == NULL)
@@ -40,7 +40,7 @@ test_samba4_ndr("string-ascii-pull",
struct TestString r;
r.in.data = NULL;
- if (NT_STATUS_IS_ERR(ndr_pull_TestString(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestString(ndr, NDR_IN, &r)))
return 1;
if (r.in.data == NULL)
@@ -69,7 +69,7 @@ test_samba4_ndr("string-out",
char *str = NULL;
r.out.data = &str;
- if (NT_STATUS_IS_ERR(ndr_pull_TestString(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestString(ndr, NDR_IN, &r)))
return 1;
if (r.out.data == NULL)
diff --git a/tools/pidl/tests/ndr_tagtype.pl b/tools/pidl/tests/ndr_tagtype.pl
index f8250a90ef..7f5c24627a 100755
--- a/tools/pidl/tests/ndr_tagtype.pl
+++ b/tools/pidl/tests/ndr_tagtype.pl
@@ -17,7 +17,7 @@ test_samba4_ndr('struct-notypedef', '[public] struct bla { uint8 x; }; ',
DATA_BLOB result_blob;
r.x = 13;
- if (NT_STATUS_IS_ERR(ndr_push_STRUCT_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_STRUCT_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -30,13 +30,13 @@ test_samba4_ndr('struct-notypedef-used', '[public] struct bla { uint8 x; };
[public] void myfn([in] struct bla r); ',
'
struct ndr_push *ndr = ndr_push_init_ctx(NULL);
- struct bla r;
+ struct myfn fn;
uint8_t expected[] = { 0x0D };
DATA_BLOB expected_blob = { expected, 1 };
DATA_BLOB result_blob;
- r.x = 13;
+ fn.in.r.x = 13;
- if (NT_STATUS_IS_ERR(ndr_push_myfn(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_myfn(ndr, NDR_IN, &fn)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -47,16 +47,16 @@ test_samba4_ndr('struct-notypedef-used', '[public] struct bla { uint8 x; };
test_samba4_ndr('struct-notypedef-embedded', 'struct bla { uint8 x; };
- [public] struct myfn { struct bla r; }; ',
+ [public] struct myst { struct bla r; }; ',
'
struct ndr_push *ndr = ndr_push_init_ctx(NULL);
- struct bla r;
+ struct myst st;
uint8_t expected[] = { 0x0D };
DATA_BLOB expected_blob = { expected, 1 };
DATA_BLOB result_blob;
- r.x = 13;
+ st.r.x = 13;
- if (NT_STATUS_IS_ERR(ndr_push_STRUCT_myfn(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_STRUCT_myst(ndr, NDR_IN, &st)))
return 1;
result_blob = ndr_push_blob(ndr);