svn commit: samba r25478 - in branches/4.0-python: . source/scripting/python source/setup

jelmer at samba.org jelmer at samba.org
Wed Oct 3 10:14:01 GMT 2007


Author: jelmer
Date: 2007-10-03 10:13:58 +0000 (Wed, 03 Oct 2007)
New Revision: 25478

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25478

Log:
Fix options groups in python code.
Modified:
   branches/4.0-python/
   branches/4.0-python/source/scripting/python/options.py
   branches/4.0-python/source/scripting/python/parammodule.c
   branches/4.0-python/source/scripting/python/provision.py
   branches/4.0-python/source/setup/provision


Changeset:

Property changes on: branches/4.0-python
___________________________________________________________________
Name: bzr:revision-info
...skipped...
Name: bzr:file-ids
...skipped...
Name: bzr:revision-id:v3-trunk0
...skipped...

Modified: branches/4.0-python/source/scripting/python/options.py
===================================================================
--- branches/4.0-python/source/scripting/python/options.py	2007-10-03 00:37:42 UTC (rev 25477)
+++ branches/4.0-python/source/scripting/python/options.py	2007-10-03 10:13:58 UTC (rev 25478)
@@ -1,3 +1,20 @@
-samba = []
-version = []
-credentials = []
+import optparse
+
+class SambaOptions(optparse.OptionGroup):
+    def __init__(self, parser):
+        optparse.OptionGroup.__init__(self, parser, "Samba Common Options")
+        self.add_option("--configfile", type="string", metavar="FILE",
+                        help="Configuration file")
+
+class VersionOptions(optparse.OptionGroup):
+    def __init__(self, parser):
+        optparse.OptionGroup.__init__(self, parser, "Version Options")
+
+class CredentialsOptions(optparse.OptionGroup):
+    def __init__(self, parser):
+        optparse.OptionGroup.__init__(self, parser, "Credentials Options")
+        self.add_option("--simple-bind-dn", type="string", metavar="DN",
+                        help="DN to use for a simple bind")
+        self.add_option("--password", type="string", metavar="PASSWORD",
+                        help="Password")
+

Modified: branches/4.0-python/source/scripting/python/parammodule.c
===================================================================
--- branches/4.0-python/source/scripting/python/parammodule.c	2007-10-03 00:37:42 UTC (rev 25477)
+++ branches/4.0-python/source/scripting/python/parammodule.c	2007-10-03 10:13:58 UTC (rev 25478)
@@ -29,67 +29,131 @@
 
 typedef struct {
 	PyObject_HEAD
+	struct param_context *param_ctx;
 } param_ParamFileObject;
 
-static PyObject *param_load(PyObject *self, PyObject *args)
+static PyObject *param_load(const char *filename)
 {
 	int ret;
-	char *filename;
-	param_ParamFileObject *param;
+	param_ParamFileObject *param; 
 
-	if (!PyArg_ParseTuple(args, "s:new", &filename))
-	        return NULL;
-
 	param = PyObject_New(param_ParamFileObject, &param_ParamFileType);
 
-	ret = param_read(PyMemCtx(), filename);
+	param->param_ctx = talloc_zero(PyMemCtx(), struct param_context);
 
+	ret = param_read(param->param_ctx, filename);
+
 	if (ret == -1) {
 		PyErr_SetString(PyExc_TypeError, "reading file failed");
 		return NULL;
 	}
 
-	/* FIXME: Add members:
-	 *   globals
-	 *   shares
-	 */
-
 	return (PyObject *)param;
 }
 
+static PyObject *py_param_load(PyObject *self, PyObject *args)
+{
+	char *filename;
+
+	if (!PyArg_ParseTuple(args, "s:new", &filename))
+	        return NULL;
+
+	return param_load(filename);
+}
+
 static void
 param_dealloc(PyObject* self)
 {
 	PyObject_Del(self);
 }
 
