diff options
author | Andreas Schneider <asn@samba.org> | 2011-03-24 13:45:32 +0100 |
---|---|---|
committer | Simo Sorce <idra@samba.org> | 2011-03-24 14:57:13 -0400 |
commit | edc26007bf50ce165b8f8dfba5e1c7f86f6918e6 (patch) | |
tree | 1cfd93a3b14898f7a846419203d657d81201ba7a | |
parent | 95daebe1c339cefe87bcb5d4e2afc79a45af3b62 (diff) | |
download | samba-edc26007bf50ce165b8f8dfba5e1c7f86f6918e6.tar.gz samba-edc26007bf50ce165b8f8dfba5e1c7f86f6918e6.tar.bz2 samba-edc26007bf50ce165b8f8dfba5e1c7f86f6918e6.zip |
librpc: Return an error if we a broken floor.
Pair-Programmed-With: Simo Sorce <idra@samba.org>
-rw-r--r-- | librpc/rpc/binding.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/librpc/rpc/binding.c b/librpc/rpc/binding.c index 59d508adca..422537e1f4 100644 --- a/librpc/rpc/binding.c +++ b/librpc/rpc/binding.c @@ -653,6 +653,15 @@ _PUBLIC_ NTSTATUS dcerpc_binding_from_tower(TALLOC_CTX *mem_ctx, NTSTATUS status; struct dcerpc_binding *binding; + /* + * A tower needs to have at least 4 floors to carry useful + * information. Floor 3 is the transport identifier which defines + * how many floors are required at least. + */ + if (tower->num_floors < 4) { + return NT_STATUS_INVALID_PARAMETER; + } + binding = talloc_zero(mem_ctx, struct dcerpc_binding); NT_STATUS_HAVE_NO_MEMORY(binding); @@ -669,10 +678,6 @@ _PUBLIC_ NTSTATUS dcerpc_binding_from_tower(TALLOC_CTX *mem_ctx, return NT_STATUS_NOT_SUPPORTED; } - if (tower->num_floors < 1) { - return NT_STATUS_OK; - } - /* Set object uuid */ status = dcerpc_floor_get_lhs_data(&tower->floors[0], &binding->object); |