aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--install-win32/ExtractAuxFile.nsi117
-rw-r--r--install-win32/maketext1
-rwxr-xr-xinstall-win32/openvpn.nsi16
-rw-r--r--install-win32/settings.in4
4 files changed, 136 insertions, 2 deletions
diff --git a/install-win32/ExtractAuxFile.nsi b/install-win32/ExtractAuxFile.nsi
new file mode 100644
index 0000000..ffb7b34
--- /dev/null
+++ b/install-win32/ExtractAuxFile.nsi
@@ -0,0 +1,117 @@
+; 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
diff --git a/install-win32/maketext b/install-win32/maketext
index 5aed4ea..f8354db 100644
--- a/install-win32/maketext
+++ b/install-win32/maketext
@@ -39,6 +39,7 @@ cp autodefs/xguidefs.nsi $n
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
diff --git a/install-win32/openvpn.nsi b/install-win32/openvpn.nsi
index c33439e..ae86475 100755
--- a/install-win32/openvpn.nsi
+++ b/install-win32/openvpn.nsi
@@ -7,6 +7,8 @@
; OpenVPN install script for Windows, using NSIS
+SetCompressor lzma
+
!include "MUI.nsh"
!include "defs.nsi"
@@ -14,6 +16,7 @@
!include "xguidefs.nsi"
!include "setpath.nsi"
!include "GetWindowsVersion.nsi"
+!include "ExtractAuxFile.nsi"
!define GEN ".."
!define BIN "${GEN}\bin"
@@ -73,8 +76,6 @@
OutFile "${GEN}\${PRODUCT_UNIX_NAME}-${VERSION}${OUTFILE_LABEL}-install.exe"
- SetCompressor bzip2
-
ShowInstDetails show
ShowUninstDetails show
@@ -528,6 +529,17 @@ Section -post
!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
;
diff --git a/install-win32/settings.in b/install-win32/settings.in
index 0be1c2d..af801cb 100644
--- a/install-win32/settings.in
+++ b/install-win32/settings.in
@@ -89,3 +89,7 @@
;!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"