int tlsp_add_cli_domain(modparam_t type, void *val) { struct ip_addr *ip = NULL; unsigned int port = 0; str name, dom_str; init_str(&dom_str, val); if (parse_domain_def(&dom_str, &name, &ip, &port) < 0) return -1; if (tls_client_domains == NULL) { tls_client_domains = shm_malloc(sizeof *tls_client_domains); if (!tls_client_domains) { LM_ERR("No more shm mem\n"); return -1; } *tls_client_domains = NULL; } if (tls_find_domain_by_name(&name, tls_client_domains)) { LM_ERR("Domain name: [%.*s] already defined\n", name.len, name.s); return -1; } /* add domain */ if (tls_new_client_domain(&name, ip, port, tls_client_domains) < 0) { LM_ERR("failed to add new client domain [%.*s]\n", name.len, name.s); return -1; } return 1; }
int tlsp_add_cli_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; /* add domain */ if (ip==NULL) { if (tls_new_client_domain_name( &id, &domain)<0) { LM_ERR("failed to add new client domain name [%s]\n",(char*)val); return -1; } } else { if (tls_new_client_domain( &id, ip, port )<0) { LM_ERR("failed to add new client domain [%s]\n",(char*)val); return -1; } } return 1; }
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; }