logging LDAPImport in Transactions table

"Parish, Brent" <[email protected]> Tue, 10 Nov 2015 14:16:52 +0000
Newsgroups gmane.comp.bug-tracking.request-tracker.devel
Message-ID <[email protected]>
Hi 

We use LDAPImport to update RT User values from Active Directory.

In our Active Directory, some of the addresses and other fields have odd characters in them and/or multiple lines (return characters), mostly from non-U.S. addresses.

The LDAPImport registers these fields as 'changed' even when they have not, and this logs over 7,500 entries in the Transactions table per month for us (only running LDAPImport twice a day).
(please note that this is not a 'fault' specific to LDAPImport.  Even when changing a different field in a User's account (via the browser based interface), RT thinks the address field changed when it has funky characters or spans multiple lines)

Since the LDAP values clobber the RT fields, I don't really care to log the transactions (especially when there are so many). 
So I decided to avoid logging all changes to the Transactions table during the LDAPImport, only logging them when they are set via the browser.

I don't know if this affects anyone else or not, but if it is helpful, this is what we are doing about it.

Regards,
Brent


First I added a setting in RT_SiteConfig.pm 
	Set($DontRecordLDAPImport, 1);

And then this minor change to User.pm (per standard RT modification rules - copy to local/lib/RT before changing it!)
Note that this is pulled from 4.4.0RC1, so the line numbers may be different in other versions.

# diff -wU12 lib/RT/User.pm local/lib/RT/User.pm
--- lib/RT/User.pm	2015-11-10 09:01:32.739886637 -0500
+++ local/lib/RT/User.pm	2015-11-10 09:13:33.687537889 -0500
@@ -1653,24 +1653,26 @@
 
 sub _Set {
     my $self = shift;
 
     my %args = (
         Field => undef,
         Value => undef,
     TransactionType   => 'Set',
     RecordTransaction => 1,
         @_
     );
 
+    $args{RecordTransaction} = 0 if ( (caller(4))[3] =~ m/LDAPImport/ && $RT::DontRecordLDAPImport );

----------------------------------------

Even though User based custom fields weren't really an issue for me (didn't contain the same characters that were causing so many Transaction table entries), for completeness I also modified Record.pm to not write changes (from LDAPImport) into the Transaction table for user based custom field changes.

# diff -wU12 lib/RT/Record.pm local/lib/RT/Record.pm
--- lib/RT/Record.pm	2015-11-10 09:01:39.491696253 -0500
+++ local/lib/RT/Record.pm	2015-11-10 08:50:12.938925672 -0500
@@ -1931,24 +1931,26 @@
 
 sub _AddCustomFieldValue {
     my $self = shift;
     my %args = (
         Field             => undef,
         Value             => undef,
         LargeContent      => undef,
         ContentType       => undef,
         RecordTransaction => 1,
         @_
     );
 
+    $args{RecordTransaction} = 0 if ( (caller(4))[3] =~ m/LDAPImport/ && $RT::DontRecordLDAPImport );