>From 171e89261730af6c0180af745cdafb825fb7c83d Mon Sep 17 00:00:00 2001
From: Ade Lee <alee@redhat.com>
Date: Wed, 20 Nov 2013 10:23:15 -0500
Subject: [PATCH] Add migration scripts to fix registry file and ownership

Migration scripts have been added to update the registry file
for tomcat instances to use PKI_INSTANCE_NAME instead of PKI_INSTANCE_ID.
File ownershipof the registry file and log files is also fixed.

Also removed unused lock file logic in operations startup script.

This is for migration from 10.0 -> 10.1

Ticket 805
---
 base/server/scripts/operations                     |  8 ---
 base/server/upgrade/10.0.99/03-FixRegistryFile     | 57 +++++++++++++++++++
 base/server/upgrade/10.0.99/04-FixLogFileOwnership | 65 ++++++++++++++++++++++
 3 files changed, 122 insertions(+), 8 deletions(-)
 create mode 100755 base/server/upgrade/10.0.99/03-FixRegistryFile
 create mode 100755 base/server/upgrade/10.0.99/04-FixLogFileOwnership

diff --git a/base/server/scripts/operations b/base/server/scripts/operations
index d2b666a5ac3c7837d77f46f0ccf3ed87c4a912ba..7d026fe31f35f9c5bd10f8acdf2e2cef80b399c3 100644
--- a/base/server/scripts/operations
+++ b/base/server/scripts/operations
@@ -34,9 +34,6 @@ if [ -f /etc/pki/pki.conf ] ; then
   . /etc/pki/pki.conf
 fi
 
-# PKI subsystem-level directory and file values for locks
-lockfile="/var/lock/subsys/${SERVICE_NAME}"
-
 default_error=0
 
 case $command in
@@ -1421,11 +1418,6 @@ start()
         fi
     done
 
-    if [ ${TOTAL_PKI_REGISTRY_ENTRIES} -gt ${errors} ] ; then
-        touch ${lockfile}
-        chmod 00600 ${lockfile}
-    fi
-
     # ONLY print a "WARNING" message if multiple
     # instances are being examined
     if [ ${TOTAL_PKI_REGISTRY_ENTRIES} -gt 1 ] ; then
diff --git a/base/server/upgrade/10.0.99/03-FixRegistryFile b/base/server/upgrade/10.0.99/03-FixRegistryFile
new file mode 100755
index 0000000000000000000000000000000000000000..053697f49711cac0a3b5149ea638737fa38a3c74
--- /dev/null
+++ b/base/server/upgrade/10.0.99/03-FixRegistryFile
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+# Authors:
+#     Ade Lee <alee@redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2013 Red Hat, Inc.
+# All rights reserved.
+#
+
+import grp
+import os
+import pwd
+import re
+import pki.server
+import pki.server.upgrade
+
+
+class FixRegistryFile(pki.server.upgrade.PKIServerUpgradeScriptlet):
+
+    def __init__(self):
+        self.message = 'Replace PKI_INSTANCE_ID and fix registry file ownership'
+
+    def upgrade_instance(self, instance):
+        registry_file = os.path.join(
+            pki.server.REGISTRY_DIR, 'tomcat', instance.name, instance.name)
+        self.backup(registry_file)
+
+        with open(registry_file, "r") as registry:
+            lines = registry.readlines()
+
+        with open(registry_file, "w") as registry:
+            for line in lines:
+                m = re.search('^PKI_USER=(.*)$', line)
+                if m:
+                    user = m.group(1)
+                m = re.search('^PKI_GROUP=(.*)$', line)
+                if m:
+                    group = m.group(1)
+
+                registry.write(
+                    re.sub(r'PKI_INSTANCE_ID', 'PKI_INSTANCE_NAME', line))
+
+        uid = pwd.getpwnam(user).pw_uid
+        gid = grp.getgrnam(group).gr_gid
+        os.chown(registry_file, uid, gid)
diff --git a/base/server/upgrade/10.0.99/04-FixLogFileOwnership b/base/server/upgrade/10.0.99/04-FixLogFileOwnership
new file mode 100755
index 0000000000000000000000000000000000000000..d70a54454d609482082aa263d6ffb83eb2d4efcc
--- /dev/null
+++ b/base/server/upgrade/10.0.99/04-FixLogFileOwnership
@@ -0,0 +1,65 @@
+#!/usr/bin/python
+# Authors:
+#     Ade Lee <alee@redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright (C) 2013 Red Hat, Inc.
+# All rights reserved.
+#
+
+import grp
+import os
+import pwd
+import re
+import pki.server.upgrade
+
+
+class FixLogFileOwnership(pki.server.upgrade.PKIServerUpgradeScriptlet):
+
+    def __init__(self):
+        self.message = 'Fix log file ownership'
+
+    def upgrade_instance(self, instance):
+        registry_file = os.path.join(
+            pki.server.REGISTRY_DIR, 'tomcat', instance.name, instance.name)
+
+        with open(registry_file, "r") as registry:
+            lines = registry.readlines()
+
+        for line in lines:
+            m = re.search('^PKI_USER=(.*)$', line)
+            if m:
+                user = m.group(1)
+            m = re.search('^PKI_GROUP=(.*)$', line)
+            if m:
+                group = m.group(1)
+
+        uid = pwd.getpwnam(user).pw_uid
+        gid = grp.getgrnam(group).gr_gid
+
+        log_dir = os.path.join('/var/log/pki', instance.name)
+
+        self._chown(log_dir, uid, gid)
+
+
+    def _chown(self, path, uid, gid):
+        os.chown(path, uid, gid)
+        for item in os.listdir(path):
+            itempath = os.path.join(path, item)
+            if os.path.isfile(itempath):
+                os.chown(itempath, uid, gid)
+            elif os.path.isdir(itempath):
+                os.chown(itempath, uid, gid)
+                self._chown(itempath, uid, gid)
-- 
1.8.3.1

