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, ¶m_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", ¶m_name, §ion_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", ¶m_name, ¶m_value, §ion_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