source: ocsinventory-agent/trunk/fuentes/lib/Ocsinventory/Agent/AccountInfo.pm @ 468

Last change on this file since 468 was 468, checked in by mabarracus, 4 years ago

Copyt trusty code

File size: 3.6 KB
Line 
1package Ocsinventory::Agent::AccountInfo;
2
3use strict;
4use warnings;
5
6sub new {
7    my (undef,$params) = @_;
8
9    my $self = {};
10    bless $self;
11
12    $self->{config} = $params->{config};
13    $self->{logger} = $params->{logger};
14    $self->{common} = $params->{common};
15
16    my $logger = $self->{logger} = $params->{logger};
17
18
19    if ($self->{config}->{accountinfofile}) {
20
21        $logger->debug ('Accountinfo file: '. $self->{config}->{accountinfofile});
22        if (! -f $self->{config}->{accountinfofile}) {
23            $logger->info ("Accountinfo file doesn't exist. I create an empty one.");
24            $self->writeAccountInfoFile();
25        } else {
26
27            my $xmladm;
28
29            eval {
30                $xmladm = $self->{common}->readXml($self->{config}->{accountinfofile}, [ 'ACCOUNTINFO' ]);
31            };
32
33
34            if ($xmladm && exists($xmladm->{ACCOUNTINFO})) {
35                # Store the XML content in a local HASH
36                for(@{$xmladm->{ACCOUNTINFO}}){
37                    if (!$_->{KEYNAME}) {
38                        $logger->debug ("Incorrect KEYNAME in ACCOUNTINFO");
39                    }
40                    $self->{accountinfo}{ $_->{KEYNAME} } = $_->{KEYVALUE};
41                }
42            }
43        }
44    } else { 
45      $logger->debug("No accountinfo file defined");
46    }
47
48    if ($self->{config}->{tag}) {
49        if ($self->{accountinfo}->{TAG}) {
50            $logger->debug("A TAG seems to already exist in the ocsinv.adm file. ".
51                "The -t paramter will be ignored. Don't forget that the TAG value ".
52                "will ignored by the server unless it has OCS_OPT_ACCEPT_TAG_UPDATE_FROM_CLIENT=1.");
53        } else {
54          $self->{accountinfo}->{TAG} = $self->{config}->{tag};
55        }
56    }
57  $self; #Because we have already blessed the object
58}
59
60# Add accountinfo stuff to an inventory
61sub setAccountInfo {
62    my $self = shift;
63    my $inventory = shift;
64
65    #my $ai = $self->getAll();
66    $self->{xmlroot}{'CONTENT'}{ACCOUNTINFO} = [];
67
68    my $ai = $self->{accountinfo};
69    return unless $ai;
70
71    foreach (keys %$ai) {
72
73    push @{$inventory->{xmlroot}{'CONTENT'}{ACCOUNTINFO}}, {
74            KEYNAME => [$_],
75            KEYVALUE => [$ai->{$_}],
76        };
77    }
78}
79
80sub writeAccountInfoFile {
81    my ($self, $ref) = @_;
82
83    my $logger = $self->{logger};
84
85    my $content;
86    $content->{ACCOUNTINFO} = [];
87
88    #We clear accountinfo to store the new one
89    undef $self->{accountinfo};
90
91    #We get values sent by server
92    if (ref ($ref) =~ /^ARRAY$/) {
93        foreach (@$ref) {
94            $self->{accountinfo}->{$_->{KEYNAME}} = $_->{KEYVALUE} if defined ($_->{KEYNAME}) && defined ($_->{KEYVALUE});
95        }
96    } elsif (ref ($ref) =~ /^HASH$/) {
97        $self->{accountinfo}->{$ref->{KEYNAME}} = $ref->{KEYVALUE} if defined ($ref->{KEYNAME}) && defined ($ref->{KEYVALUE});
98    } else {
99        $logger->debug ("Invalid parameter while writing accountinfo file");
100    }
101
102    #We feed our XML for accountinfo file
103    foreach (keys %{$self->{accountinfo}}) {
104        push @{$content->{ACCOUNTINFO}}, {KEYNAME => [$_], KEYVALUE =>
105            [$self->{accountinfo}{$_}]}; 
106    }
107
108    my $xml=XML::Simple::XMLout($content, RootName => 'ADM', XMLDecl=> '<?xml version="1.0" encoding="UTF-8"?>');
109
110    #We write accountinfo file
111    my $fault;
112    if (!open ADM, ">".$self->{config}->{accountinfofile}) {
113        $fault = 1;
114    } else {
115        print ADM $xml;
116        $fault = 1 unless close ADM;
117    }
118
119    if (!$fault) {
120        $logger->debug ("Account info updated successfully");
121    } else {
122        $logger->error ("Can't save account info in `".
123            $self->{config}->{accountinfofile});
124    }
125}
126
1271;
Note: See TracBrowser for help on using the repository browser.