use Bugzilla::Constants;
use Bugzilla::Error;
use Bugzilla::Util;
+use Bugzilla::Token;
sub login {
my ($class, $type) = @_;
# subsequent login
trick_taint($ipaddr);
- $dbh->do("INSERT INTO logincookies (userid, ipaddr, lastused)
- VALUES (?, ?, NOW())",
+ my $logincookie = Bugzilla::Token::GenerateUniqueToken('logincookies', 'cookie');
+
+ $dbh->do("INSERT INTO logincookies (cookie, userid, ipaddr, lastused)
+ VALUES (?, ?, ?, NOW())",
undef,
- $userid, $ipaddr);
- my $logincookie = $dbh->bz_last_key('logincookies', 'cookie');
+ $logincookie, $userid, $ipaddr);
# Remember cookie only if admin has told so
# or admin didn't forbid it and user told to remember.
logincookies => {
FIELDS => [
- cookie => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1,
+ cookie => {TYPE => 'varchar(16)', NOTNULL => 1,
PRIMARYKEY => 1},
userid => {TYPE => 'INT3', NOTNULL => 1},
ipaddr => {TYPE => 'varchar(40)', NOTNULL => 1},
# the token in the "tokens" table. Gives up if it can't come up
# with a token after about one hundred tries.
+ my ($table, $column) = @_;
+
my $token;
my $duplicate = 1;
my $tries = 0;
+ $table ||= "tokens";
+ $column ||= "token";
my $dbh = Bugzilla->dbh;
- my $sth = $dbh->prepare("SELECT userid FROM tokens WHERE token = ?");
+ my $sth = $dbh->prepare("SELECT userid FROM $table WHERE $column = ?");
while ($duplicate) {
++$tries;
$dbh->bz_alter_column('groups', 'userregexp',
{TYPE => 'TINYTEXT', NOTNULL => 1, DEFAULT => "''"});
+# 2005-09-26 - olav@bkor.dhs.org - Bug 119524
+# Convert logincookies into a varchar
+# this allows to store a random token instead of a guessable auto_increment
+$dbh->bz_alter_column('logincookies', 'cookie',
+ {TYPE => 'varchar(16)', PRIMARYKEY => 1, NOTNULL => 1});
+
# If you had to change the --TABLE-- definition in any way, then add your
# differential change code *** A B O V E *** this comment.