FreeRDP
Loading...
Searching...
No Matches
Proxy Configuration

Data Structures

struct  proxyConfig
 

Functions

enum WINPR_C23_ENUM_TYPE (uint32_t)
 An enum representing the allowed proxy target certificate policy settings.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_server_config_dump (const char *file)
 pf_server_config_dump Dumps a default INI configuration file
 
FREERDP_API void pf_server_config_free (proxyConfig *config)
 pf_server_config_free Releases all resources associated with proxyConfig
 
FREERDP_API proxyConfig * server_config_load_ini (wIniFile *ini)
 server_config_load_ini Create a proxyConfig from a already loaded INI file.
 
FREERDP_API proxyConfig * pf_server_config_load_file (const char *path)
 pf_server_config_load_file Create a proxyConfig from a INI file found at path.
 
FREERDP_API proxyConfig * pf_server_config_load_buffer (const char *buffer)
 pf_server_config_load_buffer Create a proxyConfig from a memory string buffer in INI file format
 
FREERDP_API void pf_server_config_print (const proxyConfig *config)
 pf_server_config_print Print the configuration to stdout
 
WINPR_ATTR_NODISCARD FREERDP_API size_t pf_config_required_plugins_count (const proxyConfig *config)
 pf_config_required_plugins_count
 
WINPR_ATTR_NODISCARD FREERDP_API const char * pf_config_required_plugin (const proxyConfig *config, size_t index)
 pf_config_required_plugin
 
WINPR_ATTR_NODISCARD FREERDP_API size_t pf_config_modules_count (const proxyConfig *config)
 pf_config_modules_count
 
WINPR_ATTR_NODISCARD FREERDP_API const char ** pf_config_modules (const proxyConfig *config)
 pf_config_modules
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_config_clone (proxyConfig **dst, const proxyConfig *config)
 pf_config_clone Create a copy of the configuration
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_config_plugin (proxyPluginsManager *plugins_manager, void *userdata)
 pf_config_plugin Register a proxy plugin handling event filtering defined in the configuration.
 
WINPR_ATTR_NODISCARD FREERDP_API const char * pf_config_get (const proxyConfig *config, const char *section, const char *key)
 pf_config_get get a value for a section/key
 
WINPR_ATTR_NODISCARD FREERDP_API const char * pf_config_policy_to_str (FreeRDP_ProxyCertPolicy policy)
 Convert a FreeRDP_ProxyCertPolicy value to a string.
 
WINPR_ATTR_NODISCARD FREERDP_API FreeRDP_ProxyCertPolicy pf_config_policy_from_str (const char *val)
 Convert a string to a FreeRDP_ProxyCertPolicy value.
 

Variables

 FreeRDP_ProxyCertPolicy
 

Detailed Description

FreeRDP: A Remote Desktop Protocol Implementation FreeRDP Proxy Server

Copyright 2021-2023 Armin Novak armin.nosp@m..nov.nosp@m.ak@th.nosp@m.inca.nosp@m.st.co.nosp@m.m Copyright 2021-2023 Thincast Technologies GmbH

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Function Documentation

◆ pf_config_clone()

WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_config_clone ( proxyConfig **  dst,
const proxyConfig *  config 
)

pf_config_clone Create a copy of the configuration

Parameters
dstA pointer that receives the newly allocated copy
configThe source configuration to copy
Returns
TRUE for success, FALSE otherwise

Definition at line 1248 of file pf_config.c.

