Commit fa9b63f5 authored by mkanat%kerio.com's avatar mkanat%kerio.com

Bug 283237: Move DBname_to_id out of globals.pl

Patch By Max Kanat-Alexander <mkanat@kerio.com> r=wurblzap, a=myk
parent 63dde600
......@@ -131,7 +131,7 @@ sub initBug {
}
else {
if ($user_id =~ /^\@/) {
$user_id = &::DBname_to_id($user_id);
$user_id = login_to_id($user_id);
}
}
......
......@@ -627,7 +627,7 @@ sub filterEmailGroup ($$$) {
# but the code that was here before I re-wrote it allows this),
# then we do not have any preferences for them, so assume the
# default preference is to receive all mail.
my $userid = DBname_to_id($user);
my $userid = login_to_id($user);
if (!$userid) {
push(@recipients, $user);
next;
......
......@@ -449,7 +449,7 @@ sub modify {
# Get the requestee, if any.
my $requestee_id = "NULL";
if ($requestee_email) {
$requestee_id = &::DBname_to_id($requestee_email);
$requestee_id = login_to_id($requestee_email);
$flag->{'requestee'} = new Bugzilla::User($requestee_id);
}
......@@ -531,7 +531,7 @@ sub FormToNewFlags {
if ($status eq "?") {
my $requestee = $data->{"requestee_type-$type_id"};
if ($requestee) {
my $requestee_id = &::DBname_to_id($requestee);
my $requestee_id = login_to_id($requestee);
$flag->{'requestee'} = new Bugzilla::User($requestee_id);
}
}
......
......@@ -41,6 +41,7 @@ use Bugzilla::Error;
use Bugzilla::Util;
use Bugzilla::Constants;
use Bugzilla::Group;
use Bugzilla::User;
use Date::Format;
use Date::Parse;
......@@ -1414,7 +1415,7 @@ sub ListIDsForEmail {
if ($type eq 'anyexact') {
foreach my $w (split(/,/, $email)) {
$w = trim($w);
my $id = &::DBname_to_id($w);
my $id = login_to_id($w);
if ($id > 0) {
push(@list,$id)
}
......
......@@ -22,6 +22,7 @@
# Bradley Baetz <bbaetz@acm.org>
# Joel Peshkin <bugreport@peshkin.net>
# Byron Jones <bugzilla@glob.com.au>
# Max Kanat-Alexander <mkanat@kerio.com>
################################################################################
# Module Initialization
......@@ -40,7 +41,9 @@ use Bugzilla::Constants;
use Bugzilla::Auth;
use base qw(Exporter);
@Bugzilla::User::EXPORT = qw(insert_new_user is_available_username);
@Bugzilla::User::EXPORT = qw(insert_new_user is_available_username
login_to_id
);
################################################################################
# Functions
......@@ -961,7 +964,7 @@ sub insert_new_user ($$) {
sub is_available_username ($;$) {
my ($username, $old_username) = @_;
if(&::DBname_to_id($username) != 0) {
if(login_to_id($username) != 0) {
return 0;
}
......@@ -992,6 +995,19 @@ sub is_available_username ($;$) {
return 1;
}
sub login_to_id ($) {
my ($login) = (@_);
my $dbh = Bugzilla->dbh;
my $user_id = $dbh->selectrow_array(
"SELECT userid FROM profiles WHERE login_name = ?", undef, $login);
# $user_id should be a positive integer, this makes Taint mode happy
if (defined $user_id && detaint_natural($user_id)) {
return $user_id;
} else {
return 0;
}
}
1;
__END__
......@@ -1232,6 +1248,20 @@ Params: $username (scalar, string) - The full login name of the username
=back
=item C<login_to_id($login)>
Takes a login name of a Bugzilla user and changes that into a numeric
ID for that user. This ID can then be passed to Bugzilla::User::new to
create a new user.
If no valid user exists with that login name, then the function will return 0.
This function can also be used when you want to just find out the userid
of a user, but you don't want the full weight of Bugzilla::User.
However, consider using a Bugzilla::User object instead of this function
if you need more information about the user than just their ID.
=head1 SEE ALSO
L<Bugzilla|Bugzilla>
......@@ -38,7 +38,7 @@
#
# You need to work with bug_email.pl the MIME::Parser installed.
#
# $Id: bug_email.pl,v 1.24 2005/02/18 16:01:48 mkanat%kerio.com Exp $
# $Id: bug_email.pl,v 1.25 2005/02/24 23:42:48 mkanat%kerio.com Exp $
###############################################################
# 02/12/2000 (SML)
......@@ -94,6 +94,7 @@ use lib ".";
use lib "../";
use Bugzilla::Constants;
use Bugzilla::BugMail;
use Bugzilla::User;
my @mailerrors = (); # Buffer for Errors in the mail
my @mailwarnings = (); # Buffer for Warnings found in the mail
......@@ -920,7 +921,7 @@ $Control{'component'} = $Component;
# otherwise, retrieve it from the database.
if ( defined($Control{'assigned_to'})
&& $Control{'assigned_to'} !~ /^\s*$/ ) {
$Control{'assigned_to'} = DBname_to_id($Control{'assigned_to'});
$Control{'assigned_to'} = login_to_id($Control{'assigned_to'});
} else {
SendSQL("select initialowner from components, products where " .
" components.product_id=products.id AND products.name=" .
......@@ -940,7 +941,7 @@ if ( $Control{'assigned_to'} == 0 ) {
}
$Control{'reporter'} = DBname_to_id($Control{'reporter'});
$Control{'reporter'} = login_to_id($Control{'reporter'});
if ( ! $Control{'reporter'} ) {
BugMailError( 1, "Could not resolve reporter !\n" );
}
......
......@@ -4,7 +4,7 @@
#
# Nick Barnes, Ravenbrook Limited, 2004-04-01.
#
# $Id: sendbugmail.pl,v 1.2 2004/11/20 12:35:17 jocuri%softhome.net Exp $
# $Id: sendbugmail.pl,v 1.3 2005/02/24 23:42:48 mkanat%kerio.com Exp $
#
# Bugzilla email script for Bugzilla 2.17.4 and later. Invoke this to send
# bugmail for a bug which has been changed directly in the database.
......@@ -18,6 +18,7 @@ use lib qw(.);
require "globals.pl";
use Bugzilla::BugMail;
use Bugzilla::User;
sub usage {
print STDERR "Usage: $0 bug_id user_email\n";
......@@ -53,7 +54,7 @@ if ($changer !~ /$match/) {
print STDERR "Changer \"$changer\" doesn't match email regular expression.\n";
usage();
}
if(!DBname_to_id($changer)) {
if(!login_to_id($changer)) {
print STDERR "\"$changer\" is not a login ID.\n";
usage();
}
......
......@@ -35,6 +35,7 @@ use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT $datadir);
use Bugzilla::Series;
use Bugzilla::Util;
use Bugzilla::User;
use vars qw($template $vars);
......@@ -296,7 +297,7 @@ if ($action eq 'new') {
exit;
}
my $initialownerid = DBname_to_id ($initialowner);
my $initialownerid = login_to_id ($initialowner);
if (!$initialownerid) {
ThrowUserError('component_need_valid_initialowner',
{'name' => $component});
......@@ -304,7 +305,7 @@ if ($action eq 'new') {
}
my $initialqacontact = trim($cgi->param('initialqacontact') || '');
my $initialqacontactid = DBname_to_id ($initialqacontact);
my $initialqacontactid = login_to_id ($initialqacontact);
if (Param('useqacontact')) {
if (!$initialqacontactid && $initialqacontact ne '') {
ThrowUserError('component_need_valid_initialqacontact',
......@@ -600,7 +601,7 @@ if ($action eq 'update') {
if ($initialowner ne $initialownerold) {
my $initialownerid = DBname_to_id($initialowner);
my $initialownerid = login_to_id($initialowner);
unless ($initialownerid) {
$dbh->bz_unlock_tables(UNLOCK_ABORT);
ThrowUserError('component_need_valid_initialowner',
......@@ -618,7 +619,7 @@ if ($action eq 'update') {
}
if (Param('useqacontact') && $initialqacontact ne $initialqacontactold) {
my $initialqacontactid = DBname_to_id($initialqacontact);
my $initialqacontactid = login_to_id($initialqacontact);
if (!$initialqacontactid && $initialqacontact ne '') {
$dbh->bz_unlock_tables(UNLOCK_ABORT);
ThrowUserError('component_need_valid_initialqacontact',
......
......@@ -536,7 +536,7 @@ if ($action eq 'del') {
SendSQL("SELECT products.name, components.name " .
"FROM products, components " .
"WHERE products.id = components.product_id " .
" AND initialowner=" . DBname_to_id($user));
" AND initialowner=" . login_to_id($user));
$found = 0;
while (MoreSQLData()) {
if ($found) {
......@@ -561,7 +561,7 @@ if ($action eq 'del') {
SendSQL("SELECT products.name, components.name " .
"FROM products, components " .
"WHERE products.id = components.product_id " .
" AND initialqacontact=" . DBname_to_id($user));
" AND initialqacontact=" . login_to_id($user));
$found = 0;
while (MoreSQLData()) {
if ($found) {
......
......@@ -248,7 +248,7 @@ if ($cgi->param('update')) {
my $emailregexp = Param('emailregexp');
$mailto =~ /($emailregexp)/;
$mailto =~ $1;
$mailto_id = DBname_to_id($mailto);
$mailto_id = login_to_id($mailto);
}
elsif ($mailto_type == MAILTO_GROUP) {
# detaint the group parameter
......
......@@ -37,6 +37,7 @@ use Bugzilla::Util;
use Bugzilla::Config qw(:DEFAULT ChmodDataFile $localconfig $datadir);
use Bugzilla::BugMail;
use Bugzilla::Auth;
use Bugzilla::User;
# Shut up misguided -w warnings about "used only once". For some reason,
# "use vars" chokes on me when I try it here.
......@@ -654,24 +655,9 @@ sub DBID_to_name {
return $::cachedNameArray{$id};
}
sub DBname_to_id {
my ($name) = (@_);
PushGlobalSQLState();
SendSQL("select userid from profiles where login_name = @{[SqlQuote($name)]}");
my $r = FetchOneColumn();
PopGlobalSQLState();
# $r should be a positive integer, this makes Taint mode happy
if (defined $r && $r =~ m/^([1-9][0-9]*)$/) {
return $1;
} else {
return 0;
}
}
sub DBNameToIdAndCheck {
my ($name) = (@_);
my $result = DBname_to_id($name);
my $result = login_to_id($name);
if ($result > 0) {
return $result;
}
......
......@@ -67,6 +67,7 @@ use XML::Parser;
use Data::Dumper;
$Data::Dumper::Useqq = 1;
use Bugzilla::BugMail;
use Bugzilla::User;
require "CGI.pl";
require "globals.pl";
......@@ -202,7 +203,7 @@ unless ( Param("move-enabled") ) {
exit;
}
my $exporterid = DBname_to_id($exporter);
my $exporterid = login_to_id($exporter);
if ( ! $exporterid ) {
my $subject = "Bug import error: invalid exporter";
my $message = "The user <$tree->[1][0]->{'exporter'}> who tried to move\n";
......@@ -504,7 +505,7 @@ for (my $k=1 ; $k <= $bugqty ; $k++) {
$err .= ". Setting to default severity \"normal\".\n";
}
my $reporterid = DBname_to_id($bug_fields{'reporter'});
my $reporterid = login_to_id($bug_fields{'reporter'});
if ( ($bug_fields{'reporter'}) && ( $reporterid ) ) {
push (@values, SqlQuote($reporterid));
push (@query, "reporter");
......@@ -523,8 +524,8 @@ for (my $k=1 ; $k <= $bugqty ; $k++) {
my $changed_owner = 0;
if ( ($bug_fields{'assigned_to'}) &&
( DBname_to_id($bug_fields{'assigned_to'})) ) {
push (@values, SqlQuote(DBname_to_id($bug_fields{'assigned_to'})));
( login_to_id($bug_fields{'assigned_to'})) ) {
push (@values, SqlQuote(login_to_id($bug_fields{'assigned_to'})));
push (@query, "assigned_to");
} else {
push (@values, SqlQuote($exporterid) );
......@@ -587,7 +588,7 @@ for (my $k=1 ; $k <= $bugqty ; $k++) {
if (Param("useqacontact")) {
my $qa_contact;
if ( (defined $bug_fields{'qa_contact'}) &&
($qa_contact = DBname_to_id($bug_fields{'qa_contact'})) ){
($qa_contact = login_to_id($bug_fields{'qa_contact'})) ){
push (@values, $qa_contact);
push (@query, "qa_contact");
} else {
......@@ -615,7 +616,7 @@ for (my $k=1 ; $k <= $bugqty ; $k++) {
if (defined $bug_fields{'cc'}) {
foreach my $person (split(/[ ,]/, $bug_fields{'cc'})) {
my $uid;
if ( ($person ne "") && ($uid = DBname_to_id($person)) ) {
if ( ($person ne "") && ($uid = login_to_id($person)) ) {
SendSQL("insert into cc (bug_id, who) values ($id, " . SqlQuote($uid) .")");
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment