diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-02-23 00:41:54 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-02-23 00:41:54 +0200 |
commit | 7543ff5973d1afe75b0f4226a3a02cc8d375ad3e (patch) | |
tree | 27a8b45adacc99d929c12679512d9e8adf9b5500 /src/wydawca.c | |
parent | cc980787791b10c2a8e95e07d40973861e00a8d9 (diff) | |
download | wydawca-7543ff5973d1afe75b0f4226a3a02cc8d375ad3e.tar.gz wydawca-7543ff5973d1afe75b0f4226a3a02cc8d375ad3e.tar.bz2 |
Switch to user privileges while processing the triplet
Diffstat (limited to 'src/wydawca.c')
-rw-r--r-- | src/wydawca.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/wydawca.c b/src/wydawca.c index 2eb8fa2..aeb56bf 100644 --- a/src/wydawca.c +++ b/src/wydawca.c @@ -282,6 +282,29 @@ match_uid_p (uid_t uid) } +int +wydawca_uid (uid_t uid) +{ + int rc; + + if (getuid () != 0) + return 0; +#if defined(HAVE_SETREUID) + rc = setreuid (0, uid); +#elif defined(HAVE_SETRESUID) + rc = setresuid (-1, uid, -1); +#elif defined(HAVE_SETEUID) + rc = seteuid (uid); +#else +# error "No way to reset user privileges?" +#endif + if (rc < 0) + logmsg (LOG_ERR, "cannot switch to UID %d: %s (r=%d, e=%d)", + uid, strerror (errno), getuid (), geteuid ()); + return rc; +} + + #include "cmdline.h" int |