示例#1
0
/*
 * create a new client domain (identified by a string)
 */
int tls_new_client_domain_name( str *id, str *domain)
{
	struct tls_domain *d;

	d = tls_new_domain( id, TLS_DOMAIN_CLI | TLS_DOMAIN_NAME);
	if (d == NULL) {
		LM_ERR("pkg memory allocation failure\n");
		return -1;
	}

	/* initialize name data */
	d->name.s = pkg_malloc(domain->len);
	if (d->name.s == NULL) {
		LM_ERR("pkg memory allocation failure\n");
		pkg_free(d);
		return -1;
	}
	memcpy(d->name.s, domain->s, domain->len);
	d->name.len = domain->len;

	/* add this new domain to the linked list */
	d->next = tls_client_domains;
	tls_client_domains = d;
	return 0;
}
示例#2
0
/*
 * create a new client domain
 */
int tls_new_client_domain(str *name, struct ip_addr *ip, unsigned short port,
										struct tls_domain **dom)
{
	struct tls_domain *d;

	d = tls_new_domain(name, TLS_DOMAIN_CLI);
	if (d == NULL) {
		LM_ERR("pkg memory allocation failure\n");
		return -1;
	}

	if (ip) {
		/* fill socket data */
		memcpy(&d->addr, ip, sizeof(struct ip_addr));
		d->port = port;
	} else
		d->addr.af = AF_INET;

	d->refs = 1;

	/* add this new domain to the linked list */
	d->next = *dom;
	*dom = d;

	return 0;
}
示例#3
0
/*
 * called once from main.c (main process) before
 * parsing the configuration
 */
int pre_init_tls(void)
{
	LM_DBG("entered\n");

	tls_default_client_domain = tls_new_domain(TLS_DOMAIN_DEF|TLS_DOMAIN_CLI);
	if (tls_default_client_domain==0) {
		LM_ERR("failed to initialize tls_default_client_domain\n");
		return -1;
	}
	tls_default_client_domain->addr.af = AF_INET;

	tls_default_server_domain = tls_new_domain(TLS_DOMAIN_DEF|TLS_DOMAIN_SRV);
	if (tls_default_server_domain==0) {
		LM_ERR("failed to initialize tls_default_server_domain\n");
		return -1;
	}
	tls_default_server_domain->addr.af = AF_INET;

	return 0;
}
示例#4
0
int tls_new_default_domain(int type, struct tls_domain **dom)
{
	struct tls_domain *d;
	str default_name = str_init(DEFAULT_DOM_NAME_S);

	d = tls_new_domain(&default_name, type);
	if (!d) {
		LM_ERR("Failed to allocate domain\n");
		return -1;
	}

	d->refs = 1;
	d->addr.af = AF_INET;

	*dom = d;

	return 0;
}
示例#5
0
/*
 * create a new client domain (identified by a socket)
 */
int tls_new_client_domain(str *id, struct ip_addr *ip, unsigned short port)
{
	struct tls_domain *d;

	d = tls_new_domain( id, TLS_DOMAIN_CLI);
	if (d == NULL) {
		LM_ERR("pkg memory allocation failure\n");
		return -1;
	}

	/* fill socket data */
	memcpy(&d->addr, ip, sizeof(struct ip_addr));
	d->port = port;

	/* add this new domain to the linked list */
	d->next = tls_client_domains;
	tls_client_domains = d;
	return 0;
}
示例#6
0
/*
 * create a new server domain
 */
int tls_new_server_domain(str *name, struct ip_addr *ip, unsigned short port,
								struct tls_domain **dom)
{
	struct tls_domain *d;

	d = tls_new_domain(name, TLS_DOMAIN_SRV);
	if (d == NULL) {
		LM_ERR("shm memory allocation failure\n");
		return -1;
	}

	/* fill socket data */
	memcpy(&d->addr, ip, sizeof(struct ip_addr));
	d->port = port;
	d->refs = 1;

	/* add this new domain to the linked list */
	d->next = *dom;
	*dom = d;

	return 0;
}
示例#7
0
static int parse_domain(void* param, cfg_parser_t* st, unsigned int flags)
{
	cfg_token_t t;
	int ret;
	cfg_option_t* opt;

	int type;
	struct ip_addr ip;
	unsigned int port;

	memset(&ip, 0, sizeof(struct ip_addr));

	ret = cfg_get_token(&t, st, 0);
	if (ret < 0) return -1;
	if (ret > 0) {
		ERR("%s:%d:%d: TLS domain type missing\n", 
		    st->file, st->line, st->col);
		return -1;
	}

	if (t.type != CFG_TOKEN_ALPHA || 
	    ((opt = cfg_lookup_token(domain_types, &t.val)) == NULL)) {
		ERR("%s:%d:%d: Invalid TLS domain type %d:'%.*s'\n", 
		    st->file, t.start.line, t.start.col, t.type, STR_FMT(&t.val));
		return -1;
	}
	
	ret = cfg_get_token(&t, st, 0);
	if (ret < 0) return -1;
	if (ret > 0) {
		ERR("%s:%d:%d: TLS domain IP address missing\n", 
		    st->file, st->line, st->col);
		return -1;
	}
	if (t.type != ':') {
		ERR("%s:%d:%d: Syntax error, ':' expected\n", 
		    st->file, t.start.line, t.start.col);
		return -1;
	}	

	port = 0;
	if (parse_hostport(&type, &ip, &port, &t, st) < 0) return -1;

	ret = cfg_get_token(&t, st, 0);
	if (ret < 0) return -1;
	if (ret > 0) {
		ERR("%s:%d:%d: Closing ']' missing\n", 
		    st->file, st->line, st->col);
		return -1;
	}
	if (t.type != ']') {
		ERR("%s:%d:%d: Syntax error, ']' expected\n", 
		    st->file, t.start.line, t.start.col);
		return -1;
	}

	if (cfg_eat_eol(st, flags)) return -1;

	if ((domain = tls_new_domain(opt->val | type, &ip, port)) == NULL) {
		ERR("%s:%d: Cannot create TLS domain structure\n", st->file, st->line);
		return -1;
	}

	ret = tls_add_domain(cfg, domain);
	if (ret < 0) {
		ERR("%s:%d: Error while creating TLS domain structure\n", st->file, 
			st->line);
		tls_free_domain(domain);
		return -1;
	} else if (ret == 1) {
		ERR("%s:%d: Duplicate TLS domain (appears earlier in the config file)\n", 
		    st->file, st->line);
		tls_free_domain(domain);
		return -1;
	}
	
	update_opt_variables();
	cfg_set_options(st, options);
	return 0;
}