r17664@tombo: nickm | 2008-08-06 12:32:09 -0400

Patch from Christopher Davis: open /dev/pf before dropping privileges.  Fixes bug 782.  Backport candidate.


svn:r16450
This commit is contained in:
Nick Mathewson 2008-08-06 16:32:17 +00:00
parent 2905291af2
commit 635f3c8aee
4 changed files with 20 additions and 2 deletions

View File

@ -7,6 +7,10 @@ Changes in version 0.2.1.5-alpha - 2008-08-??
o Minor bugfixes: o Minor bugfixes:
- Recover 3-7 bytes that were wasted per memory chunk. Fixes bug - Recover 3-7 bytes that were wasted per memory chunk. Fixes bug
794; bug spotted by rovv. Bugfix on 0.2.0.1-alpha. 794; bug spotted by rovv. Bugfix on 0.2.0.1-alpha.
- When using the TransPort option on OpenBSD, and using the User
option to change UID and drop privileges, make sure to open
/dev/pf before dropping privileges. Fixes bug 782. Patch from
Christopher Davis. Bugfix on 0.1.2.1-alpha.
Changes in version 0.2.1.4-alpha - 2008-08-04 Changes in version 0.2.1.4-alpha - 2008-08-04

View File

@ -1059,6 +1059,16 @@ options_act_reversible(or_options_t *old_options, char **msg)
} }
} }
#if defined(HAVE_NET_IF_H) && defined(HAVE_NET_PFVAR_H)
/* Open /dev/pf before dropping privileges. */
if (options->TransPort) {
if (get_pf_socket() < 0) {
*msg = tor_strdup("Unable to open /dev/pf for transparent proxy.");
goto rollback;
}
}
#endif
/* Setuid/setgid as appropriate */ /* Setuid/setgid as appropriate */
if (options->User || options->Group) { if (options->User || options->Group) {
/* XXXX021 We should only do this the first time through, not on /* XXXX021 We should only do this the first time through, not on

View File

@ -1653,11 +1653,11 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
#ifdef TRANS_PF #ifdef TRANS_PF
static int pf_socket = -1; static int pf_socket = -1;
static int int
get_pf_socket(void) get_pf_socket(void)
{ {
int pf; int pf;
/* Ideally, this should be opened before dropping privs. */ /* This should be opened before dropping privs. */
if (pf_socket >= 0) if (pf_socket >= 0)
return pf_socket; return pf_socket;

View File

@ -2937,6 +2937,10 @@ typedef enum hostname_type_t {
} hostname_type_t; } hostname_type_t;
hostname_type_t parse_extended_hostname(char *address); hostname_type_t parse_extended_hostname(char *address);
#if defined(HAVE_NET_IF_H) && defined(HAVE_NET_PFVAR_H)
int get_pf_socket(void);
#endif
/********************************* connection_or.c ***************************/ /********************************* connection_or.c ***************************/
void connection_or_remove_from_identity_map(or_connection_t *conn); void connection_or_remove_from_identity_map(or_connection_t *conn);