From 0b9e9fd852db09091793adf9167a29adb2addaf0 Mon Sep 17 00:00:00 2001
From: Toshio Kuratomi <toshio@fedoraproject.org>
Date: Sun, 1 Nov 2015 12:58:20 -0800
Subject: [PATCH] Move existing check for root before we make expensive network
 calls

---
 packaging/os/dnf.py | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/packaging/os/dnf.py b/packaging/os/dnf.py
index 58cf4bcac95..50c86fc4f62 100644
--- a/packaging/os/dnf.py
+++ b/packaging/os/dnf.py
@@ -234,9 +234,6 @@ def _mark_package_install(module, base, pkg_spec):
 
 
 def ensure(module, base, state, names):
-    if not util.am_i_root():
-        module.fail_json(msg="This command has to be run under the root user.")
-
     if names == ['*'] and state == 'latest':
         base.upgrade_all()
     else:
@@ -330,12 +327,20 @@ def main():
         mutually_exclusive=[['name', 'list']],
         supports_check_mode=True)
     params = module.params
-    base = _base(
-        module, params['conf_file'], params['disable_gpg_check'],
-        params['disablerepo'], params['enablerepo'])
     if params['list']:
+        base = _base(
+            module, params['conf_file'], params['disable_gpg_check'],
+            params['disablerepo'], params['enablerepo'])
         list_items(module, base, params['list'])
     else:
+        # Note: base takes a long time to run so we want to check for failure
+        # before running it.
+        if not util.am_i_root():
+            module.fail_json(msg="This command has to be run under the root user.")
+        base = _base(
+            module, params['conf_file'], params['disable_gpg_check'],
+            params['disablerepo'], params['enablerepo'])
+
         ensure(module, base, params['state'], params['name'])