Thread View: pl.comp.lang.c
1 messages
1 total messages
Started by Qrczak
Wed, 15 Oct 1997 00:04
Błąd w Pinie?
Author: 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/
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads