SUMMARY: Problems running CyrAdm - SOLVED

Nikola Milutinovic Nikola.Milutinovic at ev.co.yu
Tue Apr 22 06:03:06 EDT 2003


Hi all.

DESCRIPTION
-----------
Just to recap, the problem was that running "cyradm" on Perl-5.8.0 belched an 
error saying that there was an undefined symbol "Perl_sv_setsv" in "IMAP.so".

The same modules and the same "cyradm" on Perl-5.6.1 ran just fine (I had some 
quirks with authentication, but Ken helped me sort things out).

PROBLEM SOURCE
--------------
It took me some time to track the problem, but here it is. "Perl_sv_setsv" is a 
Perl function specific to Perl 5.6. It doesn't exist under 5.8.0 and there are 
no macros to "bridge the gap". The idea, if I understand correctly, is to use 
"sv_setsv()" which will be expanded via macro into what the actual platform uses.

For 5.6.1 "sv_setsv" expands to "Perl_sv_setsv", while for 5.8.0 it expands to 
"Perl_sv_setsv_flags". Normally, "IMAP.so" with such a symbol reference couldn't 
be loaded and thus the failure.

SOLUTION
--------
I manually edited IMAP.xs and changed two lines holding "Perl_sv_setsv" to 
"sv_setsv" and recompiled. Then I placed newly created "IMAP.so" into Perl 
directory and it is working.

As far as I can see "IMAP.xs" is the only file with this, so here is a diff 
output (sorry guys, I don't have GNU diff), I hope you can use it.

PATCH
-----
FILE: cyrus-imapd-2.1.12/perl/imap/IMAP.xs
605c605,606
<           Perl_sv_setsv(aTHX_ pcb, av_shift(av));
---
 >           /* Perl_sv_setsv(aTHX_ pcb, av_shift(av)); */
 >             sv_setsv(aTHX_ pcb, av_shift(av));
608c609,610
<             Perl_sv_setsv(aTHX_ pcb, av_shift(av));
---
 >             /* Perl_sv_setsv(aTHX_ pcb, av_shift(av)); */
 >               sv_setsv(aTHX_ pcb, av_shift(av));

I hope someone else can test it and post a real patch. I haven't tested it under 
5.6.1 yet, but from what I've seen it should work.

Nix.





More information about the Info-cyrus mailing list