diff --git a/common.c b/common.c index 6f5fd56..3698f86 100644 --- a/common.c +++ b/common.c @@ -785,6 +785,21 @@ void set_keepcaps(int val) { #endif } +/* Returns true if anything requires transparent proxying. */ +#ifdef LIBCAP +static int use_transparent(void) +{ + if (cfg.transparent) + return 1; + + for (int i = 0; i < cfg.protocols_len; i++) + if (cfg.protocols[i].transparent) + return 1; + + return 0; +} +#endif + /* set needed capabilities for effective and permitted, clear rest */ void set_capabilities(void) { #ifdef LIBCAP @@ -793,7 +808,7 @@ void set_capabilities(void) { cap_value_t cap_list[10]; int ncap = 0; - if (cfg.transparent) + if (use_transparent()) cap_list[ncap++] = CAP_NET_ADMIN; caps = cap_init();