Skip to content

Commit cc570a4

Browse files
committed
harden OSTypeProber with regex list against version updates
1 parent db6bddb commit cc570a4

File tree

3 files changed

+335
-201
lines changed

3 files changed

+335
-201
lines changed

liquidapi/constants.go

Lines changed: 105 additions & 197 deletions
Original file line numberDiff line numberDiff line change
@@ -3,208 +3,116 @@
33

44
package liquidapi
55

6-
// This is the list of all valid values for an image's "vmware_ostype" attribute
7-
// in Nova/Glance. This list was copied from
6+
import "github.com/sapcc/go-bits/regexpext"
7+
8+
// The following list of regexes is derived from a hardcoded list of valid values
9+
// for an image's "vmware_ostype" attribute in Nova/Glance. This list was copied from
810
// https://github.com/openstack/nova/blob/master/nova/virt/vmwareapi/constants.py
911
// and the comment over there says:
1012
//
1113
// This list was extracted from a file on an installation of ESX 6.5. The
1214
// file can be found in /usr/lib/vmware/hostd/vimLocale/en/gos.vmsg
1315
// The contents of this list should be updated whenever there is a new
1416
// release of ESX.
15-
var isValidVMwareOSType = map[string]bool{
16-
"almalinux_64Guest": true,
17-
"amazonlinux2_64Guest": true,
18-
"amazonlinux3_64Guest": true,
19-
"asianux3_64Guest": true,
20-
"asianux3Guest": true,
21-
"asianux4_64Guest": true,
22-
"asianux4Guest": true,
23-
"asianux7_64Guest": true,
24-
"asianux8_64Guest": true,
25-
"centos64Guest": true,
26-
"centos6_64Guest": true,
27-
"centos6Guest": true,
28-
"centos7_64Guest": true,
29-
"centos8_64Guest": true,
30-
"centos9_64Guest": true,
31-
"centosGuest": true,
32-
"coreos64Guest": true,
33-
"crxPod1Guest": true,
34-
"crxSys1Guest": true,
35-
"darwin10_64Guest": true,
36-
"darwin10Guest": true,
37-
"darwin11_64Guest": true,
38-
"darwin11Guest": true,
39-
"darwin12_64Guest": true,
40-
"darwin13_64Guest": true,
41-
"darwin14_64Guest": true,
42-
"darwin15_64Guest": true,
43-
"darwin16_64Guest": true,
44-
"darwin17_64Guest": true,
45-
"darwin18_64Guest": true,
46-
"darwin19_64Guest": true,
47-
"darwin20_64Guest": true,
48-
"darwin21_64Guest": true,
49-
"darwin22_64Guest": true,
50-
"darwin23_64Guest": true,
51-
"darwin64Guest": true,
52-
"darwinGuest": true,
53-
"debian10_64Guest": true,
54-
"debian10Guest": true,
55-
"debian11_64Guest": true,
56-
"debian11Guest": true,
57-
"debian12_64Guest": true,
58-
"debian12Guest": true,
59-
"debian13_64Guest": true,
60-
"debian13Guest": true,
61-
"debian4_64Guest": true,
62-
"debian4Guest": true,
63-
"debian5_64Guest": true,
64-
"debian5Guest": true,
65-
"debian6_64Guest": true,
66-
"debian6Guest": true,
67-
"debian7_64Guest": true,
68-
"debian7Guest": true,
69-
"debian8_64Guest": true,
70-
"debian8Guest": true,
71-
"debian9_64Guest": true,
72-
"debian9Guest": true,
73-
"dosGuest": true,
74-
"eComStation2Guest": true,
75-
"eComStationGuest": true,
76-
"fedora64Guest": true,
77-
"fedoraGuest": true,
78-
"freebsd11_64Guest": true,
79-
"freebsd11Guest": true,
80-
"freebsd12_64Guest": true,
81-
"freebsd12Guest": true,
82-
"freebsd13_64Guest": true,
83-
"freebsd13Guest": true,
84-
"freebsd14_64Guest": true,
85-
"freebsd14Guest": true,
86-
"freebsd15_64Guest": true,
87-
"freebsd15Guest": true,
88-
"freebsd64Guest": true,
89-
"freebsdGuest": true,
90-
"mandrakeGuest": true,
91-
"mandriva64Guest": true,
92-
"mandrivaGuest": true,
93-
"netware5Guest": true,
94-
"netware6Guest": true,
95-
"nld9Guest": true,
96-
"oesGuest": true,
97-
"openServer5Guest": true,
98-
"openServer6Guest": true,
99-
"opensuse64Guest": true,
100-
"opensuseGuest": true,
101-
"oracleLinux10_64Guest": true,
102-
"oracleLinux64Guest": true,
103-
"oracleLinux6_64Guest": true,
104-
"oracleLinux6Guest": true,
105-
"oracleLinux7_64Guest": true,
106-
"oracleLinux8_64Guest": true,
107-
"oracleLinux9_64Guest": true,
108-
"oracleLinuxGuest": true,
109-
"os2Guest": true,
110-
"other24xLinux64Guest": true,
111-
"other24xLinuxGuest": true,
112-
"other26xLinux64Guest": true,
113-
"other26xLinuxGuest": true,
114-
"other3xLinux64Guest": true,
115-
"other3xLinuxGuest": true,
116-
"other4xLinux64Guest": true,
117-
"other4xLinuxGuest": true,
118-
"other5xLinux64Guest": true,
119-
"other5xLinuxGuest": true,
120-
"other6xLinux64Guest": true,
121-
"other6xLinuxGuest": true,
122-
"other7xLinux64Guest": true,
123-
"other7xLinuxGuest": true,
124-
"otherGuest64": true,
125-
"otherGuest": true,
126-
"otherLinux64Guest": true,
127-
"otherLinuxGuest": true,
128-
"redhatGuest": true,
129-
"rhel10_64Guest": true,
130-
"rhel2Guest": true,
131-
"rhel3_64Guest": true,
132-
"rhel3Guest": true,
133-
"rhel4_64Guest": true,
134-
"rhel4Guest": true,
135-
"rhel5_64Guest": true,
136-
"rhel5Guest": true,
137-
"rhel6_64Guest": true,
138-
"rhel6Guest": true,
139-
"rhel7_64Guest": true,
140-
"rhel7Guest": true,
141-
"rhel8_64Guest": true,
142-
"rhel9_64Guest": true,
143-
"rockylinux_64Guest": true,
144-
"sjdsGuest": true,
145-
"sles10_64Guest": true,
146-
"sles10Guest": true,
147-
"sles11_64Guest": true,
148-
"sles11Guest": true,
149-
"sles12_64Guest": true,
150-
"sles12Guest": true,
151-
"sles15_64Guest": true,
152-
"sles16_64Guest": true,
153-
"sles64Guest": true,
154-
"slesGuest": true,
155-
"solaris10_64Guest": true,
156-
"solaris10Guest": true,
157-
"solaris11_64Guest": true,
158-
"solaris8Guest": true,
159-
"solaris9Guest": true,
160-
"suse64Guest": true,
161-
"suseGuest": true,
162-
"turboLinux64Guest": true,
163-
"turboLinuxGuest": true,
164-
"ubuntu64Guest": true,
165-
"ubuntuGuest": true,
166-
"unixWare7Guest": true,
167-
"vmkernel5Guest": true,
168-
"vmkernel65Guest": true,
169-
"vmkernel6Guest": true,
170-
"vmkernel7Guest": true,
171-
"vmkernel8Guest": true,
172-
"vmkernelGuest": true,
173-
"vmwarePhoton64Guest": true,
174-
"win2000AdvServGuest": true,
175-
"win2000ProGuest": true,
176-
"win2000ServGuest": true,
177-
"win31Guest": true,
178-
"win95Guest": true,
179-
"win98Guest": true,
180-
"windows11_64Guest": true,
181-
"windows12_64Guest": true,
182-
"windows2019srv_64Guest": true,
183-
"windows2019srvNext_64Guest": true,
184-
"windows2022srvNext_64Guest": true,
185-
"windows7_64Guest": true,
186-
"windows7Guest": true,
187-
"windows7Server64Guest": true,
188-
"windows8_64Guest": true,
189-
"windows8Guest": true,
190-
"windows8Server64Guest": true,
191-
"windows9_64Guest": true,
192-
"windows9Guest": true,
193-
"windows9Server64Guest": true,
194-
"winLonghorn64Guest": true,
195-
"winLonghornGuest": true,
196-
"winNetBusinessGuest": true,
197-
"winNetDatacenter64Guest": true,
198-
"winNetDatacenterGuest": true,
199-
"winNetEnterprise64Guest": true,
200-
"winNetEnterpriseGuest": true,
201-
"winNetStandard64Guest": true,
202-
"winNetStandardGuest": true,
203-
"winNetWebGuest": true,
204-
"winNTGuest": true,
205-
"winVista64Guest": true,
206-
"winVistaGuest": true,
207-
"winXPHomeGuest": true,
208-
"winXPPro64Guest": true,
209-
"winXPProGuest": true,
17+
//
18+
// As the list is over 4 years old, new os_type versions have broken our
19+
// OSTypeProber. Therefore, we replaced all obvious version numbers in the valid
20+
// values with placeholders, so that this does not break as easily in the future.
21+
// We do not recommend utilizing this regex list for anything else other than
22+
// validating the "vmware_ostype" attribute on existing images.
23+
24+
var isValidVMwareOSTypeRegex = map[regexpext.BoundedRegexp]bool{
25+
`almalinux_64Guest`: true,
26+
`amazonlinux(\d+)_64Guest`: true,
27+
`asianux(\d+)_64Guest`: true,
28+
`asianux(\d+)Guest`: true,
29+
`centos64Guest`: true,
30+
`centos(\d+)_64Guest`: true,
31+
`centos(\d+)Guest`: true,
32+
`centosGuest`: true,
33+
`coreos64Guest`: true,
34+
`crxPod1Guest`: true,
35+
`crxSys1Guest`: true,
36+
`darwin(\d+)_64Guest`: true,
37+
`darwin(\d+)Guest`: true,
38+
`darwin64Guest`: true,
39+
`darwinGuest`: true,
40+
`debian(\d+)_64Guest`: true,
41+
`debian(\d+)Guest`: true,
42+
`dosGuest`: true,
43+
`eComStation2Guest`: true,
44+
`eComStationGuest`: true,
45+
`fedora64Guest`: true,
46+
`fedoraGuest`: true,
47+
`freebsd(\d+)_64Guest`: true,
48+
`freebsd(\d+)Guest`: true,
49+
`freebsd64Guest`: true,
50+
`freebsdGuest`: true,
51+
`mandrakeGuest`: true,
52+
`mandriva64Guest`: true,
53+
`mandrivaGuest`: true,
54+
`netware(\d+)Guest`: true,
55+
`nld9Guest`: true,
56+
`oesGuest`: true,
57+
`openServer(\d+)Guest`: true,
58+
59+
`opensuse64Guest`: true,
60+
`opensuseGuest`: true,
61+
`oracleLinux(\d+)_64Guest`: true,
62+
`oracleLinux64Guest`: true,
63+
`oracleLinux(\d+)Guest`: true,
64+
`oracleLinuxGuest`: true,
65+
`os2Guest`: true,
66+
`other(\d+)xLinux64Guest`: true,
67+
`other(\d+)xLinuxGuest`: true,
68+
`otherGuest64`: true,
69+
`otherGuest`: true,
70+
`otherLinux64Guest`: true,
71+
`otherLinuxGuest`: true,
72+
`redhatGuest`: true,
73+
`rhel(\d+)_64Guest`: true,
74+
`rhel(\d+)Guest`: true,
75+
`rockylinux_64Guest`: true,
76+
`sjdsGuest`: true,
77+
`sles(\d+)_64Guest`: true,
78+
`sles(\d+)Guest`: true,
79+
`sles64Guest`: true,
80+
`slesGuest`: true,
81+
`solaris(\d+)_64Guest`: true,
82+
`solaris(\d+)Guest`: true,
83+
`suse64Guest`: true,
84+
`suseGuest`: true,
85+
`turboLinux64Guest`: true,
86+
`turboLinuxGuest`: true,
87+
`ubuntu64Guest`: true,
88+
`ubuntuGuest`: true,
89+
`unixWare7Guest`: true,
90+
`vmkernel(\d+)Guest`: true,
91+
`vmkernelGuest`: true,
92+
`vmwarePhoton64Guest`: true,
93+
`win(\d+)AdvServGuest`: true,
94+
`win(\d+)ProGuest`: true,
95+
`win(\d+)ServGuest`: true,
96+
`win(\d+)Guest`: true,
97+
`windows(\d+)_64Guest`: true,
98+
`windows(\d+)srv_64Guest`: true,
99+
`windows(\d+)srvNext_64Guest`: true,
100+
`windows(\d+)Guest`: true,
101+
`windows(\d+)Server64Guest`: true,
102+
`winLonghorn64Guest`: true,
103+
`winLonghornGuest`: true,
104+
`winNetBusinessGuest`: true,
105+
`winNetDatacenter64Guest`: true,
106+
`winNetDatacenterGuest`: true,
107+
`winNetEnterprise64Guest`: true,
108+
`winNetEnterpriseGuest`: true,
109+
`winNetStandard64Guest`: true,
110+
`winNetStandardGuest`: true,
111+
`winNetWebGuest`: true,
112+
`winNTGuest`: true,
113+
`winVista64Guest`: true,
114+
`winVistaGuest`: true,
115+
`winXPHomeGuest`: true,
116+
`winXPPro64Guest`: true,
117+
`winXPProGuest`: true,
210118
}

0 commit comments

Comments
 (0)