<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>7765</bug_id>
          
          <creation_ts>2005-08-27 07:27:35 +0400</creation_ts>
          <short_desc>wish:больше защиты от отсутствующих опций, как в etcnet 0.7.11-alt1</short_desc>
          <delta_ts>2005-11-12 17:03:17 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>etcnet</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="burov dmitry">the_arioch</reporter>
          <assigned_to name="Mikhail Efremov">sem</assigned_to>
          <cc>ldv</cc>
    
    <cc>rider</cc>
    
    <cc>sem</cc>
    
    <cc>shaba</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>29174</commentid>
    <comment_count>0</comment_count>
    <who name="burov dmitry">the_arioch</who>
    <bug_when>2005-08-27 07:27:35 +0400</bug_when>
    <thetext>Помню... вывод на экран был совсем-совсем дикий  :-)
сетевые карточки из серии `ls / ` - весь набор директорий и файлов в корне :-)

Кууууча строк из-за наведенных ошибок, забили весь экранный буфер - не увидеть 
было первых.

(в сторону: Жаль, что в bash&apos;e есть 2&gt; но нет 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=&quot;ERROR: Variable \$$1 expected to contain path to executable. 
&quot;
     if [[ -z $ExecFile ]] ; then
        err_msg=&quot;$err_msg Instead it is empty!&quot;
     else
        err_msg=&quot;$err_msg But the value is \&quot;$ExecFile\&quot; !!! &quot;
     fi

     echo err_msg &gt;&amp;2
     echo err_msg

     exit 404
# жаль я не знаю как вывести еще и стэк вызовов функций :-(
  fi
}

Аналогично можно сделать функции, которая просто проинорирует пустую переменную, 
но запустить команду из переменной для не пустой.

Аналогично можно сделать функцию для выдачи stdout - для использования вместо 
cтрок типа SOME_VAR=`$SOME_COMMANDE some args`

Удачи! и спасибо за etcnet. 

PS: кстати, зачем задавать вручную путь к modprobe, если его можно взять из /
proc ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29180</commentid>
    <comment_count>1</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2005-08-27 14:48:10 +0400</bug_when>
    <thetext>Да, обработка ошибок не везде нормальная.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32959</commentid>
    <comment_count>2</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2005-11-10 01:59:10 +0300</bug_when>
    <thetext>Единственное место, где type2group() использовалась без проверки возвращаемого
значения --- network.init:check(). Исправлено.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32969</commentid>
    <comment_count>3</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2005-11-10 11:45:04 +0300</bug_when>
    <thetext>Защита добавлена.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33020</commentid>
    <comment_count>4</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2005-11-12 17:03:17 +0300</bug_when>
    <thetext>http://etcnet.org/files/etcnet-0.8.0-alt0.10.noarch.rpm</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>