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