+static PyObject *py_param_get(PyObject *_self, PyObject *args)
+{
+	struct param *param;
+	const char *section_name = NULL, *param_name = NULL;
+	param_ParamFileObject *self = (param_ParamFileObject *)_self;
+
+	if (!PyArg_ParseTuple(args, "s|s", &param_name, &section_name))
+		return NULL;
+
+	param = param_get(self->param_ctx, section_name, param_name);
+	if (param == NULL)
+		return Py_None;
+
+	return PyString_FromString(param->value);
+}
+
+static PyObject *py_param_set(PyObject *_self, PyObject *args)
+{
+	param_ParamFileObject *self = (param_ParamFileObject *)_self;
+	struct param *param;
+	const char *section_name = NULL, *param_name = NULL, *param_value = NULL;
+
+	if (!PyArg_ParseTuple(args, "ss|s", &param_name, &param_value, &section_name))
+		return NULL;
+
+	if (param_set_string(self->param_ctx, section_name, param_name, param_value) != 0) {
+		PyErr_SetString(PyExc_TypeError, "setting variable failed");
+		return NULL;
+	}
+
+	return Py_None;
+}
+
+static PyObject *py_param_save(PyObject *_self, PyObject *args)
+{
+	param_ParamFileObject *self = (param_ParamFileObject *)_self;
+	const char *filename = NULL;
+
+	if (!PyArg_ParseTuple(args, "s", &filename))
+		return NULL;
+
+	if (param_write(self->param_ctx, filename) != 0) {
+		PyErr_SetString(PyExc_TypeError, "unable to save");
+		return NULL;
+	}
+
+	return Py_None;
+}
+
+static PyMethodDef param_methods[] = {
+	{"get", (PyCFunction)py_param_get, METH_VARARGS,
+		"Get a parameter."},
+	{"set", (PyCFunction)py_param_set, METH_VARARGS,
+		"Set a parameter."},
+	{"save", (PyCFunction)py_param_save, METH_VARARGS,
+		"Save file" },
+	{NULL, NULL, 0, NULL}
+};
+
+static PyObject *
+param_getattr(PyTypeObject *obj, char *name)
+{
+	return Py_FindMethod(param_methods, (PyObject *)obj, name);
+}
+
 static PyTypeObject param_ParamFileType = {
 	PyObject_HEAD_INIT(NULL) 0,
 	.tp_name = "ParamFile",
 	.tp_basicsize = sizeof(param_ParamFileObject),
 	.tp_dealloc = param_dealloc,
+	.tp_getattr = param_getattr,
 };
 
 
 static PyMethodDef methods[] = {
-	{ "ParamFile", (PyCFunction)param_load, METH_VARARGS, NULL},
+	{ "ParamFile", (PyCFunction)py_param_load, METH_VARARGS, NULL},
 	{ NULL, NULL }
 };
 
 PyDoc_STRVAR(param_doc, "Simple wrappers around the smb.conf parsers");
 
-PyObject *loadparm_object(void)
-{
-
-	return NULL; /* FIXME */
-}
-
 PyMODINIT_FUNC initparam(void)
 {
 	PyObject *mod = Py_InitModule3("param", methods, param_doc);
 	if (mod == NULL)
 		return;
 
-	/* FIXME: Check error code */
-	/*PyModule_AddObject(mod, "default_config", loadparm_object());*/
+	PyModule_AddObject(mod, "configfile", 
+			   PyString_FromString(lp_configfile()));
 }

Modified: branches/4.0-python/source/scripting/python/provision.py
===================================================================
--- branches/4.0-python/source/scripting/python/provision.py	2007-10-03 00:37:42 UTC (rev 25477)
+++ branches/4.0-python/source/scripting/python/provision.py	2007-10-03 10:13:58 UTC (rev 25478)
@@ -8,15 +8,15 @@
 import os
 import pwd
 import grp
-from uuid import uuid4
+import uuid
 from socket import gethostname
-from param import default_config
+import param
 
 #
 #  return True if the current install seems to be OK
 #
-def install_ok(session_info, credentials):
-    if default_config.get("realm") == "":
+def install_ok(lp, session_info, credentials):
+    if lp.get("realm") == "":
         return False
     ldb = Ldb(lp.get("sam database"), session_info=session_info, 
             credentials=credentials)
@@ -102,7 +102,7 @@
 def ldb_delete(ldb):
     print "Deleting %s\n" % ldb.filename
     lp = loadparm_init()
-    os.unlink("%s/%s" % (lp.get("private dir"), ldb.filename))
+    os.unlink(os.path.join(lp.get("private dir"), ldb.filename))
     ldb.transaction_cancel()
     ldb.close()
     ldb.connect(ldb.filename)
@@ -188,7 +188,7 @@
         ldb = Ldb(dbname, session_info=info.session_info, 
                 credentials=info.credentials)
     except LdbError:
-        os.unlink("%s/%s" % (default_config.get("private dir"), dbname))
+        os.unlink(os.path.join(lp.get("private dir"), dbname))
         ldb = Ldb(dbname, session_info=info.session_info, 
                 credentials=info.credentials)
 