1249{
1250 proxyConfig* tmp = calloc(1, sizeof(proxyConfig));
1251
1252 WINPR_ASSERT(dst);
1253 WINPR_ASSERT(config);
1254
1255 if (!tmp)
1256 return FALSE;
1257
1258 *tmp = *config;
1259
1260 if (!pf_config_copy_string(&tmp->Host, config->Host))
1261 goto fail;
1262 if (!pf_config_copy_string(&tmp->SamFile, config->SamFile))
1263 goto fail;
1264 if (!pf_config_copy_string(&tmp->TargetHost, config->TargetHost))
1265 goto fail;
1266 if (!pf_config_copy_string(&tmp->TargetUser, config->TargetUser))
1267 goto fail;
1268 if (!pf_config_copy_string(&tmp->TargetDomain, config->TargetDomain))
1269 goto fail;
1270 if (!pf_config_copy_string(&tmp->TargetPassword, config->TargetPassword))
1271 goto fail;
1272 if (!pf_config_copy_string_n(&tmp->TargetSmartcardCert, config->TargetSmartcardCert,
1273 config->TargetSmartcardCertLength))
1274 goto fail;
1275 if (!pf_config_copy_string_n(&tmp->TargetSmartcardKey, config->TargetSmartcardKey,
1276 config->TargetSmartcardKeyLength))
1277 goto fail;
1278 if (!pf_config_copy_string_list(&tmp->Passthrough, &tmp->PassthroughCount, config->Passthrough,
1279 config->PassthroughCount))
1280 goto fail;
1281 if (!pf_config_copy_string_list(&tmp->Intercept, &tmp->InterceptCount, config->Intercept,
1282 config->InterceptCount))
1283 goto fail;
1284 if (!pf_config_copy_string_list(&tmp->Modules, &tmp->ModulesCount, config->Modules,
1285 config->ModulesCount))
1286 goto fail;
1287 if (!pf_config_copy_string_list(&tmp->RequiredPlugins, &tmp->RequiredPluginsCount,
1288 config->RequiredPlugins, config->RequiredPluginsCount))
1289 goto fail;
1290 if (!pf_config_copy_string(&tmp->CertificateFile, config->CertificateFile))
1291 goto fail;
1292 if (!pf_config_copy_string(&tmp->CertificateContent, config->CertificateContent))
1293 goto fail;
1294 if (!pf_config_copy_string_n(&tmp->CertificatePEM, config->CertificatePEM,
1295 config->CertificatePEMLength))
1296 goto fail;
1297 if (!pf_config_copy_string(&tmp->PrivateKeyFile, config->PrivateKeyFile))
1298 goto fail;
1299 if (!pf_config_copy_string(&tmp->PrivateKeyContent, config->PrivateKeyContent))
1300 goto fail;
1301 if (!pf_config_copy_string_n(&tmp->PrivateKeyPEM, config->PrivateKeyPEM,
1302 config->PrivateKeyPEMLength))
1303 goto fail;
1304 if (!pf_config_copy_string(&tmp->TargetCertPEM, config->TargetCertPEM))
1305 goto fail;
1306 if (!pf_config_copy_string(&tmp->TargetCertHash, config->TargetCertHash))
1307 goto fail;
1308 tmp->ini = IniFile_Clone(config->ini);
1309 if (!tmp->ini)
1310 goto fail;
1311
1312 *dst = tmp;
1313 return TRUE;
1314
1315fail:
1316 WINPR_PRAGMA_DIAG_PUSH
1317 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1319 WINPR_PRAGMA_DIAG_POP
1320 return FALSE;
1321}
void pf_server_config_free(proxyConfig *config)
pf_server_config_free Releases all resources associated with proxyConfig
Definition pf_config.c:1143

References pf_server_config_free().

Here is the call graph for this function:

◆ pf_config_get()

WINPR_ATTR_NODISCARD FREERDP_API const char * pf_config_get ( const proxyConfig *  config,
const char *  section,
const char *  key 
)

pf_config_get get a value for a section/key

Parameters
configA pointer to the proxyConfig. Must NOT be nullptr.
sectionThe name of the section the key is in, must not be nullptr
keyThe name of the key to look for. Must not be nullptr
Returns
A pointer to the value for section/key or nullptr if not found

Definition at line 1631 of file pf_config.c.

1632{
1633 WINPR_ASSERT(config);
1634 WINPR_ASSERT(config->ini);
1635 WINPR_ASSERT(section);
1636 WINPR_ASSERT(key);
1637
1638 return IniFile_GetKeyValueString(config->ini, section, key);
1639}

◆ pf_config_modules()

WINPR_ATTR_NODISCARD FREERDP_API const char ** pf_config_modules ( const proxyConfig *  config)

pf_config_modules

Parameters
configA pointer to the proxyConfig. Must NOT be nullptr.
Returns
An array of strings of size pf_config_modules_count with the module names.

Definition at line 1195 of file pf_config.c.

1196{
1197 union
1198 {
1199 char** ppc;
1200 const char** cppc;
1201 } cnv;
1202
1203 WINPR_ASSERT(config);
1204
1205 cnv.ppc = config->Modules;
1206 return cnv.cppc;
1207}

◆ pf_config_modules_count()

