diff options
author | Andrew Bartlett <abartlet@samba.org> | 2007-01-03 03:59:44 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:36:00 -0500 |
commit | 5ba31394c18ced1f66f84b470843ef7f7dd39ad7 (patch) | |
tree | 382a2850709691d6a6c65c3d77651115e7e73a78 | |
parent | bf4c652af7824478ca3f029cc653aace3da1022f (diff) | |
download | samba-5ba31394c18ced1f66f84b470843ef7f7dd39ad7.tar.gz samba-5ba31394c18ced1f66f84b470843ef7f7dd39ad7.tar.xz samba-5ba31394c18ced1f66f84b470843ef7f7dd39ad7.zip |
r20493: Add support for the 'Netscape' varient of GUID formatting, used in the
Fedora DS.
Andrew Bartlett
(This used to be commit 918e52fa5f527c427b46c1e1794131bcddab38f1)
-rw-r--r-- | source4/librpc/ndr/uuid.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/source4/librpc/ndr/uuid.c b/source4/librpc/ndr/uuid.c index a17b597cb2..351774eae9 100644 --- a/source4/librpc/ndr/uuid.c +++ b/source4/librpc/ndr/uuid.c @@ -69,6 +69,45 @@ _PUBLIC_ NTSTATUS GUID_from_string(const char *s, struct GUID *guid) } /** + build a GUID from a string +*/ +_PUBLIC_ NTSTATUS NS_GUID_from_string(const char *s, struct GUID *guid) +{ + NTSTATUS status = NT_STATUS_INVALID_PARAMETER; + uint32_t time_low; + uint32_t time_mid, time_hi_and_version; + uint32_t clock_seq[2]; + uint32_t node[6]; + int i; + + if (s == NULL) { + return NT_STATUS_INVALID_PARAMETER; + } + + if (11 == sscanf(s, "%08x-%04x%04x-%02x%02x%02x%02x-%02x%02x%02x%02x", + &time_low, &time_mid, &time_hi_and_version, + &clock_seq[0], &clock_seq[1], + &node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) { + status = NT_STATUS_OK; + } + + if (!NT_STATUS_IS_OK(status)) { + return status; + } + + 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]; + } + + return NT_STATUS_OK; +} + +/** * generate a random GUID */ struct GUID GUID_random(void) @@ -144,6 +183,19 @@ _PUBLIC_ char *GUID_string2(TALLOC_CTX *mem_ctx, const struct GUID *guid) return ret; } +_PUBLIC_ char *NS_GUID_string(TALLOC_CTX *mem_ctx, const struct GUID *guid) +{ + return talloc_asprintf(mem_ctx, + "%08x-%04x%04x-%02x%02x%02x%02x-%02x%02x%02x%02x", + guid->time_low, guid->time_mid, + guid->time_hi_and_version, + guid->clock_seq[0], + guid->clock_seq[1], + guid->node[0], guid->node[1], + guid->node[2], guid->node[3], + guid->node[4], guid->node[5]); +} + _PUBLIC_ BOOL policy_handle_empty(struct policy_handle *h) { return (h->handle_type == 0 && GUID_all_zero(&h->uuid)); |