#!/usr/bin/perl # # This calls 'osinfo-query os' and parses the list of OSes reported by it, formatting them into words.xml # entries. Any entries found not already in words.xml are printed to STDOUT. # use strict; use warnings; use Anvil::Tools; use Data::Dumper; my $THIS_FILE = ($0 =~ /^.*\/(.*)$/)[0]; my $running_directory = ($0 =~ /^(.*?)\/$THIS_FILE$/)[0]; if (($running_directory =~ /^\./) && ($ENV{PWD})) { $running_directory =~ s/^\./$ENV{PWD}/; } # Turn off buffering so that the pinwheel will display while waiting for the SSH call(s) to complete. $| = 1; my $anvil = Anvil::Tools->new(); # Read switches (target ([user@]host[:port]) and the file with the target's password. $anvil->data->{switches}{new} = 0; $anvil->data->{switches}{xml} = 0; $anvil->Get->switches; $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "log_0115", variables => { program => $THIS_FILE }}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'switches::new' => $anvil->data->{switches}{new}, 'switches::xml' => $anvil->data->{switches}{xml}, }}); my $words_file = $anvil->data->{path}{words}{'words.xml'}; my $language = $anvil->Words->language; my $shell_call = $anvil->data->{path}{exe}{'osinfo-query'}." os"; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { shell_call => $shell_call }}); my ($output, $return_code) = $anvil->System->call({shell_call => $shell_call}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { output => $output, return_code => $return_code, }}); foreach my $line (split/\n/, $output) { $line = $anvil->Words->clean_spaces({string => $line}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { line => $line }}); next if $line =~ /Short ID/; next if $line =~ /----------------------/; my ($os_code, $os_name) = ($line =~ /^(.*?) \| (.*?) \|/); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 's1:os_code' => $os_code, 's2:os_name' => $os_name, }}); my $os_key = "os_list_".$os_code; if ($anvil->data->{switches}{new}) { # --xml only makes sense with '--new'. Without --new, we're comparing against the if ((not exists $anvil->data->{words}{$words_file}{language}{$language}{key}{$os_key}) or (not $anvil->data->{words}{$words_file}{language}{$language}{key}{$os_key}{content})) { # Print already known. print "\t\t\n"; } } else { # Which format? if ($anvil->data->{switches}{xml}) { print "\t\t\n"; } else { print "key=".$os_code.",name=\"".$os_name."\"\n"; } } } $anvil->nice_exit({exit_code => 0});