summaryrefslogtreecommitdiff
path: root/source4/librpc/ndr
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2007-01-03 03:59:44 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:36:00 -0500
commit5ba31394c18ced1f66f84b470843ef7f7dd39ad7 (patch)
tree382a2850709691d6a6c65c3d77651115e7e73a78 /source4/librpc/ndr
parentbf4c652af7824478ca3f029cc653aace3da1022f (diff)
downloadsamba-5ba31394c18ced1f66f84b470843ef7f7dd39ad7.tar.gz
samba-5ba31394c18ced1f66f84b470843ef7f7dd39ad7.tar.bz2
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)
Diffstat (limited to 'source4/librpc/ndr')
-rw-r--r--source4/librpc/ndr/uuid.c52
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));