Некоторые программы требуют доступ к протоколу ICMP, например Codesys - для работы с оборудованием (контроллерами). Но по-умолчанию в wine он доступен только под рутом.
int sid=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP); if (sid < 0) { MESSAGE("WARNING: Trying to use ICMP (network ping) will fail unless running as root\n"); SetLastError(ERROR_ACCESS_DENIED); return INVALID_HANDLE_VALUE;
Есть вариант добавить необходимую функциональность в etersafe и действовать через него. Также возможно более правильный или быстрый вариант: # chcap cap_net_raw=ep /usr/bin/wine-glibc (или wine-preloader, не знаю)ю см. об этом здесь: http://www.winehq.org/pipermail/wine-devel/2007-December/061479.html
http://www.informatik.uni-oldenburg.de/~akw/files/capfaq.pdf 11 How do I start a process with a limited set of capabilities? Get the libcap library and use the execcap utility. The following example starts the update daemon with only the CAP SYS ADMIN capability. execcap ’cap_sys_admin=eip’ update 12 How do I start a process with a limited set of capabilities under another uid? Use the sucap utility which changes uid from root without loosing any capabilities. Normally all capabilities are cleared when changing uid from root. The sucap1 utility requires the CAP SETPCAP capability. The following example starts updated under uid updated and gid updated with CAP SYS ADMIN raised in the Effective set. sucap updated updated execcap ’cap_sys_admin=eip’ update
Как выяснилось, команда chcap нигде не реализована...
В закрытой части сделаны работающие заглушки для int etersoft_icmp_socket int etersoft_icmp_getsockopt int etersoft_icmp_setsockopt ssize_t etersoft_icmp_sendto ssize_t etersoft_icmp_recvfrom int etersoft_icmp_shutdown
По поводу chcap... Об этом скрипте рассказывается здесь на примере ping: http://lkml.indiana.edu/hypermail/linux/kernel/0210.3/0084.html Я его собрал и проверил - работает.
(In reply to comment #6) > По поводу chcap... > Об этом скрипте рассказывается здесь на > примере ping: > http://lkml.indiana.edu/hypermail/linux/kernel/0210.3/0084.html > Я его собрал и проверил - работает. Тогда нужно разобраться, как эту команду предоставить пользователям, добавить её в пакет и описать в документации.
Решение для ALTLinux p5 #apt-get install libcap-utils #setcap 'cap_net_raw=ep' /usr/bin/wine-preloader после этого начинает работать ICMP. В ALT 4.1 в пакете libcap-utils нет утилиты setcap, но простая установка этого пакета из репозитория пятой платформы зависимостей за собой не тянет и, насколько я понял, проблем не вызывает. Для убунты рецепт здесь http://oleg.in-da.ru/soft/tcpdump/socket_operation_not_permitted , правда, не для wine, а для tcpdump, но сути дела это не меняет
(In reply to comment #8) > Решение для ALTLinux p5 > > #apt-get install libcap-utils > #setcap 'cap_net_raw=ep' /usr/bin/wine-preloader > > после этого начинает работать ICMP. > > В ALT 4.1 в пакете libcap-utils нет утилиты setcap, но > простая установка этого пакета из > репозитория пятой платформы зависимостей > за собой не тянет и, насколько я понял, > проблем не вызывает. > > Для убунты рецепт здесь > http://oleg.in-da.ru/soft/tcpdump/socket_operation_not_permitted , > правда, не для wine, а для tcpdump, но сути дела > это не меняет > Проверил в Альте. На примере ping.exe рецепт работает. Багу закрываю.
Добавил информацию в документацию.
> > Проверил в Альте. На примере ping.exe рецепт > работает. Багу закрываю. > Из-за недоработанного ping вывод был сделан на основании отсутствия сообщения "WARNING: Trying to use ICMP (network ping) will fail unless running as root" Сегодня когда сравнивал версии моего пинга скомпиленных в windows и в linux столкнулся с проблемой: Pinging ya.ru [213.180.204.8] Reply from 0.0.0.0 Time=1129576ms TTL=239 Error: icmpEcho.Status=1130088 В windows этот же пинг работает корректно. Скорее всего тут дело не в доступе к ICMP, а в wine и ping, но на всякий случай следует проверить ещё на какой-нибудь программе.
(In reply to comment #11) > > > > Проверил в Альте. На примере ping.exe рецепт > > работает. Багу закрываю. > > > > Из-за недоработанного ping вывод был сделан > на основании отсутствия сообщения > "WARNING: Trying to use ICMP (network ping) will fail unless running as root" > > Сегодня когда сравнивал версии моего пинга > скомпиленных в windows и в linux столкнулся с > проблемой: > > Pinging ya.ru [213.180.204.8] > > Reply from 0.0.0.0 Time=1129576ms TTL=239 > Error: icmpEcho.Status=1130088 > > В windows этот же пинг работает корректно. > > Скорее всего тут дело не в доступе к ICMP, а в > wine и ping, но на всякий случай следует > проверить ещё на какой-нибудь программе. > насчет вашего ping.exe ничего не могу сказать, но я рецепт предложил после того, как опробовал его на самописной dll, которая использует icmp.dll (in windows) для выполнения пинга. Dll используется в 1С как внешняя компонента, соответственно, в винде работало нормально, под wine столкнулся с этой проблемой.