Fix backslashes in SHIBSP_PREFIX variable by manually creating it during the script...
[shibboleth/sp.git] / msi / scripts / shib_edit_config_files.vbs
1 Function ReadFile( filePath )
2    Dim theFile
3
4    'OpenTextFile args: <path>, 1 = ForReading
5    'If you read an empty file, VBScript throws an error for some reason
6    if (FileSystemObj.FileExists(filePath)) then
7      Set theFile = FileSystemObj.GetFile(filePath)
8      if (theFile.size > 0) then
9        Set theFile = FileSystemObj.OpenTextFile(filePath, 1)
10        ReadFile = theFile.ReadAll
11      else
12        ReadFile = ""
13      end if
14    else
15      ReadFile = ""
16    end if
17 End Function
18
19 Sub WriteFile( filePath, contents )
20    Dim theFile
21
22    'OpenTextFile args: <path>, 2 = ForWriting, True = create if not exist
23    Set theFile = FileSystemObj.OpenTextFile(filePath, 2, True)
24    theFile.Write contents
25 End Sub
26
27 Sub ReplaceInFile( filePath, lookForStr, replaceWithStr )
28   Dim buffer
29
30   buffer = ReadFile(filePath)
31   if (buffer <> "") then
32     buffer = Replace(buffer, lookForStr, replaceWithStr)
33     WriteFile filePath, buffer
34   end if
35 End Sub
36
37
38 Dim FileSystemObj, ConvertedDir, ConfigFile, XMLDir, WshShell
39 Dim customData, msiProperties, InstallDir, ShibdPort
40
41 on error resume next
42 Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
43 if (Err = 0) then
44
45   'Get the INSTALLDIR and SHIBD_PORT values via CustomActionData
46   customData = Session.Property("CustomActionData")
47   msiProperties = split(customData,";@;")
48   InstallDir = msiProperties(0)
49   ShibdPort = msiProperties(1)
50
51   'Remove all trailing backslashes to normalize
52   do while (mid(InstallDir,Len(InstallDir),1) = "\")
53     InstallDir = mid(InstallDir,1,Len(InstallDir)-1)
54   loop
55   ConvertedDir = Replace(InstallDir, "\", "/")
56   ConfigDir = InstallDir & "\etc\shibboleth\"
57   DistDir = ConfigDir & "dist\"
58
59   'Set ConvertedDir as the SHIBSP_PREFIX system variable.
60   Set WshShell = CreateObject("WScript.Shell")
61   WshShell.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\SHIBSP_PREFIX", ConvertedDir, "REG_SZ"
62
63   'Perform actual Substitutions
64   'Afterwards, if the config file doesn't already exist, copy up to etc/shibboleth
65   'Also strip *.in for files in dist
66
67   ConfigFile = DistDir & "shibd.logger.in"
68   ReplaceInFile ConfigFile, "@-PKGLOGDIR-@", ConvertedDir & "/var/log/shibboleth"
69   If (NOT FileSystemObj.FileExists(ConfigDir & "shibd.logger")) then
70     FileSystemObj.CopyFile ConfigFile, ConfigDir & "shibd.logger", false
71   End If
72   If (FileSystemObj.FileExists(DistDir & "shibd.logger")) then
73     FileSystemObj.DeleteFile DistDir & "shibd.logger", true
74   End If
75   FileSystemObj.MoveFile ConfigFile, DistDir & "shibd.logger"
76
77   ConfigFile = DistDir & "native.logger.in"
78   ReplaceInFile ConfigFile, "@-SHIRELOGDIR-@", ConvertedDir & "/var/log/shibboleth"
79   If (NOT FileSystemObj.FileExists(ConfigDir & "native.logger")) then
80     FileSystemObj.CopyFile ConfigFile, ConfigDir & "native.logger", false
81   End If
82   If (FileSystemObj.FileExists(DistDir & "native.logger")) then
83     FileSystemObj.DeleteFile DistDir & "native.logger", true
84   End If
85   FileSystemObj.MoveFile ConfigFile, DistDir & "native.logger"
86
87   ConfigFile = DistDir & "apache.config.in"
88   ReplaceInFile ConfigFile, "@-PKGLIBDIR-@", ConvertedDir & "/lib/shibboleth"
89   ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
90   If (NOT FileSystemObj.FileExists(ConfigDir & "apache.config")) then
91     FileSystemObj.CopyFile ConfigFile, ConfigDir & "apache.config", false
92   End If
93   If (FileSystemObj.FileExists(DistDir & "apache.config")) then
94     FileSystemObj.DeleteFile DistDir & "apache.config", true
95   End If
96   FileSystemObj.MoveFile ConfigFile, DistDir & "apache.config"
97
98   ConfigFile = DistDir & "apache2.config.in"
99   ReplaceInFile ConfigFile, "@-PKGLIBDIR-@", ConvertedDir & "/lib/shibboleth"
100   ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
101   If (NOT FileSystemObj.FileExists(ConfigDir & "apache2.config")) then
102     FileSystemObj.CopyFile ConfigFile, ConfigDir & "apache2.config", false
103   End If
104   If (FileSystemObj.FileExists(DistDir & "apache2.config")) then
105     FileSystemObj.DeleteFile DistDir & "apache2.config", true
106   End If
107   FileSystemObj.MoveFile ConfigFile, DistDir & "apache2.config"
108
109   ConfigFile = DistDir & "apache22.config.in"
110   ReplaceInFile ConfigFile, "@-PKGLIBDIR-@", ConvertedDir & "/lib/shibboleth"
111   ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
112   If (NOT FileSystemObj.FileExists(ConfigDir & "apache22.config")) then
113     FileSystemObj.CopyFile ConfigFile, ConfigDir & "apache22.config", false
114   End If
115   If (FileSystemObj.FileExists(DistDir & "apache22.config")) then
116     FileSystemObj.DeleteFile DistDir & "apache22.config", true
117   End If
118   FileSystemObj.MoveFile ConfigFile, DistDir & "apache22.config"
119
120   ConfigFile = DistDir & "shibboleth2.xml"
121   ReplaceInFile ConfigFile, "   <UnixListener address=""shibd.sock""/>", "<!-- <UnixListener address=""shibd.sock""/> -->"
122   ReplaceInFile ConfigFile, "<!-- <TCPListener address=""127.0.0.1"" port=""12345"" acl=""127.0.0.1""/> -->", "<TCPListener address=""127.0.0.1"" port=""" & ShibdPort & """ acl=""127.0.0.1""/>"
123   If (NOT FileSystemObj.FileExists(ConfigDir & "shibboleth2.xml")) then
124     FileSystemObj.CopyFile ConfigFile, ConfigDir & "shibboleth2.xml", false
125   End If
126
127   'Now just copy the other non-edited files over as well (if possible)
128
129   If (NOT FileSystemObj.FileExists(ConfigDir & "accessError.html")) then
130     FileSystemObj.CopyFile DistDir & "accessError.html", ConfigDir, false
131   End If
132
133   If (NOT FileSystemObj.FileExists(ConfigDir & "metadataError.html")) then
134     FileSystemObj.CopyFile DistDir & "metadataError.html", ConfigDir, false
135   End If
136
137   If (NOT FileSystemObj.FileExists(ConfigDir & "sessionError.html")) then
138     FileSystemObj.CopyFile DistDir & "sessionError.html", ConfigDir, false
139   End If
140
141   If (NOT FileSystemObj.FileExists(ConfigDir & "sslError.html")) then
142     FileSystemObj.CopyFile DistDir & "sslError.html", ConfigDir, false
143   End If
144
145   If (NOT FileSystemObj.FileExists(ConfigDir & "bindingTemplate.html")) then
146     FileSystemObj.CopyFile DistDir & "bindingTemplate.html", ConfigDir, false
147   End If
148
149   If (NOT FileSystemObj.FileExists(ConfigDir & "localLogout.html")) then
150     FileSystemObj.CopyFile DistDir & "localLogout.html", ConfigDir, false
151   End If
152
153   If (NOT FileSystemObj.FileExists(ConfigDir & "globalLogout.html")) then
154     FileSystemObj.CopyFile DistDir & "globalLogout.html", ConfigDir, false
155   End If
156
157   If (NOT FileSystemObj.FileExists(ConfigDir & "console.logger")) then
158     FileSystemObj.CopyFile DistDir & "console.logger", ConfigDir, false
159   End If
160
161   If (NOT FileSystemObj.FileExists(ConfigDir & "shibboleth.logger")) then
162     FileSystemObj.CopyFile DistDir & "shibboleth.logger", ConfigDir, false
163   End If
164
165   If (NOT FileSystemObj.FileExists(ConfigDir & "example-metadata.xml")) then
166     FileSystemObj.CopyFile DistDir & "example-metadata.xml", ConfigDir, false
167   End If
168
169   If (NOT FileSystemObj.FileExists(ConfigDir & "attribute-map.xml")) then
170     FileSystemObj.CopyFile DistDir & "attribute-map.xml", ConfigDir, false
171   End If
172
173   If (NOT FileSystemObj.FileExists(ConfigDir & "attribute-policy.xml")) then
174     FileSystemObj.CopyFile DistDir & "attribute-policy.xml", ConfigDir, false
175   End If
176
177   ' Finally, fix up schema catalogs.
178   
179   XMLDir = InstallDir & "\share\xml\xmltooling\"
180   ConfigFile = XMLDir & "catalog.xml"
181   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@/", XMLDir
182
183   XMLDir = InstallDir & "\share\xml\opensaml\"
184   ConfigFile = XMLDir & "saml20-catalog.xml"
185   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@/", XMLDir
186   ConfigFile = XMLDir & "saml11-catalog.xml"
187   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@/", XMLDir
188   ConfigFile = XMLDir & "saml10-catalog.xml"
189   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@/", XMLDir
190
191   XMLDir = InstallDir & "\share\xml\shibboleth\"
192   ConfigFile = XMLDir & "catalog.xml"
193   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@/", XMLDir
194
195 'Last End If
196 End If