WINPR_ATTR_NODISCARD FREERDP_API size_t pf_config_modules_count ( const proxyConfig *  config)

pf_config_modules_count

Parameters
configA pointer to the proxyConfig. Must NOT be nullptr.
Returns
The number of proxy modules configured.

Definition at line 1189 of file pf_config.c.

1190{
1191 WINPR_ASSERT(config);
1192 return config->ModulesCount;
1193}

◆ pf_config_plugin()

WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_config_plugin ( proxyPluginsManager *  plugins_manager,
void *  userdata 
)

pf_config_plugin Register a proxy plugin handling event filtering defined in the configuration.

Parameters
plugins_managerThe plugin manager
userdataA proxyConfig* to use as reference
Returns
TRUE for success, FALSE for failure

Definition at line 1599 of file pf_config.c.

1600{
1601 struct config_plugin_data* custom = nullptr;
1602 proxyPlugin plugin = WINPR_C_ARRAY_INIT;
1603
1604 plugin.name = config_plugin_name;
1605 plugin.description = config_plugin_desc;
1606 plugin.PluginUnload = config_plugin_unload;
1607
1608 plugin.KeyboardEvent = config_plugin_keyboard_event;
1609 plugin.UnicodeEvent = config_plugin_unicode_event;
1610 plugin.MouseEvent = config_plugin_mouse_event;
1611 plugin.MouseExEvent = config_plugin_mouse_ex_event;
1612 plugin.ClientChannelData = config_plugin_client_channel_data;
1613 plugin.ServerChannelData = config_plugin_server_channel_data;
1614 plugin.ChannelCreate = config_plugin_channel_create;
1615 plugin.DynamicChannelCreate = config_plugin_dynamic_channel_create;
1616 plugin.userdata = userdata;
1617
1618 custom = calloc(1, sizeof(struct config_plugin_data));
1619 if (!custom)
1620 return FALSE;
1621
1622 custom->mgr = plugins_manager;
1623 custom->config = userdata;
1624
1625 plugin.custom = custom;
1626 plugin.userdata = userdata;
1627
1628 return plugins_manager->RegisterPlugin(plugins_manager, &plugin);
1629}

◆ pf_config_policy_from_str()

WINPR_ATTR_NODISCARD FREERDP_API FreeRDP_ProxyCertPolicy pf_config_policy_from_str ( const char *  val)

Convert a string to a FreeRDP_ProxyCertPolicy value.

Parameters
valThe string to try to convert
Returns
A FreeRDP_ProxyCertPolicy value matching val. FREERDP_PROXY_CERT_POLICY_DENY if not mappable.
Since
version 3.32.0

Definition at line 1659 of file pf_config.c.

1660{
1661 if (!val)
1662 return FREERDP_PROXY_CERT_POLICY_DENY;
1663 if (_stricmp(val, "allow") == 0)
1664 return FREERDP_PROXY_CERT_POLICY_ALLOW;
1665 if (_stricmp(val, "pinned") == 0)
1666 return FREERDP_PROXY_CERT_POLICY_PINNED;
1667 if (_stricmp(val, "verified-with-host-match") == 0)
1668 return FREERDP_PROXY_CERT_POLICY_VERIFIED_HOST_MATCH;
1669 if (_stricmp(val, "verified") == 0)
1670 return FREERDP_PROXY_CERT_POLICY_VERIFIED;
1671 return FREERDP_PROXY_CERT_POLICY_DENY;
1672}

◆ pf_config_policy_to_str()

WINPR_ATTR_NODISCARD FREERDP_API const char * pf_config_policy_to_str ( FreeRDP_ProxyCertPolicy  policy)

Convert a FreeRDP_ProxyCertPolicy value to a string.

Parameters
policyThe value to convert
Returns
A string representation of the enum value
Since
version 3.32.0

Definition at line 1641 of file pf_config.c.

1642{
1643 switch (policy)
1644 {
1645 case FREERDP_PROXY_CERT_POLICY_ALLOW:
1646 return "allow";
1647 case FREERDP_PROXY_CERT_POLICY_PINNED:
1648 return "pinned";
1649 case FREERDP_PROXY_CERT_POLICY_VERIFIED:
1650 return "verified";
1651 case FREERDP_PROXY_CERT_POLICY_VERIFIED_HOST_MATCH:
1652 return "verified-with-host-match";
1653 case FREERDP_PROXY_CERT_POLICY_DENY:
1654 default:
1655 return "deny";
1656 }
1657}

