[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Динамически включать-выключать CPU



>>>>> Artem Chuprina <ran@ran.pp.ru> writes:

 >> В принципе хотелось бы вот такой скрипт, разрешённый в sudoers (у
 >> меня так уже живёт монтирование флешки, это IMHO всё же безопаснее
 >> чем setuid):

 >> #!/bin/sh
 >> echo $1 >/dev/cpuset/tasks
 >> renice -4 -p $1

 >> Но тут невооружённым глазом видна дырка на injection.

 >> Можно ли чем-то её закрыть, не считая варианта "написать то же самое
 >> на питоне"? Там-то проверить тривиально - int(sys.argv[1]), и если
 >> не конвертится - то exception.

 > Можно даже на чистом sh, но проще всего -

 > if printf "%s" "$1" | grep '^[1-9][0-9]*$' >/dev/null 2>&1
 > then :
 > else exit 1
 > fi

 > grep у тебя будет, он в бизибоксе есть.  printf - встроенная команда
 > шелла.  Опять же, включая бизибокс.

	Можно использовать -q вместо > /dev/null, благо grep из BusyBox
	ее умеет:

$ busybox grep --help 2>&1 | grep -F -- -q 
	-q	Quiet. Return 0 if PATTERN is found, 1 otherwise
$ 

	Кроме того, я бы добавил \n к строке формата printf.

	Еще можно воспользоваться expr, который также имеется в BusyBox.
	E. g.:

if test 1 = "$(expr length quote "$1" \
                        = quote "$1" : '[1-9][0-9]*')" ; then

-- 
FSF associate member #7257	Coming soon: Software Freedom Day
http://mail.sf-day.org/lists/listinfo/ planning-ru (ru), sfd-discuss (en)


Reply to: