| lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | /*************************************************************************** | 
|  | 2 | *                                  _   _ ____  _ | 
|  | 3 | *  Project                     ___| | | |  _ \| | | 
|  | 4 | *                             / __| | | | |_) | | | 
|  | 5 | *                            | (__| |_| |  _ <| |___ | 
|  | 6 | *                             \___|\___/|_| \_\_____| | 
|  | 7 | * | 
|  | 8 | * Copyright (C) 1998 - 2016, 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; /* FIXME: better to read from library */ | 
|  | 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 | } | 
|  | 46 |  | 
|  | 47 | static void free_config_fields(struct OperationConfig *config) | 
|  | 48 | { | 
|  | 49 | struct getout *urlnode; | 
|  | 50 |  | 
|  | 51 | Curl_safefree(config->random_file); | 
|  | 52 | Curl_safefree(config->egd_file); | 
|  | 53 | Curl_safefree(config->useragent); | 
|  | 54 | Curl_safefree(config->cookie); | 
|  | 55 | Curl_safefree(config->cookiejar); | 
|  | 56 | Curl_safefree(config->cookiefile); | 
|  | 57 |  | 
|  | 58 | Curl_safefree(config->postfields); | 
|  | 59 | Curl_safefree(config->referer); | 
|  | 60 |  | 
|  | 61 | Curl_safefree(config->headerfile); | 
|  | 62 | Curl_safefree(config->ftpport); | 
|  | 63 | Curl_safefree(config->iface); | 
|  | 64 |  | 
|  | 65 | Curl_safefree(config->range); | 
|  | 66 |  | 
|  | 67 | Curl_safefree(config->userpwd); | 
|  | 68 | Curl_safefree(config->tls_username); | 
|  | 69 | Curl_safefree(config->tls_password); | 
|  | 70 | Curl_safefree(config->tls_authtype); | 
|  | 71 | Curl_safefree(config->proxy_tls_username); | 
|  | 72 | Curl_safefree(config->proxy_tls_password); | 
|  | 73 | Curl_safefree(config->proxy_tls_authtype); | 
|  | 74 | Curl_safefree(config->proxyuserpwd); | 
|  | 75 | Curl_safefree(config->proxy); | 
|  | 76 |  | 
|  | 77 | Curl_safefree(config->dns_ipv6_addr); | 
|  | 78 | Curl_safefree(config->dns_ipv4_addr); | 
|  | 79 | Curl_safefree(config->dns_interface); | 
|  | 80 | Curl_safefree(config->dns_servers); | 
|  | 81 |  | 
|  | 82 | Curl_safefree(config->noproxy); | 
|  | 83 |  | 
|  | 84 | Curl_safefree(config->mail_from); | 
|  | 85 | curl_slist_free_all(config->mail_rcpt); | 
|  | 86 | Curl_safefree(config->mail_auth); | 
|  | 87 |  | 
|  | 88 | Curl_safefree(config->netrc_file); | 
|  | 89 |  | 
|  | 90 | urlnode = config->url_list; | 
|  | 91 | while(urlnode) { | 
|  | 92 | struct getout *next = urlnode->next; | 
|  | 93 | Curl_safefree(urlnode->url); | 
|  | 94 | Curl_safefree(urlnode->outfile); | 
|  | 95 | Curl_safefree(urlnode->infile); | 
|  | 96 | Curl_safefree(urlnode); | 
|  | 97 | urlnode = next; | 
|  | 98 | } | 
|  | 99 | config->url_list = NULL; | 
|  | 100 | config->url_last = NULL; | 
|  | 101 | config->url_get = NULL; | 
|  | 102 | config->url_out = NULL; | 
|  | 103 |  | 
|  | 104 | Curl_safefree(config->cipher_list); | 
|  | 105 | Curl_safefree(config->proxy_cipher_list); | 
|  | 106 | Curl_safefree(config->cert); | 
|  | 107 | Curl_safefree(config->proxy_cert); | 
|  | 108 | Curl_safefree(config->cert_type); | 
|  | 109 | Curl_safefree(config->proxy_cert_type); | 
|  | 110 | Curl_safefree(config->cacert); | 
|  | 111 | Curl_safefree(config->proxy_cacert); | 
|  | 112 | Curl_safefree(config->capath); | 
|  | 113 | Curl_safefree(config->proxy_capath); | 
|  | 114 | Curl_safefree(config->crlfile); | 
|  | 115 | Curl_safefree(config->pinnedpubkey); | 
|  | 116 | Curl_safefree(config->proxy_crlfile); | 
|  | 117 | Curl_safefree(config->key); | 
|  | 118 | Curl_safefree(config->proxy_key); | 
|  | 119 | Curl_safefree(config->key_type); | 
|  | 120 | Curl_safefree(config->proxy_key_type); | 
|  | 121 | Curl_safefree(config->key_passwd); | 
|  | 122 | Curl_safefree(config->proxy_key_passwd); | 
|  | 123 | Curl_safefree(config->pubkey); | 
|  | 124 | Curl_safefree(config->hostpubmd5); | 
|  | 125 | Curl_safefree(config->engine); | 
|  | 126 |  | 
|  | 127 | Curl_safefree(config->customrequest); | 
|  | 128 | Curl_safefree(config->krblevel); | 
|  | 129 |  | 
|  | 130 | Curl_safefree(config->oauth_bearer); | 
|  | 131 |  | 
|  | 132 | Curl_safefree(config->unix_socket_path); | 
|  | 133 | Curl_safefree(config->writeout); | 
|  | 134 | Curl_safefree(config->proto_default); | 
|  | 135 |  | 
|  | 136 | curl_slist_free_all(config->quote); | 
|  | 137 | curl_slist_free_all(config->postquote); | 
|  | 138 | curl_slist_free_all(config->prequote); | 
|  | 139 |  | 
|  | 140 | curl_slist_free_all(config->headers); | 
|  | 141 | curl_slist_free_all(config->proxyheaders); | 
|  | 142 |  | 
|  | 143 | if(config->httppost) { | 
|  | 144 | curl_formfree(config->httppost); | 
|  | 145 | config->httppost = NULL; | 
|  | 146 | } | 
|  | 147 | config->last_post = NULL; | 
|  | 148 |  | 
|  | 149 | curl_slist_free_all(config->telnet_options); | 
|  | 150 | curl_slist_free_all(config->resolve); | 
|  | 151 | curl_slist_free_all(config->connect_to); | 
|  | 152 |  | 
|  | 153 | Curl_safefree(config->preproxy); | 
|  | 154 | Curl_safefree(config->proxy_service_name); | 
|  | 155 | Curl_safefree(config->service_name); | 
|  | 156 |  | 
|  | 157 | Curl_safefree(config->ftp_account); | 
|  | 158 | Curl_safefree(config->ftp_alternative_to_user); | 
|  | 159 | } | 
|  | 160 |  | 
|  | 161 | void config_free(struct OperationConfig *config) | 
|  | 162 | { | 
|  | 163 | struct OperationConfig *last = config; | 
|  | 164 |  | 
|  | 165 | /* Free each of the structures in reverse order */ | 
|  | 166 | while(last) { | 
|  | 167 | struct OperationConfig *prev = last->prev; | 
|  | 168 |  | 
|  | 169 | free_config_fields(last); | 
|  | 170 | free(last); | 
|  | 171 |  | 
|  | 172 | last = prev; | 
|  | 173 | } | 
|  | 174 | } |