Referenced by pf_server_config_print().

Here is the caller graph for this function:

◆ pf_config_required_plugin()

WINPR_ATTR_NODISCARD FREERDP_API const char * pf_config_required_plugin ( const proxyConfig *  config,
size_t  index 
)

pf_config_required_plugin

Parameters
configA pointer to the proxyConfig. Must NOT be nullptr.
indexThe index of the plugin to return
Returns
The name of the plugin or nullptr.

Definition at line 1180 of file pf_config.c.

1181{
1182 WINPR_ASSERT(config);
1183 if (index >= config->RequiredPluginsCount)
1184 return nullptr;
1185
1186 return config->RequiredPlugins[index];
1187}

◆ pf_config_required_plugins_count()

WINPR_ATTR_NODISCARD FREERDP_API size_t pf_config_required_plugins_count ( const proxyConfig *  config)

pf_config_required_plugins_count

Parameters
configA pointer to the proxyConfig. Must NOT be nullptr.
Returns
The number of required plugins configured.

Definition at line 1174 of file pf_config.c.

1175{
1176 WINPR_ASSERT(config);
1177 return config->RequiredPluginsCount;
1178}

◆ pf_server_config_dump()

WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_server_config_dump ( const char *  file)

pf_server_config_dump Dumps a default INI configuration file

Parameters
fileThe file to write to. Existing files are truncated.
Returns
TRUE for success, FALSE if the file could not be written.

Definition at line 814 of file pf_config.c.

