diff options
-rw-r--r-- | lib/VNDB/DB/Users.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/Handler/Users.pm | 6 |
2 files changed, 6 insertions, 2 deletions
diff --git a/lib/VNDB/DB/Users.pm b/lib/VNDB/DB/Users.pm index 88de4d96..0ca56780 100644 --- a/lib/VNDB/DB/Users.pm +++ b/lib/VNDB/DB/Users.pm @@ -42,7 +42,7 @@ sub dbUserGet { !$o{uid} && !$o{username} ? ( 'id > 0' => 1 ) : (), $o{ip} ? ( - 'ip = ?' => $o{ip} ) : (), + 'ip !s ?' => [ $o{ip} =~ /\// ? '<<' : '=', $o{ip} ] ) : (), $o{registered} ? ( 'registered > to_timestamp(?)' => $o{registered} ) : (), $o{search} ? ( diff --git a/lib/VNDB/Handler/Users.pm b/lib/VNDB/Handler/Users.pm index e8f9cb38..7397f43a 100644 --- a/lib/VNDB/Handler/Users.pm +++ b/lib/VNDB/Handler/Users.pm @@ -282,7 +282,11 @@ sub register { push @{$frm->{_err}}, 'notanswer' if !$frm->{_err} && ($frm->{answer} > $num || $frm->{answer} < $num*0.995); push @{$frm->{_err}}, 'usrexists' if $frm->{usrname} eq 'anonymous' || !$frm->{_err} && $self->dbUserGet(username => $frm->{usrname})->[0]{id}; push @{$frm->{_err}}, 'mailexists' if !$frm->{_err} && $self->dbUserGet(mail => $frm->{mail})->[0]{id}; - push @{$frm->{_err}}, 'oneaday' if !$frm->{_err} && $self->dbUserGet(ip => $self->reqIP, registered => time-24*3600)->[0]{id}; + + # Use /32 match for IPv4 and /48 for IPv6. The /48 is fairly broad, so some + # users may have to wait a bit before they can register... + my $ip = $self->reqIP; + push @{$frm->{_err}}, 'oneaday' if !$frm->{_err} && $self->dbUserGet(ip => $ip =~ /:/ ? "$ip/48" : $ip, registered => time-24*3600)->[0]{id}; if(!$frm->{_err}) { my($token, $pass, $salt) = $self->authPrepareReset(); |