r2232 - last mods before RackTables 0.16.3
[racktables] / upgrade.php
CommitLineData
6dc745d2 1<?php
fbbb74fb
DO
2
3// At the moment we assume, that for any two releases we can
4// sequentally execute all batches, that separate them, and
5// nothing will break. If this changes one day, the function
6// below will have to generate smarter upgrade paths, while
7// the upper layer will remain the same.
8// Returning an empty array means that no upgrade is necessary.
9function getDBUpgradePath ($v1, $v2)
10{
a6f83a72
DO
11 $versionhistory = array
12 (
13 '0.14.4',
14 '0.14.5',
15 '0.14.6',
16 '0.14.7',
17 '0.14.8',
18 '0.14.9',
2ff234d6 19 '0.14.10',
2c53a252 20 '0.14.11',
86fc1740 21 '0.14.12',
3861eef6 22 '0.15.0',
fe782367
DO
23 '0.15.1',
24 '0.16.0',
4a6a28f1 25 '0.16.1',
52c836b1 26 '0.16.2',
568079c3 27 '0.16.3',
a6f83a72 28 );
fbbb74fb
DO
29 if (!in_array ($v1, $versionhistory) || !in_array ($v2, $versionhistory))
30 {
31 showError ("An upgrade path has been requested for versions '${v1}' and '${v2}', " .
b0348307 32 "and at least one of those isn't known to me.", __FILE__);
fbbb74fb
DO
33 die;
34 }
35 $skip = TRUE;
36 $path = array();
37 // Now collect all versions > $v1 and <= $v2
38 foreach ($versionhistory as $v)
39 {
40 if ($v == $v1)
41 {
42 $skip = FALSE;
43 continue;
44 }
45 if ($skip)
46 continue;
47 $path[] = $v;
48 if ($v == $v2)
49 break;
50 }
51 return $path;
52}
53
5f4027b8
DO
54function printReleaseNotes ($batchid)
55{
56 switch ($batchid)
57 {
58 case '0.16.0':
7cd8e779 59 echo "<font color=red><strong>Release notes for ${batchid}</strong></font><br>";
5f4027b8
DO
60 echo 'The user permission records of this system have been automatically converted ';
61 echo 'to switch to the new RackCode authorization system. To prevent possible data ';
62 echo 'leak, the second line of the automatically created configuration bans everything ';
63 echo '(and the first allows everything to you, the administrator). The whole config can ';
ceeacd3c 64 echo "be reviewed on the Permissions page (under Configuration). Sorry for the inconvenience.<br><br>\n";
5f4027b8 65 break;
4d69ff46
DO
66 case '0.16.3':
67 echo "<font color=red><strong>Release notes for ${batchid}</strong></font><br>";
68 echo 'This release fixes a missing UNIQUE KEY in a table. The upgrade script may find it necessary first to transform some records.<br>';
69 echo 'Because of this it is normal to see several "update TagStorage ... Duplicate entry" failed queries during the upgrade.<br>';
f85f4db0 70 echo 'Additionally, it is normal to see " Can\'t DROP \'endpoint\'" message during upgrade<br>';
4d69ff46 71 break;
5f4027b8
DO
72 default:
73 break;
74 }
75}
76
fbbb74fb
DO
77// Upgrade batches are name exactly as the release where they first appear.
78// That simple, but seems sufficient for beginning.
79function executeUpgradeBatch ($batchid)
80{
81 $query = array();
ce109ff2 82 global $dbxlink;
fbbb74fb
DO
83 switch ($batchid)
84 {
85 case '0.14.5':
86 // We can't realiably distinguish between 0.14.4 and 0.14.5, but
87 // luckily the SQL statements below can be safely executed for both.
88
89
90 // This has to be checked once more to be sure IPAddress allocation
91 // conventions are correct.
92 $query[] = "delete from IPAddress where name = '' and reserved = 'no'";
93
94 // In the 0.14.4 release we had AUTO_INCREMENT low in the dictionary and auth
95 // data tables, thus causing new user's data to take primary keys equal to
96 // the values of shipped data in future releases. Let's shift user's data
97 // up and keep DB consistent.
98 $query[] = "alter table Attribute AUTO_INCREMENT = 10000";
99 $query[] = "alter table Chapter AUTO_INCREMENT = 10000";
100 $query[] = "alter table Dictionary AUTO_INCREMENT = 10000";
101 $query[] = "alter table UserAccount AUTO_INCREMENT = 10000";
102 $query[] = "update UserAccount set user_id = user_id + 10000 where user_id between 2 and 10000";
103 $query[] = "update UserPermission set user_id = user_id + 10000 where user_id between 2 and 10000";
104 $query[] = "update Attribute set attr_id = attr_id + 10000 where attr_id between 25 and 10000";
105 $query[] = "update AttributeMap set attr_id = attr_id + 10000 where attr_id between 25 and 10000";
106 $query[] = "update Chapter set chapter_no = chapter_no + 10000 where chapter_no between 21 and 10000";
107 $query[] = "update AttributeMap set chapter_no = chapter_no + 10000 where chapter_no between 21 and 10000";
108 break; // --------------------------------------------
109 case '0.14.6':
110 // This version features new dictionary entries, the correction above should allow us
111 // inject them w/o a problem.
112 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (13,25,'FreeBSD 1.x')";
113 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (13,26,'FreeBSD 2.x')";
114 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (13,27,'FreeBSD 3.x')";
115 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (13,28,'FreeBSD 4.x')";
116 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (13,29,'FreeBSD 5.x')";
117 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (13,30,'FreeBSD 6.x')";
118 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (13,31,'RHFC8')";
119 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (13,32,'ALTLinux Master 4.0')";
120 $query[] = "INSERT INTO `PortCompat` (`type1`, `type2`) VALUES (20,20)";
121 $query[] = "INSERT INTO `PortCompat` (`type1`, `type2`) VALUES (21,21)";
122 $query[] = "INSERT INTO `PortCompat` (`type1`, `type2`) VALUES (22,22)";
123 $query[] = "INSERT INTO `PortCompat` (`type1`, `type2`) VALUES (23,23)";
124 $query[] = "INSERT INTO `PortCompat` (`type1`, `type2`) VALUES (24,24)";
125 $query[] = "INSERT INTO `PortCompat` (`type1`, `type2`) VALUES (25,25)";
126 $query[] = "INSERT INTO `PortCompat` (`type1`, `type2`) VALUES (26,26)";
127 $query[] = "INSERT INTO `PortCompat` (`type1`, `type2`) VALUES (27,27)";
128 $query[] = "INSERT INTO `PortCompat` (`type1`, `type2`) VALUES (28,28)";
129 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (2,20,'KVM')";
130 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (2,21,'1000Base-ZX')";
131 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (2,22,'10GBase-ER')";
132 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (2,23,'10GBase-LR')";
133 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (2,24,'10GBase-LRM')";
134 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (2,25,'10GBase-ZR')";
135 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (2,26,'10GBase-LX4')";
136 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (2,27,'10GBase-CX4')";
137 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (2,28,'10GBase-Kx')";
138 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (12,114,'Cisco Catalyst 2970G-24T')";
139 $query[] = "INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) VALUES (12,115,'Cisco Catalyst 2970G-24TS')";
140 $query[] = "INSERT INTO `UserPermission` (`user_id`, `page`, `tab`, `access`) VALUES (0,'help','%','yes')";
141 // And 0.14.6 is the first release, which features Config table. Let's create
142 // and fill it with default values.
143 $query[] = "
144CREATE TABLE `Config` (
145 `varname` char(32) NOT NULL,
146 `varvalue` char(64) NOT NULL,
147 `vartype` enum('string','uint') NOT NULL default 'string',
148 `emptyok` enum('yes','no') NOT NULL default 'no',
149 `is_hidden` enum('yes','no') NOT NULL default 'yes',
150 `description` text,
151 PRIMARY KEY (`varname`)
152) ENGINE=MyISAM DEFAULT CHARSET=latin1
153 ";
154 $query[] = "INSERT INTO `Config` VALUES ('rtwidth_0','9','uint','no','yes','')";
155 $query[] = "INSERT INTO `Config` VALUES ('rtwidth_1','21','uint','no','yes','')";
156 $query[] = "INSERT INTO `Config` VALUES ('rtwidth_2','9','uint','no','yes','')";
157 $query[] = "INSERT INTO `Config` VALUES ('color_F','8fbfbf','string','no','no','HSV: 180-25-75. Free atoms, they are available for allocation to objects.')";
158 $query[] = "INSERT INTO `Config` VALUES ('color_A','bfbfbf','string','no','no','HSV: 0-0-75. Absent atoms.')";
159 $query[] = "INSERT INTO `Config` VALUES ('color_U','bf8f8f','string','no','no','HSV: 0-25-75. Unusable atoms. Some problems keep them from being free.')";
160 $query[] = "INSERT INTO `Config` VALUES ('color_T','408080','string','no','no','HSV: 180-50-50. Taken atoms, object_id should be set for such.')";
161 $query[] = "INSERT INTO `Config` VALUES ('color_Th','80ffff','string','no','no','HSV: 180-50-100. Taken atoms with highlight. They are not stored in the database and are only used for highlighting.')";
162 $query[] = "INSERT INTO `Config` VALUES ('color_Tw','804040','string','no','no','HSV: 0-50-50. Taken atoms with object problem. This is detected at runtime.')";
163 $query[] = "INSERT INTO `Config` VALUES ('color_Thw','ff8080','string','no','no','HSV: 0-50-100. An object can be both current and problematic. We run highlightObject() first and markupObjectProblems() second.')";
164 $query[] = "INSERT INTO `Config` VALUES ('default_port_type','11','uint','no','no','Default value for port type selects.')";
165 $query[] = "INSERT INTO `Config` VALUES ('MASSCOUNT','15','uint','no','no','Number of lines in object mass-adding form.')";
166 $query[] = "INSERT INTO `Config` VALUES ('MAXSELSIZE','30','uint','no','no','Maximum size of a SELECT HTML element.')";
167 $query[] = "INSERT INTO `Config` VALUES ('enterprise','MyCompanyName','string','no','no','Fit to your needs.')";
168 $query[] = "INSERT INTO `Config` VALUES ('NAMEFUL_OBJTYPES','4,7,8','string','yes','no','These are the object types, which assume a common name to be normally configured. If a name is absent for an object of one of such types, HTML output is corrected to accent this misconfiguration.')";
169 $query[] = "INSERT INTO `Config` VALUES ('ROW_SCALE','2','uint','no','no','Row-scope picture scale factor.')";
170 $query[] = "INSERT INTO `Config` VALUES ('PORTS_PER_ROW','12','uint','no','yes','Max switch port per one row on the switchvlans dynamic tab.')";
171 $query[] = "INSERT INTO `Config` VALUES ('DB_VERSION','0.14.6','string','no','yes','Database version.')";
172 break; // --------------------------------------------
803338c1 173 case '0.14.7':
ce109ff2 174 // IPAddress is hopefully fixed now finally.
803338c1 175 $query[] = "delete from IPAddress where name = '' and reserved != 'yes'";
ce109ff2
DO
176
177 // Now rebuild the dictionary into a new table with the same data,
178 // but proper indexing. We are going to convert compound index
179 // into 1-field one to employ AUTO_INCREMENT properly. This means
180 // renumbering lots of records in Dictionary and adjusting records
181 // in related tables. After that we can safely swap the tables.
9bf70f70
DO
182 $query[] = "
183CREATE TABLE `Dictionary_0_14_7_new` (
184 `chapter_no` int(10) unsigned NOT NULL,
185 `dict_key` int(10) unsigned NOT NULL auto_increment,
186 `dict_value` char(128) default NULL,
187 PRIMARY KEY (`dict_key`),
188 UNIQUE KEY `chap_to_key` (`chapter_no`,`dict_key`),
189 UNIQUE KEY `chap_to_val` (`chapter_no`,`dict_value`)
190) TYPE=MyISAM AUTO_INCREMENT=50000
191";
ce109ff2 192
758fe24c 193echo '<pre>';
ce109ff2
DO
194 // Find all chapter numbers, which will require AttributeValue adjustment.
195 $q2 = 'select distinct chapter_no from AttributeMap where chapter_no != 0';
196 $r2 = $dbxlink->query ($q2);
758fe24c
DO
197 $chaplist = array();
198 while ($row = $r2->fetch (PDO::FETCH_NUM))
199 $chaplist[] = $row[0];
ce109ff2 200 $r2->closeCursor();
758fe24c 201 unset ($r2);
ce109ff2
DO
202
203 $stock = array();
204 // Below I list the records, which are known to be the stock
205 // dictionary records of 0.14.6 release.
206 $stock[1] = array
207 (
208 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16
209 );
210 $stock[2] = array
211 (
212 3, 4, 5, 6, 7, 8, 9,
213 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
214 20, 21, 22, 23, 24, 25, 26, 27, 28
215 );
216 $stock[11] = array
217 (
218 1, 3, 4, 5, 6, 7, 8, 9,
219 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
220 21, 22, 24, 25, 26, 27, 28, 29,
221 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
222 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
223 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
224 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
225 70, 71, 72, 73, 74, 75, 76
226 );
227 $stock[12] = array
228 (
229 1, 11, 13, 14, 15, 16, 17, 18, 19, 20, 26, 29,
230 31, 32, 33, 34, 35, 36, 37, 38, 39,
231 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
232 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
233 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
234 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
235 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
236 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
237 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
db1147d2 238 110, 111, 112, 113, 114, 115
ce109ff2
DO
239 );
240 $stock[13] = array
241 (
242 1, 2, 3, 4, 5, 6, 7, 8, 9,
243 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
244 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
245 30, 31, 32
246 );
247 $stock[14] = array
248 (
249 1, 2, 9, 11, 13, 15, 19, 20, 21, 22
250 );
251 $stock[16] = array
252 (
253 1, 2, 3, 4, 5, 6, 7, 8
254 );
255 $stock[17] = array
256 (
257 1, 2, 3, 4, 5, 6, 7, 8, 9,
258 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
259 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
260 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
261 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
262 50
263 );
264 $stock[18] = array
265 (
266 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
267 );
268 $stock[19] = array
269 (
270 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
271 );
272 $stock[20] = array
273 (
274 1, 2
275 );
276
277 // Load dictionary and transform into two tree structures for
278 // stock and user record sets.
279 $dict = array();
264b07b4 280 $q3 = 'select chapter_no, dict_key, dict_value from Dictionary order by chapter_no, dict_key';
ce109ff2
DO
281 $r3 = $dbxlink->query ($q3);
282
9e7f8a4b 283 while ($row = $r3->fetch (PDO::FETCH_ASSOC))
ce109ff2
DO
284 {
285 $tree = 'user';
286 $dict_key = $row['dict_key'];
287 $chapter_no = $row['chapter_no'];
288 switch ($chapter_no)
289 {
290 case 1: // RackObjectType
291 case 2: // PortType
292 case 11: // server models
293 case 12: // network switch models
294 case 13: // server OS type
295 case 14: // network switch OS type
296 case 16: // router OS type
297 case 17: // router models
298 case 18: // disk array models
299 case 19: // tape library models
300 case 20: // Protocols
301 if (in_array ($dict_key, $stock[$chapter_no]))
302 $tree = 'stock';
303 break;
304 }
a07a39b1 305 $dict[$tree][$chapter_no][$dict_key] = array ('value' => $row['dict_value']);
ce109ff2
DO
306 }
307 $r3->closeCursor();
758fe24c 308 unset ($r3);
ce109ff2
DO
309
310
311 // Now we store stock dataset first, bump up key value and store
312 // user's data. After that we will know the new dict_key for all
313 // records.
314 // The result of both datasets processing is saved in $new_dict.
315 // Save on calling LAST_ISERT_ID() each time by keeping own key.
316 $newkey = 1;
317 $new_dict = array();
318 foreach ($dict['stock'] as $chapter_no => $words)
319 {
320 $new_dict[$chapter_no] = array();
321 foreach ($words as $dict_key => $entry)
322 {
1b5942be 323 $query[] = "insert into Dictionary_0_14_7_new (chapter_no, dict_key, dict_value) " .
ce109ff2
DO
324 "values (${chapter_no}, ${newkey}, '${entry['value']}')";
325 $new_dict[$chapter_no][$dict_key] = $entry;
326 $new_dict[$chapter_no][$dict_key]['newkey'] = $newkey;
327 $newkey++;
328 }
329 }
e7882270 330 $newkey = 50000;
ce109ff2
DO
331 foreach ($dict['user'] as $chapter_no => $words)
332 {
333 // Some chapters may appear on the user dataset only.
334 if (!isset ($new_dict[$chapter_no]))
335 $new_dict[$chapter_no] = array();
336 foreach ($words as $dict_key => $entry)
337 {
338 $query[] = "insert into Dictionary_0_14_7_new " .
339 "values (${chapter_no}, ${newkey}, '${entry['value']}')";
340 $new_dict[$chapter_no][$dict_key] = $entry;
341 $new_dict[$chapter_no][$dict_key]['newkey'] = $newkey;
342 $newkey++;
343 }
344 }
345 // The new table should now have adequate AUTO_INCREMENT w/o our care.
758fe24c
DO
346 // Install the new data.
347 $query[] = 'drop table Dictionary';
348 $query[] = 'alter table Dictionary_0_14_7_new rename to Dictionary';
ce109ff2
DO
349
350 // Now we iterate over the joint dataset, picking some chapters and
351 // performing additional processing:
352 // 1 (RackObjectType) --- adjust RackObject and regenerate AttributeMap
a07a39b1 353 // 2 (PortType) --- adjust Port and regenerate PortCompat (at a latter point)
ce109ff2
DO
354 // 3 (RackRow) --- adjust Rack
355 // 20 (Protocols) --- adjust PortForwarding
356 // All other chapters listed in $chaplist --- adjust AttributeValue
357
358 $query[] = "delete from AttributeMap";
359 foreach ($new_dict as $chapter_no => $words)
360 {
361 foreach ($words as $oldkey => $data)
362 {
363 $value = $data['value'];
364 $newkey = $data['newkey'];
264b07b4
DO
365 // Even if the key doesn't change, go on to have
366 // AttributeMap regenerated completely.
ce109ff2
DO
367 if ($chapter_no == 1)
368 {
369 $q4 = "select id from RackObject where objtype_id = ${oldkey}";
370 $r4 = $dbxlink->query ($q4);
371 while ($row = $r4->fetch (PDO::FETCH_ASSOC))
372 $query[] = "update RackObject set objtype_id = ${newkey} where id = ${row['id']} limit 1";
373 $r4->closeCursor();
264b07b4 374 unset ($r4);
ce109ff2 375
758fe24c
DO
376 $q5 = "select attr_id, chapter_no from AttributeMap where objtype_id = ${oldkey}";
377 $r5 = $dbxlink->query ($q5);
378 while ($row = $r5->fetch (PDO::FETCH_ASSOC))
ce109ff2 379 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (${newkey}, ${row['attr_id']}, ${row['chapter_no']})";
758fe24c 380 $r5->closeCursor();
264b07b4 381 unset ($r5);
ce109ff2 382 }
a07a39b1
DO
383 elseif ($chapter_no == 2)
384 {
758fe24c 385 $q46 = "select id from Port where type = ${oldkey}";
758fe24c
DO
386 $r46 = $dbxlink->query ($q46);
387 if ($r46 == NULL)
388 echo 'ERROR';
389 while ($row = $r46->fetch (PDO::FETCH_ASSOC))
a07a39b1 390 $query[] = "update Port set type = ${newkey} where id = ${row['id']} limit 1";
758fe24c 391 $r46->closeCursor();
264b07b4 392 unset ($r46);
a07a39b1 393 }
ce109ff2
DO
394 elseif ($chapter_no == 3)
395 {
758fe24c
DO
396 $q7 = "select id from Rack where row_id = ${oldkey}";
397 $r7 = $dbxlink->query ($q7);
398 while ($row = $r7->fetch (PDO::FETCH_ASSOC))
ce109ff2 399 $query[] = "update Rack set row_id = ${newkey} where id = ${row['id']} limit 1";
758fe24c 400 $r7->closeCursor();
264b07b4 401 unset ($r7);
ce109ff2 402 }
a07a39b1
DO
403 elseif ($chapter_no == 20)
404 {
264b07b4
DO
405 $q8 = "select object_id, localip, localport, remoteip, remoteport from PortForwarding where proto = ${oldkey}";
406 $r8 = $dbxlink->query ($q8);
758fe24c 407 while ($row = $r8->fetch (PDO::FETCH_ASSOC))
264b07b4
DO
408 $query[] = "update PortForwarding set proto = ${newkey} where " .
409 "object_id = ${row['object_id']} and localip = ${row['localip']} and " .
410 "localport = ${row['localport']} and remoteip = ${row['remoteip']} and " .
411 "remoteport = ${row['remoteport']} and proto = ${oldkey} limit 1";
758fe24c 412 $r8->closeCursor();
264b07b4 413 unset ($r8);
758fe24c
DO
414 }
415 elseif (in_array ($chapter_no, $chaplist))
416 {
5b1d68c5 417 $q81 = "select object_id, AttributeValue.attr_id from " .
264b07b4
DO
418 "AttributeValue natural join Attribute natural join AttributeMap " .
419 "inner join RackObject on RackObject.id = object_id and RackObject.objtype_id = AttributeMap.objtype_id " .
420 "where attr_type = 'dict' and chapter_no = ${chapter_no} and uint_value = ${oldkey}";
421 $r81 = $dbxlink->query ($q81);
422 while ($row = $r81->fetch (PDO::FETCH_ASSOC))
1b5942be
DO
423 $query[] = "update AttributeValue set uint_value = ${newkey} " .
424 "where object_id = ${row['object_id']} and attr_id = ${row['attr_id']}";
264b07b4
DO
425 $r81->closeCursor();
426 unset ($r81);
a07a39b1 427 }
ce109ff2
DO
428 }
429 }
a07a39b1 430 // Now it's possible to schedule PortCompat regeneration.
1b5942be
DO
431 // Convert the fields to unsigned on occasion.
432 $query[] = 'drop table PortCompat';
433 $query[] = 'create table PortCompat (type1 int(10) unsigned NOT NULL, type2 int(10) unsigned NOT NULL)';
758fe24c
DO
434 $q9 = "select type1, type2 from PortCompat";
435 $r9 = $dbxlink->query ($q9);
436 while ($row = $r9->fetch (PDO::FETCH_ASSOC))
a07a39b1
DO
437 {
438 $new_type1 = $new_dict[2][$row['type1']]['newkey'];
439 $new_type2 = $new_dict[2][$row['type2']]['newkey'];
440 $query[] = "insert into PortCompat (type1, type2) values (${new_type1}, ${new_type2})";
441 }
758fe24c 442 $r9->closeCursor();
264b07b4 443 unset ($r9);
758fe24c 444echo '</pre>';
a07a39b1
DO
445
446 // Give the configuration some finish
447 $query[] = "update Config set is_hidden = 'yes' where varname = 'color_F'";
448 $query[] = "update Config set is_hidden = 'yes' where varname = 'color_A'";
449 $query[] = "update Config set is_hidden = 'yes' where varname = 'color_U'";
450 $query[] = "update Config set is_hidden = 'yes' where varname = 'color_T'";
451 $query[] = "update Config set is_hidden = 'yes' where varname = 'color_Th'";
452 $query[] = "update Config set is_hidden = 'yes' where varname = 'color_Tw'";
453 $query[] = "update Config set is_hidden = 'yes' where varname = 'color_Thw'";
454 $query[] = "update Config set description = 'Default port type' where varname = 'default_port_type'";
455 $query[] = "update Config set description = 'Picture scale for rack row display' where varname = 'ROW_SCALE'";
456 $query[] = "update Config set description = 'Organization name' where varname = 'enterprise'";
457 $query[] = "update Config set description = 'Expect common name configured for the following object types' where varname = 'NAMEFUL_OBJTYPES'";
458 $query[] = "update Config set description = '&lt;SELECT&gt; lists height' where varname = 'MAXSELSIZE'";
459 $query[] = "update Config set description = '&quot;Fast&quot; form is this many records tall' where varname = 'MASSCOUNT'";
264b07b4 460 $query[] = "update Config set is_hidden = 'no', description = 'Ports per row in VLANs tab' where varname = 'PORTS_PER_ROW'";
a07a39b1 461 $query[] = "INSERT INTO `Config` VALUES ('IPV4_ADDRS_PER_PAGE','256','uint','no','no','IPv4 addresses per page')";
9e7f8a4b 462 $query[] = "INSERT INTO `Config` VALUES ('DEFAULT_RACK_HEIGHT','42','uint','yes','no','Default rack height')";
bd912758
DO
463 // After Dictionary transformation we ought to list 337 stock records in DB. Add more.
464 $new_words = array();
465 $new_words[338] = array (12 => 'Dell PowerConnect 2216');
466 $new_words[] = array (12 => 'Dell PowerConnect 2224');
467 $new_words[] = array (12 => 'Dell PowerConnect 2324');
468 $new_words[] = array (12 => 'Dell PowerConnect 2708');
469 $new_words[] = array (12 => 'Dell PowerConnect 2716');
470 $new_words[] = array (12 => 'Dell PowerConnect 2724');
471 $new_words[] = array (12 => 'Dell PowerConnect 2748');
472 $new_words[] = array (12 => 'Dell PowerConnect 3424');
473 $new_words[] = array (12 => 'Dell PowerConnect 3424P');
474 $new_words[] = array (12 => 'Dell PowerConnect 3448');
475 $new_words[] = array (12 => 'Dell PowerConnect 3448P');
476 $new_words[] = array (12 => 'Dell PowerConnect 5324');
477 $new_words[] = array (12 => 'Dell PowerConnect 6224');
478 $new_words[] = array (12 => 'Dell PowerConnect 6224P');
479 $new_words[] = array (12 => 'Dell PowerConnect 6224F');
480 $new_words[] = array (12 => 'Dell PowerConnect 6248');
481 $new_words[] = array (12 => 'Dell PowerConnect 6248P');
482 $new_words[] = array (11 => 'Dell PowerEdge 6850');
483 $new_words[] = array (11 => 'Dell PowerEdge 6950');
484 $new_words[] = array (11 => 'Dell PowerEdge R900');
485 $new_words[] = array (11 => 'Dell PowerEdge 4400');
486 $new_words[] = array (11 => 'Dell PowerEdge 2650');
487 $new_words[] = array (11 => 'Dell PowerEdge 2550');
488 $new_words[] = array (11 => 'Dell PowerEdge 750');
489 $new_words[] = array (11 => 'Dell PowerEdge 2450');
490 $new_words[] = array (11 => 'Dell PowerEdge 850');
491 $new_words[] = array (11 => 'Dell PowerEdge 1850');
492 $new_words[] = array (11 => 'Dell PowerEdge 860');
493 $new_words[] = array (11 => 'Dell PowerEdge 2900');
494 $new_words[] = array (11 => 'Dell PowerEdge 2970');
495 $new_words[] = array (11 => 'Dell PowerEdge SC1435');
496 $new_words[] = array (12 => 'Cisco Catalyst 6509');
497 $new_words[] = array (12 => 'Cisco ME 6524GS-8S');
498 $new_words[] = array (12 => 'Cisco ME 6524GT-8S');
499 $new_words[] = array (12 => 'Cisco Catalyst 4503-E');
500 $new_words[] = array (12 => 'Cisco Catalyst 4506-E');
501 $new_words[] = array (12 => 'Cisco Catalyst 4507R-E');
502 $new_words[] = array (12 => 'Cisco Catalyst 4510R-E');
503 $new_words[] = array (12 => 'Cisco Catalyst 3750-24TE-M');
504 $new_words[] = array (12 => 'Cisco Catalyst 4948-10GE');
505 $new_words[] = array (12 => 'Cisco ME 4924-10GE');
506 $new_words[] = array (12 => 'Cisco Catalyst 2960-24');
507 $new_words[] = array (12 => 'Cisco Catalyst 2950-24');
508 $new_words[] = array (12 => 'Cisco Catalyst 2950-12');
509 $new_words[] = array (12 => 'Cisco Catalyst 2950C-24');
510 $new_words[] = array (12 => 'Cisco Catalyst 2950G-24-DC');
511 $new_words[] = array (12 => 'Cisco Catalyst 2950SX-48');
512 $new_words[] = array (12 => 'Cisco Catalyst 2950SX-24');
513 $new_words[] = array (12 => 'Cisco Catalyst 2950T-24');
514 $new_words[] = array (12 => 'Cisco Catalyst 2950T-48');
515 $new_words[] = array (12 => 'Cisco Catalyst 2950G-12');
516 $new_words[] = array (12 => 'Cisco Catalyst 2950G-24');
517 $new_words[] = array (12 => 'Cisco Catalyst 2950G-48');
bd912758
DO
518 $new_words[] = array (12 => 'Cisco Catalyst 3508G XL');
519 $new_words[] = array (12 => 'Cisco Catalyst 3512 XL');
520 $new_words[] = array (12 => 'Cisco Catalyst 3524 XL');
521 $new_words[] = array (12 => 'Cisco Catalyst 3524 PWR XL');
522 $new_words[] = array (12 => 'Cisco Catalyst 3548 XL');
523 $new_words[] = array (12 => 'Cisco ME 2400-24TS-A');
524 $new_words[] = array (12 => 'Cisco ME 2400-24TS-D');
525 $new_words[] = array (12 => 'Cisco Catalyst 3550-12T');
526 $new_words[] = array (12 => 'Cisco Catalyst 3550-12G');
527 $new_words[] = array (12 => 'Cisco Catalyst 3550-24');
528 $new_words[] = array (12 => 'Cisco Catalyst 3550-24 FX');
529 $new_words[] = array (12 => 'Cisco Catalyst 3550-24 DC');
530 $new_words[] = array (12 => 'Cisco Catalyst 3550-24 PWR');
531 $new_words[] = array (12 => 'Cisco Catalyst 3550-48');
532 $new_words[] = array (12 => 'Cisco ME 3400G-12CS-A');
533 $new_words[] = array (12 => 'Cisco ME 3400G-12CS-D');
534 $new_words[] = array (12 => 'Cisco ME 3400G-2CS-A');
535 $new_words[] = array (12 => 'Cisco ME 3400-24TS-A');
536 $new_words[] = array (12 => 'Cisco ME 3400-24TS-D');
537 $new_words[] = array (12 => 'Cisco ME 3400-24FS-A');
7373a304
DO
538 $new_words[] = array (12 => 'Foundry FastIron GS 624XGP');
539 $new_words[] = array (12 => 'Foundry FastIron GS 624XGP-POE');
540 $new_words[] = array (12 => 'Foundry FastIron LS 624');
541 $new_words[] = array (12 => 'Foundry FastIron LS 648');
542 $new_words[] = array (12 => 'Foundry NetIron M2404F');
543 $new_words[] = array (12 => 'Foundry NetIron M2404C');
544 $new_words[] = array (17 => 'Foundry BigIron RX-32');
e7882270
DO
545 $new_words[] = array (13 => 'Debian 2.0 (hamm)');
546 $new_words[] = array (13 => 'Debian 2.1 (slink)');
547 $new_words[] = array (13 => 'Debian 2.2 (potato)');
548 $new_words[] = array (13 => 'Debian 4.0 (etch)');
549 $new_words[] = array (13 => 'ALTLinux Server 4.0');
e7882270
DO
550 $new_words[] = array (13 => 'ALTLinux Sisyphus');
551 $new_words[] = array (13 => 'openSUSE 10.0');
552 $new_words[] = array (13 => 'openSUSE 10.1');
553 $new_words[] = array (13 => 'openSUSE 10.2');
554 $new_words[] = array (13 => 'openSUSE 10.3');
555 $new_words[] = array (13 => 'Ubuntu 4.10');
556 $new_words[] = array (13 => 'Ubuntu 5.04');
557 $new_words[] = array (13 => 'Ubuntu 5.10');
558 $new_words[] = array (13 => 'Ubuntu 6.06 LTS');
559 $new_words[] = array (13 => 'Ubuntu 6.10');
560 $new_words[] = array (13 => 'Ubuntu 7.04');
561 $new_words[] = array (13 => 'Ubuntu 7.10');
562 $new_words[] = array (13 => 'Ubuntu 8.04 LTS');
563 $new_words[] = array (13 => 'RHEL5');
5f58747d
DO
564 $new_words[] = array (18 => 'Dell PowerVault 210S');
565 $new_words[] = array (18 => 'Dell PowerVault 221S');
ab0ec3ef
DO
566 $new_words[] = array (2 => 'dry contact');
567 $new_words[] = array (2 => 'unknown');
499dfa73
DO
568 // Two above records ought to take keys 439 and 440.
569 $query[] = "INSERT INTO `PortCompat` (`type1`, `type2`) VALUES (439,439)";
efb6bab4
DO
570 $new_words[] = array (13 => 'CentOS-2');
571 $new_words[] = array (13 => 'CentOS-3');
572 $new_words[] = array (13 => 'CentOS-4');
573 $new_words[] = array (13 => 'CentOS-5');
bd912758
DO
574 foreach ($new_words as $dict_key => $tmp)
575 foreach ($tmp as $chapter_no => $dict_value)
576 $query[] = 'INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) ' .
577 "VALUES (${chapter_no}, ${dict_key}, '${dict_value}')";
57913f20
DO
578 // Resetting to defaults is worse, than remapping, but better than
579 // leaving messed values.
580 $query[] = "update Config set varvalue = '24' where varname = 'default_port_type' limit 1";
ce109ff2 581 // We are done.
54c2a7a8 582 $query[] = "update Config set varvalue = '0.14.7' where varname = 'DB_VERSION'";
803338c1 583 break; // --------------------------------------------
a6305acc
DO
584 case '0.14.8':
585 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('REQUIRE_ASSET_TAG_FOR','4,7,8','string','yes','no','Require asset tag for the following object types')";
78f44cbc
DO
586 $query[] = "alter table Port modify column id int(10) unsigned NOT NULL auto_increment";
587 $query[] = "alter table Port modify column object_id int(10) unsigned NOT NULL";
588 $query[] = "alter table Port modify column type int(10) unsigned NOT NULL";
589 $query[] = "alter table Link modify column porta int(10) unsigned";
590 $query[] = "alter table Link modify column portb int(10) unsigned";
ba1c6d42
DO
591 $query[] = "alter table PortForwarding modify column object_id int(10) unsigned not null";
592 $query[] = "alter table PortForwarding modify column localport smallint(5) unsigned not null";
593 $query[] = "alter table PortForwarding modify column remoteport smallint(5) unsigned not null";
594 $query[] = "alter table IPBonds modify column object_id int(10) unsigned not null";
595 $query[] = "alter table IPRanges modify column id int(10) unsigned not null";
596 $query[] = "alter table IPRanges modify column mask int(10) unsigned not null";
78f44cbc
DO
597 $query[] = "alter table Port add index `type` (type)";
598 $query[] = "alter table PortCompat add index `type1` (type1)";
599 $query[] = "alter table PortCompat add index `type2` (type2)";
992d2ec2
DO
600 $query[] = "update Dictionary set dict_value = 'Debian 3.0 (woody)' where dict_key = 234";
601 $query[] = "update Dictionary set dict_value = 'Debian 3.1 (sarge)' where dict_key = 235";
602 $query[] = "update Dictionary set dict_value = 'Foundry BigIron 15000' where dict_key = 311";
603 $query[] = "update Dictionary set dict_value = 'RHF7' where dict_key = 232";
604 $query[] = "update Dictionary set dict_value = 'RHF8' where dict_key = 242";
c8b74094
DO
605 $query[] = "INSERT INTO `Attribute` (`attr_id`, `attr_type`, `attr_name`) VALUES (25,'string','UUID');";
606 $query[] = "INSERT INTO `AttributeMap` (`objtype_id`, `attr_id`, `chapter_no`) VALUES (4,25,0);";
ba1c6d42
DO
607 $query[] = "update Dictionary set dict_value = '[[Cisco Catalyst 2970G-24T | http://www.cisco.com/en/US/products/hw/switches/ps5206/ps5313/index.html]]' where dict_key = 210";
608 $query[] = "update Dictionary set dict_value = '[[Cisco Catalyst 2970G-24TS | http://www.cisco.com/en/US/products/hw/switches/ps5206/ps5437/index.html]]' where dict_key = 211";
78f44cbc 609 $query[] = "update Config set varvalue = '0.14.8' where varname = 'DB_VERSION'";
a6305acc 610 break; // --------------------------------------------
cf48742e
DO
611 case '0.14.9':
612 $query[] = "alter table IPRanges modify column id int(10) unsigned not null auto_increment";
0a7136d4 613 $query[] = "alter table Rack modify column height tinyint(3) unsigned not null default '42'";
86f94102 614 $query[] = "alter table Rack add column thumb_data blob after comment";
2526f63c
DO
615 $query[] = "
616CREATE TABLE `IPLoadBalancer` (
617 `object_id` int(10) unsigned default NULL,
618 `rspool_id` int(10) unsigned default NULL,
70c24883 619 `vs_id` int(10) unsigned default NULL,
2526f63c
DO
620 `vsconfig` text,
621 `rsconfig` text,
70c24883 622 UNIQUE KEY `LB-VS` (`object_id`,`vs_id`)
2526f63c
DO
623) ENGINE=MyISAM";
624 $query[] = "
625CREATE TABLE `IPRSPool` (
626 `id` int(10) unsigned NOT NULL auto_increment,
2526f63c
DO
627 `name` char(255) default NULL,
628 `vsconfig` text,
629 `rsconfig` text,
630 PRIMARY KEY (`id`)
631) ENGINE=MyISAM";
632 $query[] = "
633CREATE TABLE `IPRealServer` (
634 `id` int(10) unsigned NOT NULL auto_increment,
35b72b35 635 `inservice` enum('yes','no') NOT NULL default 'no',
2526f63c
DO
636 `rsip` int(10) unsigned default NULL,
637 `rsport` smallint(5) unsigned default NULL,
638 `rspool_id` int(10) unsigned default NULL,
639 `rsconfig` text,
70c24883
DO
640 PRIMARY KEY (`id`),
641 UNIQUE KEY `pool-endpoint` (`rspool_id`,`rsip`,`rsport`)
2526f63c
DO
642) ENGINE=MyISAM";
643 $query[] = "
644CREATE TABLE `IPVirtualService` (
645 `id` int(10) unsigned NOT NULL auto_increment,
646 `vip` int(10) unsigned default NULL,
647 `vport` smallint(5) unsigned default NULL,
648 `proto` enum('TCP','UDP') NOT NULL default 'TCP',
649 `name` char(255) default NULL,
650 `vsconfig` text,
651 `rsconfig` text,
d800a805 652 PRIMARY KEY (`id`)
2526f63c 653) ENGINE=MyISAM";
d800a805 654 $query[] = "INSERT INTO `Config` VALUES ('DEFAULT_SLB_VS_PORT','','uint','yes','no','Default port of SLB virtual service')";
73e11958 655 $query[] = "INSERT INTO `Config` VALUES ('DEFAULT_SLB_RS_PORT','','uint','yes','no','Default port of SLB real server')";
6dbdc7c7
DO
656 $query[] = "INSERT INTO `Config` VALUES ('IPV4_PERFORMERS','1,4,7,8,12,14','string','yes','no','IPv4-capable object types')";
657 $query[] = "INSERT INTO `Config` VALUES ('NATV4_PERFORMERS','4,7,8','string','yes','no','NATv4-capable object types')";
f2154c9f 658 $query[] = "INSERT INTO `Config` VALUES ('USER_AUTH_SRC','database','string','no','no','User authentication source')";
3e0fc4b6 659 $query[] = "alter table RackSpace drop column problem_id";
d800a805 660 $query[] = "update Config set varvalue = '0.14.9' where varname = 'DB_VERSION'";
cf48742e 661 break; // --------------------------------------------
a6f83a72
DO
662 case '0.14.10':
663 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('DETECT_URLS','no','string','yes','no','Detect URLs in text fields')";
f187f2ec
DO
664 $query[] = "alter table RackHistory modify column height tinyint(3) unsigned";
665 $query[] = "alter table RackHistory add column thumb_data blob after comment";
4b8d413e 666 $query[] = "INSERT INTO `Config` VALUES ('RACK_PRESELECT_THRESHOLD','1','uint','no','no','Rack pre-selection threshold')";
a6f83a72 667 $query[] = "update Config set varvalue = '0.14.10' where varname = 'DB_VERSION'";
81dbd3bc 668 break; // --------------------------------------------
2ff234d6
DO
669 case '0.14.11':
670 $new_words = array();
671 $new_words[445] = array (1 => 'KVM switch');
672 $new_words[] = array (2 => 'KVM (console)');
673 $new_words[] = array (1 => 'multiplexer');
674 $query[] = "update Dictionary set dict_value = 'network switch' where dict_key = 8";
675 $query[] = "update Dictionary set dict_value = 'KVM (host)' where dict_key = 33";
676 $query[] = "delete from PortCompat where type1 = 33 and type2 = 33";
677 $query[] = "insert into PortCompat (type1, type2) values (33, 446)";
678 $query[] = "insert into PortCompat (type1, type2) values (446, 33)";
35d3ecaf
DO
679 $query[] = "insert into Chapter (chapter_no, sticky, chapter_name) values (21, 'no', 'KVM switch models')";
680 $query[] = "insert into Chapter (chapter_no, sticky, chapter_name) values (22, 'no', 'multiplexer models')";
2ff234d6
DO
681 $query[] = "update Chapter set chapter_name = 'network switch models' where chapter_no = 12";
682 $new_words[] = array (21 => '[[Avocent DSR1021 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2418]]');
683 $new_words[] = array (21 => '[[Avocent DSR1022 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2498]]');
684 $new_words[] = array (21 => '[[Avocent DSR1024 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2588]]');
685 $new_words[] = array (21 => '[[Avocent DSR1031 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2804]]');
686 $new_words[] = array (21 => '[[Avocent DSR1020 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2340]]');
687 $new_words[] = array (21 => '[[Avocent DSR2020 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2884]]');
688 $new_words[] = array (21 => '[[Avocent DSR4020 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=3100]]');
689 $new_words[] = array (21 => '[[Avocent DSR8020 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=3358]]');
690 $new_words[] = array (21 => '[[Avocent DSR1030 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2726]]');
691 $new_words[] = array (21 => '[[Avocent DSR2030 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2988]]');
692 $new_words[] = array (21 => '[[Avocent DSR2035 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=3050]]');
693 $new_words[] = array (21 => '[[Avocent DSR4030 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=3196]]');
694 $new_words[] = array (21 => '[[Avocent DSR8030 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=3472]]');
695 $new_words[] = array (21 => '[[Avocent DSR8035 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=3580]]');
696 $new_words[] = array (21 => '[[Avocent AutoView 1415 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=1612]]');
697 $new_words[] = array (21 => '[[Avocent AutoView 1515 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=1736]]');
698 $new_words[] = array (21 => '[[Avocent AutoView 2015 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=1930]]');
699 $new_words[] = array (21 => '[[Avocent AutoView 2020 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2012]]');
700 $new_words[] = array (21 => '[[Avocent AutoView 2030 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2114]]');
701 $new_words[] = array (21 => '[[Avocent AutoView 3100 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2222]]');
702 $new_words[] = array (21 => '[[Avocent AutoView 3200 | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=2266]]');
703 $new_words[] = array (21 => '[[Avocent SwitchView 1000 4-port | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=4016]]');
704 $new_words[] = array (21 => '[[Avocent SwitchView 1000 8-port | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=4094]]');
705 $new_words[] = array (21 => '[[Avocent SwitchView 1000 16-port | http://www.avocent.com/WorkArea/linkit.aspx?LinkIdentifier=id&ItemID=3934]]');
706 $new_words[] = array (22 => '[[Cronyx FMUX/S-4E1 | http://www.cronyx.ru/hardware/fmux-ring.html]]');
707 $new_words[] = array (22 => '[[Cronyx FMUX/S-4E1/ETS | http://www.cronyx.ru/hardware/fmux-ring.html]]');
708 $new_words[] = array (22 => '[[Cronyx FMUX/S-4E1/M | http://www.cronyx.ru/hardware/fmux-ring.html]]');
709 $new_words[] = array (22 => '[[Cronyx FMUX/S-8E1 | http://www.cronyx.ru/hardware/fmux-ring.html]]');
710 $new_words[] = array (22 => '[[Cronyx FMUX/S-8E1/ETS | http://www.cronyx.ru/hardware/fmux-ring.html]]');
711 $new_words[] = array (22 => '[[Cronyx FMUX/S-8E1/M | http://www.cronyx.ru/hardware/fmux-ring.html]]');
712 $new_words[] = array (22 => '[[Cronyx FMUX/S-16E1 | http://www.cronyx.ru/hardware/fmux-ring.html]]');
713 $new_words[] = array (22 => '[[Cronyx FMUX/S-16E1/ETS | http://www.cronyx.ru/hardware/fmux-ring.html]]');
714 $new_words[] = array (22 => '[[Cronyx FMUX/S-16E1/M | http://www.cronyx.ru/hardware/fmux-ring.html]]');
715 $new_words[] = array (22 => '[[Cronyx E1-XL/S | http://www.cronyx.ru/hardware/e1xl-s.html]]');
716 $new_words[] = array (22 => '[[Cronyx E1-DXC/S | http://www.cronyx.ru/hardware/e1dxc-s.html]]');
717 $new_words[] = array (22 => '[[Cronyx FMUX-4-E2 | http://www.cronyx.ru/hardware/fmux4-e2.html]]');
718 $new_words[] = array (22 => '[[Cronyx FMUX-4-E3 | http://www.cronyx.ru/hardware/fmux16-e3.html]]');
719 $new_words[] = array (22 => '[[Cronyx FMUX/SAT | http://www.cronyx.ru/hardware/fmux-sat.html]]');
720 $new_words[] = array (22 => '[[Cronyx E1-XL/S-IP | http://www.cronyx.ru/hardware/e1xl-ip.html]]');
721 $new_words[] = array (17 => '[[RAD FCD-IPM | http://www.rad.com/Article/0,6583,36426-E1_T1_or_Fractional_E1_T1_Modular_Access_Device_with_Integrated_Router,00.html]]');
722 $new_words[] = array (22 => '[[RAD FCD-E1M | http://www.rad.com/Article/0,6583,36723-E1_T1_Modular_Access_Multiplexer,00.html]]');
723 $new_words[] = array (22 => '[[RAD FCD-T1M | http://www.rad.com/Article/0,6583,36723-E1_T1_Modular_Access_Multiplexer,00.html]]');
724 $new_words[] = array (22 => '[[RAD FCD-155E | http://www.rad.com/Article/0,6583,36276-Ethernet_over_SDH_SONET_ADM,00.html]]');
725 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (445, 1, 0)";
726 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (445, 2, 21)";
727 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (445, 3, 0)";
728 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (445, 5, 0)";
729 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (445, 14, 0)";
730 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (445, 22, 0)";
731 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (447, 1, 0)";
732 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (447, 2, 22)";
733 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (447, 3, 0)";
734 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (447, 5, 0)";
735 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (447, 14, 0)";
736 $query[] = "insert into AttributeMap (objtype_id, attr_id, chapter_no) values (447, 22, 0)";
2ff234d6
DO
737 foreach ($new_words as $dict_key => $tmp)
738 foreach ($tmp as $chapter_no => $dict_value)
739 $query[] = 'INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) ' .
740 "VALUES (${chapter_no}, ${dict_key}, '${dict_value}')";
f70bed91 741 $query[] = "update Rack set thumb_data = NULL";
2ff234d6
DO
742 $query[] = "update Config set varvalue = '0.14.11' where varname = 'DB_VERSION'";
743 break; // --------------------------------------------
7e7a8387 744 case '0.14.12':
2c53a252 745 $query[] = "INSERT INTO `Config` VALUES ('DEFAULT_IPV4_RS_INSERVICE','no','string','no','no','Inservice status for new SLB real servers')";
a52b9eb1 746 $query[] = "INSERT INTO `Config` VALUES ('AUTOPORTS_CONFIG','4 = 1*33*kvm + 2*24*eth%u;15 = 1*446*kvm','string','yes','no','AutoPorts configuration')";
a477e405 747 $query[] = "INSERT INTO `Config` VALUES ('DEFAULT_OBJECT_TYPE','4','uint','yes','no','Default object type for new objects')";
684bbcac
DO
748 $query[] = "insert into Chapter (chapter_no, sticky, chapter_name) values (23, 'no', 'console models')";
749 $query[] = "INSERT INTO `AttributeMap` (`objtype_id`, `attr_id`, `chapter_no`) VALUES (15, 2, 23)";
b83abd29 750 $query[] = "alter table Dictionary modify column dict_value char(255)";
03350e39 751 $new_words[491] = array (21 => '[[Aten CS78 | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=20070319151852001&layerid=subClass2]]');
684bbcac
DO
752 $new_words[] = array (21 => '[[Aten ACS1208A | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=20050224111025006&layerid=subClass2]]');
753 $new_words[] = array (21 => '[[Aten ACS1216A | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=20050224111953008&layerid=subClass2]]');
754 $new_words[] = array (21 => '[[Aten CS1754 | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=20050217161051008&layerid=subClass2]]');
755 $new_words[] = array (21 => '[[Aten CS1758 | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=20050224093143008&layerid=subClass2]]');
756 $new_words[] = array (21 => '[[Aten CS9134 | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20070130133658002&pid=20050217172845005&layerid=subClass2]]');
757 $new_words[] = array (21 => '[[Aten CS9138 | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=20050224094519006&layerid=subClass2]]');
758 $new_words[] = array (21 => '[[Aten CS1708 | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=2005022410563008&layerid=subClass2]]');
759 $new_words[] = array (21 => '[[Aten CS1716 | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=20050224110022008&layerid=subClass2]]');
760 $new_words[] = array (21 => '[[Aten CS1004 | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=20050224100546008&layerid=subClass2]]');
761 $new_words[] = array (21 => '[[Aten CS228 | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=20050224114323008&layerid=subClass2]]');
762 $new_words[] = array (21 => '[[Aten CS428 | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=20050224114721008&layerid=subClass2]]');
763 $new_words[] = array (21 => '[[Aten CS138A | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=20050224111458007&layerid=subClass2]]');
764 $new_words[] = array (21 => '[[Aten CS88A | http://www.aten.com/products/productItem.php?pcid=20070130111936003&psid=20070130133658002&pid=2005022411042006&layerid=subClass2]]');
765 $new_words[] = array (21 => '[[Aten KM0832 | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131626002&pid=20060628154826001&layerid=subClass1]]');
766 $new_words[] = array (21 => '[[Aten KM0216 | http://www.aten.com/products/productItem.php?pcid=2006041110563001&psid=20060411131626002&pid=20060417153950007&layerid=subClass1]]');
767 $new_words[] = array (21 => '[[Aten KM0432 | http://www.aten.com/products/productItem.php?pcid=2006041110563001&psid=20060411131626002&pid=2006041715359007&layerid=subClass1]]');
768 $new_words[] = array (21 => '[[Aten KH1508 | http://www.aten.com/products/productItem.php?pcid=2006041110563001&psid=20060411130954001&pid=20061101174038001&layerid=subClass1]]');
769 $new_words[] = array (21 => '[[Aten KH1516 | http://www.aten.com/products/productItem.php?pcid=2006041110563001&psid=20060411130954001&pid=20061101175320001&layerid=subClass1]]');
770 $new_words[] = array (21 => '[[Aten KH0116 | http://www.aten.com/products/productItem.php?pcid=2006041110563001&psid=20060411130954001&pid=20060411145734003&layerid=subClass1]]');
771 $new_words[] = array (21 => '[[Aten KH98 | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=2007012911116003&pid=20061221104352001&layerid=subClass1]]');
772 $new_words[] = array (23 => '[[Aten KL1100 | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=20071225113046001&layerid=subClass1]]');
773 $new_words[] = array (23 => '[[Aten KL1508 | http://www.aten.com/products/productItem.php?pcid=2006041110563001&psid=20060411131050002&pid=20070710020717009&layerid=subClass1]]');
774 $new_words[] = array (23 => '[[Aten KL1516 | http://www.aten.com/products/productItem.php?pcid=2006041110563001&psid=20060411131050002&pid=20070716232614001&layerid=subClass1]]');
775 $new_words[] = array (23 => '[[Aten KL9108 | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=20060811153413009&layerid=subClass1]]');
776 $new_words[] = array (23 => '[[Aten KL9116 | http://www.aten.com/products/productItem.php?pcid=2006041110563001&psid=20060411131050002&pid=2006081115384001&layerid=subClass1]]');
777 $new_words[] = array (23 => '[[Aten KL3116 | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=20060913162532009&layerid=subClass1]]');
778 $new_words[] = array (23 => '[[Aten KL1116 | http://www.aten.com/products/productItem.php?pcid=2006041110563001&psid=20060411131050002&pid=20060420101520005&layerid=subClass1]]');
779 $new_words[] = array (23 => '[[Aten CS1208DL | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=2005022413505007&layerid=subClass1]]');
780 $new_words[] = array (23 => '[[Aten CS1216DL | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=2005022413505007&layerid=subClass1]]');
781 $new_words[] = array (23 => '[[Aten CS1200L | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=20050224140854008&layerid=subClass1]]');
782 $new_words[] = array (23 => '[[Aten CL1758 | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=20051229164553003&layerid=subClass1]]');
783 $new_words[] = array (23 => '[[Aten CL1208 | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=2005072215482&layerid=subClass1]]');
784 $new_words[] = array (23 => '[[Aten CL1216 | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=2005072215482&layerid=subClass1]]');
785 $new_words[] = array (23 => '[[Aten CL1200 | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=20050722165040002&layerid=subClass1]]');
786 $new_words[] = array (23 => '[[Aten ACS1208AL | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=2005022413597003&layerid=subClass1]]');
787 $new_words[] = array (23 => '[[Aten ACS1216AL | http://www.aten.com/products/productItem.php?pcid=2005010513171002&psid=20060411131050002&pid=2005022413597003&layerid=subClass1]]');
b922bd97
DO
788 $new_words[] = array (22 => '[[Tainet MUXpro 8216 | http://www.tainet.net/Product/muxpro820_8216.htm]]');
789 $new_words[] = array (22 => '[[Tainet Mercury 3600+ | http://www.tainet.net/Product/mercury.htm]]');
790 $new_words[] = array (22 => '[[Tainet Mercury 3820 | http://www.tainet.net/Product/mercury.htm]]');
791 $new_words[] = array (22 => '[[Tainet Mercury 3630 | http://www.tainet.net/Product/mercury.htm]]');
792 $new_words[] = array (22 => '[[Tainet Mercury 3630E | http://www.tainet.net/Product/mercury.htm]]');
793 $new_words[] = array (22 => '[[Tainet DSD-08A | http://www.tainet.net/Product/dsd08a.htm]]');
7fc5565c 794 $new_words[] = array (11 => '[[HP ProLiant DL160 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328421-3580694.html]]');
7eee4cc8
DO
795 $new_words[] = array (11 => '[[HP ProLiant DL180 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328421-3580698.html]]');
796 $new_words[] = array (11 => '[[HP ProLiant DL185 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328421-3579900.html]]');
797 $new_words[] = array (11 => '[[HP ProLiant DL365 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-3186080.html]]');
798 $new_words[] = array (11 => '[[HP ProLiant DL320s | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-3232017.html]]');
799 $new_words[] = array (11 => '[[HP ProLiant DL320p | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-3579703.html]]');
800 $new_words[] = array (11 => '[[HP ProLiant ML115 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-3328424-3330535.html]]');
801 $old_words = array();
802 $old_words[487] = '[[RAD FCD-IPM | http://www.rad.com/Article/0,6583,36426-E1_T1_or_Fractional_E1_T1_Modular_Access_Device_with_Integrated_Router,00.html]]';
803 $old_words[484] = '[[Cronyx FMUX-16-E3 | http://www.cronyx.ru/hardware/fmux16-e3.html]]';
804 $old_words[101] = '[[HP ProLiant DL140 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328421-1842838.html]]';
805 $old_words[102] = '[[HP ProLiant DL145 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328421-3219755.html]]';
806 $old_words[103] = '[[HP ProLiant DL320 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-3201178.html]]';
807 $old_words[104] = '[[HP ProLiant DL360 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-1121486.html]]';
808 $old_words[105] = '[[HP ProLiant DL380 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-1121516.html]]';
809 $old_words[106] = '[[HP ProLiant DL385 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-3219233.html]]';
810 $old_words[107] = '[[HP ProLiant DL580 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328422-3454575.html]]';
811 $old_words[108] = '[[HP ProLiant DL585 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328422-3219717.html]]';
812 $old_words[109] = '[[HP ProLiant ML110 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-3328424-3577708.html]]';
813 $old_words[110] = '[[HP ProLiant ML150 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-3328424-3580609.html]]';
814 $old_words[111] = '[[HP ProLiant ML310 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-241477-3580655.html]]';
815 $old_words[112] = '[[HP ProLiant ML350 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-241477-1121586.html]]';
816 $old_words[113] = '[[HP ProLiant ML370 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-241477-1121474.html]]';
817 $old_words[114] = '[[HP ProLiant ML570 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-3328425-1842779.html]]';
818 foreach ($old_words as $dict_key => $dict_value)
48b11d4d 819 $query[] = "update Dictionary set dict_value = '${dict_value}' where dict_key = ${dict_key} limit 1";
f084b5c1
DO
820 foreach ($new_words as $dict_key => $tmp)
821 foreach ($tmp as $chapter_no => $dict_value)
822 $query[] = 'INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) ' .
823 "VALUES (${chapter_no}, ${dict_key}, '${dict_value}')";
48329bfb 824 $query[] = "alter database character set utf8";
b83abd29 825 $query[] = "update Config set varvalue = '0.14.12' where varname = 'DB_VERSION'";
7e7a8387 826 break; // --------------------------------------------
68a3ab9c 827 case '0.15.0':
f0b540a3
DO
828 $new_words[541] = array (12 => '[[Force10%GPASS%S2410CP | http://www.force10networks.com/products/s2410.asp]]');
829 $new_words[] = array (12 => '[[Force10%GPASS%S50N | http://www.force10networks.com/products/s50n.asp]]');
830 $new_words[] = array (12 => '[[Force10%GPASS%S50V | http://www.force10networks.com/products/s50v.asp]]');
831 $new_words[] = array (12 => '[[Force10%GPASS%S25P | http://www.force10networks.com/products/s25p.asp]]');
832 $new_words[] = array (12 => '[[Force10%GPASS%C150| http://www.force10networks.com/products/cseries.asp]]');
833 $new_words[] = array (12 => '[[Force10%GPASS%C300| http://www.force10networks.com/products/cseries.asp]]');
834 $new_words[] = array (12 => '[[Force10%GPASS%E300 | http://www.force10networks.com/products/eseries.asp]]');
835 $new_words[] = array (12 => '[[Force10%GPASS%E600 | http://www.force10networks.com/products/eseries.asp]]');
836 $new_words[] = array (12 => '[[Force10%GPASS%E1200 | http://www.force10networks.com/products/eseries.asp]]');
837 $new_words[] = array (12 => '[[NETGEAR%GPASS%JGS524F | http://www.netgear.com/Products/Switches/UnmanagedSwitches/JGS524F.aspx]]');
838 $new_words[] = array (12 => '[[NETGEAR%GPASS%JGS516 | http://www.netgear.com/Products/Switches/UnmanagedSwitches/JGS516.aspx]]');
839 $new_words[] = array (12 => '[[NETGEAR%GPASS%JFS524 | http://www.netgear.com/Products/Switches/UnmanagedSwitches/JFS524.aspx]]');
840 $new_words[] = array (12 => '[[NETGEAR%GPASS%JFS524F | http://www.netgear.com/Products/Switches/UnmanagedSwitches/JFS524F.aspx]]');
841 $new_words[] = array (12 => '[[NETGEAR%GPASS%JGS524 | http://www.netgear.com/Products/Switches/UnmanagedSwitches/JGS524.aspx]]');
842 $new_words[] = array (12 => '[[NETGEAR%GPASS%FS524 | http://www.netgear.com/Products/Switches/UnmanagedSwitches/FS524.aspx]]');
843 $new_words[] = array (12 => '[[NETGEAR%GPASS%JFS516 | http://www.netgear.com/Products/Switches/UnmanagedSwitches/JFS516.aspx]]');
844 $new_words[] = array (12 => '[[NETGEAR%GPASS%GSM7224R | http://www.netgear.com/Products/Switches/Layer2ManagedSwitches/GSM7224R.aspx]]');
845 $new_words[] = array (12 => '[[NETGEAR%GPASS%GSM7248 | http://www.netgear.com/Products/Switches/Layer2ManagedSwitches/GSM7248.aspx]]');
846 $new_words[] = array (12 => '[[NETGEAR%GPASS%GSM7212 | http://www.netgear.com/Products/Switches/Layer2ManagedSwitches/GSM7212.aspx]]');
847 $new_words[] = array (12 => '[[NETGEAR%GPASS%FSM726S | http://www.netgear.com/Products/Switches/Layer2ManagedSwitches/FSM726S.aspx]]');
848 $new_words[] = array (12 => '[[NETGEAR%GPASS%GSM7248R | http://www.netgear.com/Products/Switches/Layer2ManagedSwitches/GSM7248R.aspx]]');
849 $new_words[] = array (12 => '[[NETGEAR%GPASS%GSM7224 | http://www.netgear.com/Products/Switches/Layer2ManagedSwitches/GSM7224.aspx]]');
850 $new_words[] = array (12 => '[[NETGEAR%GPASS%FSM750S | http://www.netgear.com/Products/Switches/Layer2ManagedSwitches/FSM750S.aspx]]');
851 $new_words[] = array (12 => '[[NETGEAR%GPASS%FSM726 | http://www.netgear.com/Products/Switches/Layer2ManagedSwitches/FSM726.aspx]]');
852 $new_words[] = array (12 => '[[NETGEAR%GPASS%GS724TP | http://www.netgear.com/Products/Switches/SmartSwitches/GS724TP.aspx]]');
853 $new_words[] = array (12 => '[[NETGEAR%GPASS%GS748TS | http://www.netgear.com/Products/Switches/SmartSwitches/GS748TS.aspx]]');
854 $new_words[] = array (12 => '[[NETGEAR%GPASS%GS724T | http://www.netgear.com/Products/Switches/SmartSwitches/GS724T.aspx]]');
855 $new_words[] = array (12 => '[[NETGEAR%GPASS%FS728TP | http://www.netgear.com/Products/Switches/SmartSwitches/FS728TP.aspx]]');
856 $new_words[] = array (12 => '[[NETGEAR%GPASS%FS752TS | http://www.netgear.com/Products/Switches/SmartSwitches/FS752TS.aspx]]');
857 $new_words[] = array (12 => '[[NETGEAR%GPASS%FS728TS | http://www.netgear.com/Products/Switches/SmartSwitches/FS728TS.aspx]]');
858 $new_words[] = array (12 => '[[NETGEAR%GPASS%FS726T | http://www.netgear.com/Products/Switches/SmartSwitches/FS726T.aspx]]');
859 $new_words[] = array (12 => '[[NETGEAR%GPASS%GS748TP | http://www.netgear.com/Products/Switches/SmartSwitches/GS748TP.aspx]]');
860 $new_words[] = array (12 => '[[NETGEAR%GPASS%GS724TS | http://www.netgear.com/Products/Switches/SmartSwitches/GS724TS.aspx]]');
861 $new_words[] = array (12 => '[[NETGEAR%GPASS%GS748T | http://www.netgear.com/Products/Switches/SmartSwitches/GS748T.aspx]]');
862 $new_words[] = array (12 => '[[NETGEAR%GPASS%GS716T | http://www.netgear.com/Products/Switches/SmartSwitches/GS716T.aspx]]');
863 $new_words[] = array (12 => '[[NETGEAR%GPASS%FS752TPS | http://www.netgear.com/Products/Switches/SmartSwitches/FS752TPS.aspx]]');
864 $new_words[] = array (12 => '[[NETGEAR%GPASS%FS750T2 | http://www.netgear.com/Products/Switches/SmartSwitches/FS750T2.aspx]]');
865 $new_words[] = array (12 => '[[NETGEAR%GPASS%FS726TP | http://www.netgear.com/Products/Switches/SmartSwitches/FS726TP.aspx]]');
866 $new_words[] = array (12 => '[[NETGEAR%GPASS%FSM7328PS | http://www.netgear.com/Products/Switches/Layer3ManagedSwitches/FSM7328PS.aspx]]');
867 $new_words[] = array (12 => '[[NETGEAR%GPASS%GSM7352S | http://www.netgear.com/Products/Switches/Layer3ManagedSwitches/GSM7352S.aspx]]');
868 $new_words[] = array (12 => '[[NETGEAR%GPASS%GSM7324 | http://www.netgear.com/Products/Switches/Layer3ManagedSwitches/GSM7324.aspx]]');
869 $new_words[] = array (12 => '[[NETGEAR%GPASS%FSM7326P | http://www.netgear.com/Products/Switches/Layer3ManagedSwitches/FSM7326P.aspx]]');
870 $new_words[] = array (12 => '[[NETGEAR%GPASS%FSM7352PS | http://www.netgear.com/Products/Switches/Layer3ManagedSwitches/FSM7352PS.aspx]]');
871 $new_words[] = array (12 => '[[NETGEAR%GPASS%GSM7328FS | http://www.netgear.com/Products/Switches/Layer3ManagedSwitches/GSM7328FS.aspx]]');
872 $new_words[] = array (12 => '[[NETGEAR%GPASS%GSM7328S | http://www.netgear.com/Products/Switches/Layer3ManagedSwitches/GSM7328S.aspx]]');
873 $new_words[] = array (12 => '[[NETGEAR%GPASS%GSM7312 | http://www.netgear.com/Products/Switches/Layer3ManagedSwitches/GSM7312.aspx]]');
874 $new_words[] = array (12 => '[[NETGEAR%GPASS%FSM7328S | http://www.netgear.com/Products/Switches/Layer3ManagedSwitches/FSM7328S.aspx]]');
875 $new_words[] = array (12 => '[[NETGEAR%GPASS%FSM7352S | http://www.netgear.com/Products/Switches/Layer3ManagedSwitches/FSM7352S.aspx]]');
876 $new_words[] = array (12 => '[[D-Link%GPASS%DES-6500 | http://www.dlink.com/products/?sec=0&pid=341]]');
877 $new_words[] = array (12 => '[[D-Link%GPASS%DWS-3227 | http://www.dlink.com/products/?sec=0&pid=506]]');
878 $new_words[] = array (12 => '[[D-Link%GPASS%DWS-3227P | http://www.dlink.com/products/?sec=0&pid=507]]');
879 $new_words[] = array (12 => '[[D-Link%GPASS%DWS-3250 | http://www.dlink.com/products/?sec=0&pid=468]]');
880 $new_words[] = array (12 => '[[D-Link%GPASS%DWS-1008 | http://www.dlink.com/products/?sec=0&pid=434]]');
881 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3612G | http://www.dlink.com/products/?sec=0&pid=557]]');
882 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3627 | http://www.dlink.com/products/?sec=0&pid=639]]');
883 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3650 | http://www.dlink.com/products/?sec=0&pid=640]]');
884 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3324SR | http://www.dlink.com/products/?sec=0&pid=294]]');
885 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3324SRi | http://www.dlink.com/products/?sec=0&pid=309]]');
886 $new_words[] = array (12 => '[[D-Link%GPASS%DXS-3326GSR | http://www.dlink.com/products/?sec=0&pid=339]]');
887 $new_words[] = array (12 => '[[D-Link%GPASS%DXS-3350SR | http://www.dlink.com/products/?sec=0&pid=340]]');
888 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3828 | http://www.dlink.com/products/?sec=0&pid=439]]');
889 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3828P | http://www.dlink.com/products/?sec=0&pid=440]]');
890 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3100-24 | http://www.dlink.com/products/?sec=0&pid=635]]');
891 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3100-24P | http://www.dlink.com/products/?sec=0&pid=636]]');
892 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3100-48 | http://www.dlink.com/products/?sec=0&pid=637]]');
893 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3100-48P | http://www.dlink.com/products/?sec=0&pid=638]]');
894 $new_words[] = array (12 => '[[D-Link%GPASS%DXS-3227 | http://www.dlink.com/products/?sec=0&pid=483]]');
895 $new_words[] = array (12 => '[[D-Link%GPASS%DXS-3227P | http://www.dlink.com/products/?sec=0&pid=497]]');
896 $new_words[] = array (12 => '[[D-Link%GPASS%DXS-3250 | http://www.dlink.com/products/?sec=0&pid=443]]');
897 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3024 | http://www.dlink.com/products/?sec=0&pid=404]]');
898 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3224TGR | http://www.dlink.com/products/?sec=0&pid=269]]');
899 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-3048 | http://www.dlink.com/products/?sec=0&pid=496]]');
900 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3228PA | http://www.dlink.com/products/?sec=0&pid=644]]');
901 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3028 | http://www.dlink.com/products/?sec=0&pid=630]]');
902 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3028P | http://www.dlink.com/products/?sec=0&pid=631]]');
903 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3052 | http://www.dlink.com/products/?sec=0&pid=632]]');
904 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3052P | http://www.dlink.com/products/?sec=0&pid=633]]');
905 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3010FA | http://www.dlink.com/products/?sec=0&pid=423]]');
906 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3010GA | http://www.dlink.com/products/?sec=0&pid=424]]');
907 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3010PA | http://www.dlink.com/products/?sec=0&pid=469]]');
908 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3226L | http://www.dlink.com/products/?sec=0&pid=298]]');
909 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3526 | http://www.dlink.com/products/?sec=0&pid=330]]');
910 $new_words[] = array (12 => '[[D-Link%GPASS%DES-3550 | http://www.dlink.com/products/?sec=0&pid=331]]');
911 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-1216T | http://www.dlink.com/products/?sec=0&pid=324]]');
912 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-1224T | http://www.dlink.com/products/?sec=0&pid=329]]');
913 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-1248T | http://www.dlink.com/products/?sec=0&pid=367]]');
914 $new_words[] = array (12 => '[[D-Link%GPASS%DES-1316 | http://www.dlink.com/products/?sec=0&pid=353]]');
915 $new_words[] = array (12 => '[[D-Link%GPASS%DES-1228 | http://www.dlink.com/products/?sec=0&pid=540]]');
916 $new_words[] = array (12 => '[[D-Link%GPASS%DES-1228P | http://www.dlink.com/products/?sec=0&pid=541]]');
917 $new_words[] = array (12 => '[[D-Link%GPASS%DES-1252 | http://www.dlink.com/products/?sec=0&pid=555]]');
918 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-1016D | http://www.dlink.com/products/?sec=0&pid=337]]');
919 $new_words[] = array (12 => '[[D-Link%GPASS%DGS-1024D | http://www.dlink.com/products/?sec=0&pid=338]]');
920 $new_words[] = array (12 => '[[D-Link%GPASS%DSS-24+ | http://www.dlink.com/products/?sec=0&pid=73]]');
921 $new_words[] = array (12 => '[[D-Link%GPASS%DES-1024D | http://www.dlink.com/products/?sec=0&pid=75]]');
922 $new_words[] = array (12 => '[[D-Link%GPASS%DES-1026G | http://www.dlink.com/products/?sec=0&pid=76]]');
923 $new_words[] = array (21 => '[[D-Link%GPASS%DKVM-16 | http://www.dlink.com/products/?sec=0&pid=228]]');
924 $new_words[] = array (21 => '[[D-Link%GPASS%DKVM-8E | http://www.dlink.com/products/?sec=0&pid=161]]');
925 $new_words[] = array (22 => '[[Raisecom%GPASS%RC702 | http://www.raisecom-international.com/p/RC702.htm]]');
926 $new_words[] = array (22 => '[[Raisecom%GPASS%RC702-GE | http://www.raisecom-international.com/p/RC702GE.htm]]');
927 $new_words[] = array (22 => '[[Raisecom%GPASS%ISCOM4300 | http://www.raisecom-international.com/p/ISCOM4300.htm]]');
928 $new_words[] = array (22 => '[[Raisecom%GPASS%RC953-FE4E1 | http://www.raisecom-international.com/p/RC953FE4E1.htm]]');
929 $new_words[] = array (22 => '[[Raisecom%GPASS%RC953-FX4E1 | http://www.raisecom-international.com/p/RC953FE4E1.htm]]');
930 $new_words[] = array (22 => '[[Raisecom%GPASS%RC953-FE8E1 | http://www.raisecom-international.com/p/RC953FE4E1.htm]]');
931 $new_words[] = array (22 => '[[Raisecom%GPASS%RC953-FX8E1 | http://www.raisecom-international.com/p/RC953FE4E1.htm]]');
932 $new_words[] = array (22 => '[[Raisecom%GPASS%RC953-8FE16E1 | http://www.raisecom-international.com/p/RC9538FE16E1.htm]]');
933 $new_words[] = array (22 => '[[Raisecom%GPASS%RC953E-3FE16E1 | http://www.raisecom-international.com/p/RC953E-3FE16E1.htm]]');
934 $new_words[] = array (22 => '[[Raisecom%GPASS%RC953-GESTM1 | http://www.raisecom-international.com/p/RC957.htm]]');
935 $new_words[] = array (22 => '[[Raisecom%GPASS%OPCOM3100-155 | http://www.raisecom-international.com/p/OPCOM3100.htm]]');
936 $new_words[] = array (22 => '[[Raisecom%GPASS%OPCOM3101-155 | http://www.raisecom-international.com/p/OPCOM3101.htm]]');
937 $new_words[] = array (22 => '[[Raisecom%GPASS%RC831-120 | http://www.raisecom-international.com/p/RC831.htm]]');
938 $new_words[] = array (22 => '[[Raisecom%GPASS%RC831-120-BL | http://www.raisecom-international.com/p/RC831.htm]]');
939 $new_words[] = array (22 => '[[Raisecom%GPASS%RC831-240 | http://www.raisecom-international.com/p/RC831.htm]]');
940 $new_words[] = array (22 => '[[Raisecom%GPASS%RC831-240E | http://www.raisecom-international.com/p/RC831.htm]]');
941 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2801-480GE-BL | http://www.raisecom-international.com/p/RCMS280X.htm]]');
942 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2801-120FE | http://www.raisecom-international.com/p/RCMS2801.htm]]');
943 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2801-120FE-BL | http://www.raisecom-international.com/p/RCMS2801.htm]]');
944 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2801-240FE | http://www.raisecom-international.com/p/RCMS2801.htm]]');
945 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2801-240FE-BL | http://www.raisecom-international.com/p/RCMS2801.htm]]');
946 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2801-240EFE | http://www.raisecom-international.com/p/RCMS2801.htm]]');
947 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2811-120FE | http://www.raisecom-international.com/p/RCMS2811.htm]]');
948 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2811-240FE | http://www.raisecom-international.com/p/RCMS2811.htm]]');
949 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2811-240FE-BL | http://www.raisecom-international.com/p/RCMS2811.htm]]');
950 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2811-480FE | http://www.raisecom-international.com/p/RCMS2811.htm]]');
951 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2811-480FE-BL | http://www.raisecom-international.com/p/RCMS2811.htm]]');
952 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2811-240EFE | http://www.raisecom-international.com/p/RCMS2811-240EFE.htm]]');
953 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2104-120 | http://www.raisecom-international.com/p/RCMS2000120.htm]]');
954 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2304-120 | http://www.raisecom-international.com/p/RCMS2000120.htm]]');
955 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2504-120 | http://www.raisecom-international.com/p/RCMS2000120.htm]]');
956 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2104-240 | http://www.raisecom-international.com/p/RCMS2000120.htm]]');
957 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2304-240 | http://www.raisecom-international.com/p/RCMS2000120.htm]]');
958 $new_words[] = array (22 => '[[Raisecom%GPASS%RCMS2504-240 | http://www.raisecom-international.com/p/RCMS2000120.htm]]');
959 $new_words[] = array (22 => '[[Raisecom%GPASS%RC801-120B | http://www.raisecom-international.com/p/RC800120.htm]]');
960 $new_words[] = array (22 => '[[Raisecom%GPASS%RC801-240B | http://www.raisecom-international.com/p/RC800120.htm]]');
961 $new_words[] = array (22 => '[[Raisecom%GPASS%RC801-480B | http://www.raisecom-international.com/p/RC800120.htm]]');
962 $new_words[] = array (22 => '[[Raisecom%GPASS%RC803-120B | http://www.raisecom-international.com/p/RC800120.htm]]');
963 $new_words[] = array (22 => '[[Raisecom%GPASS%RC803-240B | http://www.raisecom-international.com/p/RC800120.htm]]');
964 $new_words[] = array (22 => '[[Raisecom%GPASS%RC803-480B | http://www.raisecom-international.com/p/RC800120.htm]]');
965 $new_words[] = array (22 => '[[Raisecom%GPASS%RC805-120B | http://www.raisecom-international.com/p/RC800120.htm]]');
966 $new_words[] = array (22 => '[[Raisecom%GPASS%RC805-240B | http://www.raisecom-international.com/p/RC800120.htm]]');
967 $new_words[] = array (22 => '[[Raisecom%GPASS%RC805-480B | http://www.raisecom-international.com/p/RC800120.htm]]');
a0a199c7
DO
968 $new_words[] = array (2 => 'async serial (DB-9)'); // 681
969 $new_words[] = array (2 => 'async serial (DB-25)'); // 682
f0b540a3
DO
970 $new_words[] = array (12 => '[[Force10%GPASS%S2410P | http://www.force10networks.com/products/s2410.asp]]');
971 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X150-24t | http://www.extremenetworks.com/products/summit-x150.aspx]]');
972 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X150-48t | http://www.extremenetworks.com/products/summit-x150.aspx]]');
973 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X150-24p | http://www.extremenetworks.com/products/summit-x150.aspx]]');
974 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X250e-24t | http://www.extremenetworks.com/products/summit-x250e.aspx]]');
975 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X250e-48t | http://www.extremenetworks.com/products/summit-x250e.aspx]]');
976 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X250e-24p | http://www.extremenetworks.com/products/summit-x250e.aspx]]');
977 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X250e-48p | http://www.extremenetworks.com/products/summit-x250e.aspx]]');
978 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X250e-24x | http://www.extremenetworks.com/products/summit-x250e.aspx]]');
979 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X450-24t | http://www.extremenetworks.com/products/summit-x450.aspx]]');
980 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X450-24x | http://www.extremenetworks.com/products/summit-x450.aspx]]');
981 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X450a-24t | http://www.extremenetworks.com/products/summit-x450a.aspx]]');
982 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X450a-48t | http://www.extremenetworks.com/products/summit-x450a.aspx]]');
983 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X450a-24x | http://www.extremenetworks.com/products/summit-x450a.aspx]]');
984 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X450e-24p | http://www.extremenetworks.com/products/summit-x450e.aspx]]');
985 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit X450e-48p | http://www.extremenetworks.com/products/summit-x450e.aspx]]');
986 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit 200-24fx | http://www.extremenetworks.com/products/summit-200.aspx]]');
987 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit 200-24 | http://www.extremenetworks.com/products/summit-200.aspx]]');
988 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit 200-48 | http://www.extremenetworks.com/products/summit-200.aspx]]');
989 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit 300-24 | http://www.extremenetworks.com/products/summit-300.aspx]]');
990 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit 300-48 | http://www.extremenetworks.com/products/summit-300.aspx]]');
991 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit 400-24p | http://www.extremenetworks.com/products/summit-400-24p.aspx]]');
992 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit 400-24t | http://www.extremenetworks.com/products/summit-400-24t.aspx]]');
993 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit 400-48t | http://www.extremenetworks.com/products/summit-400-48t.aspx]]');
994 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Summit48si | http://www.extremenetworks.com/products/summit-48si.aspx]]');
995 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Alpine 3804 | http://www.extremenetworks.com/products/Alpine-3800.aspx]]');
996 $new_words[] = array (12 => '[[Extreme Networks%GPASS%Alpine 3808 | http://www.extremenetworks.com/products/Alpine-3800.aspx]]');
997 $new_words[] = array (12 => '[[Extreme Networks%GPASS%BlackDiamond 6808 | http://www.extremenetworks.com/products/blackdiamond-6800.aspx]]');
998 $new_words[] = array (12 => '[[Extreme Networks%GPASS%BlackDiamond 8806 | http://www.extremenetworks.com/products/blackdiamond-8800.aspx]]');
999 $new_words[] = array (12 => '[[Extreme Networks%GPASS%BlackDiamond 8810 | http://www.extremenetworks.com/products/blackdiamond-8800.aspx]]');
1000 $new_words[] = array (12 => '[[Extreme Networks%GPASS%BlackDiamond 10808 | http://www.extremenetworks.com/products/blackdiamond-10808.aspx]]');
1001 $new_words[] = array (12 => '[[Extreme Networks%GPASS%BlackDiamond 12802R | http://www.extremenetworks.com/products/blackdiamond-12800r.aspx]]');
1002 $new_words[] = array (12 => '[[Extreme Networks%GPASS%BlackDiamond 12804R | http://www.extremenetworks.com/products/blackdiamond-12800r.aspx]]');
1003 $new_words[] = array (12 => '[[Extreme Networks%GPASS%BlackDiamond 12804C | http://www.extremenetworks.com/products/blackdiamond-12804c.aspx]]');
1004 $new_words[] = array (17 => '[[Cisco%GPASS%ASR 1002 | http://cisco.com/en/US/products/ps9436/index.html]]');
1005 $new_words[] = array (17 => '[[Cisco%GPASS%ASR 1004 | http://cisco.com/en/US/products/ps9437/index.html]]');
1006 $new_words[] = array (17 => '[[Cisco%GPASS%ASR 1006 | http://cisco.com/en/US/products/ps9438/index.html]]');
1007 $new_words[] = array (13 => '[[BSD%GSKIP%OpenBSD 3.3 | http://openbsd.org/33.html]]');
1008 $new_words[] = array (13 => '[[BSD%GSKIP%OpenBSD 3.4 | http://openbsd.org/34.html]]');
1009 $new_words[] = array (13 => '[[BSD%GSKIP%OpenBSD 3.5 | http://openbsd.org/35.html]]');
1010 $new_words[] = array (13 => '[[BSD%GSKIP%OpenBSD 3.6 | http://openbsd.org/36.html]]');
1011 $new_words[] = array (13 => '[[BSD%GSKIP%OpenBSD 3.7 | http://openbsd.org/37.html]]');
1012 $new_words[] = array (13 => '[[BSD%GSKIP%OpenBSD 3.8 | http://openbsd.org/38.html]]');
1013 $new_words[] = array (13 => '[[BSD%GSKIP%OpenBSD 3.9 | http://openbsd.org/39.html]]');
1014 $new_words[] = array (13 => '[[BSD%GSKIP%OpenBSD 4.0 | http://openbsd.org/40.html]]');
1015 $new_words[] = array (13 => '[[BSD%GSKIP%OpenBSD 4.1 | http://openbsd.org/41.html]]');
1016 $new_words[] = array (13 => '[[BSD%GSKIP%OpenBSD 4.2 | http://openbsd.org/42.html]]');
1017 $new_words[] = array (13 => '[[BSD%GSKIP%OpenBSD 4.3 | http://openbsd.org/43.html]]');
1018 $new_words[] = array (12 => '[[Cisco Catalyst 4900M | http://www.cisco.com/en/US/products/ps9310/index.html]]');
1019 $new_words[] = array (13 => '[[BSD%GSKIP%FreeBSD 7.x | http://www.freebsd.org/releases/7.0R/announce.html]]');
1020 $new_words[] = array (13 => '[[BSD%GSKIP%NetBSD 2.0 | http://netbsd.org/releases/formal-2.0/]]');
1021 $new_words[] = array (13 => '[[BSD%GSKIP%NetBSD 2.1 | http://netbsd.org/releases/formal-2.0/NetBSD-2.1.html]]');
1022 $new_words[] = array (13 => '[[BSD%GSKIP%NetBSD 3.0 | http://netbsd.org/releases/formal-3/]]');
1023 $new_words[] = array (13 => '[[BSD%GSKIP%NetBSD 3.1 | http://netbsd.org/releases/formal-3/NetBSD-3.1.html]]');
1024 $new_words[] = array (13 => '[[BSD%GSKIP%NetBSD 4.0 | http://netbsd.org/releases/formal-4/NetBSD-4.0.html]]');
1025 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2016 | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C16470B]]');
1026 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2024 | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C16471B]]');
1027 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2126-G | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C16472]]');
1028 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2816 | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C16478]]');
1029 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2824 | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C16479]]');
1030 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2226 Plus | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C16475CS]]');
1031 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2426-PWR Plus | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C16491]]');
1032 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2250 Plus | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C16476CS]]');
1033 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2916-SFP Plus | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CBLSG16]]');
1034 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2924-SFP Plus | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CBLSG24]]');
1035 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2924-PWR Plus | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CBLSG24PWR]]');
1036 $new_words[] = array (12 => '[[3Com%GPASS%Baseline 2948-SFP Plus | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CBLSG48]]');
1037 $new_words[] = array (12 => '[[3Com%GPASS%3870 24-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17450-91]]');
1038 $new_words[] = array (12 => '[[3Com%GPASS%3870 48-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17451-91]]');
1039 $new_words[] = array (12 => '[[3Com%GPASS%4200 26-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&sku=3C17300A&pathtype=purchase]]');
1040 $new_words[] = array (12 => '[[3Com%GPASS%4200 28-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&sku=3C17304A&pathtype=purchase]]');
1041 $new_words[] = array (12 => '[[3Com%GPASS%4200 50-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&sku=3C17302A&pathtype=purchase]]');
1042 $new_words[] = array (12 => '[[3Com%GPASS%4200G 12-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&sku=3CR17660-91&pathtype=purchase]]');
1043 $new_words[] = array (12 => '[[3Com%GPASS%4200G 24-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&sku=3CR17661-91&pathtype=purchase]]');
1044 $new_words[] = array (12 => '[[3Com%GPASS%4200G PWR 24-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&sku=3CR17671-91&pathtype=purchase]]');
1045 $new_words[] = array (12 => '[[3Com%GPASS%4200G 48-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&sku=3CR17662-91&pathtype=purchase]]');
1046 $new_words[] = array (12 => '[[3Com%GPASS%4210 26-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17333-91]]');
1047 $new_words[] = array (12 => '[[3Com%GPASS%4210 52-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17334-91]]');
1048 $new_words[] = array (12 => '[[3Com%GPASS%4210 26-port PWR | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17343-91]]');
1049 $new_words[] = array (12 => '[[3Com%GPASS%SS3 4400 48-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C17204-US]]');
1050 $new_words[] = array (12 => '[[3Com%GPASS%SS3 4400 24-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C17203-US]]');
1051 $new_words[] = array (12 => '[[3Com%GPASS%SS3 4400 PWR | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C17205-US]]');
1052 $new_words[] = array (12 => '[[3Com%GPASS%SS3 4400 SE 24-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C17206-US]]');
1053 $new_words[] = array (12 => '[[3Com%GPASS%4500 26-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17561-91]]');
1054 $new_words[] = array (12 => '[[3Com%GPASS%4500 50-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17562-91]]');
1055 $new_words[] = array (12 => '[[3Com%GPASS%4500 PWR 26-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17571-91]]');
1056 $new_words[] = array (12 => '[[3Com%GPASS%4500 PWR 50-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17572-91]]');
1057 $new_words[] = array (12 => '[[3Com%GPASS%4500G 24-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17761-91]]');
1058 $new_words[] = array (12 => '[[3Com%GPASS%4500G 48-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17762-91]]');
1059 $new_words[] = array (12 => '[[3Com%GPASS%4500G PWR 24-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17771-91]]');
1060 $new_words[] = array (12 => '[[3Com%GPASS%4500G PWR 48-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17772-91]]');
1061 $new_words[] = array (12 => '[[3Com%GPASS%5500-EI 28-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17161-91]]');
1062 $new_words[] = array (12 => '[[3Com%GPASS%5500-EI 52-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17162-91]]');
1063 $new_words[] = array (12 => '[[3Com%GPASS%5500-EI 28-port PWR | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17171-91]]');
1064 $new_words[] = array (12 => '[[3Com%GPASS%5500-EI 52-port PWR | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17172-91]]');
1065 $new_words[] = array (12 => '[[3Com%GPASS%5500-EI 28-port FX | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17181-91]]');
1066 $new_words[] = array (12 => '[[3Com%GPASS%5500G-EI 24-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17250-91]]');
1067 $new_words[] = array (12 => '[[3Com%GPASS%5500G-EI 48-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17251-91]]');
1068 $new_words[] = array (12 => '[[3Com%GPASS%5500G-EI PWR 24-port | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17252-91]]');
1069 $new_words[] = array (12 => '[[3Com%GPASS%5500G-EI 48-port PWR | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17253-91]]');
1070 $new_words[] = array (12 => '[[3Com%GPASS%5500G-EI 24-port SFP | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3CR17258-91]]');
1071 $new_words[] = array (12 => '[[3Com%GPASS%7754 | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C16894]]');
1072 $new_words[] = array (12 => '[[3Com%GPASS%7757 | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C16895]]');
1073 $new_words[] = array (12 => '[[3Com%GPASS%7758 | http://www.3com.com/products/en_US/detail.jsp?tab=features&pathtype=purchase&sku=3C16896]]');
1074 $new_words[] = array (12 => '[[3Com%GPASS%8807 | http://www.3com.com/products/en_US/detail.jsp?tab=features&sku=3C17502A&pathtype=purchase]]');
1075 $new_words[] = array (12 => '[[3Com%GPASS%8810 | http://www.3com.com/products/en_US/detail.jsp?tab=features&sku=3C17501A&pathtype=purchase]]');
1076 $new_words[] = array (12 => '[[3Com%GPASS%8814 | http://www.3com.com/products/en_US/detail.jsp?tab=features&sku=3C17500A&pathtype=purchase]]');
b1bce3b6 1077 $new_words[] = array (13 => 'Linux%GSKIP%RHF9');
d8515eff
DO
1078 $query[] = "insert into PortCompat (type1, type2) values (29, 681)";
1079 $query[] = "insert into PortCompat (type1, type2) values (29, 682)";
1080 $query[] = "insert into PortCompat (type1, type2) values (681, 29)";
1081 $query[] = "insert into PortCompat (type1, type2) values (681, 681)";
1082 $query[] = "insert into PortCompat (type1, type2) values (681, 682)";
1083 $query[] = "insert into PortCompat (type1, type2) values (682, 29)";
1084 $query[] = "insert into PortCompat (type1, type2) values (682, 681)";
1085 $query[] = "insert into PortCompat (type1, type2) values (682, 682)";
71f42cdb
DO
1086 $query[] =
1087"
f9bc186f
DO
1088CREATE TABLE `TagStorage` (
1089 `target_realm` enum('object','ipv4net','rack','ipv4vs','ipv4rspool') NOT NULL default 'object',
1090 `target_id` int(10) unsigned NOT NULL,
71f42cdb 1091 `tag_id` int(10) unsigned default NULL,
f9bc186f
DO
1092 UNIQUE KEY `entity_tag` (`target_realm`,`target_id`,`tag_id`),
1093 KEY `target_id` (`target_id`)
71f42cdb
DO
1094) TYPE=MyISAM;
1095";
1096 $query[] =
1097"
1098CREATE TABLE `TagTree` (
1099 `id` int(10) unsigned NOT NULL auto_increment,
1100 `parent_id` int(10) unsigned default NULL,
1101 `tag` char(255) default NULL,
1102 PRIMARY KEY (`id`),
1103 UNIQUE KEY `tag` (`tag`)
1104) TYPE=MyISAM;
1105";
a0a199c7
DO
1106 $old_words[29] = 'async serial (RJ-45)';
1107
f0b540a3
DO
1108 $old_words[43] = 'IBM xSeries%GPASS%305';
1109 $old_words[44] = 'IBM xSeries%GPASS%306';
1110 $old_words[45] = 'IBM xSeries%GPASS%306m';
1111 $old_words[46] = 'IBM xSeries%GPASS%326m';
1112 $old_words[47] = 'IBM xSeries%GPASS%330';
1113 $old_words[48] = 'IBM xSeries%GPASS%335';
1114 $old_words[54] = 'IBM xSeries%GPASS%346';
1115 $old_words[59] = 'IBM xSeries%GPASS%326';
1116 $old_words[68] = 'IBM xSeries%GPASS%3250';
1117 $old_words[69] = 'IBM xSeries%GPASS%3455';
1118 $old_words[70] = 'IBM xSeries%GPASS%3550';
1119 $old_words[71] = 'IBM xSeries%GPASS%3650';
1120 $old_words[72] = 'IBM xSeries%GPASS%3655';
1121 $old_words[73] = 'IBM xSeries%GPASS%3650 T';
1122 $old_words[74] = 'IBM xSeries%GPASS%3755';
1123 $old_words[75] = 'IBM xSeries%GPASS%3850';
9d26ec21 1124
f0b540a3
DO
1125 $old_words[92] = 'IBM pSeries%GPASS%185';
1126 $old_words[93] = 'IBM pSeries%GPASS%505';
1127 $old_words[94] = 'IBM pSeries%GPASS%505Q';
1128 $old_words[95] = 'IBM pSeries%GPASS%510';
1129 $old_words[96] = 'IBM pSeries%GPASS%510Q';
1130 $old_words[97] = 'IBM pSeries%GPASS%520';
1131 $old_words[98] = 'IBM pSeries%GPASS%520Q';
1132 $old_words[99] = 'IBM pSeries%GPASS%550';
1133 $old_words[100] = 'IBM pSeries%GPASS%550Q';
9d26ec21 1134
f0b540a3
DO
1135 $old_words[212] = 'Linux%GSKIP%RHFC1';
1136 $old_words[213] = 'Linux%GSKIP%RHFC2';
1137 $old_words[214] = 'Linux%GSKIP%RHFC3';
1138 $old_words[215] = 'Linux%GSKIP%RHFC4';
1139 $old_words[216] = 'Linux%GSKIP%RHFC5';
1140 $old_words[217] = 'Linux%GSKIP%RHFC6';
1141 $old_words[232] = 'Linux%GSKIP%RHF7';
1142 $old_words[242] = 'Linux%GSKIP%RHF8';
1143 $old_words[225] = 'Linux%GSKIP%RHEL1';
1144 $old_words[226] = 'Linux%GSKIP%RHEL2';
1145 $old_words[227] = 'Linux%GSKIP%RHEL3';
1146 $old_words[228] = 'Linux%GSKIP%RHEL4';
1147 $old_words[436] = 'Linux%GSKIP%RHEL5';
9d26ec21 1148
f0b540a3
DO
1149 $old_words[229] = 'Linux%GSKIP%ALTLinux Master 2.0';
1150 $old_words[230] = 'Linux%GSKIP%ALTLinux Master 2.2';
1151 $old_words[231] = 'Linux%GSKIP%ALTLinux Master 2.4';
1152 $old_words[243] = 'Linux%GSKIP%ALTLinux Master 4.0';
1153 $old_words[231] = 'Linux%GSKIP%ALTLinux Master 2.4';
1154 $old_words[422] = 'Linux%GSKIP%ALTLinux Server 4.0';
1155 $old_words[423] = 'Linux%GSKIP%ALTLinux Sisyphus';
9d26ec21 1156
f0b540a3
DO
1157 $old_words[233] = 'Linux%GSKIP%SLES10';
1158 $old_words[424] = 'Linux%GSKIP%openSUSE 10.0';
1159 $old_words[425] = 'Linux%GSKIP%openSUSE 10.1';
1160 $old_words[426] = 'Linux%GSKIP%openSUSE 10.2';
1161 $old_words[427] = 'Linux%GSKIP%openSUSE 10.3';
9d26ec21 1162
f0b540a3
DO
1163 $old_words[428] = 'Linux%GSKIP%Ubuntu 4.10';
1164 $old_words[429] = 'Linux%GSKIP%Ubuntu 5.04';
1165 $old_words[430] = 'Linux%GSKIP%Ubuntu 5.10';
1166 $old_words[431] = 'Linux%GSKIP%Ubuntu 6.06 LTS';
1167 $old_words[432] = 'Linux%GSKIP%Ubuntu 6.10';
1168 $old_words[433] = 'Linux%GSKIP%Ubuntu 7.04';
1169 $old_words[434] = 'Linux%GSKIP%Ubuntu 7.10';
1170 $old_words[435] = 'Linux%GSKIP%Ubuntu 8.04 LTS';
9d26ec21 1171
f0b540a3
DO
1172 $old_words[418] = 'Linux%GSKIP%Debian 2.0 (hamm)';
1173 $old_words[419] = 'Linux%GSKIP%Debian 2.1 (slink)';
1174 $old_words[420] = 'Linux%GSKIP%Debian 2.2 (potato)';
1175 $old_words[234] = 'Linux%GSKIP%Debian 3.0 (woody)';
1176 $old_words[235] = 'Linux%GSKIP%Debian 3.1 (sarge)';
1177 $old_words[421] = 'Linux%GSKIP%Debian 4.0 (etch)';
9d26ec21 1178
f0b540a3
DO
1179 $old_words[236] = 'BSD%GSKIP%FreeBSD 1.x';
1180 $old_words[237] = 'BSD%GSKIP%FreeBSD 2.x';
1181 $old_words[238] = 'BSD%GSKIP%FreeBSD 3.x';
1182 $old_words[239] = 'BSD%GSKIP%FreeBSD 4.x';
1183 $old_words[240] = 'BSD%GSKIP%FreeBSD 5.x';
1184 $old_words[241] = 'BSD%GSKIP%FreeBSD 6.x';
1185 $old_words[732] = '[[BSD%GSKIP%FreeBSD 7.0 | http://www.freebsd.org/releases/7.0R/announce.html]]';
9d26ec21 1186
f0b540a3
DO
1187 $old_words[441] = 'Linux%GSKIP%CentOS-2';
1188 $old_words[442] = 'Linux%GSKIP%CentOS-3';
1189 $old_words[443] = 'Linux%GSKIP%CentOS-4';
1190 $old_words[444] = 'Linux%GSKIP%CentOS-5';
9d26ec21 1191
f0b540a3
DO
1192 $old_words[218] = 'BSD%GSKIP%Solaris 8';
1193 $old_words[219] = 'BSD%GSKIP%Solaris 9';
1194 $old_words[220] = 'BSD%GSKIP%Solaris 10';
9d26ec21 1195
f0b540a3
DO
1196 $old_words[49] = 'Sun%GPASS%Ultra 10';
1197 $old_words[50] = 'Sun%GPASS%Enterprise 420R';
1198 $old_words[51] = '[[Sun%GPASS%Fire X2100 | http://www.sun.com/servers/entry/x2100/]]';
1199 $old_words[52] = '[[Sun%GPASS%Fire E4900 | http://www.sun.com/servers/midrange/sunfire_e4900/index.xml]]';
1200 $old_words[53] = 'Sun%GPASS%Netra X1';
1201 $old_words[57] = 'Sun%GPASS%Fire V210';
1202 $old_words[58] = 'Sun%GPASS%Fire V240';
1203 $old_words[60] = 'Sun%GPASS%Netra t1 105';
1204 $old_words[61] = 'Sun%GPASS%Enterprise 4500';
1205 $old_words[64] = 'Sun%GPASS%Ultra 5';
1206 $old_words[76] = '[[Sun%GPASS%Fire X4600 | http://www.sun.com/servers/x64/x4600/]]';
1207 $old_words[77] = '[[Sun%GPASS%Fire X4500 | http://www.sun.com/servers/x64/x4500/]]';
1208 $old_words[78] = '[[Sun%GPASS%Fire X4200 | http://www.sun.com/servers/entry/x4200/]]';
1209 $old_words[79] = '[[Sun%GPASS%Fire X4100 | http://www.sun.com/servers/entry/x4100/]]';
1210 $old_words[80] = '[[Sun%GPASS%Fire X2100 M2 | http://www.sun.com/servers/entry/x2100/]]';
1211 $old_words[81] = '[[Sun%GPASS%Fire X2200 M2 | http://www.sun.com/servers/x64/x2200/]]';
1212 $old_words[82] = 'Sun%GPASS%Fire V40z';
1213 $old_words[83] = 'Sun%GPASS%Fire V125';
1214 $old_words[84] = '[[Sun%GPASS%Fire V215 | http://www.sun.com/servers/entry/v215/]]';
1215 $old_words[85] = '[[Sun%GPASS%Fire V245 | http://www.sun.com/servers/entry/v245/]]';
1216 $old_words[86] = '[[Sun%GPASS%Fire V445 | http://www.sun.com/servers/entry/v445/]]';
1217 $old_words[87] = 'Sun%GPASS%Fire V440';
1218 $old_words[88] = '[[Sun%GPASS%Fire V490 | http://www.sun.com/servers/midrange/v490/]]';
1219 $old_words[89] = '[[Sun%GPASS%Fire V890 | http://www.sun.com/servers/midrange/v890/]]';
1220 $old_words[90] = '[[Sun%GPASS%Fire E2900 | http://www.sun.com/servers/midrange/sunfire_e2900/index.xml]]';
1221 $old_words[91] = 'Sun%GPASS%Fire V1280';
9d26ec21 1222
f0b540a3
DO
1223 $old_words[55] = 'Dell PowerEdge%GPASS%1650';
1224 $old_words[56] = 'Dell PowerEdge%GPASS%2850';
1225 $old_words[62] = 'Dell PowerEdge%GPASS%1950';
1226 $old_words[63] = 'Dell PowerEdge%GPASS%1550';
1227 $old_words[65] = 'Dell PowerEdge%GPASS%2950';
1228 $old_words[66] = 'Dell PowerEdge%GPASS%650';
1229 $old_words[67] = 'Dell PowerEdge%GPASS%4600';
1230 $old_words[355] = 'Dell PowerEdge%GPASS%6850';
1231 $old_words[356] = 'Dell PowerEdge%GPASS%6950';
1232 $old_words[357] = 'Dell PowerEdge%GPASS%R900';
1233 $old_words[358] = 'Dell PowerEdge%GPASS%4400';
1234 $old_words[359] = 'Dell PowerEdge%GPASS%2650';
1235 $old_words[360] = 'Dell PowerEdge%GPASS%2550';
1236 $old_words[361] = 'Dell PowerEdge%GPASS%750';
1237 $old_words[362] = 'Dell PowerEdge%GPASS%2450';
1238 $old_words[363] = 'Dell PowerEdge%GPASS%850';
1239 $old_words[364] = 'Dell PowerEdge%GPASS%1850';
1240 $old_words[365] = 'Dell PowerEdge%GPASS%860';
1241 $old_words[366] = 'Dell PowerEdge%GPASS%2900';
1242 $old_words[367] = 'Dell PowerEdge%GPASS%2970';
1243 $old_words[368] = 'Dell PowerEdge%GPASS%SC1435';
df4c3309 1244
f0b540a3
DO
1245 $old_words[101] = '[[HP ProLiant%GPASS%DL140 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328421-1842838.html]]';
1246 $old_words[102] = '[[HP ProLiant%GPASS%DL145 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328421-3219755.html]]';
1247 $old_words[103] = '[[HP ProLiant%GPASS%DL320 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-3201178.html]]';
1248 $old_words[104] = '[[HP ProLiant%GPASS%DL360 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-1121486.html]]';
1249 $old_words[105] = '[[HP ProLiant%GPASS%DL380 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-1121516.html]]';
1250 $old_words[106] = '[[HP ProLiant%GPASS%DL385 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-3219233.html]]';
1251 $old_words[107] = '[[HP ProLiant%GPASS%DL580 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328422-3454575.html]]';
1252 $old_words[108] = '[[HP ProLiant%GPASS%DL585 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328422-3219717.html]]';
1253 $old_words[109] = '[[HP ProLiant%GPASS%ML110 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-3328424-3577708.html]]';
1254 $old_words[110] = '[[HP ProLiant%GPASS%ML150 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-3328424-3580609.html]]';
1255 $old_words[111] = '[[HP ProLiant%GPASS%ML310 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-241477-3580655.html]]';
1256 $old_words[112] = '[[HP ProLiant%GPASS%ML350 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-241477-1121586.html]]';
1257 $old_words[113] = '[[HP ProLiant%GPASS%ML370 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-241477-1121474.html]]';
1258 $old_words[114] = '[[HP ProLiant%GPASS%ML570 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-3328425-1842779.html]]';
1259 $old_words[534] = '[[HP ProLiant%GPASS%DL160 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328421-3580694.html]]';
1260 $old_words[535] = '[[HP ProLiant%GPASS%DL180 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328421-3580698.html]]';
1261 $old_words[536] = '[[HP ProLiant%GPASS%DL185 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-3328421-3579900.html]]';
1262 $old_words[537] = '[[HP ProLiant%GPASS%DL365 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-3186080.html]]';
1263 $old_words[538] = '[[HP ProLiant%GPASS%DL320s | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-3232017.html]]';
1264 $old_words[539] = '[[HP ProLiant%GPASS%DL320p | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-3328412-241644-241475-3579703.html]]';
1265 $old_words[540] = '[[HP ProLiant%GPASS%ML115 | http://h10010.www1.hp.com/wwpc/us/en/en/WF05a/15351-15351-241434-241646-3328424-3330535.html]]';
a0a199c7 1266
86fc1740
DO
1267 foreach ($new_words as $dict_key => $tmp)
1268 foreach ($tmp as $chapter_no => $dict_value)
1269 $query[] = 'INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) ' .
1270 "VALUES (${chapter_no}, ${dict_key}, '${dict_value}')";
9d26ec21
DO
1271 foreach ($old_words as $dict_key => $dict_value)
1272 $query[] = "update Dictionary set dict_value = '${dict_value}' where dict_key = ${dict_key} limit 1";
3526c7c6 1273 $query[] = "alter table Rack add unique name_in_row (row_id, name)";
dc327897 1274 $query[] = "delete from UserPermission where page = 'help'";
5cffef42 1275 $query[] = "alter table Config change column varvalue varvalue char(255) NOT NULL";
194e3748
DO
1276 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('SHOW_EXPLICIT_TAGS','yes','string','no','no','Show explicit tags')";
1277 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('SHOW_IMPLICIT_TAGS','yes','string','no','no','Show implicit tags')";
1278 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('SHOW_AUTOMATIC_TAGS','no','string','no','no','Show automatic tags')";
eeb4a5d8
DO
1279 // Decommission the Protocols dictionary chapter.
1280 $query[] = "alter table PortForwarding add column proto_new enum('TCP','UDP') not null default 'TCP' after proto";
1281 $query[] = "update PortForwarding set proto_new = 'TCP' where proto = 336";
1282 $query[] = "update PortForwarding set proto_new = 'UDP' where proto = 337";
1283 $query[] = "alter table PortForwarding drop primary key";
1284 $query[] = "alter table PortForwarding drop column proto";
1285 $query[] = "alter table PortForwarding change column proto_new proto enum('TCP','UDP') not null default 'TCP'";
1286 $query[] = "alter table PortForwarding add primary key (`object_id`,`proto`,`localip`,`localport`,`remoteip`,`remoteport`)";
1287 $query[] = "delete from Dictionary where chapter_no = 20";
1288 $query[] = "delete from Chapter where chapter_no = 20";
68a3ab9c 1289 $query[] = "update Config set varvalue = '0.15.0' where varname = 'DB_VERSION'";
86fc1740 1290 break; // --------------------------------------------
3861eef6
DO
1291 case '0.15.1':
1292 $query[] = "INSERT INTO `Config` VALUES ('IPV4_AUTO_RELEASE','1','uint','no','no','Auto-release IPv4 addresses on allocation')";
d824020c 1293 $query[] = "update Config set varvalue = '0.15.1' where varname = 'DB_VERSION'";
3861eef6 1294 break;
fe782367 1295 case '0.16.0':
04402f63
DO
1296 if (!defined ('MB_CASE_LOWER'))
1297 {
1298 die ('<b>Cannot upgrade due to multibyte extension not present. See the README for details.</b>');
1299 }
fe782367 1300 $query[] = 'alter table TagStorage modify column tag_id int(10) unsigned not null;';
943dd362 1301 $query[] = "alter table TagStorage modify column target_realm enum('object','ipv4net','rack','ipv4vs','ipv4rspool','user') NOT NULL default 'object'";
fe782367
DO
1302 $query[] = "create table Script (script_name char(64) not null primary key, script_text text)";
1303 // Do the same getUserPermissions() does, but without the function.
1304 // We need to generate more specific rules first, otherwise they will
1305 // never work.
1306 $tq =
1307 "select UserPermission.user_id, user_name, page, tab, access from " .
1308 "UserPermission natural left join UserAccount where (user_name is not null) or " .
5f4027b8 1309 "(user_name is null and UserPermission.user_id = 0) order by user_id desc, page desc, tab desc";
fe782367 1310 $tr = $dbxlink->query ($tq);
d1e26db3 1311 $code = "allow {\$userid_1}\ndeny true\n";
5f4027b8
DO
1312 // copied and pasted from fixContext()
1313 $pmap = array
1314 (
1315 'accounts' => 'userlist',
1316 'rspools' => 'ipv4rsplist',
1317 'rspool' => 'ipv4rsp',
1318 'vservices' => 'ipv4vslist',
1319 'vservice' => 'ipv4vs',
1320 );
1321 $tmap = array();
1322 $tmap['objects']['newmulti'] = 'addmore';
1323 $tmap['objects']['newobj'] = 'addmore';
1324 $tmap['object']['switchvlans'] = 'livevlans';
1325 $tmap['object']['slb'] = 'editrspvs';
72d8ced3
DO
1326 $tmap['object']['portfwrd'] = 'nat4';
1327 $tmap['object']['network'] = 'ipv4';
fe782367
DO
1328 while ($row = $tr->fetch (PDO::FETCH_ASSOC))
1329 {
5f4027b8
DO
1330 // map, if appropriate
1331 $row['page'] = isset ($pmap[$row['page']]) ? $pmap[$row['page']] : $row['page'];
1332 $row['tab'] = isset ($tmap[$row['page']][$row['tab']]) ? $tmap[$row['page']][$row['tab']] : $row['tab'];
1333 // build a rule
d91674c6 1334 $conjunction = '';
fe782367 1335 $rule = $row['access'] == 'yes' ? 'allow' : 'deny';
d91674c6
DO
1336 if ($row['user_id'] != 0)
1337 {
1338 $rule .= " {\$username_${row['user_name']}}";
1339 $conjunction = 'and ';
1340 }
1341 if ($row['page'] != '%')
1342 {
1343 $rule .= " ${conjunction}{\$page_${row['page']}}";
1344 $conjunction = 'and ';
1345 }
1346 if ($row['tab'] != '%')
1347 $rule .= " ${conjunction}{\$tab_${row['tab']}}";
fe782367
DO
1348 if ($rule == 'allow' or $rule == 'deny')
1349 continue;
d91674c6 1350 $code .= "${rule}\n";
fe782367
DO
1351 }
1352 $query[] = "insert into Script (script_name, script_text) values ('RackCode', '${code}')";
1353 $query[] = 'drop table UserPermission';
a69250c8
DO
1354 $new_words[791] = array (13 => '[[Linux%GSKIP%openSUSE 11.0 | http://en.opensuse.org/OpenSUSE_11.0]]');
1355 $new_words[] = array (11 => '[[SGI%GPASS%Altix XE250 | http://www.sgi.com/products/servers/altix/xe/configs.html]]');
1356 $new_words[] = array (11 => '[[SGI%GPASS%Altix XE310 | http://www.sgi.com/products/servers/altix/xe/configs.html]]');
1357 $new_words[] = array (11 => '[[SGI%GPASS%Altix XE320 | http://www.sgi.com/products/servers/altix/xe/configs.html]]');
1358 foreach ($new_words as $dict_key => $tmp)
1359 foreach ($tmp as $chapter_no => $dict_value)
1360 $query[] = 'INSERT INTO `Dictionary` (`chapter_no`, `dict_key`, `dict_value`) ' .
1361 "VALUES (${chapter_no}, ${dict_key}, '${dict_value}')";
849f46c3 1362 $query[] = "update Config set varvalue = '0.16.0' where varname = 'DB_VERSION'";
fe782367 1363 break;
4a6a28f1
DO
1364 case '0.16.1':
1365 $query[] = 'alter table Script modify column script_text longtext';
b0348307
DO
1366 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('SHOW_LAST_TAB','no','string','yes','no','Remember last tab shown for each page')";
1367 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('COOKIE_TTL','1209600','uint','yes','no','Cookies lifetime in seconds')";
1368 $query[] = "update Config set varvalue = '0.16.1' where varname = 'DB_VERSION'";
4a6a28f1 1369 break;
52c836b1
DO
1370 case '0.16.2':
1371 $query[] = "alter table IPBonds modify column type enum('regular','shared','virtual','router')";
3b48d1b4 1372 $query[] = "update Dictionary set dict_value = 'spacer' where dict_key = 11";
f0ed1181 1373 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('EXT_IPV4_VIEW','yes','string','no','no','Display parent network info for IPv4 addresses')";
5d4fff58 1374 $query[] = "ALTER TABLE RackSpace ADD KEY `RackSpace_object_id` (`object_id`)";
52c836b1
DO
1375 $query[] = "update Config set varvalue = '0.16.2' where varname = 'DB_VERSION'";
1376 break;
568079c3
DO
1377 case '0.16.3':
1378 // The network table list used to allow duplicate "prefix-masklen" pairs, which was a bad idea.
1379 // The code, which verified each new network to be "unique", didn't work for "upper" IPv4 space.
1380 // To enable the relevant index now, it is necessary to process all ghost networks, which could
1381 // be accumulated over the time, and move all tags assigned to them to the "master" record, which
1382 // we recognize to be the one with the lowest ID.
1383 $q = 'select ip, mask, count(*) as c from IPRanges group by ip, mask having c > 1';
1384 $r = $dbxlink->query ($q);
1385 // Let's hope there's not many dupes, cause sub-queries won't work.
1386 $dupes = $r->fetchAll (PDO::FETCH_ASSOC);
1387 unset ($r);
1388 foreach ($dupes as $d)
1389 {
1390 $firstid = 0;
1391 $q = "select id from IPRanges where ip = ${d['ip']} and mask = ${d['mask']} order by id";
1392 $r = $dbxlink->query ($q);
1393 while ($row = $r->fetch (PDO::FETCH_ASSOC))
1394 {
1395 if (!$firstid)
1396 {
1397 $firstid = $row['id'];
1398 continue;
1399 }
1400 // Rewrite tags, but don't rebuild the chains. Let regular code sort it out.
4d69ff46 1401 // One of the next two queries will fail.
568079c3 1402 $query[] = "update TagStorage set target_id = ${firstid} where target_id = ${row['id']} and target_realm = 'ipv4net'";
4d69ff46 1403 $query[] = "delete from TagStorage where target_id = ${row['id']} and target_realm = 'ipv4net'";
568079c3
DO
1404 $query[] = "delete from IPRanges where id = ${row['id']}";
1405 }
1406 unset ($r);
1407 }
1408 $query[] = 'alter table IPRanges add unique `base-len` (`ip`, `mask`)';
f85f4db0 1409 $query[] = 'alter table IPVirtualService drop key `endpoint`';
9900a515 1410 // fix the default value (only seen when upgrading from pre-0.16.0 to pre-0.16.3)
943dd362 1411 $query[] = "alter table TagStorage modify column target_realm enum('object','ipv4net','rack','ipv4vs','ipv4rspool','user') NOT NULL default 'object'";
efee2692 1412 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('TREE_THRESHOLD','25','uint','yes','no','Tree view auto-collapse threshold')";
2be3fd23 1413 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('IPV4_JAYWALK','no','string','no','no','Enable IPv4 address allocations w/o covering network')";
9318d2ef 1414 $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('ADDNEW_AT_TOP','yes','string','no','no','Render \"add new\" line at top of the list')";
568079c3
DO
1415 $query[] = "update Config set description = 'Extended IPv4 view' where varname = 'EXT_IPV4_VIEW'";
1416 $query[] = "update Config set varvalue = '0.16.3' where varname = 'DB_VERSION'";
1417 break;
fbbb74fb 1418 default:
b0348307 1419 showError ("executeUpgradeBatch () failed, because batch '${batchid}' isn't defined", __FILE__);
fbbb74fb
DO
1420 die;
1421 break;
1422 }
fbbb74fb 1423 $failures = array();
ce109ff2 1424 $ndots = 0;
22e40283 1425 echo "<pre>Executing database upgrade batch '${batchid}':\n";
fbbb74fb
DO
1426 foreach ($query as $q)
1427 {
1428 $result = $dbxlink->query ($q);
1429 if ($result != NULL)
fbbb74fb 1430 echo '.';
758fe24c
DO
1431 else
1432 {
1433 echo '!';
1434 $errorInfo = $dbxlink->errorInfo();
1435 $failures[] = array ($q, $errorInfo[2]);
1436 }
1437 if (++$ndots == 50)
1438 {
1439 echo "\n";
15a50768 1440 flush();
758fe24c 1441 $ndots = 0;
fbbb74fb 1442 }
fbbb74fb
DO
1443 }
1444 echo '<br>';
1445 if (!count ($failures))
1446 echo "No errors!\n";
1447 else
1448 {
7fc5565c 1449 echo "The following queries failed:\n<font color=red>";
fbbb74fb
DO
1450 foreach ($failures as $f)
1451 {
1452 list ($q, $i) = $f;
1453 echo "${q} // ${i}\n";
1454 }
1455 }
7fc5565c 1456 echo '</font></pre>';
fbbb74fb
DO
1457}
1458
1459// ******************************************************************
1460//
1461// Execution starts here
1462//
1463// ******************************************************************
1464
1465$root = (empty($_SERVER['HTTPS'])?'http':'https').
1466 '://'.
1467 (isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:($_SERVER['SERVER_NAME'].($_SERVER['SERVER_PORT']=='80'?'':$_SERVER['SERVER_PORT']))).
54c2a7a8
DO
1468 dirname($_SERVER['PHP_SELF']);
1469if (substr ($root, -1) != '/')
1470 $root .= '/';
fbbb74fb
DO
1471
1472// The below will be necessary as long as we rely on showError()
1473require_once 'inc/interface.php';
1474
1475require_once 'inc/config.php';
1476require_once 'inc/database.php';
1477if (file_exists ('inc/secret.php'))
1478 require_once 'inc/secret.php';
1479else
1480 die ("Database connection parameters are read from inc/secret.php file, " .
1481 "which cannot be found.\nCopy provided inc/secret-sample.php to " .
1482 "inc/secret.php and modify to your setup.\n\nThen reload the page.");
1483
1484try
1485{
1486 $dbxlink = new PDO ($pdo_dsn, $db_username, $db_password);
1487}
1488catch (PDOException $e)
1489{
1490 die ("Database connection failed:\n\n" . $e->getMessage());
1491}
1492
fbbb74fb
DO
1493// Now we need to be sure that the current user is the administrator.
1494// The rest doesn't matter within this context.
1495// We still continue to use the current authenticator though, but this will
1496// last only till the UserAccounts remains the same. After that this file
1497// will have to dig into the DB for the user accounts.
1498require_once 'inc/auth.php';
1499
a1f3710a
DO
1500// 1. This didn't fail sanely, because getUserAccounts() depended on showError()
1501// 2. getUserAccounts() doesn't work for old DBs since 0.16.0. Let's have own
1502// copy until it breaks too.
1503
1504function getUserAccounts_local ()
1505{
1506 global $dbxlink;
1507 $query = 'select user_id, user_name, user_password_hash from UserAccount order by user_name';
1508 if (($result = $dbxlink->query ($query)) == NULL)
1509 die ('SQL query failed in ' . __FUNCTION__);
1510 $ret = array();
1511 while ($row = $result->fetch (PDO::FETCH_ASSOC))
1512 foreach (array ('user_id', 'user_name', 'user_password_hash') as $cname)
1513 $ret[$row['user_name']][$cname] = $row[$cname];
1514 return $ret;
1515}
1516
1517$accounts = getUserAccounts_local();
fbbb74fb 1518
d78fdaea
DO
1519// Only administrator is always authenticated locally, so reject others
1520// for authenticate() to succeed.
99ee5479
DO
1521
1522if
1523(
1524 !isset ($_SERVER['PHP_AUTH_USER']) or
1525 !isset ($_SERVER['PHP_AUTH_PW']) or
1526 $accounts[$_SERVER['PHP_AUTH_USER']]['user_id'] != 1 or
1527 !authenticated_via_database (escapeString ($_SERVER['PHP_AUTH_USER']), escapeString ($_SERVER['PHP_AUTH_PW']))
1528)
1529{
c0142c01
DO
1530 header ('WWW-Authenticate: Basic realm="RackTables upgrade"');
1531 header ('HTTP/1.0 401 Unauthorized');
b0348307 1532 showError ('You must be authenticated as an administrator to complete the upgrade.', __FILE__);
99ee5479
DO
1533 die;
1534}
fbbb74fb
DO
1535
1536$dbver = getDatabaseVersion();
5f4027b8
DO
1537echo 'Code version: ' . CODE_VERSION . '<br>';
1538echo 'Database version: ' . $dbver . '<br>';
fbbb74fb 1539if ($dbver == CODE_VERSION)
758fe24c 1540{
5f4027b8
DO
1541 die ("<p align=justify>No action is necessary. " .
1542 "Proceed to the <a href='${root}'>main page</a>, " .
1543 "check your data and have a nice day.</p>");
758fe24c 1544}
fbbb74fb
DO
1545
1546foreach (getDBUpgradePath ($dbver, CODE_VERSION) as $batchid)
5f4027b8 1547{
fbbb74fb 1548 executeUpgradeBatch ($batchid);
5f4027b8
DO
1549 printReleaseNotes ($batchid);
1550}
fbbb74fb
DO
1551
1552echo '<br>Database version == ' . getDatabaseVersion();
1553echo "<p align=justify>Your database seems to be up-to-date. " .
1554 "Now the best thing to do would be to follow to the <a href='${root}'>main page</a> " .
1555 "and explore your data. Have a nice day.</p>";
1556
1557?>