svn commit: samba r6449 - in branches/tmp/pidl2/source: build/pidl
librpc/ndr librpc/rpc
jelmer at samba.org
jelmer at samba.org
Sun Apr 24 07:33:51 GMT 2005
Author: jelmer
Date: 2005-04-24 07:33:50 +0000 (Sun, 24 Apr 2005)
New Revision: 6449
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=6449
Log:
Some more fixes and name fixes (conformant arrays are treated differently
of regular arrays in only one place now)
Modified:
branches/tmp/pidl2/source/build/pidl/ndr.pm
branches/tmp/pidl2/source/build/pidl/ndr_parser.pm
branches/tmp/pidl2/source/librpc/ndr/libndr.h
branches/tmp/pidl2/source/librpc/ndr/ndr_sec.c
branches/tmp/pidl2/source/librpc/rpc/dcerpc.c
Changeset:
Modified: branches/tmp/pidl2/source/build/pidl/ndr.pm
===================================================================
--- branches/tmp/pidl2/source/build/pidl/ndr.pm 2005-04-24 06:12:51 UTC (rev 6448)
+++ branches/tmp/pidl2/source/build/pidl/ndr.pm 2005-04-24 07:33:50 UTC (rev 6449)
@@ -213,8 +213,11 @@
{
my $e = shift;
- return ($e->{TYPE} eq "string") and
- util::property_matches($e, "flag", ".*LIBNDR_FLAG_STR_CONFORMANT.*");
+ return 0; #FIXME
+
+ return ($e->{TYPE} eq "string") and ($e->{POINTERS} == 0)
+ and util::property_matches($e, "flag", ".*LIBNDR_FLAG_STR_CONFORMANT.*")
+ and $e->{PARENT}->{TYPE} ne "FUNCTION";
}
#####################################################################
Modified: branches/tmp/pidl2/source/build/pidl/ndr_parser.pm
===================================================================
--- branches/tmp/pidl2/source/build/pidl/ndr_parser.pm 2005-04-24 06:12:51 UTC (rev 6448)
+++ branches/tmp/pidl2/source/build/pidl/ndr_parser.pm 2005-04-24 07:33:50 UTC (rev 6449)
@@ -296,36 +296,6 @@
}
}
-#####################################################################
-# check the size_is and length_is constraints
-sub CheckArraySizes($$$$)
-{
- my $e = shift;
- my $l = shift;
- my $var_name = shift;
- my $env = shift;
-
- if ($l->{IS_CONFORMANT}) {
- my $size = ParseExpr($l->{SIZE_IS}, $env);
- pidl "if ($var_name) {";
- indent;
- check_null_pointer($size);
- pidl "NDR_CHECK(ndr_check_array_size(ndr, (void*)" . get_pointer_to($var_name) . ", $size));";
- deindent;
- pidl "}";
- }
-
- if ($l->{IS_VARYING}) {
- my $length = ParseExpr($l->{LENGTH_IS}, $env);
- pidl "if ($var_name) {";
- indent;
- check_null_pointer($length);
- pidl "NDR_CHECK(ndr_check_array_length(ndr, (void*)" . get_pointer_to($var_name) . ", $length));";
- deindent;
- pidl "}"
- }
-}
-
sub ParseArrayPullPreceding($$$$)
{
my $e = shift;
@@ -369,9 +339,6 @@
ParseArrayPullPreceding($e, $l, $var_name, $ndr_flags);
}
- if (!$l->{IS_FIXED}) {
- AllocateArrayLevel($e,$l,$ndr,$env,$size);
- }
if ($l->{IS_VARYING}) {
pidl "NDR_CHECK(ndr_pull_array_length($ndr, " . get_pointer_to($var_name) . "));";
@@ -383,11 +350,27 @@
if ($length ne $size) {
pidl "if ($length > $size) {";
indent;
- pidl "return ndr_pull_error($ndr, NDR_ERR_CONFORMANT_SIZE, \"Bad conformant size %u should be %u\", $size, $length);";
+ pidl "return ndr_pull_error($ndr, NDR_ERR_ARRAY_SIZE, \"Bad array size %u should exceed array length %u\", $size, $length);";
deindent;
pidl "}";
}
+ if ($l->{IS_CONFORMANT}) {
+ my $size = ParseExpr($l->{SIZE_IS}, $env);
+ check_null_pointer($size);
+ pidl "NDR_CHECK(ndr_check_array_size(ndr, (void*)" . get_pointer_to($var_name) . ", $size));";
+ }
+
+ if ($l->{IS_VARYING}) {
+ my $length = ParseExpr($l->{LENGTH_IS}, $env);
+ check_null_pointer($length);
+ pidl "NDR_CHECK(ndr_check_array_length(ndr, (void*)" . get_pointer_to($var_name) . ", $length));";
+ }
+
+ if (!$l->{IS_FIXED}) {
+ AllocateArrayLevel($e,$l,$ndr,$env,$size);
+ }
+
if (Ndr::is_scalar_type($e->{TYPE})) {
pidl "NDR_CHECK(ndr_pull_array_$e->{TYPE}($ndr, $ndr_flags, $var_name, $length));";
} else {
@@ -623,7 +606,7 @@
}
my $advance;
- if (defined($l->{SUBCONTEXT_SIZE})) {
+ if (defined($l->{SUBCONTEXT_SIZE}) and ($l->{SUBCONTEXT_SIZE} ne "-1")) {
$advance = $l->{SUBCONTEXT_SIZE};
} elsif ($l->{HEADER_SIZE}) {
$advance = "$ndr->data_size";
@@ -1004,6 +987,7 @@
}
pidl "NDR_ALLOC($ndr, $var_name);";
+ #pidl "memset($var_name, 0, sizeof($var_name));";
if ($l->{POINTER_TYPE} eq "relative") {
pidl "NDR_CHECK(ndr_pull_relative_ptr1($ndr, $var_name, _ptr_$e->{NAME}));";
}
@@ -1336,13 +1320,6 @@
ParseElementPull($e, "ndr", "r->", $env, 0, 1);
}
- foreach my $e (@{$struct->{ELEMENTS}}) {
- foreach my $l (@{$e->{LEVELS}}) {
- next unless ($l->{TYPE} eq "ARRAY");
- CheckArraySizes($e, $l, "r->$e->{NAME}", $env);
- }
- }
-
pidl "ndr_pull_struct_end(ndr);";
pidl "done:";
@@ -1829,24 +1806,13 @@
check_null_pointer($size);
pidl "NDR_ALLOC_N($ndr, $var, $size);";
+ #pidl "memset($var, 0, $size * sizeof(" . $var . "[0]));";
if (grep(/in/,@{$e->{DIRECTION}}) and
grep(/out/,@{$e->{DIRECTION}})) {
pidl "memcpy(r->out.$e->{NAME},r->in.$e->{NAME},$size * sizeof(*r->in.$e->{NAME}));";
}
}
-sub AllocateDataLevel($$$$)
-{
- my $e = shift;
- my $l = shift;
- my $ndr = shift;
- my $env = shift;
-
- my $var = ParseExpr($e->{NAME}, $env);
-
- pidl "NDR_ALLOC($ndr, $var);";
-}
-
#####################################################################
# parse a function
sub ParseFunctionPull($)
@@ -1893,14 +1859,6 @@
ParseElementPull($e, "ndr", "r->in.", $env, 1, 1);
}
- foreach my $e (@{$fn->{ELEMENTS}}) {
- next unless grep (/in/, @{$e->{DIRECTION}});
- foreach my $l (@{$e->{LEVELS}}) {
- next unless ($l->{TYPE} eq "ARRAY");
- CheckArraySizes($e, $l, "r->in.$e->{NAME}", $env);
- }
- }
-
pidl "ndr_out:";
pidl "if (!(flags & NDR_OUT)) goto done;";
pidl "";
@@ -1910,14 +1868,6 @@
ParseElementPull($e, "ndr", "r->out.", $env, 1, 1);
}
- foreach my $e (@{$fn->{ELEMENTS}}) {
- next unless grep(/out/, @{$e->{DIRECTION}});
- foreach my $l (@{$e->{LEVELS}}) {
- next unless ($l->{TYPE} eq "ARRAY");
- CheckArraySizes($e, $l, "r->out.$e->{NAME}", $env);
- }
- }
-
if ($fn->{RETURN_TYPE}) {
pidl "NDR_CHECK(ndr_pull_$fn->{RETURN_TYPE}(ndr, NDR_SCALARS, &r->out.result));";
}
Modified: branches/tmp/pidl2/source/librpc/ndr/libndr.h
===================================================================
--- branches/tmp/pidl2/source/librpc/ndr/libndr.h 2005-04-24 06:12:51 UTC (rev 6448)
+++ branches/tmp/pidl2/source/librpc/ndr/libndr.h 2005-04-24 07:33:50 UTC (rev 6449)
@@ -145,7 +145,6 @@
enum ndr_err_code {
- NDR_ERR_CONFORMANT_SIZE,
NDR_ERR_ARRAY_SIZE,
NDR_ERR_BAD_SWITCH,
NDR_ERR_OFFSET,
Modified: branches/tmp/pidl2/source/librpc/ndr/ndr_sec.c
===================================================================
--- branches/tmp/pidl2/source/librpc/ndr/ndr_sec.c 2005-04-24 06:12:51 UTC (rev 6448)
+++ branches/tmp/pidl2/source/librpc/ndr/ndr_sec.c 2005-04-24 07:33:50 UTC (rev 6449)
@@ -37,8 +37,8 @@
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &num_auths));
NDR_CHECK(ndr_pull_dom_sid(ndr, ndr_flags, sid));
if (sid->num_auths != num_auths) {
- return ndr_pull_error(ndr, NDR_ERR_CONFORMANT_SIZE,
- "Bad conformant size %u should be %u",
+ return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE,
+ "Bad array size %u should exceed %u",
num_auths, sid->num_auths);
}
return NT_STATUS_OK;
Modified: branches/tmp/pidl2/source/librpc/rpc/dcerpc.c
===================================================================
--- branches/tmp/pidl2/source/librpc/rpc/dcerpc.c 2005-04-24 06:12:51 UTC (rev 6448)
+++ branches/tmp/pidl2/source/librpc/rpc/dcerpc.c 2005-04-24 07:33:50 UTC (rev 6449)
@@ -1277,7 +1277,7 @@
if (pull->offset != pull->data_size) {
DEBUG(0,("Warning! ignoring %d unread bytes in rpc packet!\n",
pull->data_size - pull->offset));
- /* we used return NT_STATUS_INFO_LENGTH_MISMATCH here,
+ /* we used to return NT_STATUS_INFO_LENGTH_MISMATCH here,
but it turns out that early versions of NT
(specifically NT3.1) add junk onto the end of rpc
packets, so if we want to interoperate at all with
More information about the samba-cvs
mailing list