108 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/sh
 | |
| # SPDX-License-Identifier: GPL-2.0-or-later
 | |
| #
 | |
| # Copyright (c) 2019 FUJITSU LIMITED. All rights reserved.
 | |
| # Author: Xiao Yang <yangx.jy@cn.fujitsu.com>
 | |
| #
 | |
| # Description:
 | |
| # Register a new binary type and then check if binfmt_misc
 | |
| # recognises the binary type in some conditions.
 | |
| # 1) binfmt_misc should recognise the binary type when extension
 | |
| #    or magic is matched.
 | |
| # 2) binfmt_misc should not recognise the binary type when extension
 | |
| #    or magic is mismatched.
 | |
| # 3) binfmt_misc should not recognise the binary type when it is
 | |
| #    disabled.
 | |
| #
 | |
| # Note:
 | |
| # We use various delimiteris to register a new binary type.
 | |
| 
 | |
| TST_CNT=6
 | |
| TST_TESTFUNC=do_test
 | |
| TST_NEEDS_CMDS="which cat head"
 | |
| 
 | |
| . binfmt_misc_lib.sh
 | |
| 
 | |
| recognised_unrecognised()
 | |
| {
 | |
| 	local file=$1
 | |
| 	local string="$2"
 | |
| 
 | |
| 	eval $file >temp 2>&1
 | |
| 	if [ $? -ne 0 ] || ! grep -q "$string" temp; then
 | |
| 		tst_res TFAIL "Fail to recognise a binary type"
 | |
| 		return
 | |
| 	fi
 | |
| 
 | |
| 	(echo 0 >"$mntpoint/$name") 2>/dev/null
 | |
| 	if [ $? -ne 0 ] || grep -q enable "$mntpoint/$name"; then
 | |
| 		tst_res TFAIL "Fail to disable a binary type"
 | |
| 		return
 | |
| 	fi
 | |
| 
 | |
| 	eval $file >temp 2>&1
 | |
| 	if [ $? -eq 0 ] || grep -q "$string" temp; then
 | |
| 		tst_res TFAIL "Recognise a disabled binary type successfully"
 | |
| 		return
 | |
| 	fi
 | |
| 
 | |
| 	tst_res TPASS "Recognise and unrecognise a binary type as expected"
 | |
| }
 | |
| 
 | |
| unrecognised()
 | |
| {
 | |
| 	local file=$1
 | |
| 	local string="$2"
 | |
| 
 | |
| 	eval $file >temp 2>&1
 | |
| 	if [ $? -eq 0 ] || grep -q "$string" temp; then
 | |
| 		tst_res TFAIL "Recognise a binary type successfully"
 | |
| 	else
 | |
| 		tst_res TPASS "Fail to recognise a binary type"
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| verify_binfmt_misc()
 | |
| {
 | |
| 	local delimiter=$(echo "$1" | head -c1)
 | |
| 	local name=$(echo "$1" | awk -F $delimiter '{print $2}')
 | |
| 	local ttype=$(echo "$1" | awk -F $delimiter '{print $3}')
 | |
| 	local tfile=$2
 | |
| 	local valid=$3
 | |
| 	local mntpoint=$(get_binfmt_misc_mntpoint)
 | |
| 
 | |
| 	(echo "$1" >"$mntpoint/register") 2>/dev/null
 | |
| 	if [ $? -ne 0 -o ! -f "$mntpoint/$name" ]; then
 | |
| 		tst_res TFAIL "Fail to register a binary type"
 | |
| 		return
 | |
| 	fi
 | |
| 
 | |
| 	[ "$ttype" = "E" ] && local tstring="This is test for extension"
 | |
| 	[ "$ttype" = "M" ] && local tstring="This is test for magic"
 | |
| 
 | |
| 	[ "$valid" = "1" ] && recognised_unrecognised "$tfile" "$tstring"
 | |
| 	[ "$valid" = "0" ] && unrecognised "$tfile" "$tstring"
 | |
| 
 | |
| 	remove_binary_type "$mntpoint/$name"
 | |
| }
 | |
| 
 | |
| do_test()
 | |
| {
 | |
| 	case $1 in
 | |
| 	1) verify_binfmt_misc ":textension:E::extension::$(which cat):" \
 | |
| 			      "$TST_DATAROOT/file.extension" "1";;
 | |
| 	2) verify_binfmt_misc ":tmagic:M:1:This::$(which cat):" \
 | |
| 			      "$TST_DATAROOT/file.magic" "1";;
 | |
| 	3) verify_binfmt_misc ".textension.E..extension..$(which cat)." \
 | |
| 			      "$TST_DATAROOT/file.extension" "1";;
 | |
| 	4) verify_binfmt_misc ",tmagic,M,1,This,,$(which cat)," \
 | |
| 			      "$TST_DATAROOT/file.magic" "1";;
 | |
| 	5) verify_binfmt_misc ":textension:E::ltp::$(which cat):" \
 | |
| 			      "$TST_DATAROOT/file.extension" "0";;
 | |
| 	6) verify_binfmt_misc ":tmagic:M:0:This::$(which cat):" \
 | |
| 			      "$TST_DATAROOT/file.magic" "0";;
 | |
| 	esac
 | |
| }
 | |
| 
 | |
| tst_run
 |