[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Thu Jan 28 18:04:02 UTC 2021
The branch, master has been updated
via e14fc159a2f librpc: Simplify find_interface_by_binding()
via ecd95fc55eb librpc: Simplify find_interface_by_syntax_id()
via 9c1d7632e35 librpc: Convert find_interface_by_uuid to search by syntax_id
via 230a89332f5 lib: Fix file_ploadv_send()/_recv()
via 7528b7886b9 librpc: Fix a typo
via 9d512a099a7 librpc: Simplify dcesrv_check_or_create_context()
via 38ebfe2e1f1 epmapper: Simplify endpoints_match()
via ce91a899a60 librpc: Simplify dcerpc_binding_string()
via 4df6c594c68 librpc: Simplify dcerpc_binding_string()
via 895f459b4b2 epmapper: Simplify _epm_Map()
via 08757d213ee rpc_server: Introduce "goto nomem;" to dcesrv_endpoint_connect()
via c1614edf292 libwbclient: Fix wbcStringToGuid
via 2b9ba992b61 lib: Simplify parse_guid_string() and ndr_syntax_id_from_string()
via 522ef9e6a57 s4-torture: Add a test for ndr_syntax_id_from_string()
via 15934ace717 s4-torture: Add a test for GUID_from_data_blob
via 064eab8b257 dsdb: Avoid an unneeded #include
via fcf60f155a2 librpc: Simplify dcerpc_binding_set_abstract_syntax()
via eed1257268e librpc: Use ndr_syntax_id_buf_string() in dcerpc_binding_set_abstract_syntax()
via 243ce602129 librpc: Use ndr_syntax_id_buf_string() in dcerpc_sec_vt_pctx_check()
via a35c8a0ec23 librpc: Add ndr_syntax_id_buf_string()
via 2e3e297b259 librpc: Add a NULL check to dcerpc_binding_build_tower()
via 9374313f033 libndr: Simplify ndr_print_GUID()
from c8c2aef0ac6 vfs: restore platform specific POSIX sys_acl_set_file() functions
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit e14fc159a2fab69612c6922406a9614a7c2d55ee
Author: Volker Lendecke <vl at samba.org>
Date: Wed Jan 27 14:00:06 2021 +0100
librpc: Simplify find_interface_by_binding()
Use find_interface_by_syntax_id() instead of duplicating the loop.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
Autobuild-User(master): Volker Lendecke <vl at samba.org>
Autobuild-Date(master): Thu Jan 28 18:03:53 UTC 2021 on sn-devel-184
commit ecd95fc55eb793cfbbe233bd91664b6d646d430f
Author: Volker Lendecke <vl at samba.org>
Date: Wed Jan 27 13:54:25 2021 +0100
librpc: Simplify find_interface_by_syntax_id()
Directly use ndr_syntax_id_equal() instead of duplicating it with
interface_match_by_uuid().
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 9c1d7632e35dc28061ff8bce51f162af35bfa4cb
Author: Volker Lendecke <vl at samba.org>
Date: Wed Jan 27 13:51:33 2021 +0100
librpc: Convert find_interface_by_uuid to search by syntax_id
All callers manually dissected the syntax id for this API.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 230a89332f51b21384d140f5f6d1fb25f593ccb4
Author: Volker Lendecke <vl at samba.org>
Date: Tue Jan 26 16:39:29 2021 +0100
lib: Fix file_ploadv_send()/_recv()
When reading more than 1024 bytes, don't insert '\0' bytes in between
those chunks.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 7528b7886b9b4fb99816711ad4a21afffb20f3fa
Author: Volker Lendecke <vl at samba.org>
Date: Tue Jan 26 15:44:47 2021 +0100
librpc: Fix a typo
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 9d512a099a7f80893ba8fbbff81e83b67dc08301
Author: Volker Lendecke <vl at samba.org>
Date: Wed Jan 27 09:49:33 2021 +0100
librpc: Simplify dcesrv_check_or_create_context()
Use ndr_syntax_id_buf_string(), avoid a talloc/talloc_free
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 38ebfe2e1f16909700c60281f28d374448f0b801
Author: Volker Lendecke <vl at samba.org>
Date: Sun Jan 24 15:40:11 2021 +0100
epmapper: Simplify endpoints_match()
strequal() deals fine with either string being NULL. We only have to
take of the case where both are NULL.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit ce91a899a60059c9d495bf37ec5e3a8b4bf6afdc
Author: Volker Lendecke <vl at samba.org>
Date: Sun Jan 24 15:14:58 2021 +0100
librpc: Simplify dcerpc_binding_string()
Make it follow a more conventional memory handling style for reallocs.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 4df6c594c68dc5c2bfeb8e897f2226304da4848b
Author: Volker Lendecke <vl at samba.org>
Date: Sun Jan 24 15:07:47 2021 +0100
librpc: Simplify dcerpc_binding_string()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 895f459b4b2f347223f5b524d6b79090654cd1f4
Author: Volker Lendecke <vl at samba.org>
Date: Sun Jan 24 12:35:07 2021 +0100
epmapper: Simplify _epm_Map()
We have a routine to compare ndr_syntax_id, don't do it manually.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 08757d213ee016dfa958d393ef41d7aa66756132
Author: Volker Lendecke <vl at samba.org>
Date: Wed Jan 20 14:30:57 2021 +0100
rpc_server: Introduce "goto nomem;" to dcesrv_endpoint_connect()
Avoid the control-flow changing NT_STATUS_HAVE_NO_MEMORY macro.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit c1614edf292ce907b5cecad56ad1643c51256269
Author: Volker Lendecke <vl at samba.org>
Date: Sun Jan 24 09:36:15 2021 +0100
libwbclient: Fix wbcStringToGuid
The "x" sscanf conversion specifier requires an unsigned int. It is
likely that this is actually a uint32_t, don't rely on that.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 2b9ba992b610ebc600f573d8b3f46568d5347cec
Author: Volker Lendecke <vl at samba.org>
Date: Sun Jan 24 09:15:29 2021 +0100
lib: Simplify parse_guid_string() and ndr_syntax_id_from_string()
Return "bool" instead of NTSTATUS, use hex_byte() instead of
read_hex_bytes(). And parse directly into a struct GUID instead of the
components. 99 lines less code.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 522ef9e6a57ba46c6c097c088deb27fe12f3b300
Author: Samuel Cabrero <scabrero at samba.org>
Date: Thu Jan 28 13:14:49 2021 +0100
s4-torture: Add a test for ndr_syntax_id_from_string()
Signed-off-by: Samuel Cabrero <scabrero at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 15934ace717a73e270c2e5ac4fb3d306885b195c
Author: Samuel Cabrero <scabrero at samba.org>
Date: Thu Jan 28 12:37:30 2021 +0100
s4-torture: Add a test for GUID_from_data_blob
Signed-off-by: Samuel Cabrero <scabrero at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 064eab8b2579290c8f363d68727ea4fedf4e6305
Author: Volker Lendecke <vl at samba.org>
Date: Sun Jan 24 09:21:23 2021 +0100
dsdb: Avoid an unneeded #include
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit fcf60f155a24bea97395b7ee0200543440782a74
Author: Volker Lendecke <vl at samba.org>
Date: Fri Jan 22 20:01:27 2021 +0100
librpc: Simplify dcerpc_binding_set_abstract_syntax()
It might be a question of style, but I find it simpler this way.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit eed1257268e96123d9655527071c00d0ab38f803
Author: Volker Lendecke <vl at samba.org>
Date: Fri Jan 22 19:59:52 2021 +0100
librpc: Use ndr_syntax_id_buf_string() in dcerpc_binding_set_abstract_syntax()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 243ce602129232e50313099f094cf09a848a2ab0
Author: Volker Lendecke <vl at samba.org>
Date: Fri Jan 22 19:56:20 2021 +0100
librpc: Use ndr_syntax_id_buf_string() in dcerpc_sec_vt_pctx_check()
"mem_ctx" is no longer needed
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit a35c8a0ec233175fd677a40ad72ac707a5c45915
Author: Volker Lendecke <vl at samba.org>
Date: Fri Jan 22 19:50:04 2021 +0100
librpc: Add ndr_syntax_id_buf_string()
Same pattern as GUID_buf_string()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 2e3e297b259ff32094db6fb4114726201f08ca2a
Author: Volker Lendecke <vl at samba.org>
Date: Fri Jan 22 19:40:37 2021 +0100
librpc: Add a NULL check to dcerpc_binding_build_tower()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
commit 9374313f0333a1501d6fb823dbed86fb136f0766
Author: Volker Lendecke <vl at samba.org>
Date: Fri Jan 22 19:33:51 2021 +0100
libndr: Simplify ndr_print_GUID()
Fix a small memleak of the tmp GUID_string
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Samuel Cabrero <scabrero at samba.org>
-----------------------------------------------------------------------
Summary of changes:
lib/util/util_str_hex.c | 101 ++++++---------
lib/util/util_str_hex.h | 13 +-
librpc/ABI/{ndr-1.0.1.sigs => ndr-1.0.2.sigs} | 1 +
librpc/ndr/libndr.h | 5 +
librpc/ndr/ndr.c | 2 +-
librpc/ndr/ndr_misc.c | 66 ++++------
librpc/ndr/uuid.c | 70 +++--------
librpc/rpc/binding.c | 171 +++++++++++---------------
librpc/rpc/dcerpc_util.c | 29 ++---
librpc/rpc/dcesrv_core.c | 68 ++++------
librpc/rpc/dcesrv_core.h | 6 +-
librpc/wscript_build | 2 +-
nsswitch/libwbclient/wbc_guid.c | 8 +-
source3/lib/util_file.c | 7 ++
source3/rpc_server/epmapper/srv_epmapper.c | 23 +---
source3/rpc_server/rpc_ncacn_np.c | 5 +-
source3/winbindd/winbindd_dual_ndr.c | 5 +-
source4/dsdb/common/util.c | 1 -
source4/rpc_server/epmapper/rpc_epmapper.c | 3 +-
source4/torture/ndr/ndr.c | 74 ++++++++++-
20 files changed, 294 insertions(+), 366 deletions(-)
copy librpc/ABI/{ndr-1.0.1.sigs => ndr-1.0.2.sigs} (99%)
Changeset truncated at 500 lines:
diff --git a/lib/util/util_str_hex.c b/lib/util/util_str_hex.c
index 792b4e8420b..553fb30681e 100644
--- a/lib/util/util_str_hex.c
+++ b/lib/util/util_str_hex.c
@@ -1,48 +1,27 @@
#include "replace.h"
-#include "libcli/util/ntstatus.h"
#include "util_str_hex.h"
+#include "lib/util/data_blob.h"
+#include "librpc/gen_ndr/misc.h"
-NTSTATUS read_hex_bytes(const char *s, uint hexchars, uint64_t *dest)
+static bool hex_uint16(const char *in, uint16_t *out)
{
- uint64_t x = 0;
- uint i;
- char c;
-
- if ((hexchars & 1) || hexchars > 16) {
- return NT_STATUS_INVALID_PARAMETER;
- }
-
- for (i = 0; i < hexchars; i++) {
- x <<= 4;
- c = s[i];
- if (c >= '0' && c <= '9') {
- x += c - '0';
- }
- else if (c >= 'a' && c <= 'f') {
- x += c - 'a' + 10;
- }
- else if (c >= 'A' && c <= 'F') {
- x += c - 'A' + 10;
- }
- else {
- /* BAD character (including '\0') */
- return NT_STATUS_INVALID_PARAMETER;
- }
- }
- *dest = x;
- return NT_STATUS_OK;
+ uint8_t hi=0, lo=0;
+ bool ok = hex_byte(in, &hi) && hex_byte(in+2, &lo);
+ *out = (((uint16_t)hi)<<8) + lo;
+ return ok;
}
+bool hex_uint32(const char *in, uint32_t *out)
+{
+ uint16_t hi=0, lo=0;
+ bool ok = hex_uint16(in, &hi) && hex_uint16(in+4, &lo);
+ *out = (((uint32_t)hi)<<16) + lo;
+ return ok;
+}
-NTSTATUS parse_guid_string(const char *s,
- uint32_t *time_low,
- uint32_t *time_mid,
- uint32_t *time_hi_and_version,
- uint32_t clock_seq[2],
- uint32_t node[6])
+bool parse_guid_string(const char *s, struct GUID *guid)
{
- uint64_t tmp;
- NTSTATUS status;
+ bool ok;
int i;
/* "e12b56b6-0a95-11d1-adbb-00c04fd8d5cd"
| | | | |
@@ -52,49 +31,39 @@ NTSTATUS parse_guid_string(const char *s,
| \_______________ time_mid
\_____________________ time_low
*/
- status = read_hex_bytes(s, 8, &tmp);
- if (!NT_STATUS_IS_OK(status) || s[8] != '-') {
- return NT_STATUS_INVALID_PARAMETER;
+
+ ok = hex_uint32(s, &guid->time_low);
+ if (!ok || (s[8] != '-')) {
+ return false;
}
- *time_low = tmp;
s += 9;
- status = read_hex_bytes(s, 4, &tmp);
- if (!NT_STATUS_IS_OK(status) || s[4] != '-') {
- return NT_STATUS_INVALID_PARAMETER;
+ ok = hex_uint16(s, &guid->time_mid);
+ if (!ok || (s[4] != '-')) {
+ return false;
}
- *time_mid = tmp;
s += 5;
- status = read_hex_bytes(s, 4, &tmp);
- if (!NT_STATUS_IS_OK(status) || s[4] != '-') {
- return NT_STATUS_INVALID_PARAMETER;
+ ok = hex_uint16(s, &guid->time_hi_and_version);
+ if (!ok || (s[4] != '-')) {
+ return false;
}
- *time_hi_and_version = tmp;
s += 5;
- for (i = 0; i < 2; i++) {
- status = read_hex_bytes(s, 2, &tmp);
- if (!NT_STATUS_IS_OK(status)) {
- return NT_STATUS_INVALID_PARAMETER;
- }
- clock_seq[i] = tmp;
- s += 2;
- }
- if (s[0] != '-') {
- return NT_STATUS_INVALID_PARAMETER;
+ ok = hex_byte(s, &guid->clock_seq[0]) &&
+ hex_byte(s+2, &guid->clock_seq[1]);
+ if (!ok || (s[4] != '-')) {
+ return false;
}
-
- s++;
+ s += 5;
for (i = 0; i < 6; i++) {
- status = read_hex_bytes(s, 2, &tmp);
- if (!NT_STATUS_IS_OK(status)) {
- return NT_STATUS_INVALID_PARAMETER;
+ ok = hex_byte(s, &guid->node[i]);
+ if (!ok) {
+ return false;
}
- node[i] = tmp;
s += 2;
}
- return NT_STATUS_OK;
+ return true;
}
diff --git a/lib/util/util_str_hex.h b/lib/util/util_str_hex.h
index d0d53e3ed05..7dd527fcdab 100644
--- a/lib/util/util_str_hex.h
+++ b/lib/util/util_str_hex.h
@@ -1,10 +1,5 @@
-#include "../libcli/util/ntstatus.h"
+#include "replace.h"
-NTSTATUS read_hex_bytes(const char *s, uint hexchars, uint64_t *dest);
-
-NTSTATUS parse_guid_string(const char *s,
- uint32_t *time_low,
- uint32_t *time_mid,
- uint32_t *time_hi_and_version,
- uint32_t clock_seq[2],
- uint32_t node[6]);
+bool hex_uint32(const char *in, uint32_t *out);
+struct GUID;
+bool parse_guid_string(const char *s, struct GUID *guid);
diff --git a/librpc/ABI/ndr-1.0.1.sigs b/librpc/ABI/ndr-1.0.2.sigs
similarity index 99%
copy from librpc/ABI/ndr-1.0.1.sigs
copy to librpc/ABI/ndr-1.0.2.sigs
index 84150859c9c..0ec8575906a 100644
--- a/librpc/ABI/ndr-1.0.1.sigs
+++ b/librpc/ABI/ndr-1.0.2.sigs
@@ -251,6 +251,7 @@ ndr_size_union: size_t (const void *, int, uint32_t, ndr_push_flags_fn_t)
ndr_size_winreg_Data_GPO: size_t (const union winreg_Data_GPO *, uint32_t, int)
ndr_string_array_size: size_t (struct ndr_push *, const char *)
ndr_string_length: uint32_t (const void *, uint32_t)
+ndr_syntax_id_buf_string: char *(const struct ndr_syntax_id *, struct ndr_syntax_id_buf *)
ndr_syntax_id_equal: bool (const struct ndr_syntax_id *, const struct ndr_syntax_id *)
ndr_syntax_id_from_string: bool (const char *, struct ndr_syntax_id *)
ndr_syntax_id_null: uuid = {time_low = 0, time_mid = 0, time_hi_and_version = 0, clock_seq = "\000", node = "\000\000\000\000\000"}, if_version = 0
diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h
index 8bb0def40c0..fd772b9b510 100644
--- a/librpc/ndr/libndr.h
+++ b/librpc/ndr/libndr.h
@@ -556,7 +556,12 @@ void ndr_print_GUID(struct ndr_print *ndr, const char *name, const struct GUID *
void ndr_print_sockaddr_storage(struct ndr_print *ndr, const char *name, const struct sockaddr_storage *ss);
void ndr_zero_memory(void *ptr, size_t len);
bool ndr_syntax_id_equal(const struct ndr_syntax_id *i1, const struct ndr_syntax_id *i2);
+
+struct ndr_syntax_id_buf { char buf[39 /*GUID*/ + 3 /* "/0x" */ + 8]; };
+char *ndr_syntax_id_buf_string(
+ const struct ndr_syntax_id *id, struct ndr_syntax_id_buf *buf);
char *ndr_syntax_id_to_string(TALLOC_CTX *mem_ctx, const struct ndr_syntax_id *id);
+
bool ndr_syntax_id_from_string(const char *s, struct ndr_syntax_id *id);
enum ndr_err_code ndr_push_struct_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, const void *p, ndr_push_flags_fn_t fn);
enum ndr_err_code ndr_push_struct_into_fixed_blob(DATA_BLOB *blob,
diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c
index afe22a28602..024634d0a09 100644
--- a/librpc/ndr/ndr.c
+++ b/librpc/ndr/ndr.c
@@ -37,7 +37,7 @@
#define NDR_BASE_MARSHALL_SIZE 1024
/*
- * This value is arbitary, but designed to reduce the memory a client
+ * This value is arbitrary, but designed to reduce the memory a client
* can allocate and the work the client can force in processing a
* malicious packet.
*
diff --git a/librpc/ndr/ndr_misc.c b/librpc/ndr/ndr_misc.c
index 155ab8f21b8..d7ebb066b8a 100644
--- a/librpc/ndr/ndr_misc.c
+++ b/librpc/ndr/ndr_misc.c
@@ -28,7 +28,8 @@
_PUBLIC_ void ndr_print_GUID(struct ndr_print *ndr, const char *name, const struct GUID *guid)
{
- ndr->print(ndr, "%-25s: %s", name, GUID_string(ndr, guid));
+ struct GUID_txt_buf buf;
+ ndr->print(ndr, "%-25s: %s", name, GUID_buf_string(guid, &buf));
}
bool ndr_syntax_id_equal(const struct ndr_syntax_id *i1,
@@ -38,38 +39,32 @@ bool ndr_syntax_id_equal(const struct ndr_syntax_id *i1,
&& (i1->if_version == i2->if_version);
}
+char *ndr_syntax_id_buf_string(
+ const struct ndr_syntax_id *id, struct ndr_syntax_id_buf *dst)
+{
+ struct GUID_txt_buf guid_buf;
+
+ snprintf(dst->buf,
+ sizeof(dst->buf),
+ "%s/0x%08x",
+ GUID_buf_string(&id->uuid, &guid_buf),
+ (unsigned int)id->if_version);
+
+ return dst->buf;
+}
+
_PUBLIC_ char *ndr_syntax_id_to_string(TALLOC_CTX *mem_ctx, const struct ndr_syntax_id *id)
{
- return talloc_asprintf(mem_ctx,
- "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x/0x%08x",
- id->uuid.time_low, id->uuid.time_mid,
- id->uuid.time_hi_and_version,
- id->uuid.clock_seq[0],
- id->uuid.clock_seq[1],
- id->uuid.node[0], id->uuid.node[1],
- id->uuid.node[2], id->uuid.node[3],
- id->uuid.node[4], id->uuid.node[5],
- (unsigned)id->if_version);
+ struct ndr_syntax_id_buf buf;
+ return talloc_strdup(mem_ctx, ndr_syntax_id_buf_string(id, &buf));
}
_PUBLIC_ bool ndr_syntax_id_from_string(const char *s, struct ndr_syntax_id *id)
{
- size_t i;
- uint32_t time_low;
- uint32_t time_mid, time_hi_and_version;
- uint32_t clock_seq[2];
- uint32_t node[6];
- uint64_t if_version;
- NTSTATUS status;
-
- status = parse_guid_string(s,
- &time_low,
- &time_mid,
- &time_hi_and_version,
- clock_seq,
- node);
+ bool ok;
- if (!NT_STATUS_IS_OK(status)) {
+ ok = parse_guid_string(s, &id->uuid);
+ if (!ok) {
return false;
}
@@ -77,21 +72,6 @@ _PUBLIC_ bool ndr_syntax_id_from_string(const char *s, struct ndr_syntax_id *id)
return false;
}
- status = read_hex_bytes(s + 39, 8, &if_version);
-
- if (!NT_STATUS_IS_OK(status)) {
- return false;
- }
-
- id->uuid.time_low = time_low;
- id->uuid.time_mid = time_mid;
- id->uuid.time_hi_and_version = time_hi_and_version;
- id->uuid.clock_seq[0] = clock_seq[0];
- id->uuid.clock_seq[1] = clock_seq[1];
- for (i=0; i<6; i++) {
- id->uuid.node[i] = node[i];
- }
- id->if_version = (uint32_t)if_version;
-
- return true;
+ ok = hex_uint32(s+39, &id->if_version);
+ return ok;
}
diff --git a/librpc/ndr/uuid.c b/librpc/ndr/uuid.c
index ad5c9d37d11..2c16f5ad81c 100644
--- a/librpc/ndr/uuid.c
+++ b/librpc/ndr/uuid.c
@@ -77,78 +77,42 @@ _PUBLIC_ NTSTATUS GUID_from_ndr_blob(const DATA_BLOB *b, struct GUID *guid)
*/
_PUBLIC_ NTSTATUS GUID_from_data_blob(const DATA_BLOB *s, struct GUID *guid)
{
- NTSTATUS status = NT_STATUS_INVALID_PARAMETER;
- uint32_t time_low = 0;
- uint32_t time_mid = 0;
- uint32_t time_hi_and_version = 0;
- uint32_t clock_seq[2] = {0};
- uint32_t node[6] = {0};
- uint8_t buf16[16] = {0};
-
- DATA_BLOB blob16 = data_blob_const(buf16, sizeof(buf16));
- int i;
+ bool ok;
if (s->data == NULL) {
return NT_STATUS_INVALID_PARAMETER;
}
- switch(s->length) {
- case 36:
- {
- status = parse_guid_string((char *)s->data,
- &time_low,
- &time_mid,
- &time_hi_and_version,
- clock_seq,
- node);
- break;
+ if (s->length == 36) {
+ ok = parse_guid_string((char *)s->data, guid);
+ return ok ? NT_STATUS_OK : NT_STATUS_INVALID_PARAMETER;
}
- case 38:
- {
+
+ if (s->length == 38) {
if (s->data[0] != '{' || s->data[37] != '}') {
- break;
+ return NT_STATUS_INVALID_PARAMETER;
}
-
- status = parse_guid_string((char *)s->data + 1,
- &time_low,
- &time_mid,
- &time_hi_and_version,
- clock_seq,
- node);
- break;
+ ok = parse_guid_string((char *)s->data + 1, guid);
+ return ok ? NT_STATUS_OK : NT_STATUS_INVALID_PARAMETER;
}
- case 32:
- {
+
+ if (s->length == 32) {
+ uint8_t buf16[16] = {0};
+ DATA_BLOB blob16 = { .data = buf16, .length = sizeof(buf16) };
size_t rlen = strhex_to_str((char *)blob16.data, blob16.length,
(const char *)s->data, s->length);
if (rlen != blob16.length) {
return NT_STATUS_INVALID_PARAMETER;
}
- s = &blob16;
- return GUID_from_ndr_blob(s, guid);
- }
- case 16:
- return GUID_from_ndr_blob(s, guid);
- default:
- status = NT_STATUS_INVALID_PARAMETER;
- break;
- }
-
- if (!NT_STATUS_IS_OK(status)) {
- return status;
+ return GUID_from_ndr_blob(&blob16, guid);
}
- guid->time_low = time_low;
- guid->time_mid = time_mid;
- guid->time_hi_and_version = time_hi_and_version;
- guid->clock_seq[0] = clock_seq[0];
- guid->clock_seq[1] = clock_seq[1];
- for (i=0;i<6;i++) {
- guid->node[i] = node[i];
+ if (s->length == 16) {
+ return GUID_from_ndr_blob(s, guid);
}
- return NT_STATUS_OK;
+ return NT_STATUS_INVALID_PARAMETER;
}
/**
diff --git a/librpc/rpc/binding.c b/librpc/rpc/binding.c
index 80ab1a45134..817498d8700 100644
--- a/librpc/rpc/binding.c
+++ b/librpc/rpc/binding.c
@@ -213,49 +213,50 @@ const char *epm_floor_string(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor)
*/
_PUBLIC_ char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_binding *b)
{
- char *s = talloc_strdup(mem_ctx, "");
- char *o = s;
+ char *s = NULL;
+ char *tmp = NULL;
size_t i;
const char *t_name = NULL;
bool option_section = false;
const char *target_hostname = NULL;
+ s = talloc_strdup(mem_ctx, "");
+ if (s == NULL) {
+ goto nomem;
+ }
+
if (b->transport != NCA_UNKNOWN) {
t_name = derpc_transport_string_by_transport(b->transport);
if (!t_name) {
- talloc_free(o);
- return NULL;
+ goto nomem;
}
}
if (!GUID_all_zero(&b->object)) {
struct GUID_txt_buf buf;
- o = s;
- s = talloc_asprintf_append_buffer(
+ tmp = talloc_asprintf_append_buffer(
s, "%s@", GUID_buf_string(&b->object, &buf));
- if (s == NULL) {
- talloc_free(o);
- return NULL;
+ if (tmp == NULL) {
+ goto nomem;
}
+ s = tmp;
}
if (t_name != NULL) {
- o = s;
- s = talloc_asprintf_append_buffer(s, "%s:", t_name);
- if (s == NULL) {
- talloc_free(o);
- return NULL;
+ tmp = talloc_asprintf_append_buffer(s, "%s:", t_name);
+ if (tmp == NULL) {
+ goto nomem;
}
+ s = tmp;
}
if (b->host) {
- o = s;
- s = talloc_asprintf_append_buffer(s, "%s", b->host);
- if (s == NULL) {
- talloc_free(o);
- return NULL;
+ tmp = talloc_asprintf_append_buffer(s, "%s", b->host);
+ if (tmp == NULL) {
+ goto nomem;
}
+ s = tmp;
}
target_hostname = b->target_hostname;
@@ -265,38 +266,30 @@ _PUBLIC_ char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_bi
}
}
- if (b->endpoint) {
- option_section = true;
- } else if (target_hostname) {
- option_section = true;
- } else if (b->target_principal) {
- option_section = true;
- } else if (b->assoc_group_id != 0) {
- option_section = true;
- } else if (b->options) {
- option_section = true;
- } else if (b->flags) {
- option_section = true;
- }
+ option_section =
+ (b->endpoint != NULL) ||
+ (target_hostname != NULL) ||
+ (b->target_principal != NULL) ||
+ (b->assoc_group_id != 0) ||
+ (b->options != NULL) ||
+ (b->flags != 0);
if (!option_section) {
return s;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list