CLI and Web Interface not behaving the same

RT 3.2.1 on Solaris 8.

In 3.0.10 this worked perfectly. This is a new install on a new box using
similar modifications to the lib and html files.

I’ve added a few columns to the Users table. When I populate data to it via
a script that uses RT::User, it works fine. When I do it via Modify.html,
it acts really flaky and I don’t know why.

The user gets created, but it has an ID in the User’s table that is +1
incrementally, not the +2 as is usually the case. It “forgets” that a
Principal ACL group exists at the next incremental number and adds the user
with the same ID as the preceeding user’s ACL group.

For example - Clean wipe of database, run script to populate Users table
from file. (Everything works as expected, last User ID is 204, Principal
table shows ID 205 is a Group ACL for the last user). Add a User via
Modify.html. The Principal table shows an ID of 205 as a Group still. The
new user gets an ID 205 in the User table. When I try to add that user to a
group, instead of adding it as a User object, it’s added as a Group object.
Subsequent new user adds via Modify.html result in “Results” of:

  • Object created
  • Privileged status: Couldn’t find that principal
  • Password: The new value has been set.

Modify.html has been modified to incorporate new fields as well. The schema
modifications to the DB have been made manually.

I created ~/local/lib/RT/User_Local.pm as follows (I also tried it with a
similarly hacked Create sub, but that messed up my DB re-inits via the
rt-setup-database script - says it can’t add the System user because the
customized columns don’t exist):

User_Local.pm:

use strict;

no warnings qw(redefine);

package RT::User;

use RT::Record;

use vars qw( @ISA );

@ISA= qw( RT::Record );

sub _CoreAccessible {

{

    id =>

            {read => 1, type => 'int(11)', default => ''},

    Name =>

            {read => 1, write => 1, type => 'varchar(200)', default =>

‘’},

    Password =>

            {read => 1, write => 1, type => 'varchar(40)', default =>

‘’},

    Comments =>

            {read => 1, write => 1, type => 'blob', default => ''},

    Signature =>

            {read => 1, write => 1, type => 'blob', default => ''},

    EmailAddress =>

            {read => 1, write => 1, type => 'varchar(120)', default =>

‘’},

    FreeformContactInfo =>

            {read => 1, write => 1, type => 'blob', default => ''},

    Organization =>

            {read => 1, write => 1, type => 'varchar(200)', default =>

‘’},

    RealName =>

            {read => 1, write => 1, type => 'varchar(120)', default =>

‘’},

    NickName =>

            {read => 1, write => 1, type => 'varchar(16)', default =>

‘’},

    Lang =>

            {read => 1, write => 1, type => 'varchar(16)', default =>

‘’},

    EmailEncoding =>

            {read => 1, write => 1, type => 'varchar(16)', default =>

‘’},

    WebEncoding =>

            {read => 1, write => 1, type => 'varchar(16)', default =>

‘’},

    ExternalContactInfoId =>

            {read => 1, write => 1, type => 'varchar(100)', default =>

‘’},

    ContactInfoSystem =>

            {read => 1, write => 1, type => 'varchar(30)', default =>

‘’},

    ExternalAuthId =>

            {read => 1, write => 1, type => 'varchar(100)', default =>

‘’},

    AuthSystem =>

            {read => 1, write => 1, type => 'varchar(30)', default =>

‘’},

    Gecos =>

            {read => 1, write => 1, type => 'varchar(16)', default =>

‘’},

    HomePhone =>

            {read => 1, write => 1, type => 'varchar(30)', default =>

‘’},

    WorkPhone =>

            {read => 1, write => 1, type => 'varchar(30)', default =>

‘’},

    MobilePhone =>

            {read => 1, write => 1, type => 'varchar(30)', default =>

‘’},

    PagerPhone =>

            {read => 1, write => 1, type => 'varchar(30)', default =>

‘’},

    Address1 =>

            {read => 1, write => 1, type => 'varchar(200)', default =>

‘’},

    Address2 =>

            {read => 1, write => 1, type => 'varchar(200)', default =>

‘’},

    City =>

            {read => 1, write => 1, type => 'varchar(100)', default =>

‘’},

    State =>

            {read => 1, write => 1, type => 'varchar(100)', default =>

‘’},

    Zip =>

            {read => 1, write => 1, type => 'varchar(16)', default =>

‘’},

    Country =>

            {read => 1, write => 1, type => 'varchar(50)', default =>

‘’},

    Timezone =>

            {read => 1, write => 1, type => 'varchar(50)', default =>

‘’},

    PGPKey =>

            {read => 1, write => 1, type => 'text', default => ''},

    Creator =>

            {read => 1, auto => 1, type => 'int(11)', default => '0'},

    Created =>

            {read => 1, auto => 1, type => 'datetime', default => ''},

    LastUpdatedBy =>

            {read => 1, auto => 1, type => 'int(11)', default => '0'},

    LastUpdated =>

            {read => 1, auto => 1, type => 'datetime', default => ''},

    SupervisorRealName =>

            {read => 1, write => 1, type => 'varchar(120)', default =>

‘’},

    TextMessageAddress =>

            {read => 1, write => 1, type => 'varchar(120)', default =>

‘’},

    FaxPhone =>

            {read => 1, write => 1, type => 'varchar(30)', default =>

‘’},

    TechNumber =>

            {read => 1, write => 1, type => 'varchar(16)', default =>

‘’},

    JobTitle =>

            {read => 1, write => 1, type => 'varchar(50)', default =>

‘’},

}

};

1;

Would someone give the poor old man a clue as to what changed between 3.0.10
and 3.2.1 that broke this otherwise easy modification?