From 1f38aa0995f7ffa82f670fe5d36046dd6b8f44ac Mon Sep 17 00:00:00 2001 From: =?utf8?q?Matthias=20Dieter=20Walln=C3=B6fer?= Date: Fri, 18 Sep 2009 20:22:03 +0200 Subject: [PATCH] s4:various scripts under "setup" - Unification - This unified the shape of those four scripts (comments, command sequence, call of SamDB) - To consider the samdb.py changes regarding the filter: there is now always the possibility either to specify the username or the search filter --- source4/setup/enableaccount | 72 ++++++++++++++++--------------------- source4/setup/newuser | 10 +++--- source4/setup/setexpiry | 50 ++++++++++++++++++-------- source4/setup/setpassword | 15 ++------ 4 files changed, 74 insertions(+), 73 deletions(-) diff --git a/source4/setup/enableaccount b/source4/setup/enableaccount index d4e954074b1..0ca5b39faaa 100755 --- a/source4/setup/enableaccount +++ b/source4/setup/enableaccount @@ -1,18 +1,31 @@ #!/usr/bin/python # -# Enables a disabled user account on a Samba4 server -# Copyright Andrew Tridgell 2005 -# Copyright Jelmer Vernooij 2008 -# Released under the GNU GPL version 3 or later +# Enables an user account on a Samba4 server +# Copyright Jelmer Vernooij 2008 +# +# Based on the original in EJS: +# Copyright Andrew Tridgell 2005 +# +# 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 . # -import os, sys -sys.path.insert(0, os.path.join(os.path.dirname(sys.argv[0]), "../bin/python")) +import sys + +sys.path.insert(0, "bin/python") import samba.getopt as options import optparse -import pwd -import ldb from samba.auth import system_session from samba.samdb import SamDB @@ -23,49 +36,24 @@ parser.add_option_group(sambaopts) parser.add_option_group(options.VersionOptions(parser)) credopts = options.CredentialsOptions(parser) parser.add_option_group(credopts) -parser.add_option("-H", help="LDB URL for database or target server", type=str) -parser.add_option("--base", help="Base DN to search for user under", type=str) +parser.add_option("--filter", help="LDAP Filter to set password on", type=str) opts, args = parser.parse_args() -# -# print a message if quiet is not set -# -def message(text): - if not opts.quiet: - print text +filter = opts.filter -if len(args) == 0: +if (len(args) == 0) and (filter is None): + print "Either the username or '--filter' must be specified!" parser.print_usage() sys.exit(1) -username = args[0] - -if username is None: - print "username must be specified" +if filter is None: + username = args[0] + filter = "(&(objectClass=user)(sAMAccountName=%s))" % (username) lp = sambaopts.get_loadparm() - creds = credopts.get_credentials(lp) -if opts.H is not None: - url = opts.H -else: - url = lp.get("sam database") - -samdb = SamDB(url=url, session_info=system_session(), +samdb = SamDB(url=lp.get("sam database"), session_info=system_session(), credentials=creds, lp=lp) - -domain_dn = opts.base -if domain_dn is None: - domain_dn = SamDB.domain_dn(samdb) - -filter = "(&(objectClass=user)(samAccountName=%s))" % username - -res = samdb.search(domain_dn, scope=ldb.SCOPE_SUBTREE, - expression=filter, - attrs=[]) -assert(len(res) == 1) -user_dn = res[0].dn - -samdb.enable_account(user_dn) +samdb.enable_account(filter) diff --git a/source4/setup/newuser b/source4/setup/newuser index cc89e922a74..422677c301f 100755 --- a/source4/setup/newuser +++ b/source4/setup/newuser @@ -1,6 +1,6 @@ #!/usr/bin/python # -# Add a new user to a Samba4 server +# Adds a new user to a Samba4 server # Copyright Jelmer Vernooij 2008 # # Based on the original in EJS: @@ -18,6 +18,7 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . + import sys # Find right directory when running from source tree @@ -25,8 +26,10 @@ sys.path.insert(0, "bin/python") import samba.getopt as options import optparse + from getpass import getpass from samba.auth import system_session +from samba.samdb import SamDB parser = optparse.OptionParser("newuser [options] []") sambaopts = options.SambaOptions(parser) @@ -34,7 +37,6 @@ parser.add_option_group(sambaopts) parser.add_option_group(options.VersionOptions(parser)) credopts = options.CredentialsOptions(parser) parser.add_option_group(credopts) -parser.add_option("--quiet", help="Be quiet", action="store_true") parser.add_option("--unixname", help="Unix Username", type=str) parser.add_option("--must-change-at-next-login", help="Force password to be changed on next login", action="store_true") @@ -56,6 +58,6 @@ if opts.unixname is None: lp = sambaopts.get_loadparm() creds = credopts.get_credentials(lp) -samdb = sambaopts.get_hostconfig().get_samdb(session_info=system_session(), - credentials=creds) +samdb = SamDB(url=lp.get("sam database"), session_info=system_session(), + credentials=creds, lp=lp) samdb.newuser(username, opts.unixname, password, force_password_change_at_next_login=opts.must_change_at_next_login) diff --git a/source4/setup/setexpiry b/source4/setup/setexpiry index db7cdd412fe..6c6305ceaf6 100755 --- a/source4/setup/setexpiry +++ b/source4/setup/setexpiry @@ -1,9 +1,23 @@ #!/usr/bin/python # -# Sets the password expiry for a user on a Samba4 server -# Copyright Andrew Tridgell 2005 -# Copyright Jelmer Vernooij 2008 -# Released under the GNU GPL version 3 or later +# Sets the user password expiry on a Samba4 server +# Copyright Jelmer Vernooij 2008 +# +# Based on the original in EJS: +# Copyright Andrew Tridgell 2005 +# +# 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 . # import sys @@ -13,32 +27,38 @@ sys.path.insert(0, "bin/python") import samba.getopt as options import optparse -from getpass import getpass + from samba.auth import system_session +from samba.samdb import SamDB -parser = optparse.OptionParser("setexpiry [options] ") +parser = optparse.OptionParser("setexpiry [username] [options]") sambaopts = options.SambaOptions(parser) parser.add_option_group(sambaopts) parser.add_option_group(options.VersionOptions(parser)) credopts = options.CredentialsOptions(parser) parser.add_option_group(credopts) +parser.add_option("--filter", help="LDAP Filter to set password on", type=str) parser.add_option("--days", help="Days to expiry", type=int) -parser.add_option("--noexpiry", help="Never expire", action="store_true") +parser.add_option("--noexpiry", help="Password does never expire", action="store_true") opts, args = parser.parse_args() -if len(args) == 0: +if (len(args) == 0) and (filter is None): + print "Either the username or '--filter' must be specified!" parser.print_usage() sys.exit(1) -username = args[0] +days = opts.days +if days is None: + days = 0 + +if filter is None: + username = args[0] + filter = "(&(objectClass=user)(sAMAccountName=%s))" % (username) lp = sambaopts.get_loadparm() creds = credopts.get_credentials(lp) -samdb = sambaopts.get_hostconfig().get_samdb(session_info=system_session(), - credentials=creds) -days = opts.days -if days is None: - days = 0 -samdb.setexpiry(username, days*24*3600, opts.noexpiry) +samdb = SamDB(url=lp.get("sam database"), session_info=system_session(), + credentials=creds, lp=lp) +samdb.setexpiry(filter, days*24*3600, noexpiry=opts.noexpiry) diff --git a/source4/setup/setpassword b/source4/setup/setpassword index 513730d6492..5fbba03c2b6 100755 --- a/source4/setup/setpassword +++ b/source4/setup/setpassword @@ -20,15 +20,13 @@ # along with this program. If not, see . # -import os, sys +import sys -# Find right directory when running from source tree sys.path.insert(0, "bin/python") import samba.getopt as options import optparse -import pwd -import sys + from getpass import getpass from samba.auth import system_session from samba.samdb import SamDB @@ -45,13 +43,6 @@ parser.add_option("--must-change-at-next-login", help="Force password to be chan opts, args = parser.parse_args() -# -# print a message if quiet is not set -# -def message(text): - if not opts.quiet: - print text - filter = opts.filter if (len(args) == 0) and (filter is None): @@ -65,7 +56,7 @@ if password is None: if filter is None: username = args[0] - filter = "(&(objectclass=user)(samAccountName=%s))" % (username) + filter = "(&(objectClass=user)(sAMAccountName=%s))" % (username) lp = sambaopts.get_loadparm() creds = credopts.get_credentials(lp) -- 2.34.1