Hello Samuli,

Curios: Did you manage to get it work using master without my patch?

If not, to make it easy...

Use Windows Explorer and rename the key file to something non-ascii.
Then open openvpn configuration using UTF-8 editor and modify key file there.
This should work, as we do not use unicode/conversion command-line.

Next step would be to remove the key from configuration and use it in
command-line.

Alon.

2012/4/27 Samuli Seppänen <sam...@openvpn.net>:
> Hi,
>
> As promised in yesterday's IRC meeting (summary coming today), I tested
> this patch on Windows 7 (64-bit). So far I've had no luck, but don't
> think the problems have anything to do with this patch.
>
> Anyways, I cross-compiled latest "master" with this patch applied and
> "bin" and "lib" directories on top of an existing openvpn-2.3-alpha1
> install. The old "bin" directory was renamed to make sure none of it was
> used. I then renamed "openvpn.ovpn" to "ääliö.ovpn" and "ta.key" to
> "ääliö.key" using Windows Explorer. Then I updated the configuration
> file to point to these files using Notepad (and later Wordpad).
>
> OpenVPN-GUI (Heiko's new version) detected the configuration file
> properly, showing "ääliö" as one available connection option. However,
> it output the following when trying to connect:
>
>    Options error: --tls-auth fails with 'ääliö.key': No such file or
> directory
>
> Git Bash showed the file as ??li?.key, which could mean Windows Explorer
> is using a single-byte character set.
>
> Windows command prompt shows the characters properly, but issuing
> "openvpn --config ääliö.ovpn" gives the same error as OpenVPN-GUI above,
> except that 'ääliö.key' shows faulty glyphs[1]. This also triggers an
> interesting bug in the command prompt[2]
>
> Anyways, as the Windows 7 install is English-language, I suspect it's
> using a single-byte character set instead of UCS-2. I'll continue
> debugging, but any pointers are obviously much appreciated!
>
> Samuli
>
> [1] <http://users.utu.fi/sjsepp/cmd.png>
> [2] Typing an "ä" or "ö" moves the (invisible) cursor forward one
> character, but each backspace will delete two characters instead of one.
> This does not happen until openvpn has been (unsuccessfully) started.
>
>
>> Discussed at [1].
>>
>> Use wmain under windows, drop the custom parsing and shell32 linkage.
>>
>> There is no need for gc magic as this allocation is static.
>>
>> [1] http://permalink.gmane.org/gmane.network.openvpn.devel/5433
>>
>> Signed-off-by: Alon Bar-Lev <alon.bar...@gmail.com>
>> ---
>>  src/openvpn/Makefile.am     |    6 +++++-
>>  src/openvpn/openvpn.c       |   37 ++++++++++++++++++++++++++++++++++++-
>>  src/openvpn/openvpn.vcxproj |   10 ++++++----
>>  src/openvpn/options.c       |   27 ---------------------------
>>  4 files changed, 47 insertions(+), 33 deletions(-)
>>  mode change 100644 => 100755 src/openvpn/openvpn.vcxproj
>>
>> diff --git a/src/openvpn/Makefile.am b/src/openvpn/Makefile.am
>> index 4e485e7..0506b11 100644
>> --- a/src/openvpn/Makefile.am
>> +++ b/src/openvpn/Makefile.am
>> @@ -27,6 +27,10 @@ AM_CFLAGS = \
>>       $(OPTIONAL_CRYPTO_CFLAGS) \
>>       $(OPTIONAL_LZO_CFLAGS) \
>>       $(OPTIONAL_PKCS11_HELPER_CFLAGS)
>> +if WIN32
>> +# we want unicode entry point but not the macro
>> +AM_CFLAGS += -municode -UUNICODE
>> +endif
>>
>>  sbin_PROGRAMS = openvpn
>>
>> @@ -118,5 +122,5 @@ openvpn_LDADD = \
>>       $(OPTIONAL_DL_LIBS)
>>  if WIN32
>>  openvpn_SOURCES += openvpn_win32_resources.rc
>> -openvpn_LDADD += -lgdi32 -lws2_32 -lwininet -lcrypt32 -liphlpapi -lwinmm 
>> -lshell32
>> +openvpn_LDADD += -lgdi32 -lws2_32 -lwininet -lcrypt32 -liphlpapi -lwinmm
>>  endif
>> diff --git a/src/openvpn/openvpn.c b/src/openvpn/openvpn.c
>> index 3db1b86..6e70a58 100644
>> --- a/src/openvpn/openvpn.c
>> +++ b/src/openvpn/openvpn.c
>> @@ -127,8 +127,9 @@ tunnel_point_to_point (struct context *c)
>>   * @param argc - Commandline argument count.
>>   * @param argv - Commandline argument values.
>>   */
>> +static
>>  int
>> -main (int argc, char *argv[])
>> +openvpn_main (int argc, char *argv[])
>>  {
>>    struct context c;
>>
>> @@ -289,3 +290,37 @@ main (int argc, char *argv[])
>>    openvpn_exit (OPENVPN_EXIT_STATUS_GOOD);  /* exit point */
>>    return 0;                              /* NOTREACHED */
>>  }
>> +
>> +#ifdef WIN32
>> +int
>> +wmain (int argc, wchar_t *wargv[]) {
>> +  char **argv;
>> +  int ret;
>> +  int i;
>> +
>> +  if ((argv = calloc(argc+1, sizeof(char*))) == NULL)
>> +    return 1;
>> +
>> +  for (i = 0; i < argc; i++)
>> +    {
>> +      int n = WideCharToMultiByte (CP_UTF8, 0, wargv[i], -1, NULL, 0, NULL, 
>> NULL);
>> +      argv[i] = malloc (n);
>> +      WideCharToMultiByte (CP_UTF8, 0, wargv[i], -1, argv[i], n, NULL, 
>> NULL);
>> +    }
>> +
>> +  ret = openvpn_main(argc, argv);
>> +
>> +  for (i=0; i < argc; i++ )
>> +    {
>> +      free (argv[i]);
>> +    }
>> +  free(argv);
>> +
>> +  return ret;
>> +}
>> +#else
>> +int
>> +main (int argc, char *argv[]) {
>> +     return openvpn_main(argc, argv);
>> +}
>> +#endif
>> diff --git a/src/openvpn/openvpn.vcxproj b/src/openvpn/openvpn.vcxproj
>> old mode 100644
>> new mode 100755
>> index 51e19af..452876f
>> --- a/src/openvpn/openvpn.vcxproj
>> +++ b/src/openvpn/openvpn.vcxproj
>> @@ -18,12 +18,12 @@
>>    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
>>    <PropertyGroup 
>> Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" 
>> Label="Configuration">
>>      <ConfigurationType>Application</ConfigurationType>
>> -    <CharacterSet>MultiByte</CharacterSet>
>>      <WholeProgramOptimization>true</WholeProgramOptimization>
>> +    <CharacterSet>Unicode</CharacterSet>
>>    </PropertyGroup>
>>    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" 
>> Label="Configuration">
>>      <ConfigurationType>Application</ConfigurationType>
>> -    <CharacterSet>MultiByte</CharacterSet>
>> +    <CharacterSet>Unicode</CharacterSet>
>>    </PropertyGroup>
>>    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
>>    <ImportGroup Label="ExtensionSettings">
>> @@ -56,12 +56,13 @@
>>        </PrecompiledHeader>
>>        <WarningLevel>Level3</WarningLevel>
>>        <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
>> +      
>> <UndefinePreprocessorDefinitions>UNICODE</UndefinePreprocessorDefinitions>
>>      </ClCompile>
>>      <ResourceCompile>
>>        
>> <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
>>      </ResourceCompile>
>>      <Link>
>> -      
>> <AdditionalDependencies>libeay32.lib;ssleay32.lib;lzo2.lib;pkcs11-helper.dll.lib;gdi32.lib;ws2_32.lib;wininet.lib;crypt32.lib;iphlpapi.lib;winmm.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
>> +      
>> <AdditionalDependencies>libeay32.lib;ssleay32.lib;lzo2.lib;pkcs11-helper.dll.lib;gdi32.lib;ws2_32.lib;wininet.lib;crypt32.lib;iphlpapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
>>        
>> <AdditionalLibraryDirectories>$(OPENSSL_HOME)/lib;$(LZO_HOME)/lib;$(PKCS11H_HOME)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
>>        <GenerateDebugInformation>true</GenerateDebugInformation>
>>        <SubSystem>Console</SubSystem>
>> @@ -80,12 +81,13 @@
>>        </PrecompiledHeader>
>>        <WarningLevel>Level3</WarningLevel>
>>        <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
>> +      
>> <UndefinePreprocessorDefinitions>UNICODE</UndefinePreprocessorDefinitions>
>>      </ClCompile>
>>      <ResourceCompile>
>>        
>> <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
>>      </ResourceCompile>
>>      <Link>
>> -      
>> <AdditionalDependencies>libeay32.lib;ssleay32.lib;lzo2.lib;pkcs11-helper.dll.lib;gdi32.lib;ws2_32.lib;wininet.lib;crypt32.lib;iphlpapi.lib;winmm.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
>> +      
>> <AdditionalDependencies>libeay32.lib;ssleay32.lib;lzo2.lib;pkcs11-helper.dll.lib;gdi32.lib;ws2_32.lib;wininet.lib;crypt32.lib;iphlpapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
>>        
>> <AdditionalLibraryDirectories>$(OPENSSL_HOME)/lib;$(LZO_HOME)/lib;$(PKCS11H_HOME)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
>>        <GenerateDebugInformation>true</GenerateDebugInformation>
>>        <SubSystem>Console</SubSystem>
>> diff --git a/src/openvpn/options.c b/src/openvpn/options.c
>> index 25786f6..66241b4 100644
>> --- a/src/openvpn/options.c
>> +++ b/src/openvpn/options.c
>> @@ -3832,33 +3832,6 @@ parse_argv (struct options *options,
>>  {
>>    int i, j;
>>
>> -#ifdef WIN32
>> -  /*
>> -   * Windows replaces Unicode characters in argv[] that are not present
>> -   * in the current codepage with '?'. Get the wide char command line and
>> -   * convert it to UTF-8 ourselves.
>> -   */
>> -  int wargc;
>> -  WCHAR **wargv;
>> -  char **uargv;
>> -
>> -  wargv = CommandLineToArgvW (GetCommandLineW (), &wargc);
>> -  if (wargv == NULL || wargc != argc)
>> -    usage ();
>> -
>> -  uargv = gc_malloc (wargc * sizeof (*uargv), false, &options->gc);
>> -
>> -  for (i = 0; i < wargc; i++)
>> -    {
>> -      int n = WideCharToMultiByte (CP_UTF8, 0, wargv[i], -1, NULL, 0, NULL, 
>> NULL);
>> -      uargv[i] = gc_malloc (n, false, &options->gc);
>> -      WideCharToMultiByte (CP_UTF8, 0, wargv[i], -1, uargv[i], n, NULL, 
>> NULL);
>> -    }
>> -
>> -  LocalFree (wargv);
>> -  argv = uargv;
>> -#endif
>> -
>>    /* usage message */
>>    if (argc <= 1)
>>      usage ();
>

Reply via email to