diff options
author | Jan Cholasta <jcholast@redhat.com> | 2015-09-14 07:56:44 +0200 |
---|---|---|
committer | Petr Vobornik <pvoborni@redhat.com> | 2015-09-17 14:55:54 +0200 |
commit | 5137478fb8bba16d9cbecba53983c893dc0884d5 (patch) | |
tree | 3b51e421f499b30bfd0ae525d3020accbf8e5ca3 | |
parent | 0dfcf1d9db4b297791e3784588bf23cc0ac8d2ee (diff) | |
download | freeipa-5137478fb8bba16d9cbecba53983c893dc0884d5.tar.gz freeipa-5137478fb8bba16d9cbecba53983c893dc0884d5.tar.xz freeipa-5137478fb8bba16d9cbecba53983c893dc0884d5.zip |
install: support KRA update
https://fedorahosted.org/freeipa/ticket/5250
Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
-rw-r--r-- | freeipa.spec.in | 1 | ||||
-rw-r--r-- | install/share/Makefile.am | 2 | ||||
-rw-r--r-- | install/share/vault.ldif | 29 | ||||
-rw-r--r-- | install/share/vault.update | 38 | ||||
-rw-r--r-- | install/updates/40-vault.update | 23 | ||||
-rw-r--r-- | install/updates/Makefile.am | 1 | ||||
-rw-r--r-- | ipaplatform/base/paths.py | 1 | ||||
-rw-r--r-- | ipaserver/install/krainstance.py | 7 |
8 files changed, 60 insertions, 42 deletions
diff --git a/freeipa.spec.in b/freeipa.spec.in index 172296274..64e8155b9 100644 --- a/freeipa.spec.in +++ b/freeipa.spec.in @@ -760,7 +760,6 @@ fi %{_usr}/share/ipa/copy-schema-to-ca.py* %{_usr}/share/ipa/*.ldif %{_usr}/share/ipa/*.uldif -%{_usr}/share/ipa/*.update %{_usr}/share/ipa/*.template %dir %{_usr}/share/ipa/advise %dir %{_usr}/share/ipa/advise/legacy diff --git a/install/share/Makefile.am b/install/share/Makefile.am index 80e959a75..d68c40e69 100644 --- a/install/share/Makefile.am +++ b/install/share/Makefile.am @@ -83,7 +83,7 @@ app_DATA = \ copy-schema-to-ca.py \ sasl-mapping-fallback.ldif \ schema-update.ldif \ - vault.update \ + vault.ldif \ kdcproxy.conf \ kdcproxy-enable.uldif \ kdcproxy-disable.uldif \ diff --git a/install/share/vault.ldif b/install/share/vault.ldif new file mode 100644 index 000000000..06dd83c5c --- /dev/null +++ b/install/share/vault.ldif @@ -0,0 +1,29 @@ +dn: cn=kra,$SUFFIX +changetype: add +objectClass: top +objectClass: nsContainer +cn: kra + +dn: cn=vaults,cn=kra,$SUFFIX +changetype: add +objectClass: top +objectClass: ipaVaultContainer +cn: vaults + +dn: cn=services,cn=vaults,cn=kra,$SUFFIX +changetype: add +objectClass: top +objectClass: ipaVaultContainer +cn: services + +dn: cn=shared,cn=vaults,cn=kra,$SUFFIX +changetype: add +objectClass: top +objectClass: ipaVaultContainer +cn: shared + +dn: cn=users,cn=vaults,cn=kra,$SUFFIX +changetype: add +objectClass: top +objectClass: ipaVaultContainer +cn: users diff --git a/install/share/vault.update b/install/share/vault.update deleted file mode 100644 index 4f0023840..000000000 --- a/install/share/vault.update +++ /dev/null @@ -1,38 +0,0 @@ -dn: cn=kra,$SUFFIX -default: objectClass: top -default: objectClass: nsContainer -default: cn: kra - -dn: cn=vaults,cn=kra,$SUFFIX -default: objectClass: top -default: objectClass: ipaVaultContainer -default: cn: vaults -default: aci: (target="ldap:///cn=*,cn=users,cn=vaults,cn=kra,$SUFFIX")(targetfilter="(objectClass=ipaVaultContainer)")(version 3.0; acl "Allow users to create private container"; allow(add) userdn="ldap:///uid=($$attr.cn),cn=users,cn=accounts,$SUFFIX" and userattr="owner#SELFDN";) -default: aci: (target="ldap:///cn=*,cn=services,cn=vaults,cn=kra,$SUFFIX")(targetfilter="(objectClass=ipaVaultContainer)")(version 3.0; acl "Allow services to create private container"; allow(add) userdn="ldap:///krbprincipalname=($$attr.cn)@$REALM,cn=services,cn=accounts,$SUFFIX" and userattr="owner#SELFDN";) -default: aci: (targetfilter="(objectClass=ipaVaultContainer)")(targetattr="objectClass || cn || description || owner")(version 3.0; acl "Container owners can access the container"; allow(read, search, compare) userattr="owner#USERDN";) -default: aci: (targetfilter="(objectClass=ipaVaultContainer)")(targetattr="objectClass || cn || description || owner")(version 3.0; acl "Indirect container owners can access the container"; allow(read, search, compare) userattr="owner#GROUPDN";) -default: aci: (targetfilter="(objectClass=ipaVaultContainer)")(targetattr="objectClass || cn || description")(version 3.0; acl "Container owners can manage the container"; allow(write, delete) userattr="owner#USERDN";) -default: aci: (targetfilter="(objectClass=ipaVaultContainer)")(targetattr="objectClass || cn || description")(version 3.0; acl "Indirect container owners can manage the container"; allow(write, delete) userattr="owner#GROUPDN";) -default: aci: (targetfilter="(objectClass=ipaVault)")(version 3.0; acl "Container owners can add vaults in the container"; allow(add) userattr="parent[1].owner#USERDN" and userattr="owner#SELFDN";) -default: aci: (targetfilter="(objectClass=ipaVault)")(version 3.0; acl "Indirect container owners can add vaults in the container"; allow(add) userattr="parent[1].owner#GROUPDN" and userattr="owner#SELFDN";) -default: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || owner || member")(version 3.0; acl "Vault owners can access the vault"; allow(read, search, compare) userattr="owner#USERDN";) -default: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || owner || member")(version 3.0; acl "Indirect vault owners can access the vault"; allow(read, search, compare) userattr="owner#GROUPDN";) -default: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || owner || member")(version 3.0; acl "Vault members can access the vault"; allow(read, search, compare) userattr="member#USERDN";) -default: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || owner || member")(version 3.0; acl "Indirect vault members can access the vault"; allow(read, search, compare) userattr="member#GROUPDN";) -default: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || member")(version 3.0; acl "Vault owners can manage the vault"; allow(write, delete) userattr="owner#USERDN";) -default: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || member")(version 3.0; acl "Indirect vault owners can manage the vault"; allow(write, delete) userattr="owner#GROUPDN";) - -dn: cn=services,cn=vaults,cn=kra,$SUFFIX -default: objectClass: top -default: objectClass: ipaVaultContainer -default: cn: services - -dn: cn=shared,cn=vaults,cn=kra,$SUFFIX -default: objectClass: top -default: objectClass: ipaVaultContainer -default: cn: shared - -dn: cn=users,cn=vaults,cn=kra,$SUFFIX -default: objectClass: top -default: objectClass: ipaVaultContainer -default: cn: users diff --git a/install/updates/40-vault.update b/install/updates/40-vault.update new file mode 100644 index 000000000..3daea5b19 --- /dev/null +++ b/install/updates/40-vault.update @@ -0,0 +1,23 @@ +dn: cn=vaults,cn=kra,$SUFFIX +remove: aci: (target="ldap:///cn=*,cn=users,cn=vaults,cn=kra,$SUFFIX")(version 3.0; acl "Allow users to create private container"; allow (add) userdn = "ldap:///uid=($$attr.cn),cn=users,cn=accounts,$SUFFIX";) +remove: aci: (target="ldap:///cn=*,cn=services,cn=vaults,cn=kra,$SUFFIX")(version 3.0; acl "Allow services to create private container"; allow (add) userdn = "ldap:///krbprincipalname=($$attr.cn)@$REALM,cn=services,cn=accounts,$SUFFIX";) +remove: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="*")(version 3.0; acl "Container owners can manage vaults in the container"; allow(read, search, compare, add, delete) userattr="parent[1].owner#USERDN";) +remove: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="*")(version 3.0; acl "Indirect container owners can manage vaults in the container"; allow(read, search, compare, add, delete) userattr="parent[1].owner#GROUPDN";) +remove: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="*")(version 3.0; acl "Vault members can access the vault"; allow(read, search, compare) userattr="member#USERDN";) +remove: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="*")(version 3.0; acl "Indirect vault members can access the vault"; allow(read, search, compare) userattr="member#GROUPDN";) +remove: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="*")(version 3.0; acl "Vault owners can manage the vault"; allow(read, search, compare, write) userattr="owner#USERDN";) +remove: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="*")(version 3.0; acl "Indirect vault owners can manage the vault"; allow(read, search, compare, write) userattr="owner#GROUPDN";) +addifexist: aci: (target="ldap:///cn=*,cn=users,cn=vaults,cn=kra,$SUFFIX")(targetfilter="(objectClass=ipaVaultContainer)")(version 3.0; acl "Allow users to create private container"; allow(add) userdn="ldap:///uid=($$attr.cn),cn=users,cn=accounts,$SUFFIX" and userattr="owner#SELFDN";) +addifexist: aci: (target="ldap:///cn=*,cn=services,cn=vaults,cn=kra,$SUFFIX")(targetfilter="(objectClass=ipaVaultContainer)")(version 3.0; acl "Allow services to create private container"; allow(add) userdn="ldap:///krbprincipalname=($$attr.cn)@$REALM,cn=services,cn=accounts,$SUFFIX" and userattr="owner#SELFDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVaultContainer)")(targetattr="objectClass || cn || description || owner")(version 3.0; acl "Container owners can access the container"; allow(read, search, compare) userattr="owner#USERDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVaultContainer)")(targetattr="objectClass || cn || description || owner")(version 3.0; acl "Indirect container owners can access the container"; allow(read, search, compare) userattr="owner#GROUPDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVaultContainer)")(targetattr="objectClass || cn || description")(version 3.0; acl "Container owners can manage the container"; allow(write, delete) userattr="owner#USERDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVaultContainer)")(targetattr="objectClass || cn || description")(version 3.0; acl "Indirect container owners can manage the container"; allow(write, delete) userattr="owner#GROUPDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVault)")(version 3.0; acl "Container owners can add vaults in the container"; allow(add) userattr="parent[1].owner#USERDN" and userattr="owner#SELFDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVault)")(version 3.0; acl "Indirect container owners can add vaults in the container"; allow(add) userattr="parent[1].owner#GROUPDN" and userattr="owner#SELFDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || owner || member")(version 3.0; acl "Vault owners can access the vault"; allow(read, search, compare) userattr="owner#USERDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || owner || member")(version 3.0; acl "Indirect vault owners can access the vault"; allow(read, search, compare) userattr="owner#GROUPDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || owner || member")(version 3.0; acl "Vault members can access the vault"; allow(read, search, compare) userattr="member#USERDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || owner || member")(version 3.0; acl "Indirect vault members can access the vault"; allow(read, search, compare) userattr="member#GROUPDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || member")(version 3.0; acl "Vault owners can manage the vault"; allow(write, delete) userattr="owner#USERDN";) +addifexist: aci: (targetfilter="(objectClass=ipaVault)")(targetattr="objectClass || cn || description || ipaVaultType || ipaVaultSalt || ipaVaultPublicKey || member")(version 3.0; acl "Indirect vault owners can manage the vault"; allow(write, delete) userattr="owner#GROUPDN";) diff --git a/install/updates/Makefile.am b/install/updates/Makefile.am index 1f4a91c9b..26e4c04ed 100644 --- a/install/updates/Makefile.am +++ b/install/updates/Makefile.am @@ -34,6 +34,7 @@ app_DATA = \ 40-automember.update \ 40-certprofile.update \ 40-otp.update \ + 40-vault.update \ 41-caacl.update \ 45-roles.update \ 50-7_bit_check.update \ diff --git a/ipaplatform/base/paths.py b/ipaplatform/base/paths.py index ff75e0d7a..3930c93fc 100644 --- a/ipaplatform/base/paths.py +++ b/ipaplatform/base/paths.py @@ -251,7 +251,6 @@ class BasePathNamespace(object): SCHEMA_COMPAT_ULDIF = "/usr/share/ipa/schema_compat.uldif" IPA_JS_PLUGINS_DIR = "/usr/share/ipa/ui/js/plugins" UPDATES_DIR = "/usr/share/ipa/updates/" - VAULT_UPDATE = "/usr/share/ipa/vault.update" PKI_CONF_SERVER_XML_TEMPLATE = "/usr/share/pki/%s/conf/server.xml" CACHE_IPA_SESSIONS = "/var/cache/ipa/sessions" VAR_KERBEROS_KRB5KDC_DIR = "/var/kerberos/krb5kdc/" diff --git a/ipaserver/install/krainstance.py b/ipaserver/install/krainstance.py index 958fe6fb0..48268b0be 100644 --- a/ipaserver/install/krainstance.py +++ b/ipaserver/install/krainstance.py @@ -124,6 +124,7 @@ class KRAInstance(DogtagInstance): self.step("configure HTTP to proxy connections", self.http_proxy) self.step("add vault container", self.__add_vault_container) + self.step("apply LDAP updates", self.__apply_updates) self.start_creation(runtime=126) @@ -313,13 +314,17 @@ class KRAInstance(DogtagInstance): conn.disconnect() def __add_vault_container(self): + self._ldap_mod('vault.ldif', {'SUFFIX': self.suffix}) + self.ldap_disconnect() + + def __apply_updates(self): sub_dict = { 'SUFFIX': self.suffix, } ld = ldapupdate.LDAPUpdate(dm_password=self.dm_password, sub_dict=sub_dict) - ld.update([paths.VAULT_UPDATE]) + ld.update([os.path.join(paths.UPDATES_DIR, '40-vault.update')]) @staticmethod def update_cert_config(nickname, cert, dogtag_constants=None): |