Closed Bug 305136 (bz-postbugpm) Opened 20 years ago Closed 19 years ago

Make Bug.pm able to create bugs--move most post_bug.cgi code into Bug.pm

Categories

(Bugzilla :: Creating/Changing Bugs, enhancement, P2)

2.21
enhancement

Tracking

()

RESOLVED FIXED
Bugzilla 3.0

People

(Reporter: batosti, Assigned: mkanat)

References

Details

(Keywords: meta)

Attachments

(1 file, 3 obsolete files)

User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.10) Gecko/20050725 Firefox/1.0.6 (Ubuntu package 1.0.6) Build Identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.10) Gecko/20050725 Firefox/1.0.6 (Ubuntu package 1.0.6) move the code of the post_bug.cgi to Bugzilla::Bug.pm to clean the post bug and in the future combine it on process_bug.cgi. this bug must be a blocker of bug 174988. Reproducible: Always
Blocks: 174988
Status: UNCONFIRMED → NEW
Ever confirmed: true
OS: Linux → All
Hardware: PC → All
Version: unspecified → 2.21
Attached patch batosti_v1 (obsolete) — Splinter Review
moving the code and changing the older SendSQL functions to dbh functions.
Attachment #194381 - Flags: review?
Assignee: create-and-change → batosti
Comment on attachment 194381 [details] [diff] [review] batosti_v1 Before I review this -- could you explain why it's OK to change the order of things in post_bug? That is, you remove code in one place, and add back similar code in another place. But in general, just looking at the patch, this patch looks great! :-)
it's a part of bug 174988 to join bugs functions in Bug.pm and clean up post_bug and process_bug and then use the this functions in the future.
(In reply to comment #3) > it's a part of bug 174988 to join bugs functions in Bug.pm and clean up post_bug > and process_bug and then use the this functions in the future. Yes, I know that. My question is: Why did you change the *order* of the code?
(In reply to comment #4) > Why did you change the *order* of the code? some new methods of Bug.pm only can be called if you have a bug object and i change the code to be called after the object is created.
Comment on attachment 194381 [details] [diff] [review] batosti_v1 >Index: post_bug.cgi > # Add the bug report to the DB. > $dbh->bz_lock_tables('bugs WRITE', 'bug_group_map WRITE', 'longdescs WRITE', > 'cc WRITE', 'keywords WRITE', 'dependencies WRITE', >-# Add the group restrictions >-foreach my $grouptoadd (@groupstoadd) { >- SendSQL("INSERT INTO bug_group_map (bug_id, group_id) >- VALUES ($id, $grouptoadd)"); >-} > # All fields related to the newly created bug are set. > # The bug can now be made accessible. >+# Groups >+my @groupstoadd = (); >+foreach my $b (grep(/^bit-\d*$/, $cgi->param())) { >+ if ($cgi->param($b)) { >+ my $v = substr($b, 4); >+ push @groupstoadd, $v; >+ } >+} >+ >+$bug->add_groups(@groupstoadd); The order of the different checks/validations/insertions into the DB in post_bug.cgi is important and I ask you to respect it. Two important things about your patch: 1) *all* validations must have been done *before* inserting the bug into the DB. You moved such validations after the insertion of the bug for at least groups, dependencies and users on the CC list, which all contain a ThrowUserError(), meaning that the implementation of the bug into the DB may be interrupted before being complete. 2) the part of your patch which I show here has security implications. Actually, groups are validated *before* the bug is being inserted into the DB and required group restrictions are inserted into the bug_group_map table *before* the bug is being *unlocked*, see the security bug 292544! Here, you move these security checks after the bug is being released, making the bug publicly accessible!
Attachment #194381 - Flags: review? → review-
Attached patch batosti_v1_fix (obsolete) — Splinter Review
i splited the functions of add groups and keywords in two. one for checking before put bug in DB and the add function after have a bug.
Attachment #194381 - Attachment is obsolete: true
Attachment #194682 - Flags: review?(LpSolit)
Comment on attachment 194682 [details] [diff] [review] batosti_v1_fix I'm just reviewing the Bug.pm additions for now, but there are a couple of fixes needed. All of these routines need POD documents >+ my $dbh = Bugzilla->dbh; >+ >+ foreach my $person (@add_cc) { >+ if (lsearch($self->cc, $person)<0) { >+ my $ccid = &::DBNameToIdAndCheck($person); There is a user_to_id function in User.pm for this. >+ >+sub check_groups { >+ my ($user, $product_id, $cgi) = (@_); >+ >+ my $dbh = Bugzilla->dbh; >+ >+ my @groups = (); >+ foreach my $b (grep(/^bit-\d*$/, $cgi->param())) { >+ if ($cgi->param($b)) { >+ my $v = substr($b, 4); >+ push @groups, $v; >+ } Let's not pass cgi objects to Bug.pm or expect form names to be part of the interface. How about passing @groups to check_groups instead?
Attachment #194682 - Flags: review-
Comment on attachment 194682 [details] [diff] [review] batosti_v1_fix I'll wait for an updated patch
Attachment #194682 - Flags: review?(LpSolit)
Attached patch batosti_v2 (obsolete) — Splinter Review
no $cgi to the Bug functions and with POD docs.
Attachment #194682 - Attachment is obsolete: true
Attachment #194939 - Flags: review?(LpSolit)
Attachment #194939 - Flags: review?(mkanat)
Attachment #194939 - Flags: review?(LpSolit)
Blocks: 306624
No longer blocks: 306624
Depends on: 306624
Comment on attachment 194939 [details] [diff] [review] batosti_v2 OK, I don't know enough about post_bug to review that part, but I have some comments on the Bug.pm part. >Index: Bugzilla/Bug.pm >@@ -687,6 +689,84 @@ sub choices { > return $self->{'choices'}; > } > >+sub add_cc_list { >+ my $self = shift; >+ my (@add_cc) = @_; I think the functions should take a *reference* to an array instead of taking the array directly. That way we can add more params later if we want. That goes for all the functions. >+ return if !@add_cc; This isn't really necessary, because the function doesn't do anything if @add_cc is empty... >+ my $dbh = Bugzilla->dbh; >+ >+ foreach my $person (@add_cc) { >+ if (lsearch($self->cc, $person)<0) { How is $self->cc going to work when the bug doesn't even exist yet? Or does the bug somehow already exist? >+ my $ccid = login_to_id($person); >+ if ($ccid) { That looks like it'll just hide errors -- any $person passed into this function should always be a valid $person, since we will have already done the user-matching, right? >+ $dbh->do("INSERT INTO bug_group_map (bug_id, group_id) >+ VALUES (?, ?)", undef, $self->{'bug_id'}, $group); Isn't there a $self->bug_id instead of {'bug_id'}? Or $self->id or something? >+sub add_keywords { >+ my $self = shift; >+ my @keywords = (@_); >+ >+ my $dbh = Bugzilla->dbh; >+ >+ if (@keywords) { >+ foreach my $keyword (@keywords) { >+ $dbh->do("INSERT INTO keywords (bug_id, keywordid) >+ VALUES ( ?, ?)", undef, $self->{'bug_id'}, >+ $keyword); >+ } This is going to throw taint errors all over the place. That's probably true of all these functions, actually. >+sub check_groups { >+ my ($user, $product_id, $groups) = (@_); >+ >+ my $dbh = Bugzilla->dbh; >+ >+ my $sth = $dbh->prepare("SELECT DISTINCT groups.id, >+ groups.name, >+ membercontrol, >+ othercontrol, >+ description >+ FROM groups >+ LEFT JOIN group_control_map >+ ON group_id = id AND >+ product_id = ? >+ WHERE isbuggroup != 0 AND >+ isactive != 0 >+ ORDER BY description"); Isn't there some Group.pm function that will do that for you?? >+ $sth->execute($product_id); >+ while (my ($id, $groupname, $membercontrol, $othercontrol) = >+ $sth->fetchrow_array) { >+ $membercontrol ||= 0; >+ $othercontrol ||= 0; >+ # Add groups required >+ if (($membercontrol == CONTROLMAPMANDATORY) >+ || (($othercontrol == CONTROLMAPMANDATORY) >+ && (!UserInGroup($groupname)))) { >+ # User had no option, bug needs to be in this group. >+ push(@$groups, $id) >+ } >+ } This whole section needs some comments, I have almost no idea what's going on. Otherwise, I have no general architectural problems with this. I think LpSolit would probably have better comments on it than I do, since he probably knows more about post_bug. Your POD docs need to describe *why* the check_ functions return arrays.
Attachment #194939 - Flags: review?(mkanat) → review-
Attached patch batosti_v3Splinter Review
Attachment #194939 - Attachment is obsolete: true
Attachment #203533 - Flags: review?
This bug needs to be split into multiple bugs, one for each function that we're moving. It's too overwhelming to review the whole patch at once.
Priority: -- → P2
Summary: move the code of post_bug.cgi to the Bug.pm → Make Bug.pm able to create bugs--move most post_bug.cgi code into Bug.pm
Target Milestone: --- → Bugzilla 2.24
*** Bug 306624 has been marked as a duplicate of this bug. ***
No longer depends on: 306624
Depends on: bz-bugwrite
Blocks: bz-bugwrite
Depends on: 283926
No longer depends on: bz-bugwrite
Alias: bz-postbugpm
Depends on: 323239
Depends on: 323240
Depends on: 323241
Depends on: 323243
Depends on: 323244
Comment on attachment 203533 [details] [diff] [review] batosti_v3 Okay, this needs to be split into the bugs that are now blocking this bug. Also, that check_groups function does too many things. Some of its functions should be in Bugzilla::Group, and it shouldn't have to take an $user argument -- the Bugzilla::Bug already has a built-in $self->user.
Attachment #203533 - Flags: review? → review-
Keywords: meta
I'm actually going to take this over. I have some ideas as to how to do it, and I want it to get in for Bugzilla 3.0.
Assignee: batosti → mkanat
Okay, here's how we're going to do this, actually: 1) We're going to use Bugzilla::Object->create. 2) We're going to implement the validators one at a time, in the blocking bugs, by moving code from post_bug into Bugzilla::Bug. 3) Once all the validators are implemented, we'll change all the DB-updating code from post_bug into a call to Bugzilla::Bug->create.
Depends on: 339386
Depends on: 348477
Depends on: 348537
Depends on: 348539
Depends on: 348542
Depends on: 349555
Depends on: 349558
Depends on: 349561
Depends on: 349741
Depends on: 351312
Depends on: 351332
Depends on: 351345
Depends on: 351877
Depends on: 351888
No longer depends on: 283926
Done! The next step is process_bug.cgi. :)
Status: NEW → RESOLVED
Closed: 19 years ago
Resolution: --- → FIXED
No longer blocks: 174988
Blocks: bz-roadmap
Blocks: 335437
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: