5 void chrootAndDrop(std::string
const& chrootdir
, std::string
const& username
)
9 std::cerr
<< "this programm has to be run as root in order to run in a chroot" << std::endl
;
13 struct passwd
*pw
= getpwnam(username
.c_str());
15 if(chroot(chrootdir
.c_str()))
17 std::cerr
<< "can't chroot to " << chrootdir
<< std::endl
;
20 cLog
.msg(Log::PRIO_NOTICE
) << "we are in chroot jail (" << chrootdir
<< ") now" << std::endl
;
22 if (initgroups(pw
->pw_name
, pw
->pw_gid
) || setgid(pw
->pw_gid
) || setuid(pw
->pw_uid
))
24 std::cerr
<< "can't drop to user " << username
<< " " << pw
->pw_uid
<< ":" << pw
->pw_gid
<< std::endl
;
27 cLog
.msg(Log::PRIO_NOTICE
) << "dropped user to " << username
<< " " << pw
->pw_uid
<< ":" << pw
->pw_gid
<< std::endl
;
31 std::cerr
<< "unknown user " << username
<< std::endl
;
46 // std::cout << "running in background now..." << std::endl;
49 // for (fd=getdtablesize();fd>=0;--fd) // close all file descriptors
50 for (fd
=0;fd
<=2;fd
++) // close all file descriptors
52 fd
=open("/dev/null",O_RDWR
); // stdin