use warnings;
use POSIX qw(EINTR EEXIST EOPNOTSUPP);
use IO::Socket::IP;
-use Socket qw(AF_INET AF_INET6 AI_ALL AI_V4MAPPED);
+use Socket qw(AF_INET AF_INET6 AI_ALL AI_V4MAPPED AI_CANONNAME SOCK_DGRAM);
use IO::Select;
use File::Basename;
use File::Path qw(make_path);
my $timeout;
my $oldtimeout;
my $pid;
- my $exitcode;
+ my $exitcode = -1;
my $outfunc;
my $errfunc;
return Encode::decode("utf8", uri_unescape($data));
}
+# depreciated - do not use!
+# we now decode all parameters by default
sub decode_utf8_parameters {
my ($param) = @_;
}
sub dump_journal {
- my ($start, $limit, $since, $until) = @_;
+ my ($start, $limit, $since, $until, $service) = @_;
my $lines = [];
my $count = 0;
my $cmd = ['journalctl', '-o', 'short', '--no-pager'];
+ push @$cmd, '--unit', $service if $service;
push @$cmd, '--since', $since if $since;
push @$cmd, '--until', $until if $until;
run_command($cmd, outfunc => $parser);
return $res[0]->{family};
}
+# get the fully qualified domain name of a host
+# same logic as hostname(1): The FQDN is the name getaddrinfo(3) returns,
+# given a nodename as a parameter
+sub get_fqdn {
+ my ($nodename) = @_;
+
+ my $hints = {
+ flags => AI_CANONNAME,
+ socktype => SOCK_DGRAM
+ };
+
+ my ($err, @addrs) = Socket::getaddrinfo($nodename, undef, $hints);
+
+ die "getaddrinfo: $err" if $err;
+
+ return $addrs[0]->{canonname};
+}
+
# Parses any sane kind of host, or host+port pair:
# The port is always optional and thus may be undef.
sub parse_host_and_port {