From 772da0a0044695796bf1df513351dbf0b2fe73eb Mon Sep 17 00:00:00 2001 From: Eugene Kirpichov Date: Fri, 30 Nov 2012 16:08:17 +0000 Subject: [PATCH] drop_privileges should also set HOME E.g. if HOME is not set, swift-proxy will create the keystone_signing file not in HOME but in /root. This is because the swift user doesn't have a shell in /etc/passwd and so it doesn't set environment variables when impersonating. Change-Id: I3013007e0dadf6ddccc176e142b7c78c5d63a351 --- swift/common/utils.py | 1 + test/unit/common/test_utils.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/swift/common/utils.py b/swift/common/utils.py index 963e3b8694..3bf207e291 100644 --- a/swift/common/utils.py +++ b/swift/common/utils.py @@ -756,6 +756,7 @@ def drop_privileges(user): os.setgroups([]) os.setgid(user[3]) os.setuid(user[2]) + os.environ['HOME'] = user[5] try: os.setsid() except OSError: diff --git a/test/unit/common/test_utils.py b/test/unit/common/test_utils.py index db5422f3b4..25a9b45226 100644 --- a/test/unit/common/test_utils.py +++ b/test/unit/common/test_utils.py @@ -632,6 +632,8 @@ log_name = %(yarr)s''' utils.drop_privileges(user) for func in required_func_calls: self.assert_(utils.os.called_funcs[func]) + import pwd + self.assertEquals(pwd.getpwnam(user)[5], utils.os.environ['HOME']) # reset; test same args, OSError trying to get session leader utils.os = MockOs(called_funcs=required_func_calls,