2 Unix SMB/CIFS implementation.
4 UUID/GUID/policy_handle functions
6 Copyright (C) Andrew Tridgell 2003.
7 Copyright (C) Stefan (metze) Metzmacher 2004.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>.
24 #include "system/network.h"
25 #include "librpc/ndr/libndr.h"
26 #include "libcli/util/ntstatus.h"
27 #include "lib/util/util_str_hex.h"
29 _PUBLIC_
void ndr_print_GUID(struct ndr_print
*ndr
, const char *name
, const struct GUID
*guid
)
31 ndr
->print(ndr
, "%-25s: %s", name
, GUID_string(ndr
, guid
));
34 bool ndr_syntax_id_equal(const struct ndr_syntax_id
*i1
,
35 const struct ndr_syntax_id
*i2
)
37 return GUID_equal(&i1
->uuid
, &i2
->uuid
)
38 && (i1
->if_version
== i2
->if_version
);
41 _PUBLIC_
char *ndr_syntax_id_to_string(TALLOC_CTX
*mem_ctx
, const struct ndr_syntax_id
*id
)
43 return talloc_asprintf(mem_ctx
,
44 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x/0x%08x",
45 id
->uuid
.time_low
, id
->uuid
.time_mid
,
46 id
->uuid
.time_hi_and_version
,
47 id
->uuid
.clock_seq
[0],
48 id
->uuid
.clock_seq
[1],
49 id
->uuid
.node
[0], id
->uuid
.node
[1],
50 id
->uuid
.node
[2], id
->uuid
.node
[3],
51 id
->uuid
.node
[4], id
->uuid
.node
[5],
52 (unsigned)id
->if_version
);
55 _PUBLIC_
bool ndr_syntax_id_from_string(const char *s
, struct ndr_syntax_id
*id
)
59 uint32_t time_mid
, time_hi_and_version
;
60 uint32_t clock_seq
[2];
65 status
= parse_guid_string(s
,
72 if (!NT_STATUS_IS_OK(status
)) {
76 if (strncmp(s
+ 36, "/0x", 3) != 0) {
80 status
= read_hex_bytes(s
+ 39, 8, &if_version
);
82 if (!NT_STATUS_IS_OK(status
)) {
86 id
->uuid
.time_low
= time_low
;
87 id
->uuid
.time_mid
= time_mid
;
88 id
->uuid
.time_hi_and_version
= time_hi_and_version
;
89 id
->uuid
.clock_seq
[0] = clock_seq
[0];
90 id
->uuid
.clock_seq
[1] = clock_seq
[1];
92 id
->uuid
.node
[i
] = node
[i
];
94 id
->if_version
= (uint32_t)if_version
;