Rework XML directory substitutions to handle xmltooling/opensaml in alternate locations.
[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
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   'Perform actual Substitutions
60   'Afterwards, if the config file doesn't already exist, copy up to etc/shibboleth
61   'Also strip *.in for files in dist
62
63   ConfigFile = DistDir & "attribute-map.xml.in"
64   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@", ConvertedDir & "/share/xml/shibboleth"
65   If (NOT FileSystemObj.FileExists(ConfigDir & "attribute-map.xml")) then
66     FileSystemObj.CopyFile ConfigFile, ConfigDir & "attribute-map.xml", false
67   End If
68   If (FileSystemObj.FileExists(DistDir & "attribute-map.xml")) then
69     FileSystemObj.DeleteFile DistDir & "attribute-map.xml", true
70   End If
71   FileSystemObj.MoveFile ConfigFile, DistDir & "attribute-map.xml"
72
73   ConfigFile = DistDir & "attribute-policy.xml.in"
74   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@", ConvertedDir & "/share/xml/shibboleth"
75   If (NOT FileSystemObj.FileExists(ConfigDir & "attribute-policy.xml")) then
76     FileSystemObj.CopyFile ConfigFile, ConfigDir & "attribute-policy.xml", false
77   End If
78   If (FileSystemObj.FileExists(DistDir & "attribute-policy.xml")) then
79     FileSystemObj.DeleteFile DistDir & "attribute-policy.xml", true
80   End If
81   FileSystemObj.MoveFile ConfigFile, DistDir & "attribute-policy.xml"
82   
83   ConfigFile = DistDir & "example-metadata.xml.in"
84   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@", ConvertedDir & "/share/xml/shibboleth"
85   If (NOT FileSystemObj.FileExists(ConfigDir & "example-metadata.xml")) then
86     FileSystemObj.CopyFile ConfigFile, ConfigDir & "example-metadata.xml", false
87   End If
88   If (FileSystemObj.FileExists(DistDir & "example-metadata.xml")) then
89     FileSystemObj.DeleteFile DistDir & "example-metadata.xml", true
90   End If
91   FileSystemObj.MoveFile ConfigFile, DistDir & "example-metadata.xml"
92
93   ConfigFile = DistDir & "shibboleth2.xml.in"
94   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@", ConvertedDir & "/share/xml/shibboleth"
95   ReplaceInFile ConfigFile, "@-PKGSYSCONFDIR-@", ConvertedDir & "/etc/shibboleth"
96   ReplaceInFile ConfigFile, "@-PKGLIBDIR-@", ConvertedDir & "/lib/shibboleth"
97   ReplaceInFile ConfigFile, "@-LOGDIR-@", ConvertedDir & "/var/log/shibboleth"
98   ReplaceInFile ConfigFile, "@-PREFIX-@", ConvertedDir
99   ReplaceInFile ConfigFile, "   <UnixListener address=""@-PKGRUNDIR-@/shibd.sock""/>", "<!-- <UnixListener address=""@-PKGRUNDIR-@/shibd.sock""/> -->"
100   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""/>"
101   If (NOT FileSystemObj.FileExists(ConfigDir & "shibboleth2.xml")) then
102     FileSystemObj.CopyFile ConfigFile, ConfigDir & "shibboleth2.xml", false
103   End If
104   If (FileSystemObj.FileExists(DistDir & "shibboleth2.xml")) then
105     FileSystemObj.DeleteFile DistDir & "shibboleth2.xml", true
106   End If
107   FileSystemObj.MoveFile ConfigFile, DistDir & "shibboleth2.xml"
108
109   ConfigFile = DistDir & "shibd.logger.in"
110   ReplaceInFile ConfigFile, "@-PKGLOGDIR-@", ConvertedDir & "/var/log/shibboleth"
111   If (NOT FileSystemObj.FileExists(ConfigDir & "shibd.logger")) then
112     FileSystemObj.CopyFile ConfigFile, ConfigDir & "shibd.logger", false
113   End If
114   If (FileSystemObj.FileExists(DistDir & "shibd.logger")) then
115     FileSystemObj.DeleteFile DistDir & "shibd.logger", true
116   End If
117   FileSystemObj.MoveFile ConfigFile, DistDir & "shibd.logger"
118
119   ConfigFile = DistDir & "native.logger.in"
120   ReplaceInFile ConfigFile, "@-SHIRELOGDIR-@", ConvertedDir & "/var/log/shibboleth"
121   If (NOT FileSystemObj.FileExists(ConfigDir & "native.logger")) then
122     FileSystemObj.CopyFile ConfigFile, ConfigDir & "native.logger", false
123   End If
124   If (FileSystemObj.FileExists(DistDir & "native.logger")) then
125     FileSystemObj.DeleteFile DistDir & "native.logger", true
126   End If
127   FileSystemObj.MoveFile ConfigFile, DistDir & "native.logger"
128
129   ConfigFile = DistDir & "apache.config.in"
130   ReplaceInFile ConfigFile, "@-XMLTOOLINGXMLDIR-@", ConvertedDir & "/share/xml/xmltooling"
131   ReplaceInFile ConfigFile, "@-OPENSAMLXMLDIR-@", ConvertedDir & "/share/xml/opensaml"
132   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@", ConvertedDir & "/share/xml/shibboleth"
133   ReplaceInFile ConfigFile, "catalog.xml:", "catalog.xml;"
134   ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
135   ReplaceInFile ConfigFile, "@-PKGSYSCONFDIR-@", ConvertedDir & "/etc/shibboleth"
136   ReplaceInFile ConfigFile, "@-PKGLIBDIR-@", ConvertedDir & "/lib/shibboleth"
137   If (NOT FileSystemObj.FileExists(ConfigDir & "apache.config")) then
138     FileSystemObj.CopyFile ConfigFile, ConfigDir & "apache.config", false
139   End If
140   If (FileSystemObj.FileExists(DistDir & "apache.config")) then
141     FileSystemObj.DeleteFile DistDir & "apache.config", true
142   End If
143   FileSystemObj.MoveFile ConfigFile, DistDir & "apache.config"
144
145   ConfigFile = DistDir & "apache2.config.in"
146   ReplaceInFile ConfigFile, "@-XMLTOOLINGXMLDIR-@", ConvertedDir & "/share/xml/xmltooling"
147   ReplaceInFile ConfigFile, "@-OPENSAMLXMLDIR-@", ConvertedDir & "/share/xml/opensaml"
148   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@", ConvertedDir & "/share/xml/shibboleth"
149   ReplaceInFile ConfigFile, "catalog.xml:", "catalog.xml;"
150   ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
151   ReplaceInFile ConfigFile, "@-PKGSYSCONFDIR-@", ConvertedDir & "/etc/shibboleth"
152   ReplaceInFile ConfigFile, "@-PKGLIBDIR-@", ConvertedDir & "/lib/shibboleth"
153   If (NOT FileSystemObj.FileExists(ConfigDir & "apache2.config")) then
154     FileSystemObj.CopyFile ConfigFile, ConfigDir & "apache2.config", false
155   End If
156   If (FileSystemObj.FileExists(DistDir & "apache2.config")) then
157     FileSystemObj.DeleteFile DistDir & "apache2.config", true
158   End If
159   FileSystemObj.MoveFile ConfigFile, DistDir & "apache2.config"
160
161   ConfigFile = DistDir & "apache22.config.in"
162   ReplaceInFile ConfigFile, "@-XMLTOOLINGXMLDIR-@", ConvertedDir & "/share/xml/xmltooling"
163   ReplaceInFile ConfigFile, "@-OPENSAMLXMLDIR-@", ConvertedDir & "/share/xml/opensaml"
164   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@", ConvertedDir & "/share/xml/shibboleth"
165   ReplaceInFile ConfigFile, "catalog.xml:", "catalog.xml;"
166   ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
167   ReplaceInFile ConfigFile, "@-PKGSYSCONFDIR-@", ConvertedDir & "/etc/shibboleth"
168   ReplaceInFile ConfigFile, "@-PKGLIBDIR-@", ConvertedDir & "/lib/shibboleth"
169   If (NOT FileSystemObj.FileExists(ConfigDir & "apache22.config")) then
170     FileSystemObj.CopyFile ConfigFile, ConfigDir & "apache22.config", false
171   End If
172   If (FileSystemObj.FileExists(DistDir & "apache22.config")) then
173     FileSystemObj.DeleteFile DistDir & "apache22.config", true
174   End If
175   FileSystemObj.MoveFile ConfigFile, DistDir & "apache22.config"
176
177   'Now just copy the other non-edited files over as well (if possible)
178
179   If (NOT FileSystemObj.FileExists(ConfigDir & "accessError.html")) then
180     FileSystemObj.CopyFile DistDir & "accessError.html", ConfigDir, false
181   End If
182
183   If (NOT FileSystemObj.FileExists(ConfigDir & "metadataError.html")) then
184     FileSystemObj.CopyFile DistDir & "metadataError.html", ConfigDir, false
185   End If
186
187   If (NOT FileSystemObj.FileExists(ConfigDir & "sessionError.html")) then
188     FileSystemObj.CopyFile DistDir & "sessionError.html", ConfigDir, false
189   End If
190
191   If (NOT FileSystemObj.FileExists(ConfigDir & "sslError.html")) then
192     FileSystemObj.CopyFile DistDir & "sslError.html", ConfigDir, false
193   End If
194
195   If (NOT FileSystemObj.FileExists(ConfigDir & "bindingTemplate.html")) then
196     FileSystemObj.CopyFile DistDir & "bindingTemplate.html", ConfigDir, false
197   End If
198
199   If (NOT FileSystemObj.FileExists(ConfigDir & "localLogout.html")) then
200     FileSystemObj.CopyFile DistDir & "localLogout.html", ConfigDir, false
201   End If
202
203   If (NOT FileSystemObj.FileExists(ConfigDir & "globalLogout.html")) then
204     FileSystemObj.CopyFile DistDir & "globalLogout.html", ConfigDir, false
205   End If
206
207   If (NOT FileSystemObj.FileExists(ConfigDir & "openssl.cnf")) then
208     FileSystemObj.CopyFile DistDir & "openssl.cnf", ConfigDir, false
209   End If
210
211   If (NOT FileSystemObj.FileExists(ConfigDir & "console.logger")) then
212     FileSystemObj.CopyFile DistDir & "console.logger", ConfigDir, false
213   End If
214
215   If (NOT FileSystemObj.FileExists(ConfigDir & "shibboleth.logger")) then
216     FileSystemObj.CopyFile DistDir & "shibboleth.logger", ConfigDir, false
217   End If
218
219   If (NOT FileSystemObj.FileExists(ConfigDir & "sp-example.crt")) then
220     FileSystemObj.CopyFile DistDir & "sp-example.crt", ConfigDir, false
221   End If
222
223   If (NOT FileSystemObj.FileExists(ConfigDir & "sp-example.key")) then
224     FileSystemObj.CopyFile DistDir & "sp-example.key", ConfigDir, false
225   End If
226
227   ' Finally, fix up schema catalogs.
228   
229   XMLDir = InstallDir & "\share\xml\xmltooling\"
230   ConfigFile = XMLDir & "catalog.xml"
231   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@/", XMLDir
232
233   XMLDir = InstallDir & "\share\xml\opensaml\"
234   ConfigFile = XMLDir & "saml20-catalog.xml"
235   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@/", XMLDir
236   ConfigFile = XMLDir & "saml11-catalog.xml"
237   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@/", XMLDir
238   ConfigFile = XMLDir & "saml10-catalog.xml"
239   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@/", XMLDir
240
241   XMLDir = InstallDir & "\share\xml\shibboleth\"
242   ConfigFile = XMLDir & "catalog.xml"
243   ReplaceInFile ConfigFile, "@-PKGXMLDIR-@/", XMLDir
244
245 'Last End If
246 End If