fstests: Make ./new work for non-root user
[xfstests-dev.git] / new
diff --git a/new b/new
index c734bdc562bed49deddf2586aea48c122bd98513..112a63d5b9f8379fbfa1fe4f75f732efc6b2316a 100755 (executable)
--- a/new
+++ b/new
@@ -23,7 +23,7 @@
 
 # generic initialization
 iam=new
-. ./common/rc
+. ./common/test_names
 
 trap "rm -f /tmp/$$.; exit" 0 1 2 3 15
 
@@ -81,6 +81,9 @@ line=0
 eof=1
 [ -f "$tdir/group" ] || usage
 
+export AWK_PROG="$(type -P awk)"
+[ "$AWK_PROG" = "" ] && { echo "awk not found"; exit; }
+
 for found in `cat $tdir/group | tr - ' ' | $AWK_PROG '{ print $1 }'`
 do
     line=$((line+1))
@@ -200,11 +203,14 @@ _cleanup()
 . ./common/rc
 . ./common/filter
 
+# remove previous \$seqres.full before test
+rm -f \$seqres.full
+
 # real QA test starts here
 
 # Modify as appropriate.
 _supported_fs generic
-_supported_os IRIX Linux
+_supported_os Linux
 _require_test
 
 # if error
@@ -225,12 +231,18 @@ echo ""
 chmod 755 $tdir/$id
 ${EDITOR-vi} $tdir/$id
 
+# Create default .out file
+cat <<End-of-File >$tdir/$id.out
+QA output created by $id
+Silence is golden
+End-of-File
+
 if [ $# -eq 0 ]
 then
 
     while true
     do
-       echo -n "Add to group(s) [other] (? for list): "
+       echo -n "Add to group(s) [other] (separate by space, ? for list): "
        read ans
        [ -z "$ans" ] && ans=other
        if [ "X$ans" = "X?" ]
@@ -245,7 +257,17 @@ then
            lst=`for word in $grpl; do echo $word; done | sort| uniq `
            echo $lst
        else
-           break
+           # only allow lower cases, spaces, digits and underscore in group
+           inval=`echo $ans | tr -d '[:lower:][:space:][:digit:]_'`
+           if [ "$inval" != "" ]; then
+               echo "Invalid characters in group(s): $inval"
+               echo "Only lower cases, digits and underscore are allowed in groups, separated by space"
+               continue
+           else
+               # remove redundant spaces/tabs
+               ans=`echo "$ans" | sed 's/\s\+/ /g'`
+               break
+           fi
        fi
     done
 else