summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2005-12-27 16:22:35 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:47:48 -0500
commitd658de65d32e6746ac51aeb4da7aa74b3da40c2b (patch)
tree3057af6864b3eb0b26d523aa4c100213380551f5
parent8270e1e31071d23915cc3aa408ad6c7074ea1c11 (diff)
downloadsamba-d658de65d32e6746ac51aeb4da7aa74b3da40c2b.tar.gz
samba-d658de65d32e6746ac51aeb4da7aa74b3da40c2b.tar.bz2
samba-d658de65d32e6746ac51aeb4da7aa74b3da40c2b.zip
r12512: Use GUID structs in API functions everywhere rather then converting back and
forth between GUID structs and strings in several places. (This used to be commit 3564e2f967ef72d6301b4f7e9a311cebcded4d75)
-rw-r--r--source4/lib/com/dcom/main.c7
-rw-r--r--source4/lib/messaging/messaging.c5
-rw-r--r--source4/librpc/idl/krb5pac.idl1
-rw-r--r--source4/librpc/rpc/dcerpc.c4
-rw-r--r--source4/librpc/rpc/dcerpc.h2
-rw-r--r--source4/librpc/rpc/dcerpc_util.c31
-rw-r--r--source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm4
-rw-r--r--source4/pidl/lib/Parse/Pidl/Samba4/NDR/Server.pm9
-rw-r--r--source4/pidl/lib/Parse/Pidl/Util.pm16
-rw-r--r--source4/rpc_server/dcerpc_server.c58
-rw-r--r--source4/rpc_server/dcerpc_server.h4
-rw-r--r--source4/rpc_server/epmapper/rpc_epmapper.c2
-rw-r--r--source4/rpc_server/remote/dcesrv_remote.c6
-rw-r--r--source4/torture/rpc/bind.c2
-rw-r--r--source4/torture/rpc/epmapper.c4
-rw-r--r--source4/torture/rpc/mgmt.c10
-rw-r--r--source4/torture/rpc/scanner.c18
-rw-r--r--source4/utils/ndrdump.c7
18 files changed, 92 insertions, 98 deletions
diff --git a/source4/lib/com/dcom/main.c b/source4/lib/com/dcom/main.c
index 4a3dde86ec..bfa41f9ef6 100644
--- a/source4/lib/com/dcom/main.c
+++ b/source4/lib/com/dcom/main.c
@@ -262,7 +262,6 @@ NTSTATUS dcom_get_pipe(struct IUnknown *iface, struct dcerpc_pipe **pp)
int i;
struct dcerpc_pipe *p;
TALLOC_CTX *tmp_ctx;
- const char *uuid;
struct dcom_object_exporter *ox;
ox = object_exporter_by_ip(iface->ctx, iface);
@@ -273,8 +272,6 @@ NTSTATUS dcom_get_pipe(struct IUnknown *iface, struct dcerpc_pipe **pp)
iid = iface->vtable->iid;
- uuid = GUID_string(tmp_ctx, &iid);
-
if (p) {
if (!GUID_equal(&p->syntax.uuid, &iid)) {
struct dcerpc_pipe *p2;
@@ -282,7 +279,7 @@ NTSTATUS dcom_get_pipe(struct IUnknown *iface, struct dcerpc_pipe **pp)
/* interface will always be present, so
* idl_iface_by_uuid can't return NULL */
- status = dcerpc_secondary_context(p, &p2, idl_iface_by_uuid(uuid));
+ status = dcerpc_secondary_context(p, &p2, idl_iface_by_uuid(&iid));
if (NT_STATUS_IS_OK(status)) {
p = p2;
@@ -303,7 +300,7 @@ NTSTATUS dcom_get_pipe(struct IUnknown *iface, struct dcerpc_pipe **pp)
DEBUG(1, ("Error parsing string binding"));
} else {
status = dcerpc_pipe_connect_b(NULL, &p, binding,
- idl_iface_by_uuid(uuid),
+ idl_iface_by_uuid(&iid),
iface->ctx->dcom->credentials,
iface->ctx->event_ctx);
}
diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c
index 06eed05404..e3ad8e7e25 100644
--- a/source4/lib/messaging/messaging.c
+++ b/source4/lib/messaging/messaging.c
@@ -479,7 +479,7 @@ NTSTATUS irpc_register(struct messaging_context *msg_ctx,
irpc->callnum = callnum;
irpc->fn = fn;
irpc->private = private;
- GUID_from_string(irpc->table->uuid, &irpc->uuid);
+ irpc->uuid = irpc->table->uuid;
return NT_STATUS_OK;
}
@@ -689,8 +689,7 @@ struct irpc_request *irpc_call_send(struct messaging_context *msg_ctx,
talloc_set_destructor(irpc, irpc_destructor);
/* setup the header */
- status = GUID_from_string(table->uuid, &header.uuid);
- if (!NT_STATUS_IS_OK(status)) goto failed;
+ header.uuid = table->uuid;
header.if_version = table->if_version;
header.callid = irpc->callid;
diff --git a/source4/librpc/idl/krb5pac.idl b/source4/librpc/idl/krb5pac.idl
index dd3eedc7a7..0d614493ed 100644
--- a/source4/librpc/idl/krb5pac.idl
+++ b/source4/librpc/idl/krb5pac.idl
@@ -5,7 +5,6 @@
#include "idl_types.h"
[
- uuid("1-2-3-4"),
version(0.0),
pointer_default(unique),
depends(security,netlogon)
diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c
index b947b4aa5c..10093cfcbb 100644
--- a/source4/librpc/rpc/dcerpc.c
+++ b/source4/librpc/rpc/dcerpc.c
@@ -796,9 +796,7 @@ NTSTATUS dcerpc_init_syntaxes(const struct dcerpc_interface_table *table,
{
NTSTATUS status;
- status = GUID_from_string(table->uuid, &syntax->uuid);
- if (!NT_STATUS_IS_OK(status)) return status;
-
+ syntax->uuid = table->uuid;
syntax->if_version = table->if_version;
status = GUID_from_string(NDR_GUID, &transfer_syntax->uuid);
diff --git a/source4/librpc/rpc/dcerpc.h b/source4/librpc/rpc/dcerpc.h
index 5f13ba3081..058bef1ddf 100644
--- a/source4/librpc/rpc/dcerpc.h
+++ b/source4/librpc/rpc/dcerpc.h
@@ -168,7 +168,7 @@ struct dcerpc_authservice_list {
struct dcerpc_interface_table {
const char *name;
- const char *uuid;
+ struct GUID uuid;
uint32_t if_version;
const char *helpstring;
uint32_t num_calls;
diff --git a/source4/librpc/rpc/dcerpc_util.c b/source4/librpc/rpc/dcerpc_util.c
index 080f5dee6b..3a1e3c6cff 100644
--- a/source4/librpc/rpc/dcerpc_util.c
+++ b/source4/librpc/rpc/dcerpc_util.c
@@ -34,11 +34,11 @@
/*
find the pipe name for a local IDL interface
*/
-const char *idl_pipe_name(const char *uuid, uint32_t if_version)
+const char *idl_pipe_name(const struct GUID *uuid, uint32_t if_version)
{
const struct dcerpc_interface_list *l;
for (l=librpc_dcerpc_pipes();l;l=l->next) {
- if (strcasecmp(l->table->uuid, uuid) == 0 &&
+ if (GUID_equal(&l->table->uuid, uuid) &&
l->table->if_version == if_version) {
return l->table->name;
}
@@ -49,11 +49,11 @@ const char *idl_pipe_name(const char *uuid, uint32_t if_version)
/*
find the number of calls defined by local IDL
*/
-int idl_num_calls(const char *uuid, uint32_t if_version)
+int idl_num_calls(const struct GUID *uuid, uint32_t if_version)
{
const struct dcerpc_interface_list *l;
for (l=librpc_dcerpc_pipes();l;l=l->next){
- if (strcasecmp(l->table->uuid, uuid) == 0 &&
+ if (GUID_equal(&l->table->uuid, uuid) &&
l->table->if_version == if_version) {
return l->table->num_calls;
}
@@ -79,11 +79,11 @@ const struct dcerpc_interface_table *idl_iface_by_name(const char *name)
/*
find a dcerpc interface by uuid
*/
-const struct dcerpc_interface_table *idl_iface_by_uuid(const char *uuid)
+const struct dcerpc_interface_table *idl_iface_by_uuid(const struct GUID *uuid)
{
const struct dcerpc_interface_list *l;
for (l=librpc_dcerpc_pipes();l;l=l->next) {
- if (strcasecmp(l->table->uuid, uuid) == 0) {
+ if (GUID_equal(&l->table->uuid, uuid)) {
return l->table;
}
}
@@ -883,11 +883,7 @@ NTSTATUS dcerpc_epm_map_binding(TALLOC_CTX *mem_ctx, struct dcerpc_binding *bind
ZERO_STRUCT(handle);
ZERO_STRUCT(guid);
- status = GUID_from_string(table->uuid, &binding->object);
- if (NT_STATUS_IS_ERR(status)) {
- return status;
- }
-
+ binding->object = table->uuid;
binding->object_version = table->if_version;
status = dcerpc_binding_build_tower(p, binding, &twr.tower);
@@ -998,7 +994,9 @@ NTSTATUS dcerpc_pipe_auth(struct dcerpc_pipe *p,
}
if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0,("Failed to bind to uuid %s - %s\n", table->uuid, nt_errstr(status)));
+ char *uuid_str = GUID_string(p, &table->uuid);
+ DEBUG(0,("Failed to bind to uuid %s - %s\n", uuid_str, nt_errstr(status)));
+ talloc_free(uuid_str);
}
talloc_free(tmp_ctx);
return status;
@@ -1119,7 +1117,8 @@ NTSTATUS dcerpc_pipe_connect_b(TALLOC_CTX *parent_ctx,
p->conn->event_ctx);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("Failed to map DCERPC endpoint for '%s' - %s\n",
- table->uuid, nt_errstr(status)));
+ GUID_string(tmp_ctx, &table->uuid), nt_errstr(status)));
+ talloc_free(tmp_ctx);
return status;
}
DEBUG(2,("Mapped to DCERPC endpoint %s\n", binding->endpoint));
@@ -1338,11 +1337,7 @@ NTSTATUS dcerpc_secondary_context(struct dcerpc_pipe *p,
p2->context_id = ++p->conn->next_context_id;
- status = GUID_from_string(table->uuid, &p2->syntax.uuid);
- if (!NT_STATUS_IS_OK(status)) {
- talloc_free(p2);
- return status;
- }
+ p2->syntax.uuid = table->uuid;
p2->syntax.if_version = table->if_version;
status = GUID_from_string(NDR_GUID, &p2->transfer_syntax.uuid);
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
index bb9d32487a..2247fcbf81 100644
--- a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
+++ b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
@@ -9,7 +9,7 @@ package Parse::Pidl::Samba4::NDR::Parser;
use strict;
use Parse::Pidl::Typelist qw(hasType getType mapType);
-use Parse::Pidl::Util qw(has_property ParseExpr);
+use Parse::Pidl::Util qw(has_property ParseExpr print_uuid);
use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred);
use vars qw($VERSION);
@@ -2218,7 +2218,7 @@ sub FunctionTable($)
pidl "\nconst struct dcerpc_interface_table dcerpc_table_$interface->{NAME} = {";
pidl "\t.name\t\t= \"$interface->{NAME}\",";
- pidl "\t.uuid\t\t= DCERPC_$uname\_UUID,";
+ pidl "\t.uuid\t\t= ". print_uuid($interface->{UUID}) .",";
pidl "\t.if_version\t= DCERPC_$uname\_VERSION,";
pidl "\t.helpstring\t= DCERPC_$uname\_HELPSTRING,";
pidl "\t.num_calls\t= $count,";
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Server.pm b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Server.pm
index 585209b733..8710f08cc7 100644
--- a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Server.pm
+++ b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Server.pm
@@ -7,6 +7,7 @@
package Parse::Pidl::Samba4::NDR::Server;
use strict;
+use Parse::Pidl::Util;
use vars qw($VERSION);
$VERSION = '0.01';
@@ -76,7 +77,7 @@ sub Boilerplate_Iface($)
my($interface) = shift;
my $name = $interface->{NAME};
my $uname = uc $name;
- my $uuid = Parse::Pidl::Util::make_str(lc($interface->{PROPERTIES}->{uuid}));
+ my $uuid = lc($interface->{PROPERTIES}->{uuid});
my $if_version = $interface->{PROPERTIES}->{version};
pidl "
@@ -187,7 +188,7 @@ static NTSTATUS $name\__op_ndr_push(struct dcesrv_call_state *dce_call, TALLOC_C
static const struct dcesrv_interface $name\_interface = {
.name = \"$name\",
- .uuid = $uuid,
+ .uuid = ".print_uuid($uuid).",
.if_version = $if_version,
.bind = $name\__op_bind,
.unbind = $name\__op_unbind,
@@ -227,10 +228,10 @@ static NTSTATUS $name\__op_init_server(struct dcesrv_context *dce_ctx, const str
return NT_STATUS_OK;
}
-static BOOL $name\__op_interface_by_uuid(struct dcesrv_interface *iface, const char *uuid, uint32_t if_version)
+static BOOL $name\__op_interface_by_uuid(struct dcesrv_interface *iface, const struct GUID *uuid, uint32_t if_version)
{
if ($name\_interface.if_version == if_version &&
- strcmp($name\_interface.uuid, uuid)==0) {
+ GUID_equal(\&$name\_interface.uuid, uuid)) {
memcpy(iface,&$name\_interface, sizeof(*iface));
return True;
}
diff --git a/source4/pidl/lib/Parse/Pidl/Util.pm b/source4/pidl/lib/Parse/Pidl/Util.pm
index ec6a1420ab..ff615a21ba 100644
--- a/source4/pidl/lib/Parse/Pidl/Util.pm
+++ b/source4/pidl/lib/Parse/Pidl/Util.pm
@@ -6,7 +6,7 @@ package Parse::Pidl::Util;
require Exporter;
@ISA = qw(Exporter);
-@EXPORT = qw(has_property property_matches ParseExpr is_constant make_str);
+@EXPORT = qw(has_property property_matches ParseExpr is_constant make_str print_uuid);
use vars qw($VERSION);
$VERSION = '0.01';
@@ -75,6 +75,20 @@ sub make_str($)
return "\"" . $str . "\"";
}
+sub print_uuid($)
+{
+ my ($uuid) = @_;
+ $uuid =~ s/"//g;
+ my ($time_low,$time_mid,$time_hi,$clock_seq,$node) = split /-/, $uuid;
+
+ my @clock_seq = $clock_seq =~ /(..)/g;
+ my @node = $node =~ /(..)/g;
+
+ return "{0x$time_low,0x$time_mid,0x$time_hi," .
+ "{".join(',', map {"0x$_"} @clock_seq)."}," .
+ "{".join(',', map {"0x$_"} @node)."}}";
+}
+
# a hack to build on platforms that don't like negative enum values
my $useUintEnums = 0;
sub setUseUintEnums($)
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c
index a8724b5bb8..facf6bc0af 100644
--- a/source4/rpc_server/dcerpc_server.c
+++ b/source4/rpc_server/dcerpc_server.c
@@ -87,15 +87,8 @@ static struct dcesrv_connection_context *dcesrv_find_context(struct dcesrv_conne
static BOOL interface_match(const struct dcesrv_interface *if1,
const struct dcesrv_interface *if2)
{
- if (if1->if_version != if2->if_version) {
- return False;
- }
-
- if (strcmp(if1->uuid, if2->uuid)==0) {
- return True;
- }
-
- return False;
+ return (if1->if_version == if2->if_version &&
+ GUID_equal(&if1->uuid, &if2->uuid));
}
/*
@@ -117,24 +110,16 @@ static const struct dcesrv_interface *find_interface(const struct dcesrv_endpoin
see if a uuid and if_version match to an interface
*/
static BOOL interface_match_by_uuid(const struct dcesrv_interface *iface,
- const char *uuid, uint32_t if_version)
+ const struct GUID *uuid, uint32_t if_version)
{
- if (iface->if_version != if_version) {
- return False;
- }
-
- if (strcmp(iface->uuid, uuid)==0) {
- return True;
- }
-
- return False;
+ return (iface->if_version == if_version && GUID_equal(&iface->uuid, uuid));
}
/*
find the interface operations on an endpoint by uuid
*/
static const struct dcesrv_interface *find_interface_by_uuid(const struct dcesrv_endpoint *endpoint,
- const char *uuid, uint32_t if_version)
+ const struct GUID *uuid, uint32_t if_version)
{
struct dcesrv_if_list *ifl;
for (ifl=endpoint->interface_list; ifl; ifl=ifl->next) {
@@ -462,8 +447,9 @@ static NTSTATUS dcesrv_bind_nak(struct dcesrv_call_state *call, uint32_t reason)
*/
static NTSTATUS dcesrv_bind(struct dcesrv_call_state *call)
{
- const char *uuid, *transfer_syntax;
+ const char *transfer_syntax;
uint32_t if_version, transfer_syntax_version;
+ struct GUID uuid;
struct ncacn_packet pkt;
struct data_blob_list_item *rep;
NTSTATUS status;
@@ -484,10 +470,7 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state *call)
}
if_version = call->pkt.u.bind.ctx_list[0].abstract_syntax.if_version;
- uuid = GUID_string(call, &call->pkt.u.bind.ctx_list[0].abstract_syntax.uuid);
- if (!uuid) {
- return dcesrv_bind_nak(call, 0);
- }
+ uuid = call->pkt.u.bind.ctx_list[0].abstract_syntax.uuid;
transfer_syntax_version = call->pkt.u.bind.ctx_list[0].transfer_syntaxes[0].if_version;
transfer_syntax = GUID_string(call,
@@ -500,9 +483,12 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state *call)
return dcesrv_bind_nak(call, 0);
}
- iface = find_interface_by_uuid(call->conn->endpoint, uuid, if_version);
+ iface = find_interface_by_uuid(call->conn->endpoint, &uuid, if_version);
if (iface == NULL) {
- DEBUG(2,("Request for unknown dcerpc interface %s/%d\n", uuid, if_version));
+ char *uuid_str = GUID_string(call, &uuid);
+ DEBUG(2,("Request for unknown dcerpc interface %s/%d\n", uuid_str, if_version));
+ talloc_free(uuid_str);
+
/* we don't know about that interface */
result = DCERPC_BIND_PROVIDER_REJECT;
reason = DCERPC_BIND_REASON_ASYNTAX;
@@ -567,8 +553,10 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state *call)
if (iface) {
status = iface->bind(call, iface);
if (!NT_STATUS_IS_OK(status)) {
+ char *uuid_str = GUID_string(call, &uuid);
DEBUG(2,("Request for dcerpc interface %s/%d rejected: %s\n",
- uuid, if_version, nt_errstr(status)));
+ uuid_str, if_version, nt_errstr(status)));
+ talloc_free(uuid_str);
return dcesrv_bind_nak(call, 0);
}
}
@@ -617,15 +605,13 @@ static NTSTATUS dcesrv_auth3(struct dcesrv_call_state *call)
static NTSTATUS dcesrv_alter_new_context(struct dcesrv_call_state *call, uint32_t context_id)
{
uint32_t if_version, transfer_syntax_version;
- const char *uuid, *transfer_syntax;
+ const char *transfer_syntax;
struct dcesrv_connection_context *context;
const struct dcesrv_interface *iface;
+ struct GUID uuid;
if_version = call->pkt.u.alter.ctx_list[0].abstract_syntax.if_version;
- uuid = GUID_string(call, &call->pkt.u.alter.ctx_list[0].abstract_syntax.uuid);
- if (!uuid) {
- return NT_STATUS_NO_MEMORY;
- }
+ uuid = call->pkt.u.alter.ctx_list[0].abstract_syntax.uuid;
transfer_syntax_version = call->pkt.u.alter.ctx_list[0].transfer_syntaxes[0].if_version;
transfer_syntax = GUID_string(call,
@@ -637,9 +623,11 @@ static NTSTATUS dcesrv_alter_new_context(struct dcesrv_call_state *call, uint32_
return NT_STATUS_NO_MEMORY;
}
- iface = find_interface_by_uuid(call->conn->endpoint, uuid, if_version);
+ iface = find_interface_by_uuid(call->conn->endpoint, &uuid, if_version);
if (iface == NULL) {
- DEBUG(2,("Request for unknown dcerpc interface %s/%d\n", uuid, if_version));
+ char *uuid_str = GUID_string(call, &uuid);
+ DEBUG(2,("Request for unknown dcerpc interface %s/%d\n", uuid_str, if_version));
+ talloc_free(uuid_str);
return NT_STATUS_RPC_PROTSEQ_NOT_SUPPORTED;
}
diff --git a/source4/rpc_server/dcerpc_server.h b/source4/rpc_server/dcerpc_server.h
index 9b82b2edcc..e831b70060 100644
--- a/source4/rpc_server/dcerpc_server.h
+++ b/source4/rpc_server/dcerpc_server.h
@@ -37,7 +37,7 @@ struct dcesrv_auth;
struct dcesrv_interface {
const char *name;
- const char *uuid;
+ struct GUID uuid;
uint32_t if_version;
/* this function is called when the client binds to this interface */
@@ -192,7 +192,7 @@ struct dcesrv_endpoint_server {
* ask for a dcesrv_interface implementation
* - iface must be reference to an already existing struct !
*/
- BOOL (*interface_by_uuid)(struct dcesrv_interface *iface, const char *, uint32_t);
+ BOOL (*interface_by_uuid)(struct dcesrv_interface *iface, const struct GUID *, uint32_t);
/* this function can be used by other endpoint servers to
* ask for a dcesrv_interface implementation
diff --git a/source4/rpc_server/epmapper/rpc_epmapper.c b/source4/rpc_server/epmapper/rpc_epmapper.c
index d7d447f852..e7371a632f 100644
--- a/source4/rpc_server/epmapper/rpc_epmapper.c
+++ b/source4/rpc_server/epmapper/rpc_epmapper.c
@@ -77,7 +77,7 @@ static uint32_t build_ep_list(TALLOC_CTX *mem_ctx,
(*eps)[total].name = iface->iface.name;
description = d->ep_description;
- GUID_from_string(iface->iface.uuid, &description->object);
+ description->object = iface->iface.uuid;
description->object_version = iface->iface.if_version;
status = dcerpc_binding_build_tower(mem_ctx, description, &(*eps)[total].ep);
diff --git a/source4/rpc_server/remote/dcesrv_remote.c b/source4/rpc_server/remote/dcesrv_remote.c
index b4f45614f1..4cd4b2b507 100644
--- a/source4/rpc_server/remote/dcesrv_remote.c
+++ b/source4/rpc_server/remote/dcesrv_remote.c
@@ -57,7 +57,7 @@ static NTSTATUS remote_op_bind(struct dcesrv_call_state *dce_call, const struct
pass = lp_parm_string(-1, "dcerpc_remote", "password");
domain = lp_parm_string(-1, "dceprc_remote", "domain");
- table = idl_iface_by_uuid(iface->uuid); /* FIXME: What about if_version ? */
+ table = idl_iface_by_uuid(&iface->uuid); /* FIXME: What about if_version ? */
if (!table) {
dce_call->fault_code = DCERPC_FAULT_UNK_IF;
return NT_STATUS_NET_WRITE_FAULT;
@@ -262,13 +262,13 @@ static BOOL remote_fill_interface(struct dcesrv_interface *iface, const struct d
return True;
}
-static BOOL remote_op_interface_by_uuid(struct dcesrv_interface *iface, const char *uuid, uint32_t if_version)
+static BOOL remote_op_interface_by_uuid(struct dcesrv_interface *iface, const struct GUID *uuid, uint32_t if_version)
{
const struct dcerpc_interface_list *l;
for (l=librpc_dcerpc_pipes();l;l=l->next) {
if (l->table->if_version == if_version &&
- strcmp(l->table->uuid, uuid)==0) {
+ GUID_equal(&l->table->uuid, uuid)==0) {
return remote_fill_interface(iface, l->table);
}
}
diff --git a/source4/torture/rpc/bind.c b/source4/torture/rpc/bind.c
index d27fbb2b11..55ddec2fd5 100644
--- a/source4/torture/rpc/bind.c
+++ b/source4/torture/rpc/bind.c
@@ -64,7 +64,7 @@ BOOL torture_multi_bind(void)
if (NT_STATUS_IS_OK(status)) {
printf("(incorrectly) allowed re-bind to uuid %s - %s\n",
- dcerpc_table_lsarpc.uuid, nt_errstr(status));
+ GUID_string(mem_ctx, &dcerpc_table_lsarpc.uuid), nt_errstr(status));
ret = False;
} else {
printf("\n");
diff --git a/source4/torture/rpc/epmapper.c b/source4/torture/rpc/epmapper.c
index f7935ce2d7..9774b9681c 100644
--- a/source4/torture/rpc/epmapper.c
+++ b/source4/torture/rpc/epmapper.c
@@ -44,7 +44,6 @@ static BOOL test_Map(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
NTSTATUS status;
struct epm_Map r;
struct GUID uuid;
- const char *uuid_str;
struct policy_handle handle;
int i;
struct GUID if_uuid;
@@ -60,10 +59,9 @@ static BOOL test_Map(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.max_towers = 100;
dcerpc_floor_get_lhs_data(&twr->tower.floors[0], &if_uuid, &if_version);
- uuid_str = GUID_string(mem_ctx, &if_uuid);
printf("epm_Map results for '%s':\n",
- idl_pipe_name(uuid_str, if_version));
+ idl_pipe_name(&if_uuid, if_version));
twr->tower.floors[2].lhs.protocol = EPM_PROTOCOL_NCACN;
twr->tower.floors[2].lhs.lhs_data = data_blob(NULL, 0);
diff --git a/source4/torture/rpc/mgmt.c b/source4/torture/rpc/mgmt.c
index 72495c248b..28ac07f607 100644
--- a/source4/torture/rpc/mgmt.c
+++ b/source4/torture/rpc/mgmt.c
@@ -50,15 +50,12 @@ static BOOL test_inq_if_ids(struct dcerpc_pipe *p,
}
for (i=0;i<r.out.if_id_vector->count;i++) {
- const char *uuid;
struct dcerpc_syntax_id *id = r.out.if_id_vector->if_id[i].id;
if (!id) continue;
- uuid = GUID_string(mem_ctx, &id->uuid);
-
printf("\tuuid %s version 0x%08x '%s'\n",
- uuid,
- id->if_version, idl_pipe_name(uuid, id->if_version));
+ GUID_string(mem_ctx, &id->uuid),
+ id->if_version, idl_pipe_name(&id->uuid, id->if_version));
}
return True;
@@ -212,8 +209,9 @@ BOOL torture_rpc_mgmt(void)
if (b->transport == NCACN_IP_TCP) {
status = dcerpc_epm_map_binding(loop_ctx, b, l->table, NULL);
if (!NT_STATUS_IS_OK(status)) {
+ printf("Failed to map port for uuid %s\n",
+ GUID_string(loop_ctx, &l->table->uuid));
talloc_free(loop_ctx);
- printf("Failed to map port for uuid %s\n", l->table->uuid);
continue;
}
} else {
diff --git a/source4/torture/rpc/scanner.c b/source4/torture/rpc/scanner.c
index 1f612fbaee..9ed414e2f4 100644
--- a/source4/torture/rpc/scanner.c
+++ b/source4/torture/rpc/scanner.c
@@ -32,7 +32,6 @@ static BOOL test_num_calls(const struct dcerpc_interface_table *iface,
{
struct dcerpc_pipe *p;
NTSTATUS status;
- const char *uuid;
int i;
DATA_BLOB stub_in, stub_out;
int idl_calls;
@@ -41,14 +40,15 @@ static BOOL test_num_calls(const struct dcerpc_interface_table *iface,
/* FIXME: This should be fixed when torture_rpc_connection
* takes a dcerpc_syntax_id */
tbl.name = iface->name;
- tbl.uuid = GUID_string(mem_ctx, &id->uuid);
+ tbl.uuid = id->uuid;
tbl.if_version = id->if_version;
- status = torture_rpc_connection(mem_ctx,
- &p, iface);
+ status = torture_rpc_connection(mem_ctx, &p, iface);
if (!NT_STATUS_IS_OK(status)) {
+ char *uuid_str = GUID_string(mem_ctx, &id->uuid);
printf("Failed to connect to '%s' on '%s' - %s\n",
- uuid, iface->name, nt_errstr(status));
+ uuid_str, iface->name, nt_errstr(status));
+ talloc_free(uuid_str);
return False;
}
@@ -75,7 +75,7 @@ static BOOL test_num_calls(const struct dcerpc_interface_table *iface,
}
printf("\t%d calls available\n", i);
- idl_calls = idl_num_calls(uuid, id->if_version);
+ idl_calls = idl_num_calls(&id->uuid, id->if_version);
if (idl_calls == -1) {
printf("\tinterface not known in local IDL\n");
} else if (i != idl_calls) {
@@ -125,7 +125,8 @@ static BOOL test_inq_if_ids(struct dcerpc_pipe *p,
printf("\n\tuuid %s version 0x%08x '%s'\n",
uuid,
- id->if_version, idl_pipe_name(uuid, id->if_version));
+ id->if_version, idl_pipe_name(&id->uuid, id->if_version));
+
test_num_calls(iface, mem_ctx, id);
}
@@ -172,8 +173,9 @@ BOOL torture_rpc_scanner(void)
if (b->transport == NCACN_IP_TCP) {
status = dcerpc_epm_map_binding(mem_ctx, b, l->table, NULL);
if (!NT_STATUS_IS_OK(status)) {
+ printf("Failed to map port for uuid %s\n",
+ GUID_string(loop_ctx, &l->table->uuid));
talloc_free(loop_ctx);
- printf("Failed to map port for uuid %s\n", l->table->uuid);
continue;
}
} else {
diff --git a/source4/utils/ndrdump.c b/source4/utils/ndrdump.c
index 611283ee69..abc6d95fb4 100644
--- a/source4/utils/ndrdump.c
+++ b/source4/utils/ndrdump.c
@@ -148,8 +148,13 @@ static char *stdin_load(TALLOC_CTX *mem_ctx, size_t *size)
p = idl_iface_by_name(pipe_name);
if (!p) {
+ struct GUID uuid;
- p = idl_iface_by_uuid(pipe_name);
+ status = GUID_from_string(pipe_name, &uuid);
+
+ if (NT_STATUS_IS_OK(status)) {
+ p = idl_iface_by_uuid(&uuid);
+ }
if (!p) {
printf("Unknown pipe or UUID '%s'\n", pipe_name);