]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
This implements canonical email address transformation. i.e., you have the option...
authorseth%cs.brandeis.edu <>
Sun, 13 Feb 2000 22:39:47 +0000 (22:39 +0000)
committerseth%cs.brandeis.edu <>
Sun, 13 Feb 2000 22:39:47 +0000 (22:39 +0000)
contrib/bug_email.pl

index 10dd233addf639378bbb939c3065e2bdcdb598a2..80eb1c4fe1fcd2444818988f908cea4f13b087d0 100755 (executable)
@@ -37,7 +37,7 @@
 #
 # You need to work with bug_email.pl the MIME::Parser installed.
 # 
-# $Id: bug_email.pl,v 1.2 2000/02/13 02:16:11 seth%cs.brandeis.edu Exp $
+# $Id: bug_email.pl,v 1.3 2000/02/13 14:39:47 seth%cs.brandeis.edu Exp $
 ###############################################################
 
 # 02/12/2000 (SML)
 # - updated so that it works out of bugzilla/contrib
 # - initial checkin into the mozilla CVS tree (yay)
 
+# 02/13/2000 (SML)
+# - email transformation code.  
+#   EMAIL_TRANSFORM_NONE does exact email matches
+#   EMAIL_TRANSFORM_NAME_ONLY matches on the username 
+#   EMAIL_TRANSFORM_BASE_DOMAIN matches on the username and checks the domain of
+#    to see that the one in the database is a subset of the one in the sender address
+#    this is probably prone to false positives and probably needs more work.
+
 # Next round of revisions :
-# - canonical email transformation (i.e., seth@job.cs.brandeis.edu == seth@cs.brandeis.edu)
 # - default product and component (i.e., if you don't specify a product and component, it goes into a PENDING product)
 # - querying a bug over email
 # - appending a bug over email
@@ -54,8 +61,6 @@
 # - use the globals.pl parameters functionality to edit and save this script's parameters
 # - integrate some setup in the checksetup.pl script
 
-# FWIW, the first two things are necessary for this to be useful in my setup, so they get an overwhelming bit of priority
-
 use diagnostics;
 use strict;
 use MIME::Parser;
@@ -101,7 +106,22 @@ sub findUser($) {
     my $found_address = FetchOneColumn();
     return $found_address;
   } elsif ($email_transform eq $EMAIL_TRANSFORM_BASE_DOMAIN) {
-    
+    my ($username) = ($address =~ /(.+)@/);
+    my $stmt = "SELECT login_name FROM profiles WHERE profiles.login_name RLIKE \'$username\';";
+    SendSQL($stmt);
+
+    my $domain;
+    my $found = undef;
+    my $found_address;
+    my $new_address = undef;
+    while ((!$found) && ($found_address = FetchOneColumn())) {
+      ($domain) = ($found_address =~ /.+@(.+)/);
+      if ($address =~ /$domain/) {
+        $found = 1;
+        $new_address = $found_address;
+      }
+    }
+    return $new_address;
   } elsif ($email_transform eq $EMAIL_TRANSFORM_NAME_ONLY) {
     my ($username) = ($address =~ /(.+)@/);
     my $stmt = "SELECT login_name FROM profiles WHERE profiles.login_name RLIKE \'$username\';";
@@ -770,12 +790,17 @@ die (" *** Cant find Sender-adress in sent mail ! ***\n" ) unless defined( $Send
 chomp( $Sender );
 chomp( $Message_ID );
 
+ConnectToDatabase();
 
 $SenderShort = $Sender;
 $SenderShort =~ s/^.*?([a-zA-Z0-9_.-]+?\@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+).*$/$1/;
 
-# FIXME: run sender short via a method to get a canonical email address (SML)
-#print "Sender short is $SenderShort\n";
+$SenderShort = findUser($SenderShort);
+
+if ($SenderShort == undef) {
+  $SenderShort = $Sender;
+  $SenderShort =~ s/^.*?([a-zA-Z0-9_.-]+?\@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+).*$/$1/;
+}
 
 my $Subject = "";
 $Subject = $entity->get( 'Subject' );
@@ -838,7 +863,6 @@ if ( $Body =~ /^\s*$/s ) {
 
 
 # umask 0;
-ConnectToDatabase();
 
 # Check Permissions ...
 if (! CheckPermissions("CreateBugs", $SenderShort ) ) {
@@ -1277,7 +1301,7 @@ END
 
     Reply( $SenderShort, $Message_ID, "Bugzilla Error", $errreply );
 
-print getErrorText();
+    # print getErrorText();
     # print getWarningText();
     # print generateTemplate();
 }