home *** CD-ROM | disk | FTP | other *** search
- package PPM::Sysinfo;
- $VERSION = '3.00';
-
- use strict;
- use Data::Dumper;
- use PPM::Config;
- use Digest::MD5 qw(md5_hex);
-
- # The hostname of the currently running machine
- sub hostname {
- my $hostname;
- if ($^O eq 'MSWin32') {
- $hostname = (gethostbyname('localhost'))[0];
- }
- elsif (eval { require Net::Domain }) {
- $hostname = Net::Domain::hostfqdn();
- }
- elsif (eval { require Sys::Hostname }) {
- $hostname = Sys::Hostname::hostname();
- }
- else {
- $hostname = "localhost";
- }
- $hostname;
- }
-
- # The IP address of the currently-running machine
- sub ip_addr {
- my @matches;
- my $ip_addr = '0.0.0.0';
- my $ip_raw = $^O eq 'MSWin32' ? `ipconfig` : `/sbin/ifconfig -a`;
- if ($^O eq 'MSWin32') {
- @matches = ($ip_raw =~ /((?:\d+\.){3}\d+)/g);
- }
- elsif ($^O eq 'solaris') {
- @matches = ($ip_raw =~ /inet ((?:\d+\.){3}\d+)/ig);
- }
- else {
- @matches = ($ip_raw =~ /inet addr:((?:\d+\.){3}\d+)/ig);
- }
- for (@matches) {
- next if $_ eq '0.0.0.0';
- $ip_addr = $_;
- last;
- }
- $ip_addr;
- }
-
- # The login id of the current user
- sub username {
- return getlogin;
- }
-
- # The install key (generates one if it doesn't exist)
- sub inst_key {
- my $f = PPM::Config::load_config_file('instkey', 'ro');
- unless (defined $f->{DATA}{inst_id}) {
- $f = PPM::Config::load_config_file('instkey', 'rw');
- $f->{DATA} = generate_inst_key();
- goto &inst_key;
- }
- $f->{DATA}{inst_id};
- }
-
- sub generate_inst_key {
- my $DATA = {
- hostname => hostname(),
- os => $^O,
- date => scalar localtime,
- randkey => rand,
- };
- $DATA->{inst_id} = md5_hex(
- join':', @$DATA{qw(randkey hostname os date)}
- );
- $DATA;
- }
-
- sub generate_user_key {
- my $f = PPM::Config::load_config_file('instkey', 'ro');
- my $user = username();
- my $host = hostname();
- my $time = $f->{DATA}{date};
- Digest::MD5::md5_hex("$user:$host:$time");
- }
-
- 1;
-
- __DATA__
-