diff options
author | Roger Dingledine <arma@torproject.org> | 2008-11-07 04:34:47 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2008-11-07 04:34:47 +0000 |
commit | 14773f42a7b7fdc99393a9b703f7790078c8cbe6 (patch) | |
tree | ad9dd86b004287d640027279ec7b4107c9f9e1de | |
parent | 7c657925000286725b0cb080c8b920383e493d0e (diff) | |
download | tor-14773f42a7b7fdc99393a9b703f7790078c8cbe6.tar.gz tor-14773f42a7b7fdc99393a9b703f7790078c8cbe6.zip |
now that we drop privs more thoroughly, switch_id() is no longer
idempotent. so now we remember if we've succeeded, and if so we
don't even try.
svn:r17204
-rw-r--r-- | src/common/compat.c | 5 | ||||
-rw-r--r-- | src/or/config.c | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/common/compat.c b/src/common/compat.c index ecbae6ab0b..e8b7ab54a7 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -1026,9 +1026,13 @@ switch_id(const char *user) struct passwd *pw = NULL; uid_t old_uid; gid_t old_gid; + static int have_already_switched_id = 0; tor_assert(user); + if (have_already_switched_id) + return 0; + /* Log the initial credential state */ if (log_credential_status()) return -1; @@ -1117,6 +1121,7 @@ switch_id(const char *user) return -1; } + have_already_switched_id = 1; /* mark success so we never try again */ return 0; #else diff --git a/src/or/config.c b/src/or/config.c index 66ee6cd52b..397d77b7d9 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -1084,8 +1084,6 @@ options_act_reversible(or_options_t *old_options, char **msg) /* Setuid/setgid as appropriate */ if (options->User) { - /* XXXX021 We should only do this the first time through, not on - * every setconf. */ if (switch_id(options->User) != 0) { /* No need to roll back, since you can't change the value. */ *msg = tor_strdup("Problem with User value. See logs for details."); |