Fix compilation on OSX

This commit is contained in:
Nick Mathewson 2013-09-09 15:59:41 -04:00
parent e9ec0cb550
commit 49f9c4924e
3 changed files with 98 additions and 15 deletions

View File

@ -235,7 +235,7 @@ tor_addr_lookup(const char *name, uint16_t family, tor_addr_t *addr)
memset(&hints, 0, sizeof(hints));
hints.ai_family = family;
hints.ai_socktype = SOCK_STREAM;
err = sandbox_getaddrinfo(name, &hints, &res);
err = sandbox_getaddrinfo(name, NULL, &hints, &res);
if (!err) {
best = NULL;
for (res_p = res; res_p; res_p = res_p->ai_next) {

View File

@ -26,10 +26,6 @@
#include "util.h"
#include "tor_queue.h"
#if defined(HAVE_SECCOMP_H) && defined(__linux__)
#define USE_LIBSECCOMP
#endif
#define DEBUGGING_CLOSE
#if defined(USE_LIBSECCOMP)
@ -1083,11 +1079,15 @@ sandbox_cfg_allow_execve_array(sandbox_cfg_t **cfg, ...)
}
int
sandbox_getaddrinfo(const char *name, const struct addrinfo *hints,
sandbox_getaddrinfo(const char *name, const char *servname,
const struct addrinfo *hints,
struct addrinfo **res)
{
sb_addr_info_t *el;
if (servname != NULL)
return -1;
*res = NULL;
for (el = sb_addr_info; el; el = el->next) {
@ -1386,21 +1386,24 @@ sandbox_cfg_new(void)
}
int
sandbox_init(sandbox_cfg_t* cfg)
sandbox_init(sandbox_cfg_t *cfg)
{
#if defined(USE_LIBSECCOMP)
return initialise_libseccomp_sandbox(cfg);
#elif defined(_WIN32)
(void)cfg;
log_warn(LD_BUG,"Windows sandboxing is not implemented. The feature is "
"currently disabled.");
return 0;
#elif defined(TARGET_OS_MAC)
(void)cfg;
log_warn(LD_BUG,"Mac OSX sandboxing is not implemented. The feature is "
"currently disabled");
return 0;
#else
(void)cfg;
log_warn(LD_BUG,"Sandboxing is not implemented for your platform. The "
"feature is currently disabled");
return 0;
@ -1417,3 +1420,63 @@ sandbox_set_debugging_fd(int fd)
#endif
}
#ifndef USE_LIBSECCOMP
int
sandbox_cfg_allow_open_filename(sandbox_cfg_t **cfg, char *file,
int fr)
{
(void)cfg; (void)file; (void)fr;
return 0;
}
int
sandbox_cfg_allow_open_filename_array(sandbox_cfg_t **cfg, ...)
{
(void)cfg;
return 0;
}
int
sandbox_cfg_allow_openat_filename(sandbox_cfg_t **cfg, char *file,
int fr)
{
(void)cfg; (void)file; (void)fr;
return 0;
}
int
sandbox_cfg_allow_openat_filename_array(sandbox_cfg_t **cfg, ...)
{
(void)cfg;
return 0;
}
int
sandbox_cfg_allow_execve(sandbox_cfg_t **cfg, const char *com)
{
(void)cfg; (void)com;
return 0;
}
int
sandbox_cfg_allow_execve_array(sandbox_cfg_t **cfg, ...)
{
(void)cfg;
return 0;
}
int
sandbox_cfg_allow_stat_filename(sandbox_cfg_t **cfg, char *file,
int fr)
{
(void)cfg; (void)file; (void)fr;
return 0;
}
int
sandbox_cfg_allow_stat_filename_array(sandbox_cfg_t **cfg, ...)
{
(void)cfg;
return 0;
}
#endif

View File

@ -12,6 +12,9 @@
#ifndef SANDBOX_H_
#define SANDBOX_H_
#include "orconfig.h"
#include "torint.h"
#ifndef SYS_SECCOMP
/**
@ -22,12 +25,15 @@
#endif
#include "torint.h"
#if defined(HAVE_SECCOMP_H) && defined(__linux__)
#define USE_LIBSECCOMP
#endif
/**
* Linux definitions
*/
#ifdef __linux__
#ifdef USE_LIBSECCOMP
#ifndef __USE_GNU
#define __USE_GNU
@ -80,8 +86,6 @@ struct sandbox_cfg_elem {
/** Next element of the configuration*/
struct sandbox_cfg_elem *next;
};
/** Typedef to structure used to manage a sandbox configuration. */
typedef struct sandbox_cfg_elem sandbox_cfg_t;
/**
* Structure used for keeping a linked list of getaddrinfo pre-recorded
@ -127,22 +131,38 @@ typedef struct {
#endif
#endif // __linux__
#endif // USE_LIBSECCOMP
/** Typedef to structure used to manage a sandbox configuration. */
typedef struct sandbox_cfg_elem sandbox_cfg_t;
#ifdef USE_LIBSECCOMP
/** Pre-calls getaddrinfo in order to pre-record result. */
int sandbox_add_addrinfo(const char *addr);
struct addrinfo;
/** Replacement for getaddrinfo(), using pre-recorded results. */
int sandbox_getaddrinfo(const char *name, const struct addrinfo *hints,
int sandbox_getaddrinfo(const char *name, const char *servname,
const struct addrinfo *hints,
struct addrinfo **res);
#else
#define sandbox_getaddrinfo(name, servname, hints, res) \
getaddrinfo((name),(servname), (hints),(res))
#define sandbox_add_addrinfo(name) \
((void)(name))
#endif
/** Use <b>fd</b> to log non-survivable sandbox violations. */
void sandbox_set_debugging_fd(int fd);
#ifdef USE_LIBSECCOMP
/** Returns a registered protected string used with the sandbox, given that
* it matches the parameter.
*/
const char* sandbox_intern_string(const char *param);
#else
#define sandbox_intern_string(s) (s)
#endif
/** Creates an empty sandbox configuration file.*/
sandbox_cfg_t * sandbox_cfg_new(void);