289 | | open(CONF, "$conf/config.xml") or die "Unable to read $conf/config.xml: $!\n"; |
290 | | while (my $line = <CONF>) { |
291 | | # Search through the XML data |
292 | | if ($line =~ m#<SecurityPin>(.*?)</SecurityPin>#) { |
293 | | $mysql_conf{'upnp_pin'} = $1; |
294 | | } |
295 | | elsif (($line =~ m#<Host>(.*?)</Host>#) || |
296 | | ($line =~ m#<DBHostName>(.*?)</DBHostName>#)) { |
297 | | $mysql_conf{'db_host'} = $1; |
298 | | } |
299 | | elsif (($line =~ m#<UserName>(.*?)</UserName>#) || |
300 | | ($line =~ m#<DBUserName>(.*?)</DBUserName>#)) { |
301 | | $mysql_conf{'db_user'} = $1; |
302 | | } |
303 | | elsif (($line =~ m#<Password>(.*?)</Password>#) || |
304 | | ($line =~ m#<DBPassword>(.*?)</DBPassword>#)) { |
305 | | $mysql_conf{'db_pass'} = $1; |
306 | | $mysql_conf{'db_pass'} =~ s/&/&/sg; |
307 | | $mysql_conf{'db_pass'} =~ s/>/>/sg; |
308 | | $mysql_conf{'db_pass'} =~ s/</</sg; |
309 | | } |
310 | | elsif (($line =~ m#<DatabaseName>(.*?)</DatabaseName>#) || |
311 | | ($line =~ m#<DBName>(.*?)</DBName>#)) { |
312 | | $mysql_conf{'db_name'} = $1; |
313 | | } |
314 | | elsif (($line =~ m#<Port>(\d*?)</Port>#) || |
315 | | ($line =~ m#<DBPort>(.*?)</DBPort>#)) { |
316 | | $mysql_conf{'db_port'} = $1; |
317 | | } |
318 | | # Hostname override. Not sure if this is still valid or not |
319 | | elsif ($line =~ m#<LocalHostName>(.*?)</LocalHostName>#) { |
320 | | $profileoverride = $1; |
321 | | if ($profileoverride =~ /^\s*$/) { |
322 | | print STDERR "Warning: LocalHostName tag is empty. Ignoring.\n"; |
323 | | } elsif ($profileoverride ne "my-unique-identifier-goes-here") { |
324 | | $mysql_conf{'hostname'} = $profileoverride; |
325 | | } |
| 294 | |
| 295 | my $xml = new XML::Simple; |
| 296 | my $config = $xml->XMLin($config_file, ForceArray => 0, KeyAttr => [ ]); |
| 297 | |
| 298 | my $cfg_err = 0; |
| 299 | |
| 300 | foreach my $cfg_element ('Host', 'UserName', 'Password', 'DatabaseName', 'Port') { |
| 301 | if (ref $config->{'Database'}->{$cfg_element} eq 'ARRAY') { |
| 302 | print STDERR "<$cfg_element> appers more than once in $config_file\n"; |
| 303 | $cfg_err++; |
| 304 | } |
| 305 | if (!length $config->{'Database'}->{$cfg_element}) { |
| 306 | print STDERR "<$cfg_element> is missing from $config_file\n"; |
| 307 | $cfg_err++; |
330 | | # Cleanup |
| 311 | if ($cfg_err > 0) { |
| 312 | return; |
| 313 | } |
| 314 | |
| 315 | $mysql_conf{'db_host'} = $config->{'Database'}->{'Host'}; |
| 316 | $mysql_conf{'db_user'} = $config->{'Database'}->{'UserName'}; |
| 317 | $mysql_conf{'db_pass'} = $config->{'Database'}->{'Password'}; |
| 318 | $mysql_conf{'db_name'} = $config->{'Database'}->{'DatabaseName'}; |
| 319 | $mysql_conf{'db_port'} = $config->{'Database'}->{'Port'}; |
| 320 | $mysql_conf{'hostname'} = $config->{'LocalHostName'}; |
| 321 | |
| 322 | =pod # XMLLib: |
| 323 | my $config = eval { |
| 324 | XML::LibXML->load_xml(location => $config_file); |
| 325 | }; |
| 326 | if($@) { |
| 327 | print STDERR "XML format error in '$config_file':\n$@"; |
| 328 | return; |
| 329 | } |
| 330 | |
| 331 | foreach my $credentials ($config->findnodes('//Database')) { |
| 332 | $mysql_conf{'db_host'} = $credentials->findvalue('./Host'); |
| 333 | $mysql_conf{'db_user'} = $credentials->findvalue('./UserName'); |
| 334 | $mysql_conf{'db_pass'} = $credentials->findvalue('./Password'); |
| 335 | $mysql_conf{'db_name'} = $credentials->findvalue('./DatabaseName'); |
| 336 | $mysql_conf{'db_port'} = $credentials->findvalue('./Port'); |
| 337 | } |
| 338 | $mysql_conf{'hostname'} = $config->findnodes('Configuration/LocalHostName'); |
| 339 | =cut |
| 340 | |
| 341 | #print Dumper($config); |
| 342 | |
| 343 | # Default DB port |