@@ -276,7 +276,7 @@
     lp = loadparm_init()
     paths = Object()
     paths.smbconf = lp.get("config file")
-    paths.shareconf = lp.get("private dir") + "/" + "share.ldb"
+    paths.shareconf = os.path.join(lp.get("private dir"), "share.ldb")
     paths.hklm = "hklm.ldb"
     paths.hkcu = "hkcu.ldb"
     paths.hkcr = "hkcr.ldb"
@@ -288,9 +288,9 @@
     paths.keytab = "secrets.keytab"
     paths.dns = lp.get("private dir") + "/" + subobj.DNSDOMAIN + ".zone"
     paths.winsdb = "wins.ldb"
-    paths.ldap_basedn_ldif = lp.get("private dir") + "/" + subobj.DNSDOMAIN + ".ldif"
-    paths.ldap_config_basedn_ldif = lp.get("private dir") + "/" + subobj.DNSDOMAIN + "-config.ldif"
-    paths.ldap_schema_basedn_ldif = lp.get("private dir") + "/" + subobj.DNSDOMAIN + "-schema.ldif"
+    paths.ldap_basedn_ldif = os.path.join(lp.get("private dir"), subobj.DNSDOMAIN + ".ldif")
+    paths.ldap_config_basedn_ldif = os.path.join(lp.get("private dir"), subobj.DNSDOMAIN + "-config.ldif")
+    paths.ldap_schema_basedn_ldif = os.path.join(lp.get("private dir"), subobj.DNSDOMAIN + "-schema.ldif")
     return paths
 
 #
@@ -627,12 +627,12 @@
     subobj.VERSION      = version()
     subobj.HOSTIP       = hostip()
     subobj.DOMAINSID    = randsid()
-    subobj.INVOCATIONID = uuid4()
+    subobj.INVOCATIONID = uuid.random()
     subobj.KRBTGTPASS   = randpass(12)
     subobj.MACHINEPASS  = randpass(12)
     subobj.ADMINPASS    = randpass(12)
     subobj.DEFAULTSITE  = "Default-First-Site-Name"
-    subobj.NEWGUID      = uuid4()
+    subobj.NEWGUID      = uuid.random()
     subobj.NTTIME       = sys.nttime()
     subobj.LDAPTIME     = ldaptime
     subobj.DATESTRING   = datestring

Modified: branches/4.0-python/source/setup/provision
===================================================================
--- branches/4.0-python/source/setup/provision	2007-10-03 00:37:42 UTC (rev 25477)
+++ branches/4.0-python/source/setup/provision	2007-10-03 10:13:58 UTC (rev 25478)
@@ -9,14 +9,19 @@
 import optparse
 import sys
 
+# Add path to the library for in-tree use
 sys.path.append("scripting/python")
 
 from credentials import system_session
-from options import (samba, version, credentials)
+import options
+import param
 from provision import (provision, provision_guess, provision_default_paths,
 					   provision_ldapbase, provision_dns)
 
 parser = optparse.OptionParser("provision [options]")
+parser.add_option_group(options.SambaOptions(parser))
+parser.add_option_group(options.VersionOptions(parser))
+parser.add_option_group(options.CredentialsOptions(parser))
 parser.add_option("--realm", type="string", metavar="REALM", help="set realm")
 parser.add_option("--domain", type="string", metavar="DOMAIN",
 				  help="set domain")
@@ -67,10 +72,6 @@
 		help="Set server role to provision for (default standalone)")
 parser.add_option("--partitions-only", help="Configure Samba's partitions, but do not modify them (ie, join a BDC)")
 
-parser.add_options(samba)
-parser.add_options(version)
-parser.add_options(credentials)
-
 opts = parser.parse_args()[0]
 
 #
@@ -89,16 +90,16 @@
 #   main program
 #
 realm = opts.realm
-if realm is None or domain is None or host_name is None:
+if opts.realm is None or opts.domain is None or opts.host_name is None:
 	parser.print_help()
-	exit(1)
+	sys.exit(1)
 
 # cope with an initially blank smb.conf 
-lp = loadparm_init();
-lp.set("realm", options.realm);
-lp.set("workgroup", options.domain);
-lp.set("server role", options["server-role"]);
-lp.reload();
+lp = param.ParamFile(opts.configfile)
+lp.set("realm", opts.realm);
+lp.set("workgroup", opts.domain);
+lp.set("server role", opts.server_role);
+lp.reload()
 
 subobj = provision_guess();
 # FIXME



More information about the samba-cvs mailing list