[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-unstable-723-g7b52864

Günther Deschner gd at samba.org
Wed Dec 19 10:18:52 GMT 2007


The branch, v3-2-test has been updated
       via  7b528647879bb55c9c85243a3e2906c09490edc9 (commit)
       via  6ccbf67a0c6f117978df55d4e2565d34fddf9317 (commit)
       via  289151393a43c7f0c2baafdd79d1163fc80aad6a (commit)
      from  4056bb8645821fba95d6e9ca4d82e2d5084c1e5c (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 7b528647879bb55c9c85243a3e2906c09490edc9
Author: Günther Deschner <gd at samba.org>
Date:   Tue Dec 18 13:38:14 2007 +0100

    Merge WERR_NO_SUCH_LOGON_SESSION from Samba4.
    
    Guenther

commit 6ccbf67a0c6f117978df55d4e2565d34fddf9317
Author: Günther Deschner <gd at samba.org>
Date:   Wed Dec 19 10:58:58 2007 +0100

    Add and use some keystr functions using talloc_tos() in secrets api.
    
    Guenther

commit 289151393a43c7f0c2baafdd79d1163fc80aad6a
Author: Günther Deschner <gd at samba.org>
Date:   Wed Dec 19 11:08:27 2007 +0100

    Add cmd_wkssvc_enumeratecomputernames to rpcclient.
    
    Guenther

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

Summary of changes:
 source/include/doserr.h       |    1 +
 source/libsmb/doserr.c        |    1 +
 source/passdb/secrets.c       |  167 ++++++++++++++++++++++++++++++-----------
 source/rpcclient/cmd_wkssvc.c |   37 +++++++++
 4 files changed, 162 insertions(+), 44 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/doserr.h b/source/include/doserr.h
index a22eda2..079a566 100644
--- a/source/include/doserr.h
+++ b/source/include/doserr.h
@@ -204,6 +204,7 @@
 #define WERR_SERVICE_NEVER_STARTED W_ERROR(1077)
 #define WERR_MACHINE_LOCKED W_ERROR(1271)
 #define WERR_NO_LOGON_SERVERS W_ERROR(1311)
+#define WERR_NO_SUCH_LOGON_SESSION W_ERROR(1312)
 #define WERR_LOGON_FAILURE W_ERROR(1326)
 #define WERR_NO_SUCH_DOMAIN W_ERROR(1355)
 #define WERR_INVALID_SECURITY_DESCRIPTOR W_ERROR(1338)
diff --git a/source/libsmb/doserr.c b/source/libsmb/doserr.c
index 84cc898..5bdd85d 100644
--- a/source/libsmb/doserr.c
+++ b/source/libsmb/doserr.c
@@ -60,6 +60,7 @@ werror_code_struct dos_errs[] =
 	{ "WERR_DEST_NOT_FOUND", WERR_DEST_NOT_FOUND },
 	{ "WERR_NOT_LOCAL_DOMAIN", WERR_NOT_LOCAL_DOMAIN },
 	{ "WERR_NO_LOGON_SERVERS", WERR_NO_LOGON_SERVERS },
+	{ "WERR_NO_SUCH_LOGON_SESSION", WERR_NO_SUCH_LOGON_SESSION },
 	{ "WERR_PRINTER_DRIVER_IN_USE", WERR_PRINTER_DRIVER_IN_USE },
 	{ "WERR_STATUS_MORE_ENTRIES  ", WERR_STATUS_MORE_ENTRIES },
 	{ "WERR_DFS_NO_SUCH_VOL", WERR_DFS_NO_SUCH_VOL },
diff --git a/source/passdb/secrets.c b/source/passdb/secrets.c
index 0ea3887..8e0afe7 100644
--- a/source/passdb/secrets.c
+++ b/source/passdb/secrets.c
@@ -132,14 +132,31 @@ bool secrets_delete(const char *key)
 	return tdb_trans_delete(tdb, string_tdb_data(key)) == 0;
 }
 
+/**
+ * Form a key for fetching the domain sid
+ *
+ * @param domain domain name
+ *
+ * @return keystring
+ **/
+static const char *domain_sid_keystr(const char *domain)
+{
+	char *keystr;
+
+	keystr = talloc_asprintf(talloc_tos(), "%s/%s",
+				 SECRETS_DOMAIN_SID, domain);
+	SMB_ASSERT(keystr != NULL);
+
+	strupper_m(keystr);
+
+	return keystr;
+}
+
 bool secrets_store_domain_sid(const char *domain, const DOM_SID *sid)
 {
-	fstring key;
 	bool ret;
 
-	slprintf(key, sizeof(key)-1, "%s/%s", SECRETS_DOMAIN_SID, domain);
-	strupper_m(key);
-	ret = secrets_store(key, sid, sizeof(DOM_SID));
+	ret = secrets_store(domain_sid_keystr(domain), sid, sizeof(DOM_SID));
 
 	/* Force a re-query, in case we modified our domain */
 	if (ret)
@@ -150,12 +167,9 @@ bool secrets_store_domain_sid(const char *domain, const DOM_SID *sid)
 bool secrets_fetch_domain_sid(const char *domain, DOM_SID *sid)
 {
 	DOM_SID *dyn_sid;
-	fstring key;
 	size_t size = 0;
 
-	slprintf(key, sizeof(key)-1, "%s/%s", SECRETS_DOMAIN_SID, domain);
-	strupper_m(key);
-	dyn_sid = (DOM_SID *)secrets_fetch(key, &size);
+	dyn_sid = (DOM_SID *)secrets_fetch(domain_sid_keystr(domain), &size);
 
 	if (dyn_sid == NULL)
 		return False;
@@ -214,6 +228,67 @@ bool secrets_fetch_domain_guid(const char *domain, struct GUID *guid)
 }
 
 /**
+ * Form a key for fetching the machine trust account sec channel type
+ *
+ * @param domain domain name
+ *
+ * @return keystring
+ **/
+static const char *machine_sec_channel_type_keystr(const char *domain)
+{
+	char *keystr;
+
+	keystr = talloc_asprintf(talloc_tos(), "%s/%s",
+				 SECRETS_MACHINE_SEC_CHANNEL_TYPE, domain);
+	SMB_ASSERT(keystr != NULL);
+
+	strupper_m(keystr);
+
+	return keystr;
+}
+
+/**
+ * Form a key for fetching the machine trust account last change time
+ *
+ * @param domain domain name
+ *
+ * @return keystring
+ **/
+static const char *machine_last_change_time_keystr(const char *domain)
+{
+	char *keystr;
+
+	keystr = talloc_asprintf(talloc_tos(), "%s/%s",
+				 SECRETS_MACHINE_LAST_CHANGE_TIME, domain);
+	SMB_ASSERT(keystr != NULL);
+
+	strupper_m(keystr);
+
+	return keystr;
+}
+
+
+/**
+ * Form a key for fetching the machine trust account password
+ *
+ * @param domain domain name
+ *
+ * @return keystring
+ **/
+static const char *machine_password_keystr(const char *domain)
+{
+	char *keystr;
+
+	keystr = talloc_asprintf(talloc_tos(), "%s/%s",
+				 SECRETS_MACHINE_PASSWORD, domain);
+	SMB_ASSERT(keystr != NULL);
+
+	strupper_m(keystr);
+
+	return keystr;
+}
+
+/**
  * Form a key for fetching the machine trust account password
  *
  * @param domain domain name
@@ -633,45 +708,59 @@ bool secrets_store_trusted_domain_password(const char* domain, const char* pwd,
 }
 
 /************************************************************************
+ Routine to delete the plaintext machine account password
+************************************************************************/
+
+bool secrets_delete_machine_password(const char *domain)
+{
+	return secrets_delete(machine_password_keystr(domain));
+}
+
+/************************************************************************
+ Routine to delete the plaintext machine account password, sec channel type and
+ last change time from secrets database
+************************************************************************/
+
+bool secrets_delete_machine_password_ex(const char *domain)
+{
+	if (!secrets_delete(machine_password_keystr(domain))) {
+		return false;
+	}
+	if (!secrets_delete(machine_sec_channel_type_keystr(domain))) {
+		return false;
+	}
+	return secrets_delete(machine_last_change_time_keystr(domain));
+}
+
+/************************************************************************
+ Routine to delete the domain sid
+************************************************************************/
+
+bool secrets_delete_domain_sid(const char *domain)
+{
+	return secrets_delete(domain_sid_keystr(domain));
+}
+
+/************************************************************************
  Routine to set the plaintext machine account password for a realm
 the password is assumed to be a null terminated ascii string
 ************************************************************************/
 
 bool secrets_store_machine_password(const char *pass, const char *domain, uint32 sec_channel)
 {
-	char *key = NULL;
 	bool ret;
 	uint32 last_change_time;
 	uint32 sec_channel_type;
 
-	asprintf(&key, "%s/%s", SECRETS_MACHINE_PASSWORD, domain);
-	if (!key)
-		return False;
-	strupper_m(key);
-
-	ret = secrets_store(key, pass, strlen(pass)+1);
-	SAFE_FREE(key);
-
+	ret = secrets_store(machine_password_keystr(domain), pass, strlen(pass)+1);
 	if (!ret)
 		return ret;
 
-	asprintf(&key, "%s/%s", SECRETS_MACHINE_LAST_CHANGE_TIME, domain);
-	if (!key)
-		return False;
-	strupper_m(key);
-
 	SIVAL(&last_change_time, 0, time(NULL));
-	ret = secrets_store(key, &last_change_time, sizeof(last_change_time));
-	SAFE_FREE(key);
-
-	asprintf(&key, "%s/%s", SECRETS_MACHINE_SEC_CHANNEL_TYPE, domain);
-	if (!key)
-		return False;
-	strupper_m(key);
+	ret = secrets_store(machine_last_change_time_keystr(domain), &last_change_time, sizeof(last_change_time));
 
 	SIVAL(&sec_channel_type, 0, sec_channel);
-	ret = secrets_store(key, &sec_channel_type, sizeof(sec_channel_type));
-	SAFE_FREE(key);
+	ret = secrets_store(machine_sec_channel_type_keystr(domain), &sec_channel_type, sizeof(sec_channel_type));
 
 	return ret;
 }
@@ -685,41 +774,31 @@ char *secrets_fetch_machine_password(const char *domain,
 				     time_t *pass_last_set_time,
 				     uint32 *channel)
 {
-	char *key = NULL;
 	char *ret;
-	asprintf(&key, "%s/%s", SECRETS_MACHINE_PASSWORD, domain);
-	strupper_m(key);
-	ret = (char *)secrets_fetch(key, NULL);
-	SAFE_FREE(key);
+	ret = (char *)secrets_fetch(machine_password_keystr(domain), NULL);
 
 	if (pass_last_set_time) {
 		size_t size;
 		uint32 *last_set_time;
-		asprintf(&key, "%s/%s", SECRETS_MACHINE_LAST_CHANGE_TIME, domain);
-		strupper_m(key);
-		last_set_time = (unsigned int *)secrets_fetch(key, &size);
+		last_set_time = (unsigned int *)secrets_fetch(machine_last_change_time_keystr(domain), &size);
 		if (last_set_time) {
 			*pass_last_set_time = IVAL(last_set_time,0);
 			SAFE_FREE(last_set_time);
 		} else {
 			*pass_last_set_time = 0;
 		}
-		SAFE_FREE(key);
 	}
 
 	if (channel) {
 		size_t size;
 		uint32 *channel_type;
-		asprintf(&key, "%s/%s", SECRETS_MACHINE_SEC_CHANNEL_TYPE, domain);
-		strupper_m(key);
-		channel_type = (unsigned int *)secrets_fetch(key, &size);
+		channel_type = (unsigned int *)secrets_fetch(machine_sec_channel_type_keystr(domain), &size);
 		if (channel_type) {
 			*channel = IVAL(channel_type,0);
 			SAFE_FREE(channel_type);
 		} else {
 			*channel = get_default_sec_channel();
 		}
-		SAFE_FREE(key);
 	}
 
 	return ret;
diff --git a/source/rpcclient/cmd_wkssvc.c b/source/rpcclient/cmd_wkssvc.c
index d136cd0..68f408c 100644
--- a/source/rpcclient/cmd_wkssvc.c
+++ b/source/rpcclient/cmd_wkssvc.c
@@ -124,11 +124,48 @@ static WERROR cmd_wkssvc_messagebuffersend(struct rpc_pipe_client *cli,
 	return werr;
 }
 
+static WERROR cmd_wkssvc_enumeratecomputernames(struct rpc_pipe_client *cli,
+						TALLOC_CTX *mem_ctx,
+						int argc,
+						const char **argv)
+{
+	const char *server_name;
+	enum wkssvc_ComputerNameType name_type = NetAllComputerNames;
+	NTSTATUS status;
+	struct wkssvc_ComputerNamesCtr *ctr = NULL;
+	WERROR werr;
+
+	server_name = cli->cli->desthost;
+
+	if (argc >= 2) {
+		name_type = atoi(argv[1]);
+	}
+
+	status = rpccli_wkssvc_NetrEnumerateComputerNames(cli, mem_ctx,
+							  server_name,
+							  name_type, 0,
+							  &ctr,
+							  &werr);
+	if (!NT_STATUS_IS_OK(status)) {
+		return ntstatus_to_werror(status);
+	}
+
+	if (W_ERROR_IS_OK(werr)) {
+		int i=0;
+		for (i = 0; i < ctr->count; i++) {
+			printf("name: %d %s\n", i, ctr->computer_name->string);
+		}
+	}
+
+	return werr;
+}
+
 struct cmd_set wkssvc_commands[] = {
 
 	{ "WKSSVC" },
 	{ "wkssvc_wkstagetinfo", RPC_RTYPE_WERROR, NULL, cmd_wkssvc_wkstagetinfo, PI_WKSSVC, NULL, "Query WKSSVC Workstation Information", "" },
 	{ "wkssvc_getjoininformation", RPC_RTYPE_WERROR, NULL, cmd_wkssvc_getjoininformation, PI_WKSSVC, NULL, "Query WKSSVC Join Information", "" },
 	{ "wkssvc_messagebuffersend", RPC_RTYPE_WERROR, NULL, cmd_wkssvc_messagebuffersend, PI_WKSSVC, NULL, "Send WKSSVC message", "" },
+	{ "wkssvc_enumeratecomputernames", RPC_RTYPE_WERROR, NULL, cmd_wkssvc_enumeratecomputernames, PI_WKSSVC, NULL, "Enumerate WKSSVC computer names", "" },
 	{ NULL }
 };


-- 
Samba Shared Repository


More information about the samba-cvs mailing list