From c61d824e3ca42ba7ede772e42870a30da08b6996 Mon Sep 17 00:00:00 2001 From: Douglas Bagnall Date: Sat, 9 Mar 2019 13:48:29 +1300 Subject: [PATCH] s4/scripting: MORE py3 compatible print functions BUG: https://bugzilla.samba.org/show_bug.cgi?id=13978 Signed-off-by: Douglas Bagnall Reviewed-by: Andrew Bartlett (cherry picked from commit 561b654bc5bc2f5e614c5c2ab378193ca94d481a) --- source4/scripting/bin/autoidl | 19 +++++----- source4/scripting/bin/fullschema | 9 ++--- source4/scripting/bin/get-descriptors | 9 ++--- source4/scripting/bin/minschema | 47 +++++++++++++------------ source4/scripting/bin/sambaundoguididx | 8 +++-- source4/scripting/bin/smbstatus | 19 +++++----- source4/scripting/devel/addlotscontacts | 4 +-- source4/scripting/devel/crackname | 10 +++--- source4/scripting/devel/getncchanges | 8 ++--- 9 files changed, 71 insertions(+), 62 deletions(-) diff --git a/source4/scripting/bin/autoidl b/source4/scripting/bin/autoidl index 6a13caa2510..cbd696e56ef 100755 --- a/source4/scripting/bin/autoidl +++ b/source4/scripting/bin/autoidl @@ -17,6 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # +from __future__ import print_function import sys @@ -107,25 +108,25 @@ class Function: if base_request is None: raise Exception("Unable to determine base size for opnum %d" % self.opnum) - print "\tBase request is %r" % base_request + print("\tBase request is %r" % base_request) decision_byte_map = map(lambda x: self.check_decision_byte(base_request, x), range(len(base_request))) - print decision_byte_map + print(decision_byte_map) # find pointers possible_pointers = map(all, [decision_byte_map[i*4:(i+1)*4] for i in range(int(len(base_request)/4))]) - print possible_pointers + print(possible_pointers) pointer_deferrant_bases = map( lambda x: self.find_deferrant_data(base_request, x) if possible_pointers[x] else None, range(len(possible_pointers))) - print pointer_deferrant_bases + print(pointer_deferrant_bases) if len(sys.argv) < 3: - print "Usage: autoidl []" + print("Usage: autoidl []") sys.exit(1) (binding, uuid) = sys.argv[1:3] @@ -147,15 +148,15 @@ if version is None: else: conn = ClientConnection(binding, (uuid, version)) -print "Figuring out number of connections...", +print("Figuring out number of connections... ", end='') num_funcs = find_num_funcs(conn) -print "%d" % num_funcs +print("%d" % num_funcs) # Figure out the syntax for each one for i in range(num_funcs): - print "Function %d" % i + print("Function %d" % i) data = Function(conn, i) try: data.find_idl() except Exception as e: - print "Error: %r" % e + print("Error: %r" % e) diff --git a/source4/scripting/bin/fullschema b/source4/scripting/bin/fullschema index 596de01b91c..092cd484400 100755 --- a/source4/scripting/bin/fullschema +++ b/source4/scripting/bin/fullschema @@ -2,6 +2,7 @@ # # Works out the full schema # +from __future__ import print_function import base64 import optparse @@ -147,12 +148,12 @@ def write_ldif_one(o, attrs): value = fix_dn(j) if a != "cn": if a == "oMObjectClass": - print "%s:: %s" % (a, base64.b64encode(value)).decode('utf8') + print("%s:: %s" % (a, base64.b64encode(value)).decode('utf8')) elif a.endswith("GUID"): - print "%s: %s" % (a, ldb.schema_format_value(a, value)) + print("%s: %s" % (a, ldb.schema_format_value(a, value))) else: - print "%s: %s" % (a, value) - print "" + print("%s: %s" % (a, value)) + print() # get the rootDSE diff --git a/source4/scripting/bin/get-descriptors b/source4/scripting/bin/get-descriptors index 70926cdccbb..bedd31fad8c 100755 --- a/source4/scripting/bin/get-descriptors +++ b/source4/scripting/bin/get-descriptors @@ -26,6 +26,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # +from __future__ import print_function import optparse import sys @@ -97,12 +98,12 @@ class DescrGetter: l = line[i * length:((i + 1) * length)] else: l = " " + line[(i * length):((i + 1) * length)] - print l - print "\n" + print(l) + print("\n") def write_as_sddl(self, dn, descr): - print dn - print descr + "\n" + print(dn) + print(descr + "\n") def read_descr_by_base(self, search_base): res = self.samdb.search(base=search_base + self.local_domain, expression="(objectClass=*)", scope=SCOPE_SUBTREE, attrs=["nTSecurityDescriptor"]) diff --git a/source4/scripting/bin/minschema b/source4/scripting/bin/minschema index eba198696e2..8907e6899b6 100755 --- a/source4/scripting/bin/minschema +++ b/source4/scripting/bin/minschema @@ -2,7 +2,7 @@ # # Works out the minimal schema for a set of objectclasses # - +from __future__ import print_function import base64 import optparse import sys @@ -251,15 +251,15 @@ def find_objectclass_auto(ldb, o): return testdn = create_testdn(o.exampleDN) - print "testdn is '%s'" % testdn + print("testdn is '%s'" % testdn) ldif = "dn: " + testdn ldif += "\nobjectClass: " + o.name try: ldb.add(ldif) except LdbError as e: - print "error adding %s: %s" % (o.name, e) - print "%s" % ldif + print("error adding %s: %s" % (o.name, e)) + print("%s" % ldif) return res = ldb.search(base=testdn, scope=ldb.SCOPE_BASE) @@ -279,7 +279,7 @@ def expand_objectclass(ldb, o): expression="(&(objectClass=classSchema)(ldapDisplayName=%s))" % o.name, base=rootDse["schemaNamingContext"][0], scope=SCOPE_SUBTREE, attrs=attrs) - print >>sys.stderr, "Expanding class %s" % o.name + print("Expanding class %s" % o.name, file=sys.stderr) assert(len(res) == 1) msg = res[0] for aname in attrs: @@ -290,7 +290,7 @@ def expand_objectclass(ldb, o): list = [msg[aname]] for name in list: if not objectclasses.has_key(name): - print >>sys.stderr, "Found new objectclass '%s'" % name + print("Found new objectclass '%s'" % name, file=sys.stderr) objectclasses[name] = Objectclass(ldb, name) @@ -317,13 +317,15 @@ def walk_dn(ldb, dn): try: res = ldb.search("objectClass=*", dn, SCOPE_BASE, attrs) except LdbError as e: - print >>sys.stderr, "Unable to fetch allowedAttributes for '%s' - %r" % (dn, e) + print("Unable to fetch allowedAttributes for '%s' - %r" % (dn, e), + file=sys.stderr) return allattrs = res[0]["allowedAttributes"] try: res = ldb.search("objectClass=*", dn, SCOPE_BASE, allattrs) except LdbError as e: - print >>sys.stderr, "Unable to fetch all attributes for '%s' - %s" % (dn, e) + print("Unable to fetch all attributes for '%s' - %s" % (dn, e), + file=sys.stderr) return msg = res[0] for a in msg: @@ -336,7 +338,8 @@ def walk_naming_context(ldb, namingContext): res = ldb.search("objectClass=*", namingContext, SCOPE_DEFAULT, ["objectClass"]) except LdbError as e: - print >>sys.stderr, "Unable to fetch objectClasses for '%s' - %s" % (namingContext, e) + print("Unable to fetch objectClasses for '%s' - %s" % (namingContext, e), + file=sys.stderr) return for msg in res: msg = res.msgs[r]["objectClass"] @@ -389,7 +392,7 @@ def build_objectclass(ldb, name): base=rootDse["schemaNamingContext"][0], scope=SCOPE_SUBTREE, attrs=attrs) if len(res) == 0: - print >>sys.stderr, "unknown class '%s'" % name + print("unknown class '%s'" % name, file=sys.stderr) return None return Objectclass(ldb, name) @@ -424,7 +427,7 @@ def write_aggregate_objectclass(objectclass): list = attribute_list(objectclass, "systemMayContain", "mayContain") line += aggregate_list("MAY", list) - print line + " )" + print(line + " )") def write_aggregate_ditcontentrule(objectclass): @@ -451,7 +454,7 @@ def write_aggregate_ditcontentrule(objectclass): line += aggregate_list("MUST", must_list) line += aggregate_list("MAY", may_list) - print line + " )" + print(line + " )") def write_aggregate_attribute(attrib): """write the aggregate record for an attribute""" @@ -463,15 +466,15 @@ def write_aggregate_attribute(attrib): if attrib.get('systemOnly') == "TRUE": line += "NO-USER-MODIFICATION " - print line + ")" + print(line + ")") def write_aggregate(): """write the aggregate record""" - print "dn: CN=Aggregate,${SCHEMADN}" - print """objectClass: top + print("dn: CN=Aggregate,${SCHEMADN}") + print("""objectClass: top objectClass: subSchema -objectCategory: CN=SubSchema,${SCHEMADN}""" +objectCategory: CN=SubSchema,${SCHEMADN}""") if not opts.dump_subschema_auto: return @@ -552,15 +555,15 @@ if not opts.verbose: # # dump list of objectclasses # -print "objectClasses:\n" +print("objectClasses:\n") for objectclass in objectclasses: - print "\t%s\n" % objectclass + print("\t%s\n" % objectclass) -print "attributes:\n" +print("attributes:\n") for attr in attributes: - print "\t%s\n" % attr + print("\t%s\n" % attr) -print "autocreated attributes:\n" +print("autocreated attributes:\n") for attr in attributes: if attr.autocreate: - print "\t%s\n" % i + print("\t%s\n" % i) diff --git a/source4/scripting/bin/sambaundoguididx b/source4/scripting/bin/sambaundoguididx index ef0f525818d..adff232e022 100755 --- a/source4/scripting/bin/sambaundoguididx +++ b/source4/scripting/bin/sambaundoguididx @@ -1,4 +1,5 @@ #!/usr/bin/env python +from __future__ import print_function import optparse import sys @@ -73,11 +74,12 @@ samdb.transaction_commit() print("Re-opening with the full DB stack") samdb = SamDB(url=url, lp=lp_ctx) -print "Re-triggering another re-index" +print("Re-triggering another re-index") chk = dbcheck(samdb) chk.reindex_database() -print "Your database has been downgraded to DN-based index values." +print("Your database has been downgraded to DN-based index values.") -print "NOTE: Any use of a Samba 4.8 tool including ldbsearch will auto-upgrade back to GUID index mode" +print("NOTE: Any use of a Samba 4.8 tool including ldbsearch will " + "auto-upgrade back to GUID index mode") diff --git a/source4/scripting/bin/smbstatus b/source4/scripting/bin/smbstatus index c2834ab12ab..1d1b71627aa 100755 --- a/source4/scripting/bin/smbstatus +++ b/source4/scripting/bin/smbstatus @@ -8,7 +8,7 @@ # Copyright Andrew Tridgell 2005 # Released under the GNU GPL version 3 or later # - +from __future__ import print_function import os, sys # make sure the script dies immediately when hitting control-C, @@ -40,25 +40,26 @@ def show_tcons(open_connection): """show open tree connects""" conn = open_connection("smb_server") tcons = next(conn.smbsrv_information(irpc.SMBSRV_INFO_TCONS)) - print "Share Client Connected at" - print "-" * 79 + print("Share Client Connected at") + print("-" * 79) for tcon in tcons: - print "%-30s %16s %s" % (tcon.share_name, tcon.client_ip, sys.httptime(tcon.connect_time)) + print("%-30s %16s %s" % + (tcon.share_name, tcon.client_ip, sys.httptime(tcon.connect_time))) def show_nbt(open_connection): """show nbtd information""" conn = open_connection("nbt_server") stats = next(conn.nbtd_information(irpc.NBTD_INFO_STATISTICS)) - print "NBT server statistics:" + print("NBT server statistics:") fields = [("total_received", "Total received"), ("total_sent", "Total sent"), ("query_count", "Query count"), ("register_count", "Register count"), ("release_count", "Release count")] for (field, description) in fields: - print "\t%s:\t%s" % (description, getattr(stats, field)) - print + print("\t%s:\t%s" % (description, getattr(stats, field))) + print() parser = optparse.OptionParser("%s [options]" % sys.argv[0]) sambaopts = options.SambaOptions(parser) @@ -71,7 +72,7 @@ opts, args = parser.parse_args() lp = sambaopts.get_loadparm() -print "%s" % lp.get("server string") +print("%s" % lp.get("server string")) messaging_path = (opts.messaging_path or os.path.join(lp.get("private dir"), "smbd.tmp", "messaging")) @@ -85,7 +86,7 @@ else: conn = open_connection("smb_server") except RuntimeError, (num, msg): if msg == 'NT_STATUS_OBJECT_NAME_NOT_FOUND': - print "No active connections" + print("No active connections") else: show_sessions(conn) show_tcons(conn) diff --git a/source4/scripting/devel/addlotscontacts b/source4/scripting/devel/addlotscontacts index e8b2c1af1aa..73e2043509a 100644 --- a/source4/scripting/devel/addlotscontacts +++ b/source4/scripting/devel/addlotscontacts @@ -15,7 +15,7 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . - +from __future__ import print_function __docformat__ = "restructuredText" @@ -88,7 +88,7 @@ if __name__ == '__main__': "objectClass") if count !=0 and (count % increment) == 0: - print "Added contacts: %d" % count + print("Added contacts: %d" % count) ldbs.sam.add(msg) count += 1 diff --git a/source4/scripting/devel/crackname b/source4/scripting/devel/crackname index 0ae177c133f..d19d4968900 100755 --- a/source4/scripting/devel/crackname +++ b/source4/scripting/devel/crackname @@ -3,7 +3,7 @@ # Copyright Matthieu Patou 2011 # script to call a DRSUAPI crackname # this is useful for plugfest testing and replication debug - +from __future__ import print_function import sys from optparse import OptionParser @@ -71,8 +71,8 @@ if __name__ == "__main__": req.names = [names] (result, ctr) = drs.DsCrackNames(drs_handle, 1, req) - print "# of result = %d" %ctr.count + print("# of result = %d" %ctr.count) if ctr.count: - print "status = %d" % ctr.array[0].status - print "result name = %s" % ctr.array[0].result_name - print "domain = %s" % ctr.array[0].dns_domain_name + print("status = %d" % ctr.array[0].status) + print("result name = %s" % ctr.array[0].result_name) + print("domain = %s" % ctr.array[0].dns_domain_name) diff --git a/source4/scripting/devel/getncchanges b/source4/scripting/devel/getncchanges index 9c25e39f756..69d39bd5dd5 100755 --- a/source4/scripting/devel/getncchanges +++ b/source4/scripting/devel/getncchanges @@ -2,7 +2,7 @@ # script to call a DRS GetNCChanges from the command line # this is useful for plugfest testing - +from __future__ import print_function import sys from optparse import OptionParser @@ -98,17 +98,17 @@ if __name__ == "__main__": dest_dsa = opts.dest_dsa if not dest_dsa: - print "no dest_dsa specified trying to figure out from ldap" + print("no dest_dsa specified trying to figure out from ldap") msgs = samdb.search(controls=["search_options:1:2"], expression='(objectclass=ntdsdsa)') if len(msgs) == 1: dest_dsa = str(ndr_unpack(misc.GUID, msgs[0]["invocationId"][0])) - print "Found this dsa: %s" % dest_dsa + print("Found this dsa: %s" % dest_dsa) else: # TODO fixme pass if not dest_dsa: - print "Unable to find the dest_dsa automatically please specify it" + print("Unable to find the dest_dsa automatically please specify it") import sys sys.exit(1)