#!/usr/bin/perl -w use strict; use CGI; my $form = CGI::new(); my $user = $form->param('user'); my $time = &getTime; &getFile($user,$time); &getOffline; &printOutput($user); sub getFile{ my $user = shift; my $time = shift; open(FILE, "online.log"); flock(FILE, 1); my @lines = ; close(FILE); open(FILE, ">online.log"); flock(FILE, 2); foreach my $line(@lines){ chomp($line); my($ruser, $expire) = split("%%", $line); if($user eq $ruser){ print FILE "$user" . "%%" . "$time"; }else{ print FILE "$line\n"; } } close(FILE); } sub getTime{ my $feb_days; my ($sec, $min, $hour, $mday, $mon, $year) = (localtime(time))[0,1,2,3,4,5]; $mon++; $min = $min + 1; if($min > 59){ $min = $min - 60; $hour++; } if($hour > 23){ $hour = $hour - 24; $mday++; } if ($year % 4 != 0 || ($year % 100 == 0 && $year % 400 != 0)) { $feb_days = "28"; } else { $feb_days = "29"; } if ($mon == 2 && $mday > $feb_days){ $mon++; $mday = $mday - $feb_days; } if ((($mon == 1) || ($mon == 3) || ($mon == 5) || ($mon == 7) || ($mon == 8) || ($mon == 10) || ($mon == 12)) && $mday > 31){ $mon++; $mday = $mday - 31; } if ((($mon == 4) || ($mon ==6) || ($mon == 9) || ($mon == 11)) && $mday > 30){ $mon++; $mday = $mday - 30; } if ($mon > 12){ $year = $year + 1; $mon = $mon - 12; } $min = "0" . $min if (length($min) == 1); $hour = "0" . $hour if (length($hour) == 1); $mon = "0" . $mon if (length($mon) == 1); $mday = "0" . $mday if (length($mday) == 1); $sec = "0" . $sec if (length($sec) == 1); $year += 1900; $year = substr($year,2,2); my $t = "$year" . "$mon" . "$mday" . "$hour" . "$min" . "$sec"; return($t); } sub getOffline{ my $newTime = &getTime; open(FILE, "online.log"); flock(FILE, 1); my @lines = ; close(FILE); open(FILE, ">online.log"); flock(FILE, 2); foreach my $line(@lines){ chomp($line); my ($user, $rtime) = split("%%", $line); print FILE "$line\n" if ($newTime < $rtime); } close(FILE); } sub printOutput{ my $nuser = shift; print "Content-type: text/html\n\n"; print<
EOF }