cluster-devel.redhat.com archive mirror
 help / color / mirror / Atom feed
From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/luci/utils luci_admin
Date: 21 Jun 2006 17:41:31 -0000	[thread overview]
Message-ID: <20060621174131.21934.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2006-06-21 17:41:30

Modified files:
	luci/utils     : luci_admin 

Log message:
	more cleanup

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_admin.diff?cvsroot=cluster&r1=1.16&r2=1.17

--- conga/luci/utils/luci_admin	2006/06/21 17:06:44	1.16
+++ conga/luci/utils/luci_admin	2006/06/21 17:41:30	1.17
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-import sys, os, stat, random, crypt, select, string
+import sys, os, stat, random, crypt, select, string, pwd
 from sys import stderr, argv
 import types
 import xml
@@ -22,7 +22,8 @@
 SSL_PRIVKEY_PATH='/var/lib/luci/var/certs/privkey.pem'
 SSL_PUBKEY_PATH='/var/lib/luci/var/certs/cacert.pem'
 SSL_KEYCONFIG_PATH='/var/lib/luci/var/certs/cacert.config'
-LUCI_BACKUP_PATH='/var/lib/luci/var/luci_backup.xml'
+LUCI_BACKUP_DIR='/var/lib/luci/var'
+LUCI_BACKUP_PATH=LUCI_BACKUP_DIR + '/luci_backup.xml'
 LUCI_DB_PATH='/var/lib/luci/var/Data.fs'
 LUCI_TEMP='/var/lib/luci/var/temp/'
 
@@ -50,7 +51,6 @@
 	inituser.close()
 
 	try:
-		import pwd
 		luci = pwd.getpwnam(LUCI_USER)[2:4]
 		os.chown(INITUSER_FILE_PATH, luci[0], luci[1])
 	except:
@@ -129,7 +129,7 @@
 		if not portal_mem or not portal_reg:
 			raise
 	except:
-		sys.stderr.write('Your Luci installation appears to be corrupt.')
+		sys.stderr.write('Your Luci installation appears to be corrupt.\n')
 		return -1
 
 	userList = node.getElementsByTagName('userList')
@@ -193,17 +193,17 @@
 		if not x:
 			raise
 	except:
-		sys.stderr.write('Cannot find the Luci storage systems directory. Your Luci installation may be corrupt.')
+		sys.stderr.write('Cannot find the Luci storage systems directory. Your Luci installation may be corrupt.\n')
 		transaction.abort()
 		return -1
 
 	systemList = node.getElementsByTagName('systemList')
 	if not systemList or len(systemList) < 1:
-		verbose.write('No storage systems to add')
+		verbose.write('No storage systems to add\n')
 	else:
 		systemList = systemList[0].getElementsByTagName('system')
 		if len(systemList) < 1:
-			verbose.write('No storage systems to add')
+			verbose.write('No storage systems to add\n')
 
 	for s in systemList:
 		id = s.getAttribute('id')
@@ -250,17 +250,17 @@
 		if not x:
 			raise
 	except:
-		sys.stderr.write('Cannot find the Luci cluster directory. Your Luci installation may be corrupt.')
+		sys.stderr.write('Cannot find the Luci cluster directory. Your Luci installation may be corrupt.\n')
 		transaction.abort()
 		return -1
 
 	clusterList = node.getElementsByTagName('clusterList')
 	if not clusterList or len(clusterList) < 1:
-		verbose.write('No clusters to add')
+		verbose.write('No clusters to add\n')
 	else:
 		clusterList = clusterList[0].getElementsByTagName('cluster')
 		if len(clusterList) < 1:
-			verbose.write('No clusters to add')
+			verbose.write('No clusters to add\n')
 
 	for c in clusterList:
 		id = c.getAttribute('id')
@@ -397,7 +397,7 @@
 		conn = db.open()
 	except:
 		stderr.write('Unable to open the luci database \"' + dbfn + '\"\n')
