X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=send_common.c;h=988e8d48daf502bc70f0ba6cb7377dd1dc90429c;hp=ec7ab67108334c85085b46b84ada1db45eb91a82;hb=8d106ca317a2c42f35a86ba244f843688f6939e6;hpb=e9b00a14a4653d767a9d0fe885aa0b6d56c42180 diff --git a/send_common.c b/send_common.c index ec7ab671..988e8d48 100644 --- a/send_common.c +++ b/send_common.c @@ -13,6 +13,7 @@ #include #include #include +#include #include "para.h" #include "error.h" @@ -133,19 +134,33 @@ int send_queued_chunks(int fd, struct chunk_queue *cq) * Initialize a struct sender status. * * \param ss The struct to initialize. - * \param access_arg The array of access arguments given at the command line. - * \param num_access_args The number of elements in \a access_arg. + * \param acl_opt_result Contains array of --{http|dccp}-access arguments. * \param port The tcp or dccp port to listen on. * \param max_clients The maximal number of simultaneous connections. * \param default_deny Whether a blacklist should be used for access control. */ -void init_sender_status(struct sender_status *ss, char **access_arg, - int num_access_args, int port, int max_clients, int default_deny) +void init_sender_status(struct sender_status *ss, + const struct lls_opt_result *acl_opt_result, int port, + int max_clients, int default_deny) { + int i; + ss->listen_fd = -1; INIT_LIST_HEAD(&ss->client_list); ss->port = port; - acl_init(&ss->acl, access_arg, num_access_args); + + /* Initialize an access control list */ + INIT_LIST_HEAD(&ss->acl); + for (i = 0; i < lls_opt_given(acl_opt_result); i++) { + const char *arg = lls_string_val(i, acl_opt_result); + char addr[16]; + int mask; + if (!parse_cidr(arg, addr, sizeof(addr), &mask)) + PARA_WARNING_LOG("ACL syntax error: %s, ignoring\n", + arg); + else + acl_add_entry(&ss->acl, addr, mask); + } ss->num_clients = 0; ss->max_clients = max_clients; ss->default_deny = default_deny;