[rt-users] user batch add script failing

Andy Harrison aharrison at gmail.com
Wed Jun 27 23:09:27 EDT 2012


 I was wondering if anyone could help shed some light on the problem
I'm having with a batch user creation script I'm writing. The rt.log
shows basically a steady stream of 'Could not create a new user'
errors.

I can see in the extra mysql logging that I turned on that things are
starting off normally for the Principals table portion, but falls off
when it gets to the Users table.  Here is a snippet of log for the
creation of one user.

    14 Query     set autocommit=1
    14 Query     SELECT  * FROM Users WHERE id = '8282828282100011'
    14 Query     SELECT  * FROM Users WHERE EmailAddress =
'devnull.16 at metrocast.net'
    14 Query     set autocommit=0
    14 Query     INSERT INTO Principals (PrincipalType, Disabled,
ObjectId) VALUES ('User', '0', '0')
    14 Query     SELECT  * FROM Principals WHERE id = '1237'
    14 Query     UPDATE Principals SET ObjectId='1237' WHERE id='1237'
    14 Query     SELECT  * FROM Users WHERE EmailAddress =
'devnull.16 at metrocast.net'
    14 Query     rollback
    14 Query     set autocommit=1



Here's the hash of user information after it's been assembled before
it gets passed to the Create method of my RT::User object:

$user fields before create_1 = {
        "Comments" => "Autocreate from metrocast customer mysql db",
        "Privileged" => 0,
        "City" => "ROCHESTER",
        "RealName" => "METROCAST TEST ACCT HBO ONLY NoHSI",
        "State" => "NH",
        "EmailAddress" => "devnull.16\@metrocast.net",
        "Gecos" => 327830,
        "HomePhone" => "6039999999",
        "Password" => "placeholderpassword.16",
        "Address1" => "21 JARVIS AVE",
        "Disabled" => 0,
        "WorkPhone" => "0000000000",
        "Zip" => "03868",
        "Name" => "8282828282100011"
};



Here is the id and message I get back from the Create method:


$User create result id_1 = 0;
$User create result Message_1 = "Could not create user";


I threw in some extra debugging output manually into RT/User.pm in the
Create function as well.  I can see that when the $principal->Create
method is called, it populates $principal_id correctly.  The mysql log
output above shows that the call to $principal->__Set is taking place.
 However, the $self->SUPER::Create is definitely not behaving as
expected because $self->Id comes back undefined and I have no idea
why.


I'm running rt-4.0.6 on a CentOS 6.2 server with just the stock
perl-5.10.1.  I've already successfully done an rtldapimportant to get
my employee accounts all working.

My RT_SiteConfig.pm:


