use Exporter qw(import);
-our @EXPORT_OK = qw(Server Client Message_Parser);
+our @EXPORT_OK = qw(Server Client Message_Parser RemoveSocketFile);
use IO::Socket::UNIX qw( SOCK_STREAM SOMAXCONN );
'unblock' => 'unblock',
'flush' => 'flush',
'reload' => 'reload',
+ 'reload-ignore-list' => 'reload-ignore-list',
'logrotate' => 'logrotate',
);
## mechanism for guardian. The server function creates an UNIX
## socket.
#
-sub Server () {
+sub Server ($) {
+ my $socket_owner = shift;
+
# If the path for the socketfile does not exist, try to
# create it.
unless (-d "$socketpath") {
- mkdir("$socketpath") or die "Could not create $socketpath: $@\n";
+ mkdir("$socketpath") or die "Could not create $socketpath: $!";
}
# Delete an existing socket file.
if (-e "$socketfile") {
unlink $socketfile
- or die "Could not release existing socket file: $!\n";
+ or die "Could not release existing socket file: $!";
}
# Create a new UNIX socket.
Local => $socketfile,
Listen => SOMAXCONN,
Type => SOCK_STREAM,
- ) or die "Could not create socket: $@\n";
+ ) or die "Could not create socket: $!";
+
+
+ # Translate the given user/group name into ID values.
+ if (defined ($socket_owner)) {
+ # Splitt provided user/group into single arguments.
+ my ($username, $groupname) = split(/:/, $socket_owner);
+
+ # Get the ID for the given user name.
+ my $uid = getpwnam($username) or die "Could not get an UID for $username: $!";
+
+ # Get the ID for given group name.
+ my $gid = getgrnam($groupname) or die "Could not get a GID for $groupname: $!";
+
+ # Set new ownership for the socket file.
+ chown($uid, $gid, "$socketfile") or die "Could not change ownership to ($uid:$gid) for $socketfile: $!";
+ }
# Return the server object.
return $server;
if ($optarg) {
# The message is valid, return the event and
# the optional argument.
- return "$supported_commands{$command} $optarg";
+ return "$supported_commands{$command} $optarg Socket User-requested action.";
} else {
# Only return the event for the recieved command.
return "$supported_commands{$command}";
return undef;
}
+#
+## RemoveSocketFile function.
+#
+## A tiny function which just removes an existing Socket file.
+#
+sub RemoveSocketFile () {
+ # Check if a socketfile exists.
+ if (-e $socketfile) {
+ # Delete the socket file.
+ unlink($socketfile);
+ }
+}
+
1;