Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/external/curl/src/tool_cfgable.c
2065 views
1
/***************************************************************************
2
* _ _ ____ _
3
* Project ___| | | | _ \| |
4
* / __| | | | |_) | |
5
* | (__| |_| | _ <| |___
6
* \___|\___/|_| \_\_____|
7
*
8
* Copyright (C) Daniel Stenberg, <[email protected]>, 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.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
* SPDX-License-Identifier: curl
22
*
23
***************************************************************************/
24
#include "tool_setup.h"
25
26
#include "tool_cfgable.h"
27
#include "tool_formparse.h"
28
#include "tool_paramhlp.h"
29
#include "tool_main.h"
30
#include <curlx.h>
31
#include <memdebug.h> /* keep this as LAST include */
32
33
void config_init(struct OperationConfig *config)
34
{
35
memset(config, 0, sizeof(struct OperationConfig));
36
37
config->use_httpget = FALSE;
38
config->create_dirs = FALSE;
39
config->maxredirs = DEFAULT_MAXREDIRS;
40
config->proto_present = FALSE;
41
config->proto_redir_present = FALSE;
42
config->proto_default = NULL;
43
config->tcp_nodelay = TRUE; /* enabled by default */
44
config->happy_eyeballs_timeout_ms = CURL_HET_DEFAULT;
45
config->http09_allowed = FALSE;
46
config->ftp_skip_ip = TRUE;
47
config->file_clobber_mode = CLOBBER_DEFAULT;
48
config->upload_flags = CURLULFLAG_SEEN;
49
curlx_dyn_init(&config->postdata, MAX_FILE2MEMORY);
50
}
51
52
static void free_config_fields(struct OperationConfig *config)
53
{
54
struct getout *urlnode;
55
56
tool_safefree(config->useragent);
57
tool_safefree(config->altsvc);
58
tool_safefree(config->hsts);
59
tool_safefree(config->haproxy_clientip);
60
curl_slist_free_all(config->cookies);
61
tool_safefree(config->cookiejar);
62
curl_slist_free_all(config->cookiefiles);
63
64
curlx_dyn_free(&config->postdata);
65
tool_safefree(config->query);
66
tool_safefree(config->referer);
67
68
tool_safefree(config->headerfile);
69
tool_safefree(config->ftpport);
70
tool_safefree(config->iface);
71
72
tool_safefree(config->range);
73
74
tool_safefree(config->userpwd);
75
tool_safefree(config->tls_username);
76
tool_safefree(config->tls_password);
77
tool_safefree(config->tls_authtype);
78
tool_safefree(config->proxy_tls_username);
79
tool_safefree(config->proxy_tls_password);
80
tool_safefree(config->proxy_tls_authtype);
81
tool_safefree(config->proxyuserpwd);
82
tool_safefree(config->proxy);
83
84
tool_safefree(config->dns_ipv6_addr);
85
tool_safefree(config->dns_ipv4_addr);
86
tool_safefree(config->dns_interface);
87
tool_safefree(config->dns_servers);
88
89
tool_safefree(config->noproxy);
90
91
tool_safefree(config->mail_from);
92
curl_slist_free_all(config->mail_rcpt);
93
tool_safefree(config->mail_auth);
94
95
tool_safefree(config->netrc_file);
96
tool_safefree(config->output_dir);
97
tool_safefree(config->proto_str);
98
tool_safefree(config->proto_redir_str);
99
100
urlnode = config->url_list;
101
while(urlnode) {
102
struct getout *next = urlnode->next;
103
tool_safefree(urlnode->url);
104
tool_safefree(urlnode->outfile);
105
tool_safefree(urlnode->infile);
106
tool_safefree(urlnode);
107
urlnode = next;
108
}
109
config->url_list = NULL;
110
config->url_last = NULL;
111
config->url_get = NULL;
112
config->url_out = NULL;
113
114
#ifndef CURL_DISABLE_IPFS
115
tool_safefree(config->ipfs_gateway);
116
#endif /* !CURL_DISABLE_IPFS */
117
tool_safefree(config->doh_url);
118
tool_safefree(config->cipher_list);
119
tool_safefree(config->proxy_cipher_list);
120
tool_safefree(config->cipher13_list);
121
tool_safefree(config->proxy_cipher13_list);
122
tool_safefree(config->cert);
123
tool_safefree(config->proxy_cert);
124
tool_safefree(config->cert_type);
125
tool_safefree(config->proxy_cert_type);
126
tool_safefree(config->cacert);
127
tool_safefree(config->login_options);
128
tool_safefree(config->proxy_cacert);
129
tool_safefree(config->capath);
130
tool_safefree(config->proxy_capath);
131
tool_safefree(config->crlfile);
132
tool_safefree(config->pinnedpubkey);
133
tool_safefree(config->proxy_pinnedpubkey);
134
tool_safefree(config->proxy_crlfile);
135
tool_safefree(config->key);
136
tool_safefree(config->proxy_key);
137
tool_safefree(config->key_type);
138
tool_safefree(config->proxy_key_type);
139
tool_safefree(config->key_passwd);
140
tool_safefree(config->proxy_key_passwd);
141
tool_safefree(config->pubkey);
142
tool_safefree(config->hostpubmd5);
143
tool_safefree(config->hostpubsha256);
144
tool_safefree(config->engine);
145
tool_safefree(config->etag_save_file);
146
tool_safefree(config->etag_compare_file);
147
tool_safefree(config->ssl_ec_curves);
148
tool_safefree(config->request_target);
149
tool_safefree(config->customrequest);
150
tool_safefree(config->krblevel);
151
tool_safefree(config->oauth_bearer);
152
tool_safefree(config->sasl_authzid);
153
tool_safefree(config->unix_socket_path);
154
tool_safefree(config->writeout);
155
tool_safefree(config->proto_default);
156
157
curl_slist_free_all(config->quote);
158
curl_slist_free_all(config->postquote);
159
curl_slist_free_all(config->prequote);
160
161
curl_slist_free_all(config->headers);
162
curl_slist_free_all(config->proxyheaders);
163
164
curl_mime_free(config->mimepost);
165
config->mimepost = NULL;
166
tool_mime_free(config->mimeroot);
167
config->mimeroot = NULL;
168
config->mimecurrent = NULL;
169
170
curl_slist_free_all(config->telnet_options);
171
curl_slist_free_all(config->resolve);
172
curl_slist_free_all(config->connect_to);
173
174
tool_safefree(config->preproxy);
175
tool_safefree(config->proxy_service_name);
176
tool_safefree(config->service_name);
177
tool_safefree(config->ftp_account);
178
tool_safefree(config->ftp_alternative_to_user);
179
tool_safefree(config->aws_sigv4);
180
tool_safefree(config->proto_str);
181
tool_safefree(config->proto_redir_str);
182
tool_safefree(config->ech);
183
tool_safefree(config->ech_config);
184
tool_safefree(config->ech_public);
185
}
186
187
void config_free(struct OperationConfig *config)
188
{
189
struct OperationConfig *last = config;
190
191
/* Free each of the structures in reverse order */
192
while(last) {
193
struct OperationConfig *prev = last->prev;
194
195
free_config_fields(last);
196
free(last);
197
198
last = prev;
199
}
200
}
201
202