From 65b3935e0278409d95d716208528899c7a924e63 Mon Sep 17 00:00:00 2001
From: Stephen Gallagher <sgallagh@redhat.com>
Date: Tue, 21 Feb 2012 15:07:21 -0500
Subject: [PATCH] Add tool to convert debug levels

Older versions of SSSD (1.5 and earlier) would take a debug_level
value set in the [sssd] section as authoritative for all other
sections where not explicitly overridden. We changed this so that
all sections need to set it if they want debug logs set.
This script can be run to make the new version continue to produce
the same logs as the old versions did, by explicitly adding
debug_level to all domains and services that did not have it set
already.

Bugzilla https://bugzilla.redhat.com/show_bug.cgi?id=753763
---
 contrib/rhel/update_debug_levels.py |  100 +++++++++++++++++++++++++++++++++++
 1 files changed, 100 insertions(+), 0 deletions(-)
 create mode 100644 contrib/rhel/update_debug_levels.py

diff --git a/contrib/rhel/update_debug_levels.py b/contrib/rhel/update_debug_levels.py
new file mode 100644
index 0000000000000000000000000000000000000000..0885a121b0e14111784c09633a5f664dfb1902b6
--- /dev/null
+++ b/contrib/rhel/update_debug_levels.py
@@ -0,0 +1,100 @@
+import os
+import sys
+import shutil
+import traceback
+from optparse import OptionParser
+import SSSDConfig
+
+
+# Older versions of SSSD (1.5 and earlier) would take a debug_level
+# value set in the [sssd] section as authoritative for all other
+# sections where not explicitly overridden. We changed this so that
+# all sections need to set it if they want debug logs set.
+# This script can be run to make the new version continue to produce
+# the same logs as the old versions did, by explicitly adding
+# debug_level to all domains and services that did not have it set
+# already.
+
+def parse_options():
+    parser = OptionParser()
+    parser.add_option("", "--no-backup", action="store_false",
+                      dest="backup", default=True,
+                      help="""Do not provide backup file after conversion.
+The script copies the original file with the suffix .bak.<timestamp>
+by default""")
+    parser.add_option("-v", "--verbose", action="store_true",
+                      dest="verbose", default=False,
+                      help="Be verbose")
+    (options, args) = parser.parse_args()
+    if len(args) > 0:
+        print >>sys.stderr, "Stray arguments: %s" % ' '.join([a for a in args])
+        return None
+
+    return options
+
+def verbose(msg, verbosity):
+    if verbosity:
+        print msg
+
+def main():
+    options = parse_options()
+    if not options:
+        print >> sys.stderr, "Cannot parse options"
+        return 1
+
+    # Import the current config file
+    try:
+        sssdconfig = SSSDConfig.SSSDConfig()
+        sssdconfig.import_config()
+
+    except Exception, e:
+        print "Error: %s" % e
+        verbose(traceback.format_exc(), options.verbose)
+        return 2
+
+    # Check the [sssd] section for debug_level
+    sssd_service = sssdconfig.get_service('sssd')
+
+    if not 'debug_level' in sssd_service.options.keys():
+        # Nothing to do, just return success
+        verbose("No changes required, no backup necessary",
+                options.verbose)
+        return 0
+
+    debug_level = sssd_service.options['debug_level']
+    verbose("Setting all sections to debug_level = %d" % debug_level,
+            options.verbose)
+
+    # Loop through services
+    for service in sssdconfig.list_services():
+        svc = sssdconfig.get_service(service);
+        if not 'debug_level' in svc.options.keys():
+            # Not explicitly set, so add it
+            svc.set_option('debug_level', debug_level)
+            sssdconfig.save_service(svc)
+
+    # Loop through domains (active AND inactive)
+    for domain in sssdconfig.list_domains():
+        dom = sssdconfig.get_domain(domain)
+        if not 'debug_level' in dom.options.keys():
+            # Not explicitly set, so add it
+            dom.set_option('debug_level', debug_level)
+            sssdconfig.save_domain(dom)
+
+    # Save the original file
+    if options.backup:
+        import datetime
+        currenttime = datetime.datetime.utcnow()
+        newfile = "/etc/sssd/sssd.conf.bak.%s" % currenttime.isoformat()
+        verbose("Backing up existing configuration to %s" % newfile,
+                options.verbose)
+        shutil.copy2("/etc/sssd/sssd.conf", newfile);
+
+    # Save the changes
+    sssdconfig.write();
+
+if __name__ == "__main__":
+    ret = main()
+    sys.exit(ret)
+else:
+    raise ImportError;
-- 
1.7.7.6

