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

Volker Lendecke vlendec at samba.org
Sat Nov 22 18:26:26 GMT 2008


The branch, master has been updated
       via  a6aa72001e3fdd36112a839cf3e40dd2d636f254 (commit)
      from  d205766e60be96449930f270b0a77002dffab278 (commit)

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


- Log -----------------------------------------------------------------
commit a6aa72001e3fdd36112a839cf3e40dd2d636f254
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Nov 22 18:31:52 2008 +0100

    Add "net machinepw"
    
    Provide a C-based alternative to the python script "mymachinepw"

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

Summary of changes:
 source4/utils/net/config.mk       |    1 +
 source4/utils/net/net.c           |    2 +
 source4/utils/net/net_machinepw.c |   91 +++++++++++++++++++++++++++++++++++++
 3 files changed, 94 insertions(+), 0 deletions(-)
 create mode 100644 source4/utils/net/net_machinepw.c


Changeset truncated at 500 lines:

diff --git a/source4/utils/net/config.mk b/source4/utils/net/config.mk
index 93b51e1..b2f0fcf 100644
--- a/source4/utils/net/config.mk
+++ b/source4/utils/net/config.mk
@@ -16,6 +16,7 @@ PRIVATE_DEPENDENCIES = \
 
 net_OBJ_FILES = $(addprefix $(utilssrcdir)/net/,  \
 		net.o \
+		net_machinepw.o \
 		net_password.o \
 		net_time.o \
 		net_join.o \
diff --git a/source4/utils/net/net.c b/source4/utils/net/net.c
index 81584e4..4d1b202 100644
--- a/source4/utils/net/net.c
+++ b/source4/utils/net/net.c
@@ -107,6 +107,8 @@ static const struct net_functable net_functable[] = {
 	{"vampire", "join and syncronise an AD domain onto the local server\n", net_vampire, net_vampire_usage},
 	{"samsync", "synchronise into the local ldb the sam of an NT4 domain\n", net_samsync_ldb, net_samsync_ldb_usage},
 	{"user", "manage user accounts\n", net_user, net_user_usage},
+	{"machinepw", "Get a machine password out of our SAM", net_machinepw,
+	 net_machinepw_usage},
 	{NULL, NULL, NULL, NULL}
 };
 
diff --git a/source4/utils/net/net_machinepw.c b/source4/utils/net/net_machinepw.c
new file mode 100644
index 0000000..8c2fac9
--- /dev/null
+++ b/source4/utils/net/net_machinepw.c
@@ -0,0 +1,91 @@
+/*
+   Samba Unix/Linux SMB client library
+   Distributed SMB/CIFS Server Management Utility
+
+   Copyright (C) 2008 Volker Lendecke
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "utils/net/net.h"
+#include "libnet/libnet.h"
+#include "libcli/security/security.h"
+#include "param/secrets.h"
+#include "param/param.h"
+#include "lib/events/events.h"
+
+int net_machinepw_usage(struct net_context *ctx, int argc, const char **argv)
+{
+	d_printf("net machinepw <accountname>\n");
+	return -1;
+}
+
+int net_machinepw(struct net_context *ctx, int argc, const char **argv)
+{
+	struct ldb_context *secrets;
+	TALLOC_CTX *mem_ctx;
+	struct event_context *ev;
+	struct ldb_message **msgs;
+	int res;
+	int num_records;
+	const char *attrs[] = { "secret", NULL };
+	const char *secret;
+
+	if (argc != 1) {
+		net_machinepw_usage(ctx, argc, argv);
+		return -1;
+	}
+
+	mem_ctx = talloc_new(ctx);
+	if (mem_ctx == NULL) {
+		d_fprintf(stderr, "talloc_new failed\n");
+		return -1;
+	}
+
+	ev = event_context_init(mem_ctx);
+	if (ev == NULL) {
+		d_fprintf(stderr, "event_context_init failed\n");
+		goto fail;
+	}
+
+	secrets = secrets_db_connect(mem_ctx, ev, ctx->lp_ctx);
+	if (secrets == NULL) {
+		d_fprintf(stderr, "secrets_db_connect failed\n");
+		goto fail;
+	}
+
+	num_records = gendb_search(secrets, mem_ctx, NULL, &msgs, attrs,
+				   "(&(objectclass=primaryDomain)"
+				   "(samaccountname=%s))", argv[0]);
+	if (num_records != 1) {
+		d_fprintf(stderr, "gendb_search returned %d records, "
+			  "expected 1\n", num_records);
+		goto fail;
+	}
+
+	secret = ldb_msg_find_attr_as_string(msgs[0], "secret", NULL);
+	if (secret == NULL) {
+		d_fprintf(stderr, "machine account contains no secret\n");
+		goto fail;
+	}
+
+	printf("%s\n", secret);
+	talloc_free(mem_ctx);
+	return 0;
+
+ fail:
+	talloc_free(mem_ctx);
+	return -1;
+}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list