git.samba.org
/
mat
/
samba.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
23fea38
)
s3-netapi: use NetApiBufferAllocate() for returned buffer in getdc calls.
author
Günther Deschner
<gd@samba.org>
Fri, 21 Oct 2011 09:06:14 +0000
(11:06 +0200)
committer
Günther Deschner
<gd@samba.org>
Fri, 21 Oct 2011 09:07:25 +0000
(11:07 +0200)
Guenther
source3/lib/netapi/getdc.c
patch
|
blob
|
history
diff --git
a/source3/lib/netapi/getdc.c
b/source3/lib/netapi/getdc.c
index e753deacb09cfa0319404a3ba1218ed30f9a4f83..3b26d46db47e11f6f318bc513512775528f3ffd9 100644
(file)
--- a/
source3/lib/netapi/getdc.c
+++ b/
source3/lib/netapi/getdc.c
@@
-43,6
+43,8
@@
WERROR NetGetDCName_r(struct libnetapi_ctx *ctx,
NTSTATUS status;
WERROR werr;
struct dcerpc_binding_handle *b;
NTSTATUS status;
WERROR werr;
struct dcerpc_binding_handle *b;
+ const char *dcname;
+ void *buffer;
werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
&ndr_table_netlogon.syntax_id,
werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
&ndr_table_netlogon.syntax_id,
@@
-54,12
+56,24
@@
WERROR NetGetDCName_r(struct libnetapi_ctx *ctx,
status = dcerpc_netr_GetDcName(b, talloc_tos(),
r->in.server_name,
r->in.domain_name,
status = dcerpc_netr_GetDcName(b, talloc_tos(),
r->in.server_name,
r->in.domain_name,
-
(const char **)r->out.buffer
,
+
&dcname
,
&werr);
if (!NT_STATUS_IS_OK(status)) {
werr = ntstatus_to_werror(status);
&werr);
if (!NT_STATUS_IS_OK(status)) {
werr = ntstatus_to_werror(status);
+ goto done;
+ }
+
+ if (!W_ERROR_IS_OK(werr)) {
+ goto done;
+ }
+
+ if (NetApiBufferAllocate(strlen_m_term(dcname), &buffer)) {
+ werr = WERR_NOMEM;
+ goto done;
}
}
+ memcpy(buffer, dcname, strlen_m_term(dcname));
+ *r->out.buffer = buffer;
done:
return werr;
done:
return werr;
@@
-83,6
+97,8
@@
WERROR NetGetAnyDCName_r(struct libnetapi_ctx *ctx,
NTSTATUS status;
WERROR werr;
struct dcerpc_binding_handle *b;
NTSTATUS status;
WERROR werr;
struct dcerpc_binding_handle *b;
+ const char *dcname;
+ void *buffer;
werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
&ndr_table_netlogon.syntax_id,
werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
&ndr_table_netlogon.syntax_id,
@@
-94,12
+110,24
@@
WERROR NetGetAnyDCName_r(struct libnetapi_ctx *ctx,
status = dcerpc_netr_GetAnyDCName(b, talloc_tos(),
r->in.server_name,
r->in.domain_name,
status = dcerpc_netr_GetAnyDCName(b, talloc_tos(),
r->in.server_name,
r->in.domain_name,
-
(const char **)r->out.buffer
,
+
&dcname
,
&werr);
if (!NT_STATUS_IS_OK(status)) {
werr = ntstatus_to_werror(status);
goto done;
}
&werr);
if (!NT_STATUS_IS_OK(status)) {
werr = ntstatus_to_werror(status);
goto done;
}
+
+ if (!W_ERROR_IS_OK(werr)) {
+ goto done;
+ }
+
+ if (NetApiBufferAllocate(strlen_m_term(dcname), &buffer)) {
+ werr = WERR_NOMEM;
+ goto done;
+ }
+ memcpy(buffer, dcname, strlen_m_term(dcname));
+ *r->out.buffer = buffer;
+
done:
return werr;
done:
return werr;