--- /dev/null
+; ExtractAuxFile
+; Copies a text file appended to the end of the installer EXE
+; to a caller-specified output file.
+; Inputs:
+; output_filename (string) -- the output filename
+; Outputs:
+; status (int) -- 0 on success, > 0 on failure
+
+Function ExtractAuxFile
+ Exch $R1 ; output filename argument
+ ; locals
+ Push $R0
+ Push $1
+ Push $2
+ Push $3
+ Push $4
+ Push $5
+
+ ClearErrors
+
+ ; $R0 = installer filename
+ System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1'
+
+ ; $1 = open (installer_exe) for read
+ FileOpen $1 $R0 r
+ IfErrors openin_err
+
+ ; seek to EOF - 8 (start of 8-byte trailer)
+ ; $3 = seekpos
+ IntOp $2 0 - 8
+ FileSeek $1 $2 END $3
+
+ ; $4 = -(content_length(auxfile) + 8)
+ ; seek position from end of file to beginning of content
+ FileReadByte $1 $4
+ FileReadByte $1 $5
+ IfErrors readlen_err
+ IntOp $5 $5 << 8
+ IntOp $4 $4 + $5
+ IntOp $4 $4 + 8
+ IntOp $4 0 - $4
+
+ ; verify magic sequence 0xae, 0xb7, 0x03, 0x69, 0x42, 0x11
+ FileReadByte $1 $5
+ IntCmp $5 0xae 0 magic_err magic_err
+ FileReadByte $1 $5
+ IntCmp $5 0xb7 0 magic_err magic_err
+ FileReadByte $1 $5
+ IntCmp $5 0x03 0 magic_err magic_err
+ FileReadByte $1 $5
+ IntCmp $5 0x69 0 magic_err magic_err
+ FileReadByte $1 $5
+ IntCmp $5 0x42 0 magic_err magic_err
+ FileReadByte $1 $5
+ IntCmp $5 0x11 0 magic_err magic_err
+ IfErrors magic_err
+
+ ; seek to start of auxfile data
+ FileSeek $1 $4 END
+
+ ; $2 = open (output_filename) for write
+ FileOpen $2 $R1 w
+ IfErrors openout_err
+
+loop:
+ ; check if we are finished
+ FileSeek $1 0 CUR $5
+ IntCmp $5 $3 success 0 overshot_err
+
+ ; copy next line from .exe to output file
+ FileRead $1 $5
+ IfErrors read_err
+ FileWrite $2 $5
+ IfErrors write_err
+ goto loop
+
+success:
+ IntOp $R1 0 + 0
+ goto fin
+
+openin_err:
+ IntOp $R1 1 + 0
+ goto fin
+
+openout_err:
+ IntOp $R1 2 + 0
+ goto fin
+
+readlen_err:
+ IntOp $R1 3 + 0
+ goto fin
+
+overshot_err:
+ IntOp $R1 4 + 0
+ goto fin
+
+read_err:
+ IntOp $R1 5 + 0
+ goto fin
+
+write_err:
+ IntOp $R1 6 + 0
+ goto fin
+
+magic_err:
+ IntOp $R1 7 + 0
+ goto fin
+
+fin:
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $R0
+ Exch $R1
+FunctionEnd
cp install-win32/openvpn.nsi $n
cp install-win32/setpath.nsi $n
cp install-win32/GetWindowsVersion.nsi $n
+cp install-win32/ExtractAuxFile.nsi $n
# get OpenVPN client config files
if [ -n "$SAMPCONF_DIR" ]; then
; OpenVPN install script for Windows, using NSIS
+SetCompressor lzma
+
!include "MUI.nsh"
!include "defs.nsi"
!include "xguidefs.nsi"
!include "setpath.nsi"
!include "GetWindowsVersion.nsi"
+!include "ExtractAuxFile.nsi"
!define GEN ".."
!define BIN "${GEN}\bin"
OutFile "${GEN}\${PRODUCT_UNIX_NAME}-${VERSION}${OUTFILE_LABEL}-install.exe"
- SetCompressor bzip2
-
ShowInstDetails show
ShowUninstDetails show
!endif
!endif
+ ; Try to extract AUX_FILE, if present
+ !ifdef AUX_FILE
+ Push "$INSTDIR\config\${AUX_FILE}"
+ Call ExtractAuxFile
+ Pop $R0
+ IntCmp $R0 0 +3 +1 +1
+ DetailPrint "ExtractAuxFile Failed status=$R0"
+ goto +2
+ DetailPrint "ExtractAuxFile Succeeded"
+ !endif
+
;
; install/upgrade TAP driver if selected, using tapinstall.exe
;
;!define SAMPCONF_CA "ca.crt"
;!define SAMPCONF_CRT "test.crt"
;!define SAMPCONF_KEY "test.key"
+
+# Include a sample configuration file via ExtractAuxFile
+# functionality.
+!define AUX_FILE "client.ovpn"