ac7d03
From a93e6040fdadd41dc7d1c46c09110b7321ed333c Mon Sep 17 00:00:00 2001
ac7d03
From: Christian Heimes <cheimes@redhat.com>
ac7d03
Date: Tue, 28 Feb 2017 12:07:19 +0100
ac7d03
Subject: [PATCH] Use Custodia 0.3.1 features
ac7d03
ac7d03
* Use sd-notify in ipa-custodia.service
ac7d03
* Introduce libexec/ipa/ipa-custodia script. It comes with correct
ac7d03
  default setting for IPA's config file. The new file also makes it
ac7d03
  simpler to run IPA's custodia instance with its own SELinux context.
ac7d03
* ipapython no longer depends on custodia
ac7d03
ac7d03
The patch addresses three issues:
ac7d03
ac7d03
* https://bugzilla.redhat.com/show_bug.cgi?id=1430247
ac7d03
  Forward compatibility with Custodia 0.3 in Fedora rawhide
ac7d03
* https://pagure.io/freeipa/issue/5825
ac7d03
  Use sd-notify
ac7d03
* https://pagure.io/freeipa/issue/6788
ac7d03
  Prepare for separate SELinux context
ac7d03
ac7d03
Signed-off-by: Christian Heimes <cheimes@redhat.com>
ac7d03
Reviewed-By: Martin Basti <mbasti@redhat.com>
ac7d03
Reviewed-By: Jan Cholasta <jcholast@redhat.com>
ac7d03
---
ac7d03
 freeipa.spec.in                      | 13 ++++++++-----
ac7d03
 init/systemd/Makefile.am             |  1 +
ac7d03
 init/systemd/ipa-custodia.service.in |  5 ++---
ac7d03
 install/tools/Makefile.am            |  1 +
ac7d03
 install/tools/ipa-custodia           |  6 ++++++
ac7d03
 ipapython/setup.py                   |  1 -
ac7d03
 ipaserver/secrets/service.py         | 30 ++++++++++++++++++++++++++++++
ac7d03
 ipaserver/setup.py                   |  1 +
ac7d03
 ipasetup.py.in                       |  1 +
ac7d03
 9 files changed, 50 insertions(+), 9 deletions(-)
ac7d03
 create mode 100755 install/tools/ipa-custodia
ac7d03
 create mode 100644 ipaserver/secrets/service.py
ac7d03
ac7d03
diff --git a/freeipa.spec.in b/freeipa.spec.in
ac7d03
index 9c8a14a580ad80ed10e797bef9661e7b1feb81b3..91fca6ea974bd70847feb1e3b6db8ae3cbda061c 100644
ac7d03
--- a/freeipa.spec.in
ac7d03
+++ b/freeipa.spec.in
ac7d03
@@ -181,7 +181,8 @@ BuildRequires:  pki-base-python2
ac7d03
 BuildRequires:  python-pytest-multihost
ac7d03
 BuildRequires:  python-pytest-sourceorder
ac7d03
 BuildRequires:  python-jwcrypto
ac7d03
-BuildRequires:  python-custodia
ac7d03
+# 0.3: sd_notify (https://pagure.io/freeipa/issue/5825)
ac7d03
+BuildRequires:  python-custodia >= 0.3.1
ac7d03
 BuildRequires:  dbus-python
ac7d03
 BuildRequires:  python-dateutil
ac7d03
 BuildRequires:  python-enum34
ac7d03
@@ -216,7 +217,8 @@ BuildRequires:  pki-base-python3
ac7d03
 BuildRequires:  python3-pytest-multihost
ac7d03
 BuildRequires:  python3-pytest-sourceorder
ac7d03
 BuildRequires:  python3-jwcrypto
ac7d03
-BuildRequires:  python3-custodia
ac7d03
+# 0.3: sd_notify (https://pagure.io/freeipa/issue/5825)
ac7d03
+BuildRequires:  python3-custodia >= 0.3.1
ac7d03
 BuildRequires:  python3-dbus
ac7d03
 BuildRequires:  python3-dateutil
ac7d03
 BuildRequires:  python3-enum34
ac7d03
@@ -340,6 +342,7 @@ BuildArch: noarch
ac7d03
 Requires: %{name}-server-common = %{version}-%{release}
ac7d03
 Requires: %{name}-common = %{version}-%{release}
ac7d03
 Requires: python2-ipaclient = %{version}-%{release}
ac7d03
+Requires: python-custodia >= 0.3.1
ac7d03
 Requires: python-ldap >= 2.4.15
ac7d03
 Requires: python-lxml
ac7d03
 Requires: python-gssapi >= 1.2.0
ac7d03
@@ -370,6 +373,7 @@ BuildArch: noarch
ac7d03
 Requires: %{name}-server-common = %{version}-%{release}
ac7d03
 Requires: %{name}-common = %{version}-%{release}
ac7d03
 Requires: python3-ipaclient = %{version}-%{release}
