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 1228 of file pf_config.c.

1229{
1230 proxyConfig* tmp = calloc(1, sizeof(proxyConfig));
1231
1232 WINPR_ASSERT(dst);
1233 WINPR_ASSERT(config);
1234
1235 if (!tmp)
1236 return FALSE;
1237
1238 *tmp = *config;
1239
1240 if (!pf_config_copy_string(&tmp->Host, config->Host))
1241 goto fail;
1242 if (!pf_config_copy_string(&tmp->SamFile, config->SamFile))
1243 goto fail;
1244 if (!pf_config_copy_string(&tmp->TargetHost, config->TargetHost))
1245 goto fail;
1246 if (!pf_config_copy_string(&tmp->TargetUser, config->TargetUser))
1247 goto fail;
1248 if (!pf_config_copy_string(&tmp->TargetDomain, config->TargetDomain))
1249 goto fail;
1250 if (!pf_config_copy_string(&tmp->TargetPassword, config->TargetPassword))
1251 goto fail;
1252 if (!pf_config_copy_string_n(&tmp->TargetSmartcardCert, config->TargetSmartcardCert,
1253 config->TargetSmartcardCertLength))
1254 goto fail;
1255 if (!pf_config_copy_string_n(&tmp->TargetSmartcardKey, config->TargetSmartcardKey,
1256 config->TargetSmartcardKeyLength))
1257 goto fail;
1258 if (!pf_config_copy_string_list(&tmp->Passthrough, &tmp->PassthroughCount, config->Passthrough,
1259 config->PassthroughCount))
1260 goto fail;
1261 if (!pf_config_copy_string_list(&tmp->Intercept, &tmp->InterceptCount, config->Intercept,
1262 config->InterceptCount))
1263 goto fail;
1264 if (!pf_config_copy_string_list(&tmp->Modules, &tmp->ModulesCount, config->Modules,
1265 config->ModulesCount))
1266 goto fail;
1267 if (!pf_config_copy_string_list(&tmp->RequiredPlugins, &tmp->RequiredPluginsCount,
1268 config->RequiredPlugins, config->RequiredPluginsCount))
1269 goto fail;
1270 if (!pf_config_copy_string(&tmp->CertificateFile, config->CertificateFile))
1271 goto fail;
1272 if (!pf_config_copy_string(&tmp->CertificateContent, config->CertificateContent))
1273 goto fail;
1274 if (!pf_config_copy_string_n(&tmp->CertificatePEM, config->CertificatePEM,
1275 config->CertificatePEMLength))
1276 goto fail;
1277 if (!pf_config_copy_string(&tmp->PrivateKeyFile, config->PrivateKeyFile))
1278 goto fail;
1279 if (!pf_config_copy_string(&tmp->PrivateKeyContent, config->PrivateKeyContent))
1280 goto fail;
1281 if (!pf_config_copy_string_n(&tmp->PrivateKeyPEM, config->PrivateKeyPEM,
1282 config->PrivateKeyPEMLength))
1283 goto fail;
1284 if (!pf_config_copy_string(&tmp->TargetCertPEM, config->TargetCertPEM))
1285 goto fail;
1286 if (!pf_config_copy_string(&tmp->TargetCertHash, config->TargetCertHash))
1287 goto fail;
1288 tmp->ini = IniFile_Clone(config->ini);
1289 if (!tmp->ini)
1290 goto fail;
1291
1292 *dst = tmp;
1293 return TRUE;
1294
1295fail:
1296 WINPR_PRAGMA_DIAG_PUSH
1297 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1299 WINPR_PRAGMA_DIAG_POP
1300 return FALSE;
1301}
void pf_server_config_free(proxyConfig *config)
pf_server_config_free Releases all resources associated with proxyConfig
Definition pf_config.c:1123

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 1611 of file pf_config.c.

