@@ -929,27 +929,28 @@ int openvpn_client(int argc, char *argv[], const std::string *profile_content)
929
929
{
930
930
static const struct option longopts[] = {
931
931
// clang-format off
932
- { " username" , required_argument, nullptr , ' u' },
933
- { " password" , required_argument, nullptr , ' p' },
934
- { " response" , required_argument, nullptr , ' r' },
935
- { " dc" , required_argument, nullptr , ' D' },
936
- { " proto" , required_argument, nullptr , ' P' },
937
- { " ipv6" , required_argument, nullptr , ' 6' },
938
- { " server" , required_argument, nullptr , ' s' },
939
- { " port" , required_argument, nullptr , ' R' },
940
- { " timeout" , required_argument, nullptr , ' t' },
941
- { " compress" , required_argument, nullptr , ' c' },
942
- { " pk-password" , required_argument, nullptr , ' z' },
943
- { " tvm-override" , required_argument, nullptr , ' M' },
944
- { " proxy-host" , required_argument, nullptr , ' h' },
945
- { " proxy-port" , required_argument, nullptr , ' q' },
946
- { " proxy-username" , required_argument, nullptr , ' U' },
947
- { " proxy-password" , required_argument, nullptr , ' W' },
948
- { " peer-info" , required_argument, nullptr , ' I' },
949
- { " acc-protos" , required_argument, nullptr , ' K' },
950
- { " gremlin" , required_argument, nullptr , ' G' },
951
- { " proxy-basic" , no_argument, nullptr , ' B' },
952
- { " alt-proxy" , no_argument, nullptr , ' A' },
932
+ { " username" , required_argument, nullptr , ' u' },
933
+ { " password" , required_argument, nullptr , ' p' },
934
+ { " response" , required_argument, nullptr , ' r' },
935
+ { " dc" , required_argument, nullptr , ' D' },
936
+ { " proto" , required_argument, nullptr , ' P' },
937
+ { " ipv6" , required_argument, nullptr , ' 6' },
938
+ { " server" , required_argument, nullptr , ' s' },
939
+ { " port" , required_argument, nullptr , ' R' },
940
+ { " timeout" , required_argument, nullptr , ' t' },
941
+ { " compress" , required_argument, nullptr , ' c' },
942
+ { " pk-password" , required_argument, nullptr , ' z' },
943
+ { " pk-password-file" , required_argument, nullptr , ' i' },
944
+ { " tvm-override" , required_argument, nullptr , ' M' },
945
+ { " proxy-host" , required_argument, nullptr , ' h' },
946
+ { " proxy-port" , required_argument, nullptr , ' q' },
947
+ { " proxy-username" , required_argument, nullptr , ' U' },
948
+ { " proxy-password" , required_argument, nullptr , ' W' },
949
+ { " peer-info" , required_argument, nullptr , ' I' },
950
+ { " acc-protos" , required_argument, nullptr , ' K' },
951
+ { " gremlin" , required_argument, nullptr , ' G' },
952
+ { " proxy-basic" , no_argument, nullptr , ' B' },
953
+ { " alt-proxy" , no_argument, nullptr , ' A' },
953
954
#if defined(ENABLE_KOVPN) || defined(ENABLE_OVPNDCO) || defined(ENABLE_OVPNDCOWIN)
954
955
{ " no-dco" , no_argument, nullptr , ' d' },
955
956
#endif
@@ -1003,6 +1004,7 @@ int openvpn_client(int argc, char *argv[], const std::string *profile_content)
1003
1004
int timeout = 0 ;
1004
1005
std::string compress;
1005
1006
std::string privateKeyPassword;
1007
+ std::string privateKeyPasswordFile;
1006
1008
std::string tlsVersionMinOverride;
1007
1009
std::string tlsCertProfileOverride;
1008
1010
std::string proxyHost;
@@ -1048,7 +1050,7 @@ int openvpn_client(int argc, char *argv[], const std::string *profile_content)
1048
1050
int ch;
1049
1051
optind = 1 ;
1050
1052
1051
- while ((ch = getopt_long (argc, argv, " 6:ABCD:G:I:K:LM:P:QR:S:TU:W:X:YZ:ac:degh:jk:lmp:q:r:s:t:u:vwxz :" , longopts, nullptr )) != -1 )
1053
+ while ((ch = getopt_long (argc, argv, " 6:ABCD:G:I:K:LM:P:QR:S:TU:W:X:YZ:ac:degh:jk:lmp:q:r:s:t:u:vwxzi :" , longopts, nullptr )) != -1 )
1052
1054
{
1053
1055
switch (ch)
1054
1056
{
@@ -1117,6 +1119,9 @@ int openvpn_client(int argc, char *argv[], const std::string *profile_content)
1117
1119
case ' z' :
1118
1120
privateKeyPassword = optarg;
1119
1121
break ;
1122
+ case ' i' :
1123
+ privateKeyPasswordFile = optarg;
1124
+ break ;
1120
1125
case ' M' :
1121
1126
tlsVersionMinOverride = optarg;
1122
1127
break ;
@@ -1257,6 +1262,10 @@ int openvpn_client(int argc, char *argv[], const std::string *profile_content)
1257
1262
config.connTimeout = timeout;
1258
1263
config.compressionMode = compress;
1259
1264
config.allowUnusedAddrFamilies = allowUnusedAddrFamilies;
1265
+ if (privateKeyPassword.empty () && !privateKeyPasswordFile.empty ()) {
1266
+ privateKeyPassword = string::trim_crlf_copy (read_text_utf8 (privateKeyPasswordFile));
1267
+ }
1268
+ std::cout << " privateKeyPassword:" << privateKeyPassword << std::endl;
1260
1269
config.privateKeyPassword = privateKeyPassword;
1261
1270
config.tlsVersionMinOverride = tlsVersionMinOverride;
1262
1271
config.tlsCertProfileOverride = tlsCertProfileOverride;
@@ -1470,6 +1479,7 @@ int openvpn_client(int argc, char *argv[], const std::string *profile_content)
1470
1479
std::cout << " --timeout, -t : timeout" << std::endl;
1471
1480
std::cout << " --compress, -c : compression mode (yes|no|asym)" << std::endl;
1472
1481
std::cout << " --pk-password, -z : private key password" << std::endl;
1482
+ std::cout << " --pk-password-file, -i: private key password file, contains plaintext password in it" << std::endl;
1473
1483
std::cout << " --tvm-override, -M : tls-version-min override (disabled, default, tls_1_x)" << std::endl;
1474
1484
std::cout << " --legacy-algorithms, -L: Enable legacy algorithm (OpenSSL legacy provider)" << std::endl;
1475
1485
std::cout << " --non-preferred-algorithms, -Q: Enables non preferred data channel algorithms" << std::endl;
0 commit comments