...
Compliant Solution
A better solution would be is to ensure that we have proper privileges exist before attempting to carry out a permanent drop.
| Code Block | ||
|---|---|---|
| ||
/* Store the privileged ID for later verification */
uid_t privid = geteuid();
/* Code intended to run with elevated privileges */
/* Temporarily drop privileges */
if (seteuid(getuid()) != 0) {
/* Handle error */
}
/* Code intended to run with lower privileges */
if (need_more_privileges) {
/* Restore Privileges */
if (seteuid(privid) != 0) {
/* Handle error */
}
/* Code intended to run with elevated privileges */
}
/* ... */
/* IfRestore we have low privileges, restoreif themneeded */
if (geteuid() != privid) {
if (seteuid(privid())) {
/* Handle Error */
}
}
/* Permanently drop privileges */
if (setuid(getuid()) != 0) {
/* Handle error */
}
if (setuid(0) != -1) {
/* Privileges can be restored, handle error */
}
/* Code intended to run with lower privileges */
|
...