Мой C код делаетPOPEN терпит неудачу, когда вызывается после seteuid (0)
seteuid (euid);
popen("/root/bin/iptables ....", "r");
и он терпит неудачу, даже если я позвоню с seteuid (0). (В исполняемых файлах установлен setuid).
Кажется, что seteuid и popen не работают вместе.
Когда POPEN называется она печатает в поток ошибок следующий Сообщ
iptables v1.4.6: can't initialize iptables table : Permission denied (you must be root)
Другими словами POPEN «успешно», а потому, что новая оболочка создается разрешения не поддерживается и использование дело развалится.
Как я могу решить проблему?
Какая ошибка? Как это происходит? –
@BasileStarynkevitch редактировал вопрос. – cateof
Вы не проверяете код возврата seteuid, так что дает ** popen («/ usr/bin/who am i», «r»); ** вы? –