# $File: //depot/libOurNet/BBS/lib/OurNet/BBS/MAPLE2/User.pm $ $Author: autrijus $
# $Revision: #4 $ $Change: 4012 $ $DateTime: 2003/01/29 11:06:24 $
package OurNet::BBS::MAPLE2::User;
use open IN => ':raw', OUT => ':raw';
use strict;
no warnings 'deprecated';
use fields qw/bbsroot id recno _ego _hash/;
use OurNet::BBS::Base (
'UserGroup' => [qw/$packsize $namestring $packstring @packlist $PWD/],
);
sub refresh_meta {
my ($self, $key) = @_;
$self->{_hash}{uid} ||= $self->{recno} - 1;
$self->{_hash}{name} ||= $self->{id};
return if exists $self->{_hash}{$key};
if ($self->contains($key)) {
my $buf = '';
open(my $USR, "<$self->{bbsroot}/$PWD") or die "can't open $PWD";
seek $USR, $self->{recno} * $packsize, 0;
read $USR, $buf, $packsize;
close $USR;
@{$self->{_hash}}{@packlist} = unpack($packstring, $buf);
}
else {
die "malicious intent stopped cold" if index($key, '../') > -1;
require OurNet::BBS::ScalarFile;
tie $self->{_hash}{$key}, 'OurNet::BBS::ScalarFile',
"$self->{bbsroot}/home/$self->{id}/$key";
}
return 1;
}
sub refresh_mailbox {
my $self = shift;
$self->{_hash}{mailbox} ||= $self->module('ArticleGroup')->new(
$self->{bbsroot},
$self->{id},
'home',
);
}
sub STORE {
my ($self, $key, $value) = @_;
if ($self->contains($key)) {
$self->refresh_meta($key);
$self->{_hash}{$key} = $value;
open(my $USR, "+<$self->{bbsroot}/$PWD")
or die "can't open $PWD";
seek $USR, $self->{recno} * $packsize, 0;
print $USR pack($packstring, @{$self->{_hash}}{@packlist});
close $USR;
}
else {
die "malicious intent stopped cold" if index($key, '../') > -1;
require OurNet::BBS::ScalarFile;
tie $self->{_hash}{$key}, 'OurNet::BBS::ScalarFile',
"$self->{bbsroot}/home/$self->{id}/$key";
$self->{_hash}{$key} = $value;
}
return 1;
}
1;
syntax highlighted by Code2HTML, v. 0.9.1