Set($LogToFile, 'debug');
Set($LogStackTraces, 'debug');
Set( $rtname, 'rtserver.example.com');
Set($WebPath, '');
Set($WebBaseURL , 'https://rtserver.example.com');
Set($WebImagesURL , $WebPath . '/NoAuth/images/');
Set( $WebDomain, 'rtserver.example.com' );
Set(@Plugins, ('RT::Authen::ExternalAuth',
'RT::Extension::LDAPImport', 'RT::OnlineDocs'));
Set($ExternalAuthPriority,  [
                                'Metrocast_LDAP',
                                'Metrocast_LDAP_Customers',
                            ]
);
Set($ExternalInfoPriority,  [
                                'Metrocast_LDAP',
                                'Metrocast_LDAP_Customers'
                            ]
);
Set($ExternalServiceUsesSSLorTLS,    0);
Set($AutoCreateNonExternalUsers,    0);
Set($ExternalSettings,      {
                                'Metrocast_LDAP' => {   ##snipped
                                'Metrocast_LDAP_Customers' => {   ##snipped






Here's the actual script I'm running:

#!/usr/bin/perl
#

use strict;
use warnings;

use 5.10.0;

use Getopt::Long;

use YAML::Any qw/LoadFile/;

use MC;
use MC::LDAP;
use MC::DB::MySQL;

$|++;

use lib '/opt/rt4/lib';


use RT::Interface::CLI qw(CleanEnv GetCurrentUser loc);

CleanEnv();

use RT;
use RT::Util;

use RT::Tickets;
use RT::CurrentUser;
use RT::CustomField;
use RT::Transaction;

use RT::Config;

RT::LoadConfig();

RT::Init();

# Make sure external auth is disabled and autocreate is enabled.
#
RT->Config->Set( ExternalInfoPriority       => [ ] );
RT->Config->Set( Plugins                    => ['RT::OnlineDocs'] );
RT->Config->Set( AutoCreate                 => { Privileged => 0 } );
RT->Config->Set( AutoCreateNonExternalUsers => 1 );


our $opts = LoadFile('/root/.dataload.yaml')
    or die "LoadFile error: $!\n";

our $rtopts = LoadFile('/root/.rt.yaml');

$opts->{conf_filename} = '/root/.dataload.conf';
$opts->{lockfile}      = '/tmp/.dataload.lock';
$opts->{debug}         = 1;
$opts->{verbose}       = 0;
$opts->{test}          = 0;

GetOptions( $opts,

                    'conf=s',
                    'debug!',
                    'verbose',
                    'test!',
                    'q|quiet',
                    'db_columns=s@{,}',

);


# From my database columns (doing SELECT ... AS to match up the names)
my @db_account_fields = qw(
    Gecos
    Name
    RealName
    Address1
    Address2
    City
    State
    Zip
    HomePhone
    WorkPhone
);


my $dbgfh = 0;

if ( $opts->{debug} ) {

    $dbgfh = FileHandle->new( '/tmp/rt_create_user.debuglog', '>>' )
        or die "Error opening debuglog: $!\n";


    print $dbgfh "Begin $0 debug log ----- " . scalar localtime() . "\n";

}

# Verify external auth plugins are disabled...
#
ddump( $dbgfh, 'RT->Config->Get(Plugins)', RT->Config->Get('Plugins')
) if $opts->{debug};

ddump( $dbgfh, 'rt methods', Class::Inspector->methods( 'RT', 'full',
'public' ) );


my $MCDB = MC::DB::MySQL->new({ opts => $opts, debugfh => $dbgfh });
my $MCL  = MC::LDAP->new({ opts => $opts, debugfh => $dbgfh });

my $conf = $MCDB->{conf};


# Grab all my customer info
#
my $customer_accounts = fetch_db_accounts();


die "No RT server url!\n"
    unless defined $rtopts->{rt_url} && $rtopts->{rt_url};

die "No RT username!\n"
    unless defined $rtopts->{rt_username} && $rtopts->{rt_username};

die "No RT password!\n"
    unless defined $rtopts->{rt_password} && $rtopts->{rt_password};


my $counter = 1;

my $User = RT::User->new( $RT::SystemUser );

for ( keys %$customer_accounts ) {

    ddump( $dbgfh, 'current_account', $customer_accounts->{$_} ) if
$opts->{debug};

    my %user_fields = (
            Disabled      => 0,
            Privileged    => 0,
            EmailAddress  => "devnull.${counter}\@metrocast.net",
            Password      => "placeholderpassword.${counter}",
            Comments      => 'Autocreate from metrocast customer mysql db',
    );


    for my $field ( @db_account_fields ) {

        ddump( $dbgfh, 'current_field', $field ) if $opts->{debug};

        # Ignore fields that don't have a value
        #
        if ( defined $customer_accounts->{$_}->{$field}
             &&      $customer_accounts->{$_}->{$field} ) {

            ddump( $dbgfh, 'current_field_has_a_value',
$customer_accounts->{$_}->{$field} ) if $opts->{debug};

            $user_fields{$field} = $customer_accounts->{$_}->{$field};

        }

    }

    ddump( $dbgfh, 'user fields before create', \%user_fields ) if
$opts->{debug};

    ddump( $dbgfh, 'user object after new', $User ) if $opts->{debug};

    my ( $id, $Message ) = $User->Create( %user_fields );

    ddump( $dbgfh, 'User create result id', $id ) if $opts->{debug};
    ddump( $dbgfh, 'User create result Message', $Message ) if $opts->{debug};

    ddump( $dbgfh, 'user object after create', $User ) if $opts->{debug};
    ddump( $dbgfh, 'user object methods', Class::Inspector->methods(
ref $User, 'full', 'public' ) ) if $opts->{debug};

    $counter++;


}


if ( $opts->{debug} ) {
    $dbgfh->close;
}







And here's some rt.log output:











[Wed Jun 27 22:43:04 2012] [info]:
RT::Authen::ExternalAuth::CanonicalizeUserInfo returning Address1: 21
JARVIS AVE, City: ROCHESTER, Comments: Autocreate from metrocast
customer mysql db, Disabled: , EmailAddress: devnull.16 at metrocast.net,
Gecos: 327830, HomePhone: 6039999999, Name: 8282828282100011,
Password: placeholderpassword.16, Privileged: , RealName: METROCAST
TEST ACCT HBO ONLY NoHSI, State: NH, WorkPhone: 0000000000, Zip: 03868
(/opt/rt4/local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth.pm:651)
Trace begun at /opt/rt6/lib/RT.pm line 250

Log::Dispatch::__ANON__('Log::Dispatch=HASH(0x3ae3d20)',
'RT::Authen::ExternalAuth::CanonicalizeUserInfo', 'returning',
'Address1: 21 JARVIS AVE, City: ROCHESTER, Comments: Autocreate from
metrocast customer mysql db, Disabled: , EmailAddress:
devnull.16 at metrocast.net, Gecos: 327830, HomePhone: 6039999999, Name:
8282828282100011, Password: placeholderpassword.16, Privileged: ,
RealName: METROCAST TEST ACCT HBO ONLY NoHSI, State: NH, WorkPhone:
0000000000, Zip: 03868') called at
/opt/rt4/local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth.pm
line 651

RT::Authen::ExternalAuth::CanonicalizeUserInfo('RT::User=HASH(0x38af218)',
'HASH(0x25302d0)') called at
/opt/rt4/local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth.pm
line 668

RT::Authen::ExternalAuth::__ANON__('RT::User=HASH(0x38af218)',
'HASH(0x25302d0)') called at /opt/rt4/lib/RT/User.pm line 137

RT::User::Create('RT::User=HASH(0x38af218)', 'Comments', 'Autocreate
from metrocast customer mysql db', 'Privileged', 0, 'City',
'ROCHESTER', 'RealName', 'METROCAST TEST ACCT HBO ONLY NoHSI',
'State', 'NH', 'EmailAddress', 'devnull.16 at metrocast.net', 'Gecos',
327830, 'HomePhone', 6039999999, 'Password', 'placeholderpassword.16',
'Address1', '21 JARVIS AVE', 'Disabled', 0, 'WorkPhone', 0000000000,
'Zip', 03868, 'Name', 8282828282100011) called at
rt_create_user_test.pl line 166

[Wed Jun 27 22:43:04 2012] [error]: Could not create a new user -
Comments-Autocreate from metrocast customer mysql
db-RealName-METROCAST TEST ACCT HBO ONLY
NoHSI-City-ROCHESTER-State-NH-EmailAddress-devnull.16 at metrocast.net-Gecos-327830-Password-!sha512!G020YZAYl+tYGnAs!1kzwrXghKFKxJPSiK+WnFN5mNcpQactP4F4vcC8x52D0BF7GHGpfU+Yf6mPtw0ZAYh4j8T7c8++KWVaKwXHAAQ-HomePhone-6039999999-Address1-21
JARVIS AVE-Zip-03868-WorkPhone-0000000000-Name-8282828282100011
(/opt/rt4/lib/RT/User.pm:206)
Trace begun at /opt/rt4/lib/RT.pm line 250

Log::Dispatch::__ANON__('Log::Dispatch=HASH(0x3ae3d20)', 'Could not
create a new user - Comments-Autocreate from metrocast customer mysql
db-RealName-METROCAST TEST ACCT HBO ONLY
NoHSI-City-ROCHESTER-State-NH-EmailAddress-devnull.16 at metrocast.net-Gecos-327830-Password-!sha512!G020YZAYl+tYGnAs!1kzwrXghKFKxJPSiK+WnFN5mNcpQactP4F4vcC8x52D0BF7GHGpfU+Yf6mPtw0ZAYh4j8T7c8++KWVaKwXHAAQ-HomePhone-6039999999-Address1-21
JARVIS AVE-Zip-03868-WorkPhone-0000000000-Name-8282828282100011')
called at /opt/rt4/lib/RT/User.pm line 206

RT::User::Create('RT::User=HASH(0x38af218)', 'Comments', 'Autocreate
from metrocast customer mysql db', 'Privileged', 0, 'City',
'ROCHESTER', 'RealName', 'METROCAST TEST ACCT HBO ONLY NoHSI',
'State', 'NH', 'EmailAddress', 'devnull.16 at metrocast.net', 'Gecos',
327830, 'HomePhone', 6039999999, 'Password', 'placeholderpassword.16',
'Address1', '21 JARVIS AVE', 'Disabled', 0, 'WorkPhone', 0000000000,
'Zip', 03868, 'Name', 8282828282100011) called at
rt_create_user_test.pl line 166



Any clues why this is failing?


Thanks,

--
Andy Harrison
public key: 0x67518262



More information about the rt-users mailing list