Мой код C делает
seteuid (euid);
popen("/root/bin/iptables ....", "r");
и он не работает, даже если я звоню с помощью seteuid (0). (Для исполняемых файлов установлен setuid).
Кажется, что seteuid и popen не работают вместе.
При вызове popen он печатает в stderr следующее сообщение
iptables v1.4.6: can't initialize iptables table : Permission denied (you must be root)
Другими словами, popen "успешно", но поскольку создается новая оболочка, разрешения не поддерживаются, и сценарий использования завершается неудачно.
Как я могу решить проблему?