#!/usr/bin/env perl # # Copyright (c) 2023 Mischa Peters # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # use 5.024; use strict; use warnings; use autodie; use Fcntl qw(:flock); use File::Basename; use File::stat; use POSIX qw(strftime); my $ttl = "300"; my $workdir = dirname($0); opendir my $dh, "${workdir}/tokens"; while (my $file = readdir $dh) { chomp $file; next if $file =~ /^\./; open my $fh, '<', "${workdir}/tokens/$file"; my $client_ip = <$fh>; chomp $client_ip; close $fh; my $mtime = stat("${workdir}/tokens/${file}")->mtime(); if ((time() - $mtime) > $ttl) { _log("$client_ip $file removed"); unlink("${workdir}/tokens/${file}"); } } sub _log { my ($msg) = @_; open my $fh, '>>', '/var/log/ard.log'; flock $fh, LOCK_EX; print $fh sprintf("%s %s: %s \n", strftime("%b %d %H:%M:%S", localtime), basename($0), $msg); close $fh; }