diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2012-03-18 18:46:18 +0100 |
---|---|---|
committer | Jelmer Vernooij <jelmer@samba.org> | 2012-03-20 13:54:07 +0100 |
commit | d875327b10ca0fd3d548b4e9088ffcc7ef421baf (patch) | |
tree | 3ab01460e8ee9739897938550bc2bcc6d13fcc63 /source4/dsdb/common | |
parent | 0b6dea9d664841d505acd75ac5449e953f60db74 (diff) | |
download | samba-d875327b10ca0fd3d548b4e9088ffcc7ef421baf.tar.gz samba-d875327b10ca0fd3d548b4e9088ffcc7ef421baf.tar.bz2 samba-d875327b10ca0fd3d548b4e9088ffcc7ef421baf.zip |
Move NS_GUID_string and NS_GUID_from_string to dsdb-common.
Diffstat (limited to 'source4/dsdb/common')
-rw-r--r-- | source4/dsdb/common/util.c | 52 | ||||
-rw-r--r-- | source4/dsdb/common/util.h | 10 |
2 files changed, 62 insertions, 0 deletions
diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c index 72321217ea..67589abed0 100644 --- a/source4/dsdb/common/util.c +++ b/source4/dsdb/common/util.c @@ -4470,3 +4470,55 @@ int dsdb_create_partial_replica_NC(struct ldb_context *ldb, struct ldb_dn *dn) talloc_free(tmp_ctx); return LDB_SUCCESS; } + +/** + 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; +} + +_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]); +} diff --git a/source4/dsdb/common/util.h b/source4/dsdb/common/util.h index 5ec19fb776..c16ce81c2c 100644 --- a/source4/dsdb/common/util.h +++ b/source4/dsdb/common/util.h @@ -19,6 +19,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#ifndef __DSDB_COMMON_UTIL_H__ +#define __DSDB_COMMON_UTIL_H__ + /* flags for dsdb_request_add_controls(). For the module functions, the upper 16 bits are in dsdb/samdb/ldb_modules/util.h @@ -57,3 +60,10 @@ bool is_attr_in_list(const char * const * attrs, const char *attr); #define DSDB_SECRET_ATTRIBUTES_COMMA , #define DSDB_SECRET_ATTRIBUTES DSDB_SECRET_ATTRIBUTES_EX(DSDB_SECRET_ATTRIBUTES_COMMA) + +struct GUID; + +char *NS_GUID_string(TALLOC_CTX *mem_ctx, const struct GUID *guid); +NTSTATUS NS_GUID_from_string(const char *s, struct GUID *guid); + +#endif /* __DSDB_COMMON_UTIL_H__ */ |