Большая просьба очень сильно не пинать, си практически не знаю ( Ага, а лезу) Нужен был суидный враппер для шелл скрипта, но под другого пользователя, не рута. Из экспериментов выяснилось, что просто с euid, без дополнительного setresuid новый exec уже идет с saved uid, а не euid.
Нужно еще, чтоб при этом передавал информации о старом юид. Накарябал такое, подскажите, пожалуйста, насколько все плохо с этим кодом в плане безопасности. То, что код сам по себе кривой, я предполагаю :-)
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#define _GNU_SOURCE
uid_t uid;
uid_t euid;
static char olduid[256];
void getolduid() {
uid = getuid();
euid = geteuid();
}
int main(int argc, char** argv) {
getolduid();
sprintf(olduid,"OLDUID=%d",uid);
putenv(olduid);
setresuid(geteuid(), geteuid(), geteuid());
execv("/bin/prog.real", argv);
return 0;
}