| Summary: | Misbehavior in the sed regex inside add_systemd_networkd_ini_option() function | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Nikolay A. Fetisov <naf> |
| Component: | alterator-net-functions | Assignee: | Mikhail Efremov <sem> |
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | boyarsh, sem, zerg |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
Спасибо за подробный анализ.
> По-видимому, надо заменить разделитель на что-либо другое - как вариант, на
> ' .
> Хотя это зависит от того, где используется эта функция - но в
> alterator-net-function
> через неё записываются только Address, Gateway и DNS - в них кавычек быть не
> может
> (% и много другое может быть в DNS как часть адреса IPv6).
Думаю | вполне подойдет.
|
Для alterator-net-function 2.1.1-alt1 в функции add_systemd_networkd_ini_option() для добавления дополнительного значения параметра в network-файл после уже там имеющегося используется sed вида (строка 1089) sed -i -e "1,// s/^\(\s*\)\($latest\)$/\1\2\n\1$3 = $4/" -- "$1" В функции write_systemd_networkd_bootproto() (строка 1179) эта функция вызывается для добавления в network-файлов адресов IP - которые указываются с маской. В sed как разделитель для оператора замены 's' используется '/' - после подставления в строку запуска sed адреса IP получается синтаксическая ошибка. Пример для проверки: ------------8<-------------- #!/bin/sh . alterator-net-functions network_filename=$(mktemp /tmp/XXXX.network) for addr in 10.0.0.1/8 10.0.0.2/8 10.0.0.3/8 fd00:1/64 fd00:2/64; do echo "ADDR=$addr" add_systemd_networkd_ini_option "$network_filename" "Network" "Address" "$addr" done echo echo "Network file:" cat $network_filename rm -f "$network_filename" ------------8<-------------- Результат запуска: ------------8<-------------- ADDR=10.0.0.1/8 ADDR=10.0.0.2/8 sed: -e expression #1, char 42: unknown option to `s' ADDR=10.0.0.3/8 sed: -e expression #1, char 42: unknown option to `s' ADDR=fd00:1/64 sed: -e expression #1, char 42: unknown option to `s' ADDR=fd00:2/64 sed: -e expression #1, char 42: unknown option to `s' Network file: [Network] Address = 10.0.0.1/8 ------------8<-------------- В network-файл добавился только первый адрес, т.к. для него в add_systemd_networkd_ini_option() строка с sed не использовалась, остальные вызвали ошибки. По-видимому, надо заменить разделитель на что-либо другое - как вариант, на ' . Хотя это зависит от того, где используется эта функция - но в alterator-net-function через неё записываются только Address, Gateway и DNS - в них кавычек быть не может (% и много другое может быть в DNS как часть адреса IPv6).