815{
816 BOOL rc = FALSE;
817 wIniFile* ini = IniFile_New();
818 if (!ini)
819 return FALSE;
820
821 /* Proxy server configuration */
822 if (IniFile_SetKeyValueString(ini, section_server, key_host, "0.0.0.0") < 0)
823 goto fail;
824 if (IniFile_SetKeyValueInt(ini, section_server, key_port, 3389) < 0)
825 goto fail;
826 if (IniFile_SetKeyValueString(ini, section_server, key_sam_file,
827 "optional/path/some/file.sam") < 0)
828 goto fail;
829
830 /* Target configuration */
831 if (IniFile_SetKeyValueString(ini, section_target, key_host, "somehost.example.com") < 0)
832 goto fail;
833 if (IniFile_SetKeyValueInt(ini, section_target, key_port, 3389) < 0)
834 goto fail;
835 if (IniFile_SetKeyValueString(ini, section_target, key_target_fixed, bool_str_true) < 0)
836 goto fail;
837 if (IniFile_SetKeyValueInt(ini, section_target, key_target_tls_seclevel, 1) < 0)
838 goto fail;
839 if (IniFile_SetKeyValueString(ini, section_target, key_target_user, "optionaltargetuser") < 0)
840 goto fail;
841 if (IniFile_SetKeyValueString(ini, section_target, key_target_domain, "optionaltargetdomain") <
842 0)
843 goto fail;
844 if (IniFile_SetKeyValueString(ini, section_target, key_target_pwd, "optionaltargetpassword") <
845 0)
846 goto fail;
847 if (IniFile_SetKeyValueString(ini, section_target, key_target_scard_auth, bool_str_false) < 0)
848 goto fail;
849 if (IniFile_SetKeyValueString(ini, section_target, key_target_scard_cert,
850 "optional/path/some/file.pem.crt") < 0)
851 goto fail;
852 if (IniFile_SetKeyValueString(ini, section_target, key_target_scard_pem_cert,
853 "<base64 encoded PEM>") < 0)
854 goto fail;
855 if (IniFile_SetKeyValueString(ini, section_target, key_target_scard_key,
856 "optional/path/some/file.pem.key") < 0)
857 goto fail;
858
859 if (IniFile_SetKeyValueString(ini, section_target, key_target_scard_pem_key,
860 "<base64 encoded PEM>") < 0)
861 goto fail;
862 if (IniFile_SetKeyValueString(ini, section_target, key_target_cert_policy,
863 "[deny|allow|pinned]") < 0)
864 goto fail;
865 if (IniFile_SetKeyValueString(ini, section_target, key_target_cert_pem,
866 "optional/path/some/file.pem.crt") < 0)
867 goto fail;
868 if (IniFile_SetKeyValueString(ini, section_target, key_target_cert_pem_content,
869 "<base64 encoded PEM>") < 0)
870 goto fail;
871 if (IniFile_SetKeyValueString(ini, section_target, key_target_cert_hash,
872 "<hash type>:<hash hex string>") < 0)
873 goto fail;
874 if (IniFile_SetKeyValueString(ini, section_target, key_target_cert_store_path,
875 "optional/path/to/cert/store") < 0)
876 goto fail;
877 /* Codec configuration */
878 if (IniFile_SetKeyValueString(ini, section_codecs, key_codecs_rfx, bool_str_true) < 0)
879 goto fail;
880 if (IniFile_SetKeyValueString(ini, section_codecs, key_codecs_nsc, bool_str_true) < 0)
881 goto fail;
882
883 /* Channel configuration */
884 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_gfx, bool_str_true) < 0)
885 goto fail;
886 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_disp, bool_str_true) < 0)
887 goto fail;
888 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_clip, bool_str_true) < 0)
889 goto fail;
890 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_mic, bool_str_true) < 0)
891 goto fail;
892 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_sound, bool_str_true) < 0)
893 goto fail;
894 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_rdpdr, bool_str_true) < 0)
895 goto fail;
896 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_video, bool_str_true) < 0)
897 goto fail;
898 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_camera, bool_str_true) < 0)
899 goto fail;
900 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_rails, bool_str_false) < 0)
901 goto fail;
902
903 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_blacklist, bool_str_true) < 0)
904 goto fail;
905 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_pass, "") < 0)
906 goto fail;
907 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_intercept, "") < 0)
908 goto fail;
909
910 /* Input configuration */
911 if (IniFile_SetKeyValueString(ini, section_input, key_input_kbd, bool_str_true) < 0)
912 goto fail;
913 if (IniFile_SetKeyValueString(ini, section_input, key_input_mouse, bool_str_true) < 0)
914 goto fail;
915 if (IniFile_SetKeyValueString(ini, section_input, key_input_multitouch, bool_str_true) < 0)
916 goto fail;
917
918 /* Security settings */
919 if (IniFile_SetKeyValueString(ini, section_security, key_security_server_tls, bool_str_true) <
920 0)
921 goto fail;
922 if (IniFile_SetKeyValueString(ini, section_security, key_security_server_nla, bool_str_false) <
923 0)
924 goto fail;
925 if (IniFile_SetKeyValueString(ini, section_security, key_security_server_ext, bool_str_false) <
926 0)
927 goto fail;
928 if (IniFile_SetKeyValueString(ini, section_security, key_security_server_rdp, bool_str_true) <
929 0)
930 goto fail;
931
932 if (IniFile_SetKeyValueString(ini, section_security, key_security_client_tls, bool_str_true) <
933 0)
934 goto fail;
935 if (IniFile_SetKeyValueString(ini, section_security, key_security_client_nla, bool_str_true) <
936 0)
937 goto fail;
938 if (IniFile_SetKeyValueString(ini, section_security, key_security_client_ext, bool_str_true) <
939 0)
940 goto fail;
941 if (IniFile_SetKeyValueString(ini, section_security, key_security_client_rdp, bool_str_true) <
942 0)
943 goto fail;
944 if (IniFile_SetKeyValueString(ini, section_security, key_security_client_fallback,
945 bool_str_true) < 0)
946 goto fail;
947
948 /* Module configuration */
949 if (IniFile_SetKeyValueString(ini, section_plugins, key_plugins_modules,
950 "module1,module2,...") < 0)
951 goto fail;
952 if (IniFile_SetKeyValueString(ini, section_plugins, key_plugins_required,
953 "module1,module2,...") < 0)
954 goto fail;
955
956 /* Certificate configuration */
957 if (IniFile_SetKeyValueString(ini, section_certificates, key_cert_file,
958 "<absolute path to some certificate file> OR") < 0)
959 goto fail;
960 if (IniFile_SetKeyValueString(ini, section_certificates, key_cert_content,
961 "<base64 encoded PEM>") < 0)
962 goto fail;
963
964 if (IniFile_SetKeyValueString(ini, section_certificates, key_private_key_file,
965 "<absolute path to some private key file> OR") < 0)
966 goto fail;
967 if (IniFile_SetKeyValueString(ini, section_certificates, key_private_key_content,
968 "<base64 encoded PEM>") < 0)
969 goto fail;
970
971 if ((strcmp("stdout", file) == 0) || (strcmp("stderr", file) == 0))
972 {
973 char* buffer = IniFile_WriteBuffer(ini);
974 if (!buffer)
975 goto fail;
976 FILE* fp = stderr;
977 if (strcmp("stdout", file) == 0)
978 fp = stdout;
979 (void)fprintf(fp, "%s", buffer);
980 winpr_zfree(buffer);
981 }
982 else
983 {
984 /* store configuration */
985 if (IniFile_WriteFile(ini, file) < 0)
986 goto fail;
987 }
988
989 rc = TRUE;
990
991fail:
992 IniFile_Free(ini);
993 return rc;
994}

