Hi,
>
>Now, why would the operation not be permitted? Does anyone have any
>idea?
>You usually get that message when trying to do something weird, like
>trying
>to delete something in /proc or other "just can't do it" errors.
>
>> I've tried changing the syntax ("unsubscribe" versus "unsubscribe
>> alerts me@domain.com") and sending to the -request address as well as
>> majordomo. No luck.
>
>This is repeatable? Does that file it complains about sit around after
>Majordomo bombs? Could you tell it what it looks like.
>
>My only shot in the dark is that it's somehow a link or a directory or
>something, when majordomo assumes it's a file.
>
>--
>
>Any help on this would be GREATLY appreciated!
>Please email me directly as I'm not a list member (yet).
I've sent Russ already my reply, here is the solution I found. I had the
same (sort of) problem when porting majordomo to the amiga. I got a
somewhat different error as Russ did, but I think the reason is the
same. Problem was in the unsubscribe subroutine, around line 450:
close(NEW) || &abort("Error closing $listdir/$clean_list.new: $!");
if ($match_count == 1) {
if ((-s "$listdir/$clean_list.new") + $match_length !=
(-s "$listdir/$clean_list")) {
&abort("Unsubscribe failed: $listdir/$clean_list.new is wrong length!");
}
# we deleted exactly 1 name, so now we shuffle the files
link("$listdir/$clean_list", "$listdir/$clean_list.old") ||
&abort("link(\"$listdir/$clean_list\", \"$listdir/$clean_list.old\"): $!");
#Problem was below, the unlink("$listdir/$clean_list"); unlinked LIST before closing
#it. It is unlinked at the end of the routine, but under amigados this is not possible.
#locking and unlocking a file must be done by the same task that opened it (shlock.pl in
#this case). Another task (majordomo in this case) can't unlink the file because there
#stil exist a lock on the file by shlock.pl. So, clean_list is not unlinked and clean_list.new
#can't be created (the lock is still with the old clean_list and therefore it caused an error.
#so by putting the &lclose(LIST); here, everything works again:
#and delete it at the end of the routine!
&lclose(LIST);
unlink("$listdir/$clean_list");
link("$listdir/$clean_list.new", "$listdir/$clean_list") ||
&abort("link(\"$listdir/$clean_list.new\", \"$listdir/$clean_list\"): $!");
unlink("$listdir/$clean_list.old");
if (defined $deflist) {
print REPLY "Succeeded (from list $deflist).\n";
}
elsif ($quietnonmember) {
print REPLY "Succeeded (from list $clean_list).\n";
}
else {
print REPLY "Succeeded.\n";
}
&log("unsubscribe $clean_list $subscriber");
&sendmail(BYE, "$clean_list-approval\@$whereami",
"UNSUBSCRIBE $clean_list $subscriber");
print BYE "$subscriber has unsubscribed from $clean_list.\n";
print BYE "No action is required on your part.\n";
close(BYE);
}
elsif ($match_count == 0) {
print REPLY "**** No matches found for '$subscriber'\n";
}
else {
print REPLY "**** FAILED.\n";
}
unlink("$listdir/$clean_list.new");
# deleting &lclose(LIST); here, it's not necessary anymore.
} else {
print STDERR "do_unsubscribe: authorization failed, calling check_and_request.\n" if $DEBUG;
&check_and_request("unsubscribe", $clean_list, $subscriber);
}
} else {
&squawk("unsubscribe: unknown list '$list'.");
}
}
I don't know if this fix will give any problems under a full unix system, but this
solution works for me, and maybe for Russ too. Maybe something similar is happening
at his system.
Bert Vortman.
Follow-Ups:
|
|