sambaundoguididx: renamed to downgradedatabase
[metze/samba/wip.git] / source4 / scripting / bin / sambadowngradedatabase
1 #!/usr/bin/env python3
2 from __future__ import print_function
3 import optparse
4 import sys
5
6 # Find right directory when running from source tree
7 sys.path.insert(0, "bin/python")
8
9
10 import samba
11 import ldb
12 import urllib
13 import os
14 from samba import getopt as options
15 from samba.samdb import SamDB
16 from samba.dbchecker import dbcheck
17 from samba.credentials import Credentials
18 parser = optparse.OptionParser("sambaundoguididx")
19 sambaopts = options.SambaOptions(parser)
20 parser.add_option_group(options.VersionOptions(parser))
21 parser.add_option("-H", "--URL", help="LDB URL for database",
22                   type=str, metavar="URL", dest="H")
23 opts, args = parser.parse_args()
24
25 if len(args) != 0:
26     parser.print_usage()
27     sys.exit(1)
28
29 lp_ctx = sambaopts.get_loadparm()
30 lp_ctx.set("dsdb:guid index", "false")
31
32 if opts.H is None:
33     url = lp_ctx.private_path("sam.ldb")
34 else:
35     url = opts.H
36
37 samdb = ldb.Ldb(url=url,
38                 flags=ldb.FLG_DONT_CREATE_DB,
39                 options=["modules:"])
40
41 partitions = samdb.search(base="@PARTITION",
42                           scope=ldb.SCOPE_BASE,
43                           attrs=["partition"])
44
45 modmsg = ldb.Message()
46 modmsg.dn = ldb.Dn(samdb, '@INDEXLIST')
47 modmsg.add(ldb.MessageElement(
48     elements=[],
49     flags=ldb.FLAG_MOD_REPLACE,
50     name='@IDXGUID'))
51 modmsg.add(ldb.MessageElement(
52     elements=[],
53     flags=ldb.FLAG_MOD_REPLACE,
54     name='@IDX_DN_GUID'))
55
56 samdb.transaction_start()
57 samdb.modify(modmsg)
58
59 privatedir = os.path.dirname(url)
60
61 dbs = []
62 for part in partitions[0]['partition']:
63     dbname = str(part).split(":")[1]
64     dbpath = os.path.join(privatedir, dbname)
65     if os.path.isfile(dbpath):
66         dbpath = "ldb://" + dbpath
67     db = ldb.Ldb(url=dbpath,
68                  options=["modules:"],
69                  flags=ldb.FLG_DONT_CREATE_DB)
70     db.transaction_start()
71     db.modify(modmsg)
72     dbs.append(db)
73
74 for db in dbs:
75     db.transaction_commit()
76
77 samdb.transaction_commit()
78
79 print("Re-opening with the full DB stack")
80 samdb = SamDB(url=url,
81               flags=ldb.FLG_DONT_CREATE_DB,
82               lp=lp_ctx)
83 print("Re-triggering another re-index")
84 chk = dbcheck(samdb)
85
86 chk.reindex_database()
87
88 print("Your database has been downgraded to DN-based index values.")
89
90 print("NOTE: Any use of a Samba 4.8 tool including ldbsearch will "
91       "auto-upgrade back to GUID index mode")