[SCM] Samba Shared Repository - branch master updated - b28db15af8d9d163348e713c0adbb8ab7b955fb4

Günther Deschner gd at samba.org
Thu Oct 9 10:47:03 GMT 2008


The branch, master has been updated
       via  b28db15af8d9d163348e713c0adbb8ab7b955fb4 (commit)
       via  8fcb81ee996312269b84ac9c7fb835b1048dc64b (commit)
      from  5a61f30d13d55d10b74adf9fdb3a7e6731565682 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit b28db15af8d9d163348e713c0adbb8ab7b955fb4
Author: Günther Deschner <gd at samba.org>
Date:   Thu Oct 2 13:11:31 2008 +0200

    wbclient: add wbcGuidToString and wbcStringToGuid helper functions.
    
    Guenther

commit 8fcb81ee996312269b84ac9c7fb835b1048dc64b
Author: Günther Deschner <gd at samba.org>
Date:   Thu Oct 2 13:06:50 2008 +0200

    wbclient: add wbcGuid structure.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source3/Makefile.in                     |    1 +
 source3/nsswitch/libwbclient/wbc_guid.c |  118 +++++++++++++++++++++++++++++++
 source3/nsswitch/libwbclient/wbclient.h |   23 ++++++
 3 files changed, 142 insertions(+), 0 deletions(-)
 create mode 100644 source3/nsswitch/libwbclient/wbc_guid.c


Changeset truncated at 500 lines:

diff --git a/source3/Makefile.in b/source3/Makefile.in
index 0ae32a0..18581ba 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -1718,6 +1718,7 @@ LIBWBCLIENT_OBJ0 = nsswitch/libwbclient/wbclient.o \
 		  nsswitch/libwbclient/wbc_pwd.o \
 		  nsswitch/libwbclient/wbc_idmap.o \
 		  nsswitch/libwbclient/wbc_sid.o \
+		  nsswitch/libwbclient/wbc_guid.o \
 		  nsswitch/libwbclient/wbc_pam.o
 LIBWBCLIENT_OBJ = $(LIBWBCLIENT_OBJ0) \
 		  $(WBCOMMON_OBJ) \
diff --git a/source3/nsswitch/libwbclient/wbc_guid.c b/source3/nsswitch/libwbclient/wbc_guid.c
new file mode 100644
index 0000000..0cb33e9
--- /dev/null
+++ b/source3/nsswitch/libwbclient/wbc_guid.c
@@ -0,0 +1,118 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   Winbind client API
+
+   Copyright (C) Gerald (Jerry) Carter 2007
+
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 3 of the License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/* Required Headers */
+
+#include "libwbclient.h"
+
+/** @brief Convert a binary GUID to a character string
+ *
+ * @param guid           Binary Guid
+ * @param **guid_string  Resulting character string
+ *
+ * @return #wbcErr
+ **/
+
+wbcErr wbcGuidToString(const struct wbcGuid *guid,
+		       char **guid_string)
+{
+	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
+
+	if (!guid) {
+		wbc_status = WBC_ERR_INVALID_PARAM;
+		BAIL_ON_WBC_ERROR(wbc_status);
+	}
+
+	*guid_string = talloc_asprintf(NULL,
+				       "%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]);
+	BAIL_ON_PTR_ERROR((*guid_string), wbc_status);
+
+	wbc_status = WBC_ERR_SUCCESS;
+
+done:
+	return wbc_status;
+}
+
+/** @brief Convert a character string to a binary GUID
+ *
+ * @param *str          Character string
+ * @param guid          Resulting binary GUID
+ *
+ * @return #wbcErr
+ **/
+
+wbcErr wbcStringToGuid(const char *str,
+		       struct wbcGuid *guid)
+{
+	uint32_t time_low;
+	uint32_t time_mid, time_hi_and_version;
+	uint32_t clock_seq[2];
+	uint32_t node[6];
+	int i;
+	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
+
+	if (!guid) {
+		wbc_status = WBC_ERR_INVALID_PARAM;
+		BAIL_ON_WBC_ERROR(wbc_status);
+	}
+
+	if (!str) {
+		wbc_status = WBC_ERR_INVALID_PARAM;
+		BAIL_ON_WBC_ERROR(wbc_status);
+	}
+
+	if (11 == sscanf(str, "%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])) {
+	        wbc_status = WBC_ERR_SUCCESS;
+	} else if (11 == sscanf(str, "{%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])) {
+	        wbc_status = WBC_ERR_SUCCESS;
+	}
+
+	BAIL_ON_WBC_ERROR(wbc_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];
+	}
+
+	wbc_status = WBC_ERR_SUCCESS;
+
+done:
+	return wbc_status;
+}
diff --git a/source3/nsswitch/libwbclient/wbclient.h b/source3/nsswitch/libwbclient/wbclient.h
index cae3fee..48b6115 100644
--- a/source3/nsswitch/libwbclient/wbclient.h
+++ b/source3/nsswitch/libwbclient/wbclient.h
@@ -137,6 +137,19 @@ struct wbcSidWithAttr {
 #define WBC_SID_ATTR_GROUP_LOGON_ID 		0xC0000000
 
 /**
+ *  @brief Windows GUID
+ *
+ **/
+
+struct wbcGuid {
+	uint32_t time_low;
+	uint16_t time_mid;
+	uint16_t time_hi_and_version;
+	uint8_t clock_seq[2];
+	uint8_t node[6];
+};
+
+/**
  * @brief Domain Information
  **/
 
@@ -398,6 +411,16 @@ wbcErr wbcSidToString(const struct wbcDomainSid *sid,
 wbcErr wbcStringToSid(const char *sid_string,
 		      struct wbcDomainSid *sid);
 
+/*
+ * Utility functions for dealing with GUIDs
+ */
+
+wbcErr wbcGuidToString(const struct wbcGuid *guid,
+		       char **guid_string);
+
+wbcErr wbcStringToGuid(const char *guid_string,
+		       struct wbcGuid *guid);
+
 wbcErr wbcPing(void);
 
 wbcErr wbcLibraryDetails(struct wbcLibraryDetails **details);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list