Uname: Linux web3.us.cloudlogin.co 5.10.226-xeon-hst #2 SMP Fri Sep 13 12:28:44 UTC 2024 x86_64
Software: Apache
PHP version: 8.1.31 [ PHP INFO ] PHP os: Linux
Server Ip: 162.210.96.117
Your Ip: 3.137.181.171
User: edustar (269686) | Group: tty (888)
Safe Mode: OFF
Disable Function:
NONE

name : AccountInfo.pm
package Ocsinventory::Agent::AccountInfo;

use strict;
use warnings;

use Encode qw(decode);

sub new {
    my (undef,$params) = @_;

    my $self = {};
    bless $self;

    $self->{config} = $params->{config};
    $self->{logger} = $params->{logger};
    $self->{common} = $params->{common};

    my $logger = $self->{logger} = $params->{logger};

    if ($self->{config}->{accountinfofile}) {
        $logger->debug ('Accountinfo file: '. $self->{config}->{accountinfofile});

        if (! -f $self->{config}->{accountinfofile}) {
            $logger->info("Accountinfo file doesn't exist. I create an empty one.");
            $self->writeAccountInfoFile();
        } else {
            my $xmladm;

            eval {
                $xmladm = $self->{common}->readXml($self->{config}->{accountinfofile}, [ 'ACCOUNTINFO' ]);
            };

            if ($xmladm && exists($xmladm->{ACCOUNTINFO})) {
                # Store the XML content in a local HASH
                for(@{$xmladm->{ACCOUNTINFO}}){
                    if (!$_->{KEYNAME}) {
                        $logger->debug ("Incorrect KEYNAME in ACCOUNTINFO");
                    }
                    $self->{accountinfo}{ $_->{KEYNAME} } = $_->{KEYVALUE};
                }
            }
        }
    } else { 
      $logger->debug("No accountinfo file defined");
    }

    if($self->{config}->{tag}) {
        $logger->debug("A TAG seems to already exist in the ocsinv.adm file. ".
            "The -t parameter will be ignored. Don't forget that the TAG value ".
            "will be ignored by the server unless it has OCS_OPT_ACCEPT_TAG_UPDATE_FROM_CLIENT=1.");

        $self->{accountinfo}->{TAG} = decode('UTF-8', $self->{config}->{tag});
    }

    $self; #Because we have already blessed the object 
}

# Add accountinfo stuff to an inventory
sub setAccountInfo {
    my $self = shift;
    my $inventory = shift;

    #my $ai = $self->getAll();
    $self->{xmlroot}{'CONTENT'}{ACCOUNTINFO} = [];

    my $ai = $self->{accountinfo};
    return unless $ai;

    foreach (keys %$ai) {

    push @{$inventory->{xmlroot}{'CONTENT'}{ACCOUNTINFO}}, {
            KEYNAME => [$_],
            KEYVALUE => [$ai->{$_}],
        };
    }
}

sub writeAccountInfoFile {
    my ($self, $ref) = @_;

    my $logger = $self->{logger};

    my $content;
    $content->{ACCOUNTINFO} = [];

    #We clear accountinfo to store the new one 
    undef $self->{accountinfo};

    #We get values sent by server
    if (ref ($ref) =~ /^ARRAY$/) {
        foreach (@$ref) {
            $self->{accountinfo}->{$_->{KEYNAME}} = $_->{KEYVALUE} if defined ($_->{KEYNAME}) && defined ($_->{KEYVALUE});
        }
    } elsif (ref ($ref) =~ /^HASH$/) {
        $self->{accountinfo}->{$ref->{KEYNAME}} = $ref->{KEYVALUE} if defined ($ref->{KEYNAME}) && defined ($ref->{KEYVALUE});
    } else {
        $logger->debug ("Invalid parameter while writing accountinfo file");
    }

    #We feed our XML for accountinfo file
    foreach (keys %{$self->{accountinfo}}) {
        push @{$content->{ACCOUNTINFO}}, {KEYNAME => [$_], KEYVALUE =>
            [$self->{accountinfo}{$_}]}; 
    }

    my $xml=XML::Simple::XMLout($content, RootName => 'ADM', XMLDecl=> '<?xml version="1.0" encoding="UTF-8"?>');

    #We write accountinfo file
    my $fault;
    if (!open ADM, ">".$self->{config}->{accountinfofile}) {
        $fault = 1;
    } else {
        print ADM $xml;
        $fault = 1 unless close ADM;
    }

    if (!$fault) {
        $logger->debug ("Account info updated successfully");
    } else {
        $logger->error ("Can't save account info in `".
            $self->{config}->{accountinfofile});
    }
}

1;
© 2025 GrazzMean