listen_addrs: use sblist
This commit is contained in:
parent
a5381223df
commit
e843519fb8
17
src/child.c
17
src/child.c
@ -251,10 +251,10 @@ void child_free_children(void) {
|
|||||||
/**
|
/**
|
||||||
* Listen on the various configured interfaces
|
* Listen on the various configured interfaces
|
||||||
*/
|
*/
|
||||||
int child_listening_sockets(vector_t listen_addrs, uint16_t port)
|
int child_listening_sockets(sblist *listen_addrs, uint16_t port)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
ssize_t i;
|
size_t i;
|
||||||
|
|
||||||
assert (port > 0);
|
assert (port > 0);
|
||||||
|
|
||||||
@ -267,8 +267,7 @@ int child_listening_sockets(vector_t listen_addrs, uint16_t port)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((listen_addrs == NULL) ||
|
if (!listen_addrs || !sblist_getsize(listen_addrs))
|
||||||
(vector_length(listen_addrs) == 0))
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* no Listen directive:
|
* no Listen directive:
|
||||||
@ -278,17 +277,17 @@ int child_listening_sockets(vector_t listen_addrs, uint16_t port)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < vector_length(listen_addrs); i++) {
|
for (i = 0; i < sblist_getsize(listen_addrs); i++) {
|
||||||
const char *addr;
|
char **addr;
|
||||||
|
|
||||||
addr = (char *)vector_getentry(listen_addrs, i, NULL);
|
addr = sblist_get(listen_addrs, i);
|
||||||
if (addr == NULL) {
|
if (!addr || !*addr) {
|
||||||
log_message(LOG_WARNING,
|
log_message(LOG_WARNING,
|
||||||
"got NULL from listen_addrs - skipping");
|
"got NULL from listen_addrs - skipping");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = listen_sock(addr, port, listen_fds);
|
ret = listen_sock(*addr, port, listen_fds);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#ifndef TINYPROXY_CHILD_H
|
#ifndef TINYPROXY_CHILD_H
|
||||||
#define TINYPROXY_CHILD_H
|
#define TINYPROXY_CHILD_H
|
||||||
|
|
||||||
#include "vector.h"
|
#include "sblist.h"
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CHILD_MAXCLIENTS,
|
CHILD_MAXCLIENTS,
|
||||||
@ -32,7 +32,7 @@ typedef enum {
|
|||||||
} child_config_t;
|
} child_config_t;
|
||||||
|
|
||||||
extern short int child_pool_create (void);
|
extern short int child_pool_create (void);
|
||||||
extern int child_listening_sockets (vector_t listen_addrs, uint16_t port);
|
extern int child_listening_sockets (sblist *listen_addrs, uint16_t port);
|
||||||
extern void child_close_sock (void);
|
extern void child_close_sock (void);
|
||||||
extern void child_main_loop (void);
|
extern void child_main_loop (void);
|
||||||
extern void child_kill_children (int sig);
|
extern void child_kill_children (int sig);
|
||||||
|
29
src/conf.c
29
src/conf.c
@ -287,23 +287,29 @@ free_added_headers (sblist* add_headers)
|
|||||||
sblist_free (add_headers);
|
sblist_free (add_headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void stringlist_free(sblist *sl) {
|
||||||
|
size_t i;
|
||||||
|
char **s;
|
||||||
|
if(sl) {
|
||||||
|
for(i = 0; i < sblist_getsize(sl); i++) {
|
||||||
|
s = sblist_get(sl, i);
|
||||||
|
if(s) safefree(*s);
|
||||||
|
}
|
||||||
|
sblist_free(sl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void free_config (struct config_s *conf)
|
void free_config (struct config_s *conf)
|
||||||
{
|
{
|
||||||
char *k, **s;
|
char *k;
|
||||||
htab_value *v;
|
htab_value *v;
|
||||||
size_t it;
|
size_t it;
|
||||||
safefree (conf->logf_name);
|
safefree (conf->logf_name);
|
||||||
safefree (conf->stathost);
|
safefree (conf->stathost);
|
||||||
safefree (conf->user);
|
safefree (conf->user);
|
||||||
safefree (conf->group);
|
safefree (conf->group);
|
||||||
vector_delete(conf->listen_addrs);
|
stringlist_free(conf->basicauth_list);
|
||||||
if(conf->basicauth_list) {
|
stringlist_free(conf->listen_addrs);
|
||||||
for(it = 0; it < sblist_getsize(conf->basicauth_list); it++) {
|
|
||||||
s = sblist_get(conf->basicauth_list, it);
|
|
||||||
if(s) safefree(*s);
|
|
||||||
}
|
|
||||||
sblist_free(conf->basicauth_list);
|
|
||||||
}
|
|
||||||
#ifdef FILTER_ENABLE
|
#ifdef FILTER_ENABLE
|
||||||
safefree (conf->filter);
|
safefree (conf->filter);
|
||||||
#endif /* FILTER_ENABLE */
|
#endif /* FILTER_ENABLE */
|
||||||
@ -813,7 +819,7 @@ static HANDLE_FUNC (handle_listen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (conf->listen_addrs == NULL) {
|
if (conf->listen_addrs == NULL) {
|
||||||
conf->listen_addrs = vector_create();
|
conf->listen_addrs = sblist_new(sizeof(char*), 16);
|
||||||
if (conf->listen_addrs == NULL) {
|
if (conf->listen_addrs == NULL) {
|
||||||
log_message(LOG_WARNING, "Could not create a list "
|
log_message(LOG_WARNING, "Could not create a list "
|
||||||
"of listen addresses.");
|
"of listen addresses.");
|
||||||
@ -822,11 +828,10 @@ static HANDLE_FUNC (handle_listen)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vector_append (conf->listen_addrs, arg, strlen(arg) + 1);
|
sblist_add (conf->listen_addrs, &arg);
|
||||||
|
|
||||||
log_message(LOG_INFO, "Added address [%s] to listen addresses.", arg);
|
log_message(LOG_INFO, "Added address [%s] to listen addresses.", arg);
|
||||||
|
|
||||||
safefree (arg);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ struct config_s {
|
|||||||
unsigned int maxclients;
|
unsigned int maxclients;
|
||||||
char *user;
|
char *user;
|
||||||
char *group;
|
char *group;
|
||||||
vector_t listen_addrs;
|
sblist *listen_addrs;
|
||||||
#ifdef FILTER_ENABLE
|
#ifdef FILTER_ENABLE
|
||||||
char *filter;
|
char *filter;
|
||||||
unsigned int filter_url; /* boolean */
|
unsigned int filter_url; /* boolean */
|
||||||
|
@ -60,7 +60,7 @@ do_transparent_proxy (struct conn_s *connptr, orderedmap hashofheaders,
|
|||||||
socklen_t length;
|
socklen_t length;
|
||||||
char *data;
|
char *data;
|
||||||
size_t ulen = strlen (*url);
|
size_t ulen = strlen (*url);
|
||||||
ssize_t i;
|
size_t i;
|
||||||
|
|
||||||
data = orderedmap_find (hashofheaders, "host");
|
data = orderedmap_find (hashofheaders, "host");
|
||||||
if (!data) {
|
if (!data) {
|
||||||
@ -123,12 +123,12 @@ do_transparent_proxy (struct conn_s *connptr, orderedmap hashofheaders,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < vector_length(conf->listen_addrs); i++) {
|
for (i = 0; i < sblist_getsize(conf->listen_addrs); i++) {
|
||||||
const char *addr;
|
char **addr;
|
||||||
|
|
||||||
addr = (char *)vector_getentry(conf->listen_addrs, i, NULL);
|
addr = sblist_get(conf->listen_addrs, i);
|
||||||
|
|
||||||
if (addr && strcmp(request->host, addr) == 0) {
|
if (addr && *addr && strcmp(request->host, *addr) == 0) {
|
||||||
log_message(LOG_ERR,
|
log_message(LOG_ERR,
|
||||||
"transparent: destination IP %s is local "
|
"transparent: destination IP %s is local "
|
||||||
"on socket fd %d",
|
"on socket fd %d",
|
||||||
|
Loading…
Reference in New Issue
Block a user