[sisyphus] Вопрос по os-release

Alexey Gladkov legion на altlinux.ru
Чт Фев 28 15:59:26 MSK 2013


28.02.2013 15:35, Pavel Vainerman wrote:
>> У паранои должны быть пределы иначе можно перестать доверять выводу
>> системных утилит и содержимому конфигов.
>     согласен.. при условии (того, что вы написали ниже).

Я продемонстрирую почему я так толсто троллингово возмущаюсь:

$ dd if=/dev/urandom of=/tmp/badfile count=1 bs=512

$ cat /tmp/test.sh
#!/bin/sh -efu

. /tmp/badfile || echo "BAD FILE"
echo "END"

$ /tmp/test.sh
/tmp/badfile: line 1: unexpected EOF while looking for matching ``'

$ echo "Foo bar baz" > /tmp/badfile

$ LANG=C /tmp/test.sh
/tmp/badfile: line 1: Foo: command not found


Шеллы могут быть любыми, но результат будет один: синтаксическая ошибка.

Таким образом нарушается базовое условие формата этого конфига и
обработать такой сорс можно только через subshell:

$ cat /tmp/test.sh
#!/bin/sh -efu

( . /tmp/badfile ) || echo "BAD FILE"
echo "END"

$ /tmp/test.sh
/tmp/zzz: line 1: Foo: command not found
BAD FILE
END

Но в этом случае переменные из этого конфига не забрать простым
способом и это всё равно, что выуживать их sed'ом по одной. Как раз
этого хотели избежать создатели формата этого файла.

А учитывая, что формат допускает вот такие конструкции:

Example: NAME=Fedora or NAME="Debian GNU/Linux".

получение значений sed'ом делается ещё более весёлой задачей.

> если из этого сообщения будет понятно что битый файл os-release
> (ну или что где то в нём ошибка)..

Как я показал выше показать что именно файл битый можно, но выглядеть
эта проверка будет очень забавно. Безусловно я добавлю её раз возник
прецедент с записью туда мусора.

-- 
Rgrds, legion



Подробная информация о списке рассылки Sisyphus