void free_tls_t(tls_t &tls) { if (tls.ctx) { free_tls_context(tls.ctx); } if (tls.ca_certfile) { free(tls.ca_certfile); } if (tls.ca_certdir) { free(tls.ca_certdir); } if (tls.crlfile) { free(tls.crlfile); } if (tls.certfile) { free(tls.certfile); } if (tls.keyfile) { free(tls.keyfile); } if (tls.dhfile) { free(tls.dhfile); } if (tls.cipherlist) { free(tls.cipherlist); } if (tls.allowed_cns) { delete tls.allowed_cns; } }
/* * Free memory of resource. * NB, we don't need to worry about freeing any references * to other resources as they will be freed when that * resource chain is traversed. Mainly we worry about freeing * allocated strings (names). */ void free_resource(RES *sres, int type) { RES *nres; URES *res = (URES *)sres; if (res == NULL) return; /* * Common stuff -- free the resource name */ nres = (RES *)res->dir_res.hdr.next; if (res->dir_res.hdr.name) { free(res->dir_res.hdr.name); } if (res->dir_res.hdr.desc) { free(res->dir_res.hdr.desc); } switch (type) { case R_DIRECTOR: if (res->dir_res.address) { free(res->dir_res.address); } if (res->dir_res.tls_ctx) { free_tls_context(res->dir_res.tls_ctx); } if (res->dir_res.tls_ca_certfile) { free(res->dir_res.tls_ca_certfile); } if (res->dir_res.tls_ca_certdir) { free(res->dir_res.tls_ca_certdir); } if (res->dir_res.tls_certfile) { free(res->dir_res.tls_certfile); } if (res->dir_res.tls_keyfile) { free(res->dir_res.tls_keyfile); } break; case R_CONSOLE: if (res->con_res.password) { free(res->con_res.password); } if (res->con_res.tls_ctx) { free_tls_context(res->con_res.tls_ctx); } if (res->con_res.tls_ca_certfile) { free(res->con_res.tls_ca_certfile); } if (res->con_res.tls_ca_certdir) { free(res->con_res.tls_ca_certdir); } if (res->con_res.tls_certfile) { free(res->con_res.tls_certfile); } if (res->con_res.tls_keyfile) { free(res->con_res.tls_keyfile); } break; case R_CONSOLE_FONT: if (res->con_font.fontface) { free(res->con_font.fontface); } break; default: printf(_("Unknown resource type %d\n"), type); } /* * Common stuff again -- free the resource, recurse to next one */ free(res); if (nres) { free_resource(nres, type); } }