/* * 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; }
/* * 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; }
/* * 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; }
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; }
/* * 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; }
/* * 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; }
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; }