1612{
1613 WINPR_ASSERT(config);
1614 WINPR_ASSERT(config->ini);
1615 WINPR_ASSERT(section);
1616 WINPR_ASSERT(key);
1617
1618 return IniFile_GetKeyValueString(config->ini, section, key);
1619}

◆ 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 1175 of file pf_config.c.

1176{
1177 union
1178 {
1179 char** ppc;
1180 const char** cppc;
1181 } cnv;
1182
1183 WINPR_ASSERT(config);
1184
1185 cnv.ppc = config->Modules;
1186 return cnv.cppc;
1187}

◆ 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 1169 of file pf_config.c.

1170{
1171 WINPR_ASSERT(config);
1172 return config->ModulesCount;
1173}

◆ 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 1579 of file pf_config.c.

1580{
1581 struct config_plugin_data* custom = nullptr;
1582 proxyPlugin plugin = WINPR_C_ARRAY_INIT;
1583
1584 plugin.name = config_plugin_name;
1585 plugin.description = config_plugin_desc;
1586 plugin.PluginUnload = config_plugin_unload;
1587
1588 plugin.KeyboardEvent = config_plugin_keyboard_event;
1589 plugin.UnicodeEvent = config_plugin_unicode_event;
1590 plugin.MouseEvent = config_plugin_mouse_event;
1591 plugin.MouseExEvent = config_plugin_mouse_ex_event;
1592 plugin.ClientChannelData = config_plugin_client_channel_data;
1593 plugin.ServerChannelData = config_plugin_server_channel_data;
1594 plugin.ChannelCreate = config_plugin_channel_create;
1595 plugin.DynamicChannelCreate = config_plugin_dynamic_channel_create;
1596 plugin.userdata = userdata;
1597
1598 custom = calloc(1, sizeof(struct config_plugin_data));
1599 if (!custom)
1600 return FALSE;
1601
1602 custom->mgr = plugins_manager;
1603 custom->config = userdata;
1604
1605 plugin.custom = custom;
1606 plugin.userdata = userdata;
1607
1608 return plugins_manager->RegisterPlugin(plugins_manager, &plugin);
1609}

◆ 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 1635 of file pf_config.c.

1636{
1637 if (!val)
1638 return FREERDP_PROXY_CERT_POLICY_DENY;
1639 if (_stricmp(val, "allow") == 0)
1640 return FREERDP_PROXY_CERT_POLICY_ALLOW;
1641 if (_stricmp(val, "pinned") == 0)
1642 return FREERDP_PROXY_CERT_POLICY_PINNED;
1643 return FREERDP_PROXY_CERT_POLICY_DENY;
1644}

◆ 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 1621 of file pf_config.c.

1622{
1623 switch (policy)
1624 {
1625 case FREERDP_PROXY_CERT_POLICY_ALLOW:
1626 return "allow";
1627 case FREERDP_PROXY_CERT_POLICY_PINNED:
1628 return "pinned";
1629 case FREERDP_PROXY_CERT_POLICY_DENY:
1630 default:
1631 return "deny";
1632 }
1633}

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 1160 of file pf_config.c.

1161{
1162 WINPR_ASSERT(config);
1163 if (index >= config->RequiredPluginsCount)
1164 return nullptr;
1165
1166 return config->RequiredPlugins[index];
1167}

◆ 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 1154 of file pf_config.c.

1155{
1156 WINPR_ASSERT(config);
1157 return config->RequiredPluginsCount;
1158}

◆ 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 797 of file pf_config.c.

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

◆ 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 1123 of file pf_config.c.