◆ pf_server_config_free()

FREERDP_API void pf_server_config_free ( proxyConfig *  config)

pf_server_config_free Releases all resources associated with proxyConfig

Parameters
configA pointer to the proxyConfig to clean up. Might be nullptr.

Definition at line 1143 of file pf_config.c.

1144{
1145 if (config == nullptr)
1146 return;
1147
1148 winpr_zfree(config->Host);
1149 winpr_zfree(config->SamFile);
1150 winpr_zfree(config->TargetHost);
1151 winpr_zfree(config->TargetUser);
1152 winpr_zfree(config->TargetDomain);
1153 winpr_zfree(config->TargetPassword);
1154 winpr_znfree(config->TargetSmartcardCert, config->TargetSmartcardCertLength);
1155 winpr_znfree(config->TargetSmartcardKey, config->TargetSmartcardKeyLength);
1156 winpr_zfree(config->TargetCertHash);
1157 winpr_znfree(config->TargetCertPEM, config->TargetCertPEMLength);
1158
1159 CommandLineParserFree(config->Passthrough);
1160 CommandLineParserFree(config->Intercept);
1161 CommandLineParserFree(config->Modules);
1162 CommandLineParserFree(config->RequiredPlugins);
1163
1164 winpr_zfree(config->CertificateFile);
1165 winpr_zfree(config->CertificateContent);
1166 winpr_znfree(config->CertificatePEM, config->CertificatePEMLength);
1167 winpr_zfree(config->PrivateKeyFile);
1168 winpr_zfree(config->PrivateKeyContent);
1169 winpr_znfree(config->PrivateKeyPEM, config->PrivateKeyPEMLength);
1170 IniFile_Free(config->ini);
1171 free(config);
1172}

Referenced by pf_config_clone(), and server_config_load_ini().

Here is the caller graph for this function:

◆ pf_server_config_load_buffer()

FREERDP_API proxyConfig * pf_server_config_load_buffer ( const char *  buffer)

pf_server_config_load_buffer Create a proxyConfig from a memory string buffer in INI file format

Parameters
bufferA pointer to the '\0' terminated INI string.
Returns
A proxyConfig or nullptr in case of failure.

Definition at line 996 of file pf_config.c.

997{
998 proxyConfig* config = nullptr;
999 wIniFile* ini = nullptr;
1000
1001 ini = IniFile_New();
1002
1003 if (!ini)
1004 {
1005 WLog_ERR(TAG, "IniFile_New() failed!");
1006 return nullptr;
1007 }
1008
1009 if (IniFile_ReadBuffer(ini, buffer) < 0)
1010 {
1011 WLog_ERR(TAG, "failed to parse ini: '%s'", buffer);
1012 goto out;
1013 }
1014
1015 config = server_config_load_ini(ini);
1016out:
1017 IniFile_Free(ini);
1018 return config;
1019}
proxyConfig * server_config_load_ini(wIniFile *ini)
server_config_load_ini Create a proxyConfig from a already loaded INI file.
Definition pf_config.c:764

References server_config_load_ini().

Here is the call graph for this function:

◆ pf_server_config_load_file()

FREERDP_API proxyConfig * pf_server_config_load_file ( const char *  path)

pf_server_config_load_file Create a proxyConfig from a INI file found at path.

Parameters
pathThe path of the INI file
Returns
A proxyConfig or nullptr in case of failure.

Definition at line 1021 of file pf_config.c.

