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: