Sys-Info-Driver-BSD
view release on metacpan or search on metacpan
lib/Sys/Info/Driver/BSD/OS.pm view on Meta::CPAN
: ($opt{edition} ? 'NAME_EDITION' : 'NAME' )
;
return $OSVERSION{ $id };
}
sub version { shift->_populate_osversion(); return $OSVERSION{VERSION} }
sub build { shift->_populate_osversion(); return $OSVERSION{RAW}->{BUILD_DATE} }
sub uptime { return fsysctl 'kern.boottime' }
# user methods
sub is_root {
my $name = login_name();
my $id = POSIX::geteuid();
my $gid = POSIX::getegid();
return 0 if $@;
return 0 if ! defined $id || ! defined $gid;
return $id == 0 && $gid == 0; # && $name eq 'root'; # $name is never root!
}
sub login_name {
my($self, @args) = @_;
my %opt = @args % 2 ? () : @args;
my $login = POSIX::getlogin() || return;
my $rv = eval { $opt{real} ? (getpwnam $login)[USER_REAL_NAME_FIELD] : $login };
$rv =~ s{ [,]{3,} \z }{}xms if $opt{real};
return $rv;
}
sub node_name { return shift->uname->{nodename} }
sub domain_name { }
sub fs {
my $self = shift;
return unimplemented => 1;
}
sub bitness {
my $self = shift;
return;
}
# ------------------------[ P R I V A T E ]------------------------ #
sub _file_has_substr {
my $self = shift;
my $file = shift;
my $str = shift;
return if ! -e $file || ! -f _;
my $raw = $self->slurp( $file ) =~ m{$str}xms;
return $raw;
}
sub _probe_edition {
my $self = shift;
my $name = shift;
#Â Check DesktopBSD
# /etc/motd
# /var/db/pkg/desktopbsd-tools-1.1_2/
return if $name ne 'FreeBSD';
my $dbsd = quotemeta '# $DesktopBSD$';
return 'DesktopBSD' if
$self->_file_has_substr('/etc/motd' , qr{Welcome \s to \s DesktopBSD}xms ) ||
$self->_file_has_substr('/etc/devd.conf' , qr{\A $dbsd}xms ) ||
$self->_file_has_substr('/etc/rc.d/clearmedia', qr{\A $dbsd}xms );
return; #Â fail!
}
sub _populate_osversion {
return if %OSVERSION;
my $self = shift;
require POSIX;
my($sysname, $nodename, $release, $version, $machine) = POSIX::uname();
my(undef, $raw) = split m{\#}xms, $version;
my($date, undef) = split m{ \s+ \S+ \z }xms, $raw;
my $build_date = $date ? $self->date2time( $date ) : undef;
my $build = $date;
my $edition = $self->_probe_edition( $sysname );
my $kernel = '???';
%OSVERSION = (
NAME => $sysname,
NAME_EDITION => $edition ? "$sysname ($edition)" : $sysname,
LONGNAME => q{}, # will be set below
LONGNAME_EDITION => q{}, # will be set below
VERSION => $release,
KERNEL => undef,
RAW => {
BUILD => defined $build ? $build : 0,
BUILD_DATE => defined $build_date ? $build_date : 0,
EDITION => $edition,
},
);
$OSVERSION{LONGNAME} = sprintf '%s %s (kernel: %s)',
@OSVERSION{ qw/ NAME VERSION / },
$kernel;
$OSVERSION{LONGNAME_EDITION} = sprintf '%s %s (kernel: %s)',
@OSVERSION{ qw/ NAME_EDITION VERSION / },
$kernel;
return;
}
1;
__END__
=head1 NAME
Sys::Info::Driver::BSD::OS - BSD backend
=head1 SYNOPSIS
-
=head1 DESCRIPTION
( run in 0.677 second using v1.01-cache-2.11-cpan-fe3c2283af0 )