1022{
1023 proxyConfig* config = nullptr;
1024 wIniFile* ini = IniFile_New();
1025
1026 if (!ini)
1027 {
1028 WLog_ERR(TAG, "IniFile_New() failed!");
1029 return nullptr;
1030 }
1031
1032 if (IniFile_ReadFile(ini, path) < 0)
1033 {
1034 WLog_ERR(TAG, "failed to parse ini file: '%s'", path);
1035 goto out;
1036 }
1037
1038 config = server_config_load_ini(ini);
1039out:
1040 IniFile_Free(ini);
1041 return config;
1042}

References server_config_load_ini().

Here is the call graph for this function:

◆ pf_server_config_print()

FREERDP_API void pf_server_config_print ( const proxyConfig *  config)

pf_server_config_print Print the configuration to stdout

Parameters
configA pointer to the configuration to print. Must NOT be nullptr.

Definition at line 1051 of file pf_config.c.

1052{
1053 WINPR_ASSERT(config);
1054 WLog_INFO(TAG, "Proxy configuration:");
1055
1056 CONFIG_PRINT_SECTION(section_server);
1057 CONFIG_PRINT_STR(config, Host);
1058 CONFIG_PRINT_STR(config, SamFile);
1059 CONFIG_PRINT_UINT16(config, Port);
1060
1061 if (config->FixedTarget)
1062 {
1063 CONFIG_PRINT_SECTION(section_target);
1064 CONFIG_PRINT_STR(config, TargetHost);
1065 CONFIG_PRINT_UINT16(config, TargetPort);
1066 CONFIG_PRINT_UINT32(config, TargetTlsSecLevel);
1067
1068 CONFIG_PRINT_STR(config, TargetUser);
1069 CONFIG_PRINT_STR(config, TargetDomain);
1070 CONFIG_PRINT_SECRET_STR(config, TargetPassword);
1071
1072 CONFIG_PRINT_BOOL(config, TargetSmartcardAuth);
1073 CONFIG_PRINT_SECRET_STR(config, TargetSmartcardCert);
1074 CONFIG_PRINT_SECRET_STR(config, TargetSmartcardKey);
1075
1076 WLog_INFO(TAG, "\t\t%s%s: %s", section_target, key_target_cert_policy,
1077 pf_config_policy_to_str(config->TargetCertPolicy));
1078 CONFIG_PRINT_SECRET_STR(config, TargetCertPEM);
1079 CONFIG_PRINT_SECRET_STR(config, TargetCertHash);
1080 }
1081
1082 CONFIG_PRINT_SECTION(section_input);
1083 CONFIG_PRINT_BOOL(config, Keyboard);
1084 CONFIG_PRINT_BOOL(config, Mouse);
1085 CONFIG_PRINT_BOOL(config, Multitouch);
1086
1087 CONFIG_PRINT_SECTION(section_security);
1088 CONFIG_PRINT_BOOL(config, ServerNlaSecurity);
1089 CONFIG_PRINT_BOOL(config, ServerExtSecurity);
1090 CONFIG_PRINT_BOOL(config, ServerTlsSecurity);
1091 CONFIG_PRINT_BOOL(config, ServerRdpSecurity);
1092 CONFIG_PRINT_BOOL(config, ClientNlaSecurity);
1093 CONFIG_PRINT_BOOL(config, ClientExtSecurity);
1094 CONFIG_PRINT_BOOL(config, ClientTlsSecurity);
1095 CONFIG_PRINT_BOOL(config, ClientRdpSecurity);
1096 CONFIG_PRINT_BOOL(config, ClientAllowFallbackToTls);
1097
1098 CONFIG_PRINT_SECTION(section_codecs);
1099 CONFIG_PRINT_BOOL(config, RFX);
1100 CONFIG_PRINT_BOOL(config, NSC);
1101
1102 CONFIG_PRINT_SECTION(section_channels);
1103 CONFIG_PRINT_BOOL(config, GFX);
1104 CONFIG_PRINT_BOOL(config, DisplayControl);
1105 CONFIG_PRINT_BOOL(config, Clipboard);
1106 CONFIG_PRINT_BOOL(config, AudioOutput);
1107 CONFIG_PRINT_BOOL(config, AudioInput);
1108 CONFIG_PRINT_BOOL(config, DeviceRedirection);
1109 CONFIG_PRINT_BOOL(config, VideoRedirection);
1110 CONFIG_PRINT_BOOL(config, CameraRedirection);
1111 CONFIG_PRINT_BOOL(config, RemoteApp);
1112 CONFIG_PRINT_BOOL(config, PassthroughIsBlacklist);
1113
1114 if (config->PassthroughCount)
1115 {
1116 WLog_INFO(TAG, "\tStatic Channels Proxy:");
1117 pf_server_config_print_list(config->Passthrough, config->PassthroughCount);
1118 }
1119
1120 if (config->InterceptCount)
1121 {
1122 WLog_INFO(TAG, "\tStatic Channels Proxy-Intercept:");
1123 pf_server_config_print_list(config->Intercept, config->InterceptCount);
1124 }
1125
1126 /* modules */
1127 CONFIG_PRINT_SECTION_KEY(section_plugins, key_plugins_modules);
1128 for (size_t x = 0; x < config->ModulesCount; x++)
1129 CONFIG_PRINT_STR(config, Modules[x]);
1130
1131 /* Required plugins */
1132 CONFIG_PRINT_SECTION_KEY(section_plugins, key_plugins_required);
1133 for (size_t x = 0; x < config->RequiredPluginsCount; x++)
1134 CONFIG_PRINT_STR(config, RequiredPlugins[x]);
1135
1136 CONFIG_PRINT_SECTION(section_certificates);
1137 CONFIG_PRINT_STR(config, CertificateFile);
1138 CONFIG_PRINT_SECRET_STR(config, CertificateContent);
1139 CONFIG_PRINT_STR(config, PrivateKeyFile);
1140 CONFIG_PRINT_SECRET_STR(config, PrivateKeyContent);
1141}
const char * pf_config_policy_to_str(FreeRDP_ProxyCertPolicy policy)
Convert a FreeRDP_ProxyCertPolicy value to a string.
Definition pf_config.c:1641

References pf_config_policy_to_str().

Here is the call graph for this function:

◆ server_config_load_ini()

FREERDP_API proxyConfig * server_config_load_ini ( wIniFile *  ini)

server_config_load_ini Create a proxyConfig from a already loaded INI file.

Parameters
iniA pointer to the parsed INI file. Must NOT be nullptr.
Returns
A proxyConfig or nullptr in case of failure.

Definition at line 764 of file pf_config.c.

765{
766 proxyConfig* config = nullptr;
767
768 WINPR_ASSERT(ini);
769
770 config = calloc(1, sizeof(proxyConfig));
771 if (config)
772 {
773 /* Set default values != 0 */
774 config->TargetTlsSecLevel = 1;
775
776 /* Load from ini */
777 if (!pf_config_load_server(ini, config))
778 goto out;
779
780 if (!pf_config_load_target(ini, config))
781 goto out;
782
783 if (!pf_config_load_codecs(ini, config))
784 goto out;
785
786 if (!pf_config_load_channels(ini, config))
787 goto out;
788
789 if (!pf_config_load_input(ini, config))
790 goto out;
791
792 if (!pf_config_load_security(ini, config))
793 goto out;
794
795 if (!pf_config_load_modules(ini, config))
796 goto out;
797
798 if (!pf_config_load_certificates(ini, config))
799 goto out;
800 config->ini = IniFile_Clone(ini);
801 if (!config->ini)
802 goto out;
803 }
804 return config;
805out:
806 WINPR_PRAGMA_DIAG_PUSH
807 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
808 pf_server_config_free(config);
809 WINPR_PRAGMA_DIAG_POP
810
811 return nullptr;
812}

References pf_server_config_free().

Referenced by pf_server_config_load_buffer(), and pf_server_config_load_file().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WINPR_C23_ENUM_TYPE()

enum WINPR_C23_ENUM_TYPE ( uint32_t  )

An enum representing the allowed proxy target certificate policy settings.

Since
version 3.32.0

Definition at line 1 of file proxy_config.h.

44 {
45 FREERDP_PROXY_CERT_POLICY_DENY = 0,
46 FREERDP_PROXY_CERT_POLICY_ALLOW,
47 FREERDP_PROXY_CERT_POLICY_PINNED,
48 FREERDP_PROXY_CERT_POLICY_VERIFIED,
49 FREERDP_PROXY_CERT_POLICY_VERIFIED_HOST_MATCH,
50 } FreeRDP_ProxyCertPolicy;

Variable Documentation

◆ FreeRDP_ProxyCertPolicy

FreeRDP_ProxyCertPolicy

Definition at line 50 of file proxy_config.h.