[rt-users] No attachments when replying from the webinterface

Joop JoopvandeWege at mococo.nl
Wed Sep 17 10:13:27 EDT 2008


Joop wrote:
> Dear all,
>
> A coworker of mine noticed that replies don't contain attachments 
> anymore since upgrading to rt-3.8.1 and after testing in my test 
> instance I can't find where it is coming from. I upgraded from rt-3.6.6 
> to rt-3.8.1 and I'm using Oracle as a backend database. So I'm not 
> bitten by the mysql update gone wrong. Attachments make it into the 
> database fine but it looks like the mimeobject isn't build correctly. 
> Make fixdeps finds everything OK.
> The following sequence is interesting:
> - /etc/init.d/apache2 stop
> - mv /opt/rt3 /opt/rt381
> - mv /opt/rt366 /opt/rt3
> - /etc/init.d/apache2 start
> - login into RT
> - send a reply and attach a config file
> - email arrives correctly WITH attachment.
> ???
> Switch back and email arrives WITHOUT attachment.
> Conclusion from this is that it is in the code of rt-3.8.1 and NOT in 
> the database since that is a constant factor.
> And yes my template Correspondence contains the line RT-Attach-Message: yes
> and contains 2 blank lines after the last (in this case one) header.
>
> Anyone seen this before?
>   
 From the lack of response I would say that no one has noticed yet there 
there is a slight problem with 3.8.1 in combination with Oracle that is.

The fact that the same db works with 3.6.6 gave me some clue that it had 
to be in the code of 3.8.1 and after trying all kind of things I tracked 
it down to Action/Sendmail.pm
I diffed the 3.8.1 version against the 3.6.6 one and one thing that is 
new is LimitNotEmpty which tries to exclude empty attachments but fails 
on Oracle because of a 'logic bug'.
This is what gets build by LimitNotEmpty for Oracle:

SELECT   main.*
    FROM attachments main
   WHERE  (main.content IS NOT NULL AND main.content NOT LIKE '')
     AND (main.transactionid = '313815')
     AND (main.ID != '204666') -- exlude the content itself
ORDER BY main.ID ASC;

The first part of the where is the same for all databases (main.content 
is not null) the second part is added by LimitNotEmpty (main.content not 
like '') which is wrong

The following test demonstrates that logic:

create table t (
id number,
t  clob
);

insert into t values(1,'test');
insert into t values(2,'');
insert into t values(3,null);

select * from t where t is not null;  --> id=1 t=test
select * from t where t not like '%' --> no rows returned
select * from t where t is null; --> returns both row 2 and 3

So inserting an empty string and null into a CLOB column in Oracle are 
equivalent and the second part doesn't work on NULL. Probably not if its 
a BLOB!

My proposal is to recode the LimitNotEmpty function so that for Oracle 
nothing is added.

Regards,

Joop








More information about the rt-users mailing list