Exemplo n.º 1
0
int tlsp_add_srv_domain(modparam_t type, void *val)
{
	struct ip_addr *ip;
	unsigned int port;
	str domain;
	str id;

	if (parse_domain_def( (char*)val, &id, &ip, &port, &domain)<0 )
		return -1;

	if (ip==NULL) {
		LM_ERR("server domains do not support 'domain name' in definition\n");
		return -1;
	}

	/* add domain */
	if (tls_new_server_domain( &id, ip, port )<0) {
		LM_ERR("failed to add new server domain [%s]\n",(char*)val);
		return -1;
	}

	return 1;
}
Exemplo n.º 2
0
int tlsp_add_srv_domain(modparam_t type, void *val)
{
	struct ip_addr *ip = NULL;
	unsigned int port;
	str name, dom_str;

	init_str(&dom_str, val);
	if (parse_domain_def(&dom_str, &name, &ip, &port) < 0)
		return -1;

	if (ip == NULL) {
		LM_ERR("server domains must have an address\n");
		return -1;
	}

	if (tls_server_domains == NULL) {
		tls_server_domains = shm_malloc(sizeof *tls_server_domains);
		if (!tls_server_domains) {
			LM_ERR("No more shm mem\n");
			return -1;
		}
		*tls_server_domains = NULL;
	}

	if (tls_find_domain_by_name(&name, tls_server_domains)) {
		LM_ERR("Domain name: [%.*s] already defined\n", name.len, name.s);
		return -1;
	}

	/* add domain */
	if (tls_new_server_domain(&name, ip, port, tls_server_domains) < 0) {
		LM_ERR("failed to add new server domain [%.*s]\n", name.len, name.s);
		return -1;
	}

	return 1;
}
Exemplo n.º 3
0
int db_add_domain(char **str_vals, int *int_vals, str* blob_vals,
			struct tls_domain **serv_dom, struct tls_domain **cli_dom,
			struct tls_domain **def_serv_dom, struct tls_domain **def_cli_dom,
			struct tls_domain *script_srv_doms, struct tls_domain *script_cli_doms)
{
	struct ip_addr *ip = NULL;
	unsigned int port = 0;
	str name, address;

	name.s = str_vals[STR_VALS_DOMAIN_COL];
	name.len = name.s ? strlen(name.s) : 0;

	if (name.len == 0) {
		LM_ERR("DB defined domain id: %d must have a name\n", int_vals[INT_VALS_ID_COL]);
		return -1;
	}

	address.s = str_vals[STR_VALS_ADDRESS_COL];
	address.len = address.s ? strlen(address.s) : 0;

	if (int_vals[INT_VALS_TYPE_COL] == CLIENT_DOMAIN) {
		if (tls_find_domain_by_name(&name, cli_dom) ||
			tls_find_domain_by_name(&name, &script_cli_doms)) {
			LM_ERR("Domain name: [%.*s] already defined\n", name.len, name.s);
			return -1;
		}

		if (!memcmp(name.s, DEFAULT_DOM_NAME_S, DEFAULT_DOM_NAME_LEN)) {
			/* default client domain */
			DB_ADD_DEFAULT_DOM(def_cli_dom, TLS_DOMAIN_CLI);

			return 0;
		}

		if (address.len && parse_domain_address(address.s, address.len, &ip, &port) < 0)
			return -1;

		if (tls_new_client_domain(&name, ip, port, cli_dom) < 0) {
			LM_ERR("failed to add new client domain [%.*s]\n",
				name.len, name.s);
			return -1;
		}

		(*cli_dom)->type |= TLS_DOMAIN_DB;

		if (set_all_domain_attr(cli_dom, str_vals, int_vals, blob_vals) < 0) {
			LM_ERR("failed to set domain [%.*s] attributes\n", name.len, name.s);
			return -1;
		}
	} else if (int_vals[INT_VALS_TYPE_COL] == SERVER_DOMAIN) {
		if (tls_find_domain_by_name(&name, serv_dom) ||
			tls_find_domain_by_name(&name, &script_srv_doms)) {
			LM_ERR("Domain name: [%.*s] already defined\n", name.len, name.s);
			return -1;
		}

		if (!memcmp(name.s, DEFAULT_DOM_NAME_S, DEFAULT_DOM_NAME_LEN)) {
			/* default server domain */
			DB_ADD_DEFAULT_DOM(def_serv_dom, TLS_DOMAIN_SRV);

			return 0;
		}

		if (address.len == 0) {
			LM_ERR("Server domain must have an address\n");
			return -1;
		}

		if (parse_domain_address(address.s, address.len, &ip, &port) < 0)
			return -1;

		if (tls_new_server_domain(&name, ip, port, serv_dom) < 0) {
			LM_ERR("failed to add new server domain [%.*s]\n", name.len, name.s);
			return -1;
		}

		(*serv_dom)->type |= TLS_DOMAIN_DB;

		if (set_all_domain_attr(serv_dom, str_vals, int_vals,blob_vals) < 0) {
			LM_ERR("failed to set domain [%.*s] attr\n", name.len, name.s);
			return -1;
		}
	} else if (int_vals[INT_VALS_TYPE_COL] == DEFAULT_DOM_BOTH) {
		if (memcmp(name.s, DEFAULT_DOM_NAME_S, DEFAULT_DOM_NAME_LEN)) {
			LM_ERR("This type is only for default domains\n");
			return -1;
		}

		DB_ADD_DEFAULT_DOM(def_cli_dom, TLS_DOMAIN_CLI);

		DB_ADD_DEFAULT_DOM(def_serv_dom, TLS_DOMAIN_SRV);
	} else {
		LM_ERR("unknown TLS domain type [%d] in DB\n",
			int_vals[INT_VALS_TYPE_COL]);
		return -1;
	}

	return 0;
}