/usr/sbin/ninjahelper is in backupninja 1.0.1-2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269  | #!/bin/bash
# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
# vim: set filetype=sh sw=3 sts=3 expandtab autoindent:
####################################################
## Functions
##
## returns the next available file name given a file
## in the form /etc/backup.d/10.sys
## sets variable $next_filename
##
get_next_filename() {
   next_filename=$1
   dir=`dirname $next_filename`
   file=`basename $next_filename`
   number=${file:0:2}
   suffix=${file:3}
   while [ -f $next_filename ]; do
     let "number += 1"
     next_filename="$dir/$number.$suffix"
   done
}
##
## installs packages (passed in as $@) if not present
##
require_packages() {
   for pkg in "$@"; do
      installed=`dpkg -s $pkg | grep 'ok installed'`
      if [ -z "$installed" ]; then
         booleanBox "install $pkg?" "This backup action requires package $pkg. Do you want to install it now?"
         if [ $? = 0 ]; then
            apt-get install $pkg
            echo "hit return to continue...."
            read
         fi
      fi
   done
}
##
## menu for the wizards
##
donew() {
   # (re-)initialize vservers support
   init_vservers
   # menu
   listBegin "new action menu" "select an action to create"
   listItem return "return to main menu"
   for data in $HELPERS; do
      data=${data//_/ }
      helper_function=${data%%:*}
      helper_info=${data##*:}
      listItem $helper_function "$helper_info"
   done
   listDisplay menu
   [ $? = 1 ] && return
   result="$REPLY"
   [ "$result" = "return" -o "$result" = "" ] && return
   run_wizard=${result}_wizard
   $run_wizard
   result=$?
   # 0 is ok, 1 is cancel, anything else is bad.
   if [ $result != 1 -a $result != 0 ]; then
      echo "An error occurred ($result), bailing out. Hit return to continue."
      read
   fi
}
do_rm_action() {
   booleanBox "remove action" "Are you sure you want to remove action file $1?"
   if [ $? = 0 ]; then
     rm $1;
   fi
}
do_run() {
   backupninja --run $1
   echo "Hit return to continue..."
   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..."
   read
}
do_disable() {
   mv $1 $1.disabled
}
do_enable() {
   mv $1 ${1%.*}
}
do_rename() {
   dir=`dirname $1`
   filename=`basename $1`
   inputBox "rename action" "enter a new filename" $filename
   mv $dir/$filename $dir/$REPLY
}
doaction() {
   action=$1
   base=`basename $action`
   if [ "${base##*.}" == "disabled" ]; then
      enable="enable";
   else
      enable="disable";
   fi
   while true; do
      menuBox "action menu" "$action $first" \
         main "return to main menu" \
         view "view configuration" \
         xedit "launch external editor" \
         $enable "$enable action" \
         name "change the filename" \
         run "run this action now" \
         test "do a test run" \
         kill "remove this action"
      [ $? = 1 ] && return;
      result="$REPLY"
      case "$result" in
         "view") dialog --textbox $action 0 0;;
         "xedit") do_xedit $action;;
         "disable") do_disable $action; return;;
         "enable") do_enable $action; return;;
         "name") do_rename $action; return;;
         "run") do_run $action;;
         "test") do_run_test $action;;
         "kill") do_rm_action $action; return;;
         "main") return;;
      esac
   done
}
#####################################################
## begin program
if [ ! -x "`which dialog`" ]; then
   echo "ninjahelper is a menu based wizard for backupninja."
   echo "It requires 'dialog' in order to run. Do you want to install dialog now?"
   while true; do
      echo -n "(yes/no): "
      read install
      if [ "$install" == "yes" ]; then
         apt-get install dialog
            break
         elif [ "$install" == "no" ]; then
            exit
         else
            echo "You must answer 'yes' or 'no'"
      fi
   done
fi
# bootstrap
conffile="/etc/backupninja.conf"
if [ ! -r "$conffile" ]; then
   echo "Configuration file $conffile not found."
   exit 1
fi
# find $libdirectory
libdirectory=`grep '^libdirectory' $conffile | /usr/bin/awk '{print $3}'`
if [ -z "$libdirectory" ]; then
   if [ -d "/usr/lib/backupninja" ]; then
      libdirectory="/usr/lib/backupninja"
   else
      echo "Could not find entry 'libdirectory' in $conffile."
      exit 1
   fi
else
   if [ ! -d "$libdirectory" ]; then
      echo "Lib directory $libdirectory not found."
      exit 1
   fi
fi
# include shared functions
. $libdirectory/easydialog
. $libdirectory/tools
. $libdirectory/vserver
# am I running as root?
if [ "$UID" != "0" ]; then
   msgBox "warning" "`basename $0` must be run by root!"
   exit 1
fi
# get global config options (second param is the default)
setfile $conffile
getconf configdirectory /etc/backup.d
if [ ! -d $configdirectory ]; then
   msgBox "warning" "The backupninja configuration directory $configdirectory does not exist. Ninjahelper cannot run without it!"
   exit 1
fi
getconf scriptdirectory /usr/share/backupninja
# load all the helpers
HELPERS=""
for file in `find $scriptdirectory -follow -name '*.helper'`; do
   . $file
   if [ $? != 0 ]; then
      echo "An error occurred while loading $file. Hit return to continue."
      read
   fi
done
setApplicationTitle "ninjahelper"
setDimension 75 19
#####################################################
## main event loop
while true; do
menulist=
action=
let "i = 1"
for file in `find ${configdirectory} -follow -mindepth 1 -maxdepth 1 -type f ! -name '.*.swp' | sort -n`; do
   menulist="$menulist $i $file"
   actions[$i]=$file
   let "i += 1"
done
menuBox "main menu" "Select a backup action for more options, or create a new action:" $menulist \
  new "create a new backup action" \
  quit "leave ninjahelper"
[ $? = 1 -o $? = 255 ] && exit 0;
choice="$REPLY"
if [ "$choice" == "new" ]; then
   donew;
elif [ "$choice" == "quit" ]; then
   exit 0;
else
   action=${actions[$choice]};
   if [ -f "$action" ]; then
      doaction $action
   else
      msgBox "error" "error: cannot find the file '$action'"
   fi
fi
done
 |