diff options
| author | Andrew Bartlett <abartlet@samba.org> | 2012-08-23 15:18:13 +1000 | 
|---|---|---|
| committer | Stefan Metzmacher <metze@samba.org> | 2013-01-10 14:52:45 +0100 | 
| commit | 99d872ee9261a299add4718c38234dfe9f7658fc (patch) | |
| tree | a63a10b66f562cf8df0e1c1f4e0e1214fec1b0cc /source4/scripting | |
| parent | 213e7260a83d4349132e8c159798b476cec3f814 (diff) | |
| download | samba-99d872ee9261a299add4718c38234dfe9f7658fc.tar.gz samba-99d872ee9261a299add4718c38234dfe9f7658fc.tar.bz2 samba-99d872ee9261a299add4718c38234dfe9f7658fc.zip  | |
s4-dbcheck: Allow forcing an override of an old @MODULES record
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'source4/scripting')
| -rw-r--r-- | source4/scripting/python/samba/dbchecker.py | 9 | ||||
| -rw-r--r-- | source4/scripting/python/samba/netcmd/dbcheck.py | 24 | 
2 files changed, 29 insertions, 4 deletions
diff --git a/source4/scripting/python/samba/dbchecker.py b/source4/scripting/python/samba/dbchecker.py index e1be6c4faa..91ae0b68ea 100644 --- a/source4/scripting/python/samba/dbchecker.py +++ b/source4/scripting/python/samba/dbchecker.py @@ -749,3 +749,12 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))          m['add']    = ldb.MessageElement('NONE', ldb.FLAG_MOD_ADD, 'force_reindex')          m['delete'] = ldb.MessageElement('NONE', ldb.FLAG_MOD_DELETE, 'force_reindex')          return self.do_modify(m, [], 're-indexed database', validate=False) + +    ############################################### +    # reset @MODULES +    def reset_modules(self): +        '''reset @MODULES to that needed for current sam.ldb (to read a very old database)''' +        m = ldb.Message() +        m.dn = ldb.Dn(self.samdb, "@MODULES") +        m['@LIST'] = ldb.MessageElement('samba_dsdb', ldb.FLAG_MOD_REPLACE, '@LIST') +        return self.do_modify(m, [], 'reset @MODULES on database', validate=False) diff --git a/source4/scripting/python/samba/netcmd/dbcheck.py b/source4/scripting/python/samba/netcmd/dbcheck.py index e4ec6b303a..889b0ff075 100644 --- a/source4/scripting/python/samba/netcmd/dbcheck.py +++ b/source4/scripting/python/samba/netcmd/dbcheck.py @@ -55,6 +55,7 @@ class cmd_dbcheck(Command):              help="don't print details of checking"),          Option("--attrs", dest="attrs", default=None, help="list of attributes to check (space separated)"),          Option("--reindex", dest="reindex", default=False, action="store_true", help="force database re-index"), +        Option("--force-modules", dest="force_modules", default=False, action="store_true", help="force loading of Samba modules and ignore the @MODULES record (for very old databases)"),          Option("-H", "--URL", help="LDB URL for database or target server (defaults to local SAM database)",                 type=str, metavar="URL", dest="H"),          ] @@ -62,7 +63,7 @@ class cmd_dbcheck(Command):      def run(self, DN=None, H=None, verbose=False, fix=False, yes=False,              cross_ncs=False, quiet=False,              scope="SUB", credopts=None, sambaopts=None, versionopts=None, -            attrs=None, reindex=False): +            attrs=None, reindex=False, force_modules=False):          lp = sambaopts.get_loadparm() @@ -73,8 +74,16 @@ class cmd_dbcheck(Command):          else:              creds = None -        samdb = SamDB(session_info=system_session(), url=H, -                      credentials=creds, lp=lp) +        if force_modules: +            samdb = SamDB(session_info=system_session(), url=H, +                          credentials=creds, lp=lp, options=["modules=samba_dsdb"]) +        else: +            try: +                samdb = SamDB(session_info=system_session(), url=H, +                              credentials=creds, lp=lp) +            except: +                raise CommandError("Failed to connect to DB at %s.  If this is a really old sam.ldb (before alpha9), then try again with --force-modules" % H) +          if H is None or not over_ldap:              samdb_schema = samdb @@ -105,13 +114,20 @@ class cmd_dbcheck(Command):              started_transaction = True          try:              chk = dbcheck(samdb, samdb_schema=samdb_schema, verbose=verbose, -                    fix=fix, yes=yes, quiet=quiet, in_transaction=started_transaction) +                          fix=fix, yes=yes, quiet=quiet, in_transaction=started_transaction)              if reindex:                  self.outf.write("Re-indexing...\n")                  error_count = 0                  if chk.reindex_database():                      self.outf.write("completed re-index OK\n") + +            elif force_modules: +                self.outf.write("Resetting @MODULES...\n") +                error_count = 0 +                if chk.reset_modules(): +                    self.outf.write("completed @MODULES reset OK\n") +              else:                  error_count = chk.check_database(DN=DN, scope=search_scope,                          controls=controls, attrs=attrs)  | 