ac7d03
+Requires: python3-custodia >= 0.3.1
ac7d03
 Requires: python3-pyldap >= 2.4.15
ac7d03
 Requires: python3-lxml
ac7d03
 Requires: python3-gssapi >= 1.2.0
ac7d03
@@ -399,7 +403,7 @@ BuildArch: noarch
ac7d03
 Requires: %{name}-client-common = %{version}-%{release}
ac7d03
 Requires: httpd >= 2.4.6-31
ac7d03
 Requires: systemd-units >= 38
ac7d03
-Requires: custodia
ac7d03
+Requires: custodia >= 0.3.1
ac7d03
 
ac7d03
 Provides: %{alt_name}-server-common = %{version}
ac7d03
 Conflicts: %{alt_name}-server-common
ac7d03
@@ -650,7 +654,6 @@ Requires: python-jwcrypto
ac7d03
 Requires: python-cffi
ac7d03
 Requires: python-ldap >= 2.4.15
ac7d03
 Requires: python-requests
ac7d03
-Requires: python-custodia
ac7d03
 Requires: python-dns >= 1.15
ac7d03
 Requires: python-enum34
ac7d03
 Requires: python-netifaces >= 0.10.4
ac7d03
@@ -699,7 +702,6 @@ Requires: python3-six
ac7d03
 Requires: python3-jwcrypto
ac7d03
 Requires: python3-cffi
ac7d03
 Requires: python3-pyldap >= 2.4.15
ac7d03
-Requires: python3-custodia
ac7d03
 Requires: python3-requests
ac7d03
 Requires: python3-dns >= 1.15
ac7d03
 Requires: python3-netifaces >= 0.10.4
ac7d03
@@ -1160,6 +1162,7 @@ fi
ac7d03
 %{_libexecdir}/certmonger/dogtag-ipa-ca-renew-agent-submit
ac7d03
 %{_libexecdir}/certmonger/ipa-server-guard
ac7d03
 %dir %{_libexecdir}/ipa
ac7d03
+%{_libexecdir}/ipa/ipa-custodia
ac7d03
 %{_libexecdir}/ipa/ipa-dnskeysyncd
ac7d03
 %{_libexecdir}/ipa/ipa-dnskeysync-replica
ac7d03
 %{_libexecdir}/ipa/ipa-ods-exporter
ac7d03
diff --git a/init/systemd/Makefile.am b/init/systemd/Makefile.am
ac7d03
index 325e8574812a2ec507911128dbac0315070d2897..945f6ac22a050f393990cad27156e092ce4f7a29 100644
ac7d03
--- a/init/systemd/Makefile.am
ac7d03
+++ b/init/systemd/Makefile.am
ac7d03
@@ -18,5 +18,6 @@ CLEANFILES = $(systemdsystemunit_DATA)
ac7d03
 		-e 's|@IPA_SYSCONF_DIR[@]|$(IPA_SYSCONF_DIR)|g' \
ac7d03
 		-e 's|@localstatedir[@]|$(localstatedir)|g' \
ac7d03
 		-e 's|@sbindir[@]|$(sbindir)|g' \
ac7d03
+		-e 's|@libexecdir[@]|$(libexecdir)|g' \
ac7d03
 		-e 's|@sysconfenvdir[@]|$(sysconfenvdir)|g' \
ac7d03
 		'$(srcdir)/$@.in' >$@
ac7d03
diff --git a/init/systemd/ipa-custodia.service.in b/init/systemd/ipa-custodia.service.in
ac7d03
index 3f9b128aa1b7ee373c52e1e3566048ec6028c826..0247bd8826529d638c692d827ae31393db292b4a 100644
ac7d03
--- a/init/systemd/ipa-custodia.service.in
ac7d03
+++ b/init/systemd/ipa-custodia.service.in
ac7d03
@@ -2,9 +2,8 @@
ac7d03
 Description=IPA Custodia Service
ac7d03
 
ac7d03
 [Service]
ac7d03
-Type=simple
ac7d03
-
ac7d03
-ExecStart=@sbindir@/custodia @IPA_SYSCONF_DIR@/custodia/custodia.conf
ac7d03
+Type=notify
ac7d03
+ExecStart=@libexecdir@/ipa/ipa-custodia @IPA_SYSCONF_DIR@/custodia/custodia.conf
ac7d03
 PrivateTmp=yes
ac7d03
 Restart=on-failure
ac7d03
 RestartSec=60s
ac7d03
diff --git a/install/tools/Makefile.am b/install/tools/Makefile.am
ac7d03
index f2c2ce2953c3ac146a80f7e4515769683a01f843..493e5ff4a8290be8ef076135104a85f8315b7842 100644
ac7d03
--- a/install/tools/Makefile.am
ac7d03
+++ b/install/tools/Makefile.am
ac7d03
@@ -32,6 +32,7 @@ dist_sbin_SCRIPTS =		\
ac7d03
 
