Помню... вывод на экран был совсем-совсем дикий :-) сетевые карточки из серии `ls / ` - весь набор директорий и файлов в корне :-) Кууууча строк из-за наведенных ошибок, забили весь экранный буфер - не увидеть было первых. (в сторону: Жаль, что в bash'e есть 2> но нет 2| :-) ) Получается, что etcnet очень незащищен от ошибок :-( Отсюда две заморочки-пожелания: 1) такие функции, как type2group и group2name, если к ним пришла ошибка (missing 1st arg или неопознанное значение или два и более аргументов), IMHO должны либо срочно прерывать весь скрипт, либо таки возвращать что-то неудобоваримое. Сейчас она получает пустую строку - возвращает также пустую строку - которая далее восрпинимается как нормальное значение - и пустая строка идёт дальше по цепочке наведенных ошибок. В результате добираемся до файловой системы, до корня... А если по ошибке, захотим что-то записать или стереть? Блин, сам ведь смотрел эти case сколько раз, морщился что нет умолчального варианта - да и только. Пока сам в стенку мордой не вписался. 2) критические переменные, указывающие на файлы, такие как $SYSCTL должны проверяться на значение, это даже в TODO есть ;). Но запомнить все переменные и проверить их в одном месте - трудно, учитывая постоянное развитие etcnet. Тогда давайте проверять в месте вызова. Т.е. например у нас есть строчка $SYSCTL -p `profiled_filename /etc/net/sysctl.conf` Вместо нее мы ставим IndirectRun SYSCTL -p `profiled_filename /etc/net/sysctl.conf` Соотв. функция MustRun - как-то так выглядит: IndirectRun () { local ExecFile=`eval echo -n $\{$1\} ` # ecли все OK - теперь $ExecFile == $SYSCTL == /sbin/sysctl if [[ -x $ExecFile ]] ; then shift $ExecFile $* return $? else local err_msg="ERROR: Variable \$$1 expected to contain path to executable. " if [[ -z $ExecFile ]] ; then err_msg="$err_msg Instead it is empty!" else err_msg="$err_msg But the value is \"$ExecFile\" !!! " fi echo err_msg >&2 echo err_msg exit 404 # жаль я не знаю как вывести еще и стэк вызовов функций :-( fi } Аналогично можно сделать функции, которая просто проинорирует пустую переменную, но запустить команду из переменной для не пустой. Аналогично можно сделать функцию для выдачи stdout - для использования вместо cтрок типа SOME_VAR=`$SOME_COMMANDE some args` Удачи! и спасибо за etcnet. PS: кстати, зачем задавать вручную путь к modprobe, если его можно взять из / proc ?
Да, обработка ошибок не везде нормальная.
Единственное место, где type2group() использовалась без проверки возвращаемого значения --- network.init:check(). Исправлено.
Защита добавлена.
http://etcnet.org/files/etcnet-0.8.0-alt0.10.noarch.rpm