-		return -1
+		return None
 
 	examine_classes = [
 		'OFS.Folder.Folder',
@@ -409,11 +409,6 @@
 	clusters = {}
 	users = {}
 
-	if len(argv) > 1:
-		backupfn = argv[1]
-	else:
-		backupfn = LUCI_BACKUP_PATH
-
 	# To suppress some useless zope error messages.
 	sys.stderr = null
 
@@ -560,7 +555,7 @@
 		certfile.close()
 	except False:
 		sys.stderr.write('Unable to read ' + SSL_PRIVKEY_PATH + '\n')
-		return -1
+		return None
 
 	try:
 		certfile = file(SSL_PUBKEY_PATH, 'rb')
@@ -578,7 +573,7 @@
 		certfile.close()
 	except:
 		sys.stderr.write('Unable to read ' + SSL_PUBKEY_PATH + '\n')
-		return -1
+		return None
 
 	try:
 		certfile = file(SSL_KEYCONFIG_PATH, 'rb')
@@ -598,18 +593,7 @@
 		sys.stderr.write('Unable to read ' + SSL_KEYCONFIG_PATH + '\n')
 
 	luciData.appendChild(dataNode)
-
-	# TODO: this needs to backup the backup, if any, and should
-	# write to a tempfile, then rename.
-	try:
-		f = file(backupfn, 'w')
-	except:
-		sys.stderr.write('Unable to open \"' + backupfn + '\" to write backup.\n')
-		return -1
-
-	f.write(doc.toprettyxml())
-	f.flush()
-	f.close()
+	return doc
 
 def _execWithCaptureErrorStatus(command, argv, searchPath = 0, root = '/', stdin = 0, catchfd = 1, catcherrfd = 2, closefd = -1):
     if not os.access (root + command, os.X_OK):
@@ -810,13 +794,49 @@
 	try: os.umask(077)
 	except: pass
 
-	if luci_backup(argv[2:]):
+	doc = luci_backup(argv[2:])
+	if not doc:
 		sys.stderr.write('The Luci backup failed.\n')
 		sys.exit(1)
 
+	try:
+		stat = os.stat(LUCI_BACKUP_PATH)
+		trynum = 1
+		basename = '/luci_backup-'
+		while True:
+			oldbackup = LUCI_BACKUP_DIR + basename + str(trynum) + '.xml'
+			if not os.path.exists(oldbackup):
+				try:
+					os.rename(LUCI_BACKUP_PATH, oldbackup)
+				except:
+					sys.write.stderr('Unable to rename the existing backup file.\n')
+					sys.exit(1)
+				break
+			trynum += 1
+	except OSError, e:
+		#if e[0] == 2:
+		pass
+	
+	try:	
+		f = file(LUCI_BACKUP_PATH, 'w')
+	except:
+		sys.stderr.write('Unable to open \"' + LUCI_BACKUP_PATH + '\" to write backup.\n')
+		return -1
+
+	f.write(doc.toprettyxml())
+	f.flush()
+	f.close()
+
 	print 'Backup was successful. The backup file is',LUCI_BACKUP_PATH
 
 	try:
+		luci = pwd.getpwnam(LUCI_USER)[2:4]
+		os.chown(LUCI_DB_PATH, luci[0], luci[1])
+		os.chmod(LUCI_DB_PATH, 0600)
+	except:
+		sys.stderr.write('Unable to change ownership of the Luci database back to user \"' + LUCI_USER + '\"\n')
+
+	try:
 		os.chmod(LUCI_BACKUP_PATH, 0600)
 	except OSError, e:
 		print "An error occurred while making",LUCI_BACKUP_PATH,"read-only:",e
@@ -859,6 +879,13 @@
 		restart_message()
 
 	try:
+		luci = pwd.getpwnam(LUCI_USER)[2:4]
+		os.chown(LUCI_DB_PATH, luci[0], luci[1])
+		os.chmod(LUCI_DB_PATH, 0600)
+	except:
+		sys.stderr.write('Unable to change ownership of the Luci database back to user \"' + LUCI_USER + '\"\n')
+
+	try:
 		os.unlink(LUCI_TEMP + 'www/ok.gif')
 		os.unlink(LUCI_TEMP + 'images/version.gif')
 		os.removedirs(LUCI_TEMP)



             reply	other threads:[~2006-06-21 17:41 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-21 17:41 rmccabe [this message]
  -- strict thread matches above, loose matches on Subject: below --
2011-03-25 20:14 [Cluster-devel] conga/luci/utils luci_admin rmccabe
2007-09-19  5:17 rmccabe
2007-08-10 18:36 rmccabe
2007-08-10 18:33 rmccabe
2007-08-10 18:32 rmccabe
2007-08-07 20:22 rmccabe
2006-10-13  6:56 kupcevic
2006-08-18 18:03 rmccabe
2006-08-04 19:19 rmccabe
2006-08-04 18:37 rmccabe
2006-08-03 22:58 kupcevic
2006-08-03 21:19 rmccabe
2006-08-03 21:11 rmccabe
2006-08-03 16:32 rmccabe
2006-08-03 15:55 rmccabe
2006-08-03 12:26 rmccabe
2006-08-03  3:58 rmccabe
2006-08-03  3:30 rmccabe
2006-08-02 23:29 rmccabe
2006-08-02 20:52 rmccabe
2006-08-02 20:45 rmccabe
2006-07-26  1:17 rmccabe
2006-07-25 22:36 rmccabe
2006-07-11 18:46 rmccabe
2006-07-11 14:51 rmccabe
2006-06-29 18:04 rmccabe
2006-06-29 17:51 rmccabe
2006-06-27 19:50 rmccabe
2006-06-27 19:40 rmccabe
2006-06-27 18:19 rmccabe
2006-06-26 22:30 rmccabe
2006-06-26 20:01 rmccabe
2006-06-21 23:06 rmccabe
2006-06-21 17:06 rmccabe
2006-06-18 15:02 rmccabe
2006-06-18 12:50 rmccabe
2006-06-18  3:26 rmccabe
2006-06-16 23:19 rmccabe
2006-06-16 19:35 rmccabe
2006-06-16 18:17 rmccabe
2006-06-16 17:44 rmccabe
2006-06-16  5:35 rmccabe
2006-06-13 18:42 rmccabe
2006-06-13 17:36 rmccabe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060621174131.21934.qmail@sourceware.org \
    --to=rmccabe@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).