From 540f7e0f7c34b7a366a80f68ee8ea4dd32c89ecc Mon Sep 17 00:00:00 2001
From: intrigeri <intrigeri@boum.org>
Date: Tue, 9 Aug 2005 20:55:58 +0000
Subject: [PATCH] ninjahelper: better check_perms(), improved xedit.

---
 changelog   |  6 ++++++
 ninjahelper | 30 +++++++++++++++++++++++++-----
 2 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/changelog b/changelog
index 51ee159..f2e11b1 100644
--- a/changelog
+++ b/changelog
@@ -20,6 +20,12 @@ version XX -- ...
 	        now checks if the specified vserver is running.
 		now checks if $PGSQLDUMP/$PGSQLDUMPALL are available where needed.
 		now checks if "postgres" user exists on the host/vserver.
+	changes to ninjahelper
+	        check_perms() does not die anymore on group/world readable
+		        helper scripts (now consistent with the "helper scripts
+		        must not be group or world writable!" error msg).
+		xedit action now tries $EDITOR, then /etc/alternatives/editor,
+			then nano, vim and vi, and aborts if none of these exists.
 	
 version 0.7 -- July 26 2005
 	added ninjahelper: a dialog based wizard for creating backupninja configs.
diff --git a/ninjahelper b/ninjahelper
index aedeaf5..817b47b 100755
--- a/ninjahelper
+++ b/ninjahelper
@@ -6,11 +6,12 @@
 function check_perms() {
 	local file=$1
 	local perms=`ls -ld $file`
-	perms=${perms:4:6}
-	if [[ "$perms" != "------" && "$perms" != "r--r--" ]]; then
+	group_w_perm=${perms:5:1}
+	world_w_perm=${perms:8:1}
+	if [ "$group_w_perm" == "w" -o "$world_w_perm" == "w" ]; then
 	    echo $perms
-		echo "helper scripts must not be group or world writable! Dying on file $file"
-		exit
+	    echo "helper scripts must not be group or world writable! Dying on file $file"
+	    exit
 	fi
 	if [ `ls -ld $file | awk '{print $3}'` != "root" ]; then
 		echo "helper scripts must be owned by root! Dying on file $file"
@@ -87,6 +88,25 @@ do_run() {
    read
 }
 
+do_xedit() {
+   if [ -z "$EDITOR" -o ! -x "`which $EDITOR`" ]; then
+      if [ -h /etc/alternatives/editor -a -x "`readlink /etc/alternatives/editor`" ]; then
+	 EDITOR="`readlink /etc/alternatives/editor`"
+      elif [ -x "`which nano`" ]; then
+	 EDITOR="`which nano`"
+      elif [ -x "`which vim`" ]; then
+	 EDITOR="`which vim`"
+      elif [ -x "`which vi`" ]; then
+	 EDITOR="`which vi`"
+      else
+	 echo "No suitable editor found."
+	 echo "Please define $EDITOR or configure /etc/alternatives/editor."
+	 exit
+      fi
+   fi
+   $EDITOR $1
+}
+
 do_run_test() {
   backupninja --test --run $1
   echo "Hit return to continue..."
@@ -130,7 +150,7 @@ doaction() {
     result="$REPLY"
   	case "$result" in
 	   "view") dialog --textbox $action 0 0;; 
-	   "xedit") $EDITOR $action;;
+	   "xedit") do_xedit $action;;
 	   "disable") do_disable $action; return;;
    	   "enable") do_enable $action; return;;
    	   "name") do_rename $action; return;;
-- 
GitLab