ac7d03
 appdir = $(libexecdir)/ipa/
ac7d03
 dist_app_SCRIPTS =		\
ac7d03
+	ipa-custodia		\
ac7d03
 	ipa-httpd-kdcproxy	\
ac7d03
 	ipa-pki-retrieve-key	\
ac7d03
 	$(NULL)
ac7d03
diff --git a/install/tools/ipa-custodia b/install/tools/ipa-custodia
ac7d03
new file mode 100755
ac7d03
index 0000000000000000000000000000000000000000..5deeeffdd78db323b6534934065772bb0ae67438
ac7d03
--- /dev/null
ac7d03
+++ b/install/tools/ipa-custodia
ac7d03
@@ -0,0 +1,6 @@
ac7d03
+#!/usr/bin/python2
ac7d03
+# Copyright (C) 2017  IPA Project Contributors, see COPYING for license
ac7d03
+from ipaserver.secrets.service import main
ac7d03
+
ac7d03
+if __name__ == '__main__':
ac7d03
+    main()
ac7d03
diff --git a/ipapython/setup.py b/ipapython/setup.py
ac7d03
index 86e4131e5f9cfc106393875018d6ac2645a38be1..2fc039fe7bb673add17404d13bf477c5b8bb0606 100755
ac7d03
--- a/ipapython/setup.py
ac7d03
+++ b/ipapython/setup.py
ac7d03
@@ -38,7 +38,6 @@ if __name__ == '__main__':
ac7d03
         ],
ac7d03
         install_requires=[
ac7d03
             "cffi",
ac7d03
-            "custodia",
ac7d03
             "cryptography",
ac7d03
             "dnspython",
ac7d03
             "gssapi",
ac7d03
diff --git a/ipaserver/secrets/service.py b/ipaserver/secrets/service.py
ac7d03
new file mode 100644
ac7d03
index 0000000000000000000000000000000000000000..f51c46a30e4caf76e38659c2f0a6a2c645376978
ac7d03
--- /dev/null
ac7d03
+++ b/ipaserver/secrets/service.py
ac7d03
@@ -0,0 +1,30 @@
ac7d03
+# Copyright (C) 2017  IPA Project Contributors, see COPYING for license
ac7d03
+import argparse
ac7d03
+
ac7d03
+import custodia.server
ac7d03
+
ac7d03
+
ac7d03
+argparser = argparse.ArgumentParser(
ac7d03
+    prog='ipa-custodia',
ac7d03
+    description='IPA Custodia service'
ac7d03
+)
ac7d03
+argparser.add_argument(
ac7d03
+    '--debug',
ac7d03
+    action='store_true',
ac7d03
+    help='Debug mode'
ac7d03
+)
ac7d03
+argparser.add_argument(
ac7d03
+    'configfile',
ac7d03
+    nargs='?',
ac7d03
+    type=argparse.FileType('r'),
ac7d03
+    help="Path to IPA's custodia server config",
ac7d03
+    default='/etc/ipa/custodia/custodia.conf'
ac7d03
+)
ac7d03
+
ac7d03
+
ac7d03
+def main():
ac7d03
+    return custodia.server.main(argparser)
ac7d03
+
ac7d03
+
ac7d03
+if __name__ == '__main__':
ac7d03
+    main()
ac7d03
diff --git a/ipaserver/setup.py b/ipaserver/setup.py
ac7d03
index d3c735c0f9e604512d6ccd14dcd16a186c6ecad4..42b0c1b0618ef9867acb1fe2add5702a756cf2d2 100755
ac7d03
--- a/ipaserver/setup.py
ac7d03
+++ b/ipaserver/setup.py
ac7d03
@@ -47,6 +47,7 @@ if __name__ == '__main__':
ac7d03
         ],
ac7d03
         install_requires=[
ac7d03
             "cryptography",
ac7d03
+            "custodia",
ac7d03
             "dbus-python",
ac7d03
             "dnspython",
ac7d03
             "dogtag-pki",
ac7d03
diff --git a/ipasetup.py.in b/ipasetup.py.in
ac7d03
index 915f0edee7ca291cc4921f6b8e4d38498253b372..7f9b2c918c0cd582706edee087ed5944451aaf2e 100644
ac7d03
--- a/ipasetup.py.in
ac7d03
+++ b/ipasetup.py.in
ac7d03
@@ -64,6 +64,7 @@ if SETUPTOOLS_VERSION < (8, 0, 0):
ac7d03
 
ac7d03
 PACKAGE_VERSION = {
ac7d03
     'cryptography': 'cryptography >= 1.4',
ac7d03
+    'custodia': 'custodia >= 0.3.1',
ac7d03
     'dnspython': 'dnspython >= 1.15',
ac7d03
     'gssapi': 'gssapi >= 1.2.0',
ac7d03
     'ipaclient': 'ipaclient == {}'.format(VERSION),
ac7d03
-- 
ac7d03
2.12.1
ac7d03