1124{
1125 if (config == nullptr)
1126 return;
1127
1128 winpr_zfree(config->Host);
1129 winpr_zfree(config->SamFile);
1130 winpr_zfree(config->TargetHost);
1131 winpr_zfree(config->TargetUser);
1132 winpr_zfree(config->TargetDomain);
1133 winpr_zfree(config->TargetPassword);
1134 winpr_znfree(config->TargetSmartcardCert, config->TargetSmartcardCertLength);
1135 winpr_znfree(config->TargetSmartcardKey, config->TargetSmartcardKeyLength);
1136 winpr_zfree(config->TargetCertHash);
1137 winpr_znfree(config->TargetCertPEM, config->TargetCertPEMLength);
1138
1139 CommandLineParserFree(config->Passthrough);
1140 CommandLineParserFree(config->Intercept);
1141 CommandLineParserFree(config->Modules);
1142 CommandLineParserFree(config->RequiredPlugins);
1143
1144 winpr_zfree(config->CertificateFile);
1145 winpr_zfree(config->CertificateContent);
1146 winpr_znfree(config->CertificatePEM, config->CertificatePEMLength);
1147 winpr_zfree(config->PrivateKeyFile);
1148 winpr_zfree(config->PrivateKeyContent);
1149 winpr_znfree(config->PrivateKeyPEM, config->PrivateKeyPEMLength);
1150 IniFile_Free(config->ini);
1151 free(config);
1152}

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 976 of file pf_config.c.

977{
978 proxyConfig* config = nullptr;
979 wIniFile* ini = nullptr;
980
981 ini = IniFile_New();
982
983 if (!ini)
984 {
985 WLog_ERR(TAG, "IniFile_New() failed!");
986 return nullptr;
987 }
988
989 if (IniFile_ReadBuffer(ini, buffer) < 0)
990 {
991 WLog_ERR(TAG, "failed to parse ini: '%s'", buffer);
992 goto out;
993 }
994
995 config = server_config_load_ini(ini);
996out:
997 IniFile_Free(ini);
998 return config;
999}
proxyConfig * server_config_load_ini(wIniFile *ini)
server_config_load_ini Create a proxyConfig from a already loaded INI file.
Definition pf_config.c:747

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 1001 of file pf_config.c.

1002{
1003 proxyConfig* config = nullptr;
1004 wIniFile* ini = IniFile_New();
1005
1006 if (!ini)
1007 {
1008 WLog_ERR(TAG, "IniFile_New() failed!");
1009 return nullptr;
1010 }
1011
1012 if (IniFile_ReadFile(ini, path) < 0)
1013 {
1014 WLog_ERR(TAG, "failed to parse ini file: '%s'", path);
1015 goto out;
1016 }
1017
1018 config = server_config_load_ini(ini);
1019out:
1020 IniFile_Free(ini);
1021 return config;
1022}

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 1031 of file pf_config.c.

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

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 747 of file pf_config.c.

748{
749 proxyConfig* config = nullptr;
750
751 WINPR_ASSERT(ini);
752
753 config = calloc(1, sizeof(proxyConfig));
754 if (config)
755 {
756 /* Set default values != 0 */
757 config->TargetTlsSecLevel = 1;
758
759 /* Load from ini */
760 if (!pf_config_load_server(ini, config))
761 goto out;
762
763 if (!pf_config_load_target(ini, config))
764 goto out;
765
766 if (!pf_config_load_codecs(ini, config))
767 goto out;
768
769 if (!pf_config_load_channels(ini, config))
770 goto out;
771
772 if (!pf_config_load_input(ini, config))
773 goto out;
774
775 if (!pf_config_load_security(ini, config))
776 goto out;
777
778 if (!pf_config_load_modules(ini, config))
779 goto out;
780
781 if (!pf_config_load_certificates(ini, config))
782 goto out;
783 config->ini = IniFile_Clone(ini);
784 if (!config->ini)
785 goto out;
786 }
787 return config;
788out:
789 WINPR_PRAGMA_DIAG_PUSH
790 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
791 pf_server_config_free(config);
792 WINPR_PRAGMA_DIAG_POP
793
794 return nullptr;
795}

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_ProxyCertPolicy;

Variable Documentation

◆ FreeRDP_ProxyCertPolicy

FreeRDP_ProxyCertPolicy

Definition at line 48 of file proxy_config.h.