Article View: pl.comp.lang.c
Article #78Błąd w Pinie?
From: Qrczak
Date: Wed, 15 Oct 1997 00:04
Date: Wed, 15 Oct 1997 00:04
59 lines
4031 bytes
4031 bytes
[Followup-To: pl.comp.os.linux]
Zapragnąłem skompilować Pina, żeby móc wstawiać dowolne From na newsach
(można na to pozwolić podczas kompilacji). Mam wersję 3.95, tę z RH4.2.
Niby go skompilowałem (pierwszy raz w życiu, nie licząc jądra), ale po
uruchomieniu przez kogoś innego niż root wypisywał ostrzeżenie:
[Error creating /var/spool/mail/qrczak.lock.876859056.4837.qrnik.knm.org.pl: Permission denied]
Poza tym chyba działał dobrze.
Denerwowało mnie to. Znalazłem w konfiguracji opcję
quell-lock-failure-warnings, która miała blokować to ostrzeżenie, ale, co
ciekawe, w oryginalnym Pinie była wyłączona, a ostrzeżenia i tak nie było,
a w nowym nawet jej włączenie nie pomagało i ostrzeżenie wciąż się
pojawiało. Sprawdziłem stracem, że stary Pine próbował w ogóle blokować
plikiem /var/spool/mail/qrczak.lock; oba stracy miał sporo innych różnic,
więc okazuje się, że wersja skompilowana różni się trochę od tej w
źródłach. Do tej pory myślałem, że to jest ta sama wersja... Chyba że
jakoś różnią się w opcjach kompilacji, ale nie zgadnę, w jaki sposób był
kompilowany oryginalny Pine.
Przeglądałem źródła Pina (pomagając sobie grepem, ale np. nie umiem
jeszcze szukać po podkatalogach). W końcu znalazłem miejsce, w którym
powstawał ten komunikat (było kilka podobnych, ale tylko jedno było
prawdziwe). W pliku pine3.95/imap/ANSI/c-client/bezerk.c, od linji 1158:
sprintf (tmp,"Error creating %s: %s",hitch,strerror (errno));
switch (errno) { /* what happened? */
case EEXIST: /* file already exists? */
break; /* oops, just try again */
case EACCES: /* protection failure */
/* try again if file exists(?) */
if (!stat (hitch,&sb)) break;
/* punt silently if paranoid site */
if (mail_parameters (NIL,GET_LOCKEACCESERROR,NIL))
default: /* some other error */
mm_log (tmp,WARN); /* this is probably not good */
*lock = '\0'; /* give up on lock file */
break;
}
Funkcja mm_log pokazuje ów komunikat. Pytanie to programujących w C:
Dlaczego kiedy zamieniłem ze sobą miejscami wiersze:
if (mail_parameters (NIL,GET_LOCKEACCESERROR,NIL))
default: /* some other error */
to WSZYSTKO ZACZĘŁO DZIAŁAĆ JAK TRZEBA? Nie wiem, czy w C można robić
takie if(...) default: ...;
Zrobiłem, co do mnie należało (efekt można obejrzeć w nagłówkach postu -
mam prawdziwy, działający adres we From). Teraz Wasza kolej. Czy to błąd w
Pinie? Jak to powinno wyglądać poprawnie? Po mojej poprawce znowu jest
niewrażliwy na opcję quell-lock-failure-warnings, ale w ten lepszy sposób
- nie pisze ostrzeżenia... O co w tym wszystkim chodzi? Co to znaczy
/* this is probably not good */? Nie rozumiem, dlaczego taka zmiana kodu
powoduje akurat taki efekt - powinien chyba zacząć reagować na q-l-f-w,
nie? Do GET_LOCKEACCESERROR w innym miejscu jest przypisywana wartość
opcji q-l-f-w. Co ja takiego pokręciłem? Ciekaw jestem wyjaśnień...
zdez'orjentowany QRCZAK
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://kki.net.pl/qrczak/
Technical Details
Message-ID:
<Pine.LNX.3.95.971015013025.11962A-100000@qrnik.knm.org.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!cyfronet!news.icm.edu.pl!qrnik.knm.org.pl!qrnik.knm.org.pl!qrczakShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!cyfronet!news.icm.edu.pl!qrnik.knm.org.pl!qrnik.knm.org.pl!qrczak From: Qrczak <qrczak@knm.org.pl> Newsgroups: pl.comp.os.linux,pl.comp.lang.c Subject: Błąd w Pinie? Followup-To: pl.comp.os.linux Date: Wed, 15 Oct 1997 02:04:20 +0200 Organization: Qrnik Lines: 60 Message-ID: <Pine.LNX.3.95.971015013025.11962A-100000@qrnik.knm.org.pl> Reply-To: Qrczak <qrczak@knm.org.pl> NNTP-Posting-Host: ppp-cst186.warszawa.tpnet.pl Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit