1: /***************************************************************************
2: * _ _ ____ _
3: * Project ___| | | | _ \| |
4: * / __| | | | |_) | |
5: * | (__| |_| | _ <| |___
6: * \___|\___/|_| \_\_____|
7: *
8: * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
9: *
10: * This software is licensed as described in the file COPYING, which
11: * you should have received as part of this distribution. The terms
12: * are also available at https://curl.haxx.se/docs/copyright.html.
13: *
14: * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15: * copies of the Software, and permit persons to whom the Software is
16: * furnished to do so, under the terms of the COPYING file.
17: *
18: * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19: * KIND, either express or implied.
20: *
21: ***************************************************************************/
22: #include "tool_setup.h"
23:
24: #include "tool_cfgable.h"
25: #include "tool_main.h"
26:
27: #include "memdebug.h" /* keep this as LAST include */
28:
29: void config_init(struct OperationConfig* config)
30: {
31: memset(config, 0, sizeof(struct OperationConfig));
32:
33: config->postfieldsize = -1;
34: config->use_httpget = FALSE;
35: config->create_dirs = FALSE;
36: config->maxredirs = DEFAULT_MAXREDIRS;
37: config->proto = CURLPROTO_ALL;
38: config->proto_present = FALSE;
39: config->proto_redir = CURLPROTO_ALL & /* All except FILE, SCP and SMB */
40: ~(CURLPROTO_FILE | CURLPROTO_SCP | CURLPROTO_SMB |
41: CURLPROTO_SMBS);
42: config->proto_redir_present = FALSE;
43: config->proto_default = NULL;
44: config->tcp_nodelay = TRUE; /* enabled by default */
45: config->happy_eyeballs_timeout_ms = CURL_HET_DEFAULT;
46: config->http09_allowed = FALSE;
47: }
48:
49: static void free_config_fields(struct OperationConfig *config)
50: {
51: struct getout *urlnode;
52:
53: Curl_safefree(config->random_file);
54: Curl_safefree(config->egd_file);
55: Curl_safefree(config->useragent);
56: Curl_safefree(config->altsvc);
57: Curl_safefree(config->cookie);
58: Curl_safefree(config->cookiejar);
59: Curl_safefree(config->cookiefile);
60:
61: Curl_safefree(config->postfields);
62: Curl_safefree(config->referer);
63:
64: Curl_safefree(config->headerfile);
65: Curl_safefree(config->ftpport);
66: Curl_safefree(config->iface);
67:
68: Curl_safefree(config->range);
69:
70: Curl_safefree(config->userpwd);
71: Curl_safefree(config->tls_username);
72: Curl_safefree(config->tls_password);
73: Curl_safefree(config->tls_authtype);
74: Curl_safefree(config->proxy_tls_username);
75: Curl_safefree(config->proxy_tls_password);
76: Curl_safefree(config->proxy_tls_authtype);
77: Curl_safefree(config->proxyuserpwd);
78: Curl_safefree(config->proxy);
79:
80: Curl_safefree(config->dns_ipv6_addr);
81: Curl_safefree(config->dns_ipv4_addr);
82: Curl_safefree(config->dns_interface);
83: Curl_safefree(config->dns_servers);
84:
85: Curl_safefree(config->noproxy);
86:
87: Curl_safefree(config->mail_from);
88: curl_slist_free_all(config->mail_rcpt);
89: Curl_safefree(config->mail_auth);
90:
91: Curl_safefree(config->netrc_file);
92:
93: urlnode = config->url_list;
94: while(urlnode) {
95: struct getout *next = urlnode->next;
96: Curl_safefree(urlnode->url);
97: Curl_safefree(urlnode->outfile);
98: Curl_safefree(urlnode->infile);
99: Curl_safefree(urlnode);
100: urlnode = next;
101: }
102: config->url_list = NULL;
103: config->url_last = NULL;
104: config->url_get = NULL;
105: config->url_out = NULL;
106:
107: Curl_safefree(config->doh_url);
108: Curl_safefree(config->cipher_list);
109: Curl_safefree(config->proxy_cipher_list);
110: Curl_safefree(config->cert);
111: Curl_safefree(config->proxy_cert);
112: Curl_safefree(config->cert_type);
113: Curl_safefree(config->proxy_cert_type);
114: Curl_safefree(config->cacert);
115: Curl_safefree(config->proxy_cacert);
116: Curl_safefree(config->capath);
117: Curl_safefree(config->proxy_capath);
118: Curl_safefree(config->crlfile);
119: Curl_safefree(config->pinnedpubkey);
120: Curl_safefree(config->proxy_pinnedpubkey);
121: Curl_safefree(config->proxy_crlfile);
122: Curl_safefree(config->key);
123: Curl_safefree(config->proxy_key);
124: Curl_safefree(config->key_type);
125: Curl_safefree(config->proxy_key_type);
126: Curl_safefree(config->key_passwd);
127: Curl_safefree(config->proxy_key_passwd);
128: Curl_safefree(config->pubkey);
129: Curl_safefree(config->hostpubmd5);
130: Curl_safefree(config->engine);
131: Curl_safefree(config->etag_save_file);
132: Curl_safefree(config->etag_compare_file);
133: Curl_safefree(config->request_target);
134: Curl_safefree(config->customrequest);
135: Curl_safefree(config->krblevel);
136:
137: Curl_safefree(config->oauth_bearer);
138: Curl_safefree(config->sasl_authzid);
139:
140: Curl_safefree(config->unix_socket_path);
141: Curl_safefree(config->writeout);
142: Curl_safefree(config->proto_default);
143:
144: curl_slist_free_all(config->quote);
145: curl_slist_free_all(config->postquote);
146: curl_slist_free_all(config->prequote);
147:
148: curl_slist_free_all(config->headers);
149: curl_slist_free_all(config->proxyheaders);
150:
151: curl_mime_free(config->mimepost);
152: config->mimepost = NULL;
153: tool_mime_free(config->mimeroot);
154: config->mimeroot = NULL;
155: config->mimecurrent = NULL;
156:
157: curl_slist_free_all(config->telnet_options);
158: curl_slist_free_all(config->resolve);
159: curl_slist_free_all(config->connect_to);
160:
161: Curl_safefree(config->preproxy);
162: Curl_safefree(config->proxy_service_name);
163: Curl_safefree(config->service_name);
164:
165: Curl_safefree(config->ftp_account);
166: Curl_safefree(config->ftp_alternative_to_user);
167: }
168:
169: void config_free(struct OperationConfig *config)
170: {
171: struct OperationConfig *last = config;
172:
173: /* Free each of the structures in reverse order */
174: while(last) {
175: struct OperationConfig *prev = last->prev;
176:
177: free_config_fields(last);
178: free(last);
179:
180: last = prev;
181: }
182: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>