Strona 1 z 1

HTTP_REFERER w CGI i zmienne w bashu

: 07 mar 2014, 10:39
autor: novelek
Witam serdecznie społeczność :)

rzadko zdarza mi się pisać na forach ale natknąłem się na problem, który spędza mi sen z powiek.
Nie jestem zaawansowanym "skryptologiem", ale co nieco się "orientuję". Proszę o poważne komentarze
z próbą wyjaśnienia zjawiska a nie sugerujące inne rozwiązania (jak choćby wykorzystanie zmiennej PWD
czy napisanie w php).

Mam napisanych kilka skryptów .cgi w bashu. Poniżej ten, w którym występuje zjawisko:

Kod: Zaznacz cały

#! /bin/bash
k1=${HTTP_REFERER#*mainfolder/}
k1=${k1%%/*}
f1="/var/mainfolder/$k1"
echo $f1 $k1 ${#k1}
while read x; do echo $x; done < $f1/parametry
Skrypt służy do wyciągnięcia parametrów powiązanych z wybranym folderem strony wywołującej html.
Linia "echo $f1 $k1 ${#k1}" służy mi jedynie do sprawdzenia poprawności zmiennych w diagnozie problemu.
Problem jest następujący:

wartość f1 /var/mainfolder/mojfolder1
wartość k1 mojfolder1
wartość ${#k1} 10

Skrypt działa prawidłowo - zwraca odpowiednie parametry. Komenda echo w skrypcie wyrzuca
poprawne wartości zmiennych (jak wyżej), ale w error.log mam komunikat o błędzie:

[Thu Mar 06 10:05:03 2014] [error] [client x.x.x.x] /var/www/cgi-bin/x.cgi: line 6: /var/mainfolder//parametry: No such file or directory

tzn. jakby zmienna k1 była pusta ??????

Moje testy:
1. Zjawisko występuje przy wywołaniu z IE. Błąd nie występuje przy wywołaniu z Firefoxa.
2. Użycie innej zmiennej zamiast HTTP_REFERER (np. PWD) nie generuje błędu również w IE
3. HTTP_REFERER ma zawsze wartości prawidłowe
4. W innych skryptach również posługuję się w ten sam sposób zmienną HTTP_REFERER i błąd nie występuje,
ale uwaga: jest inny sposób wywoływania skryptu z html. W działających bez błędu - z form. Błędny - jako object.

Aha - Apache 2.2.22

Pomóżcie mi zrozumieć. Jak to możliwe, że zmienna ma wartość, skrypt działa a log wykazuje ją jako pustą?

pozdrawiam

Re: HTTP_REFERER w CGI i zmienne w bashu

: 07 mar 2014, 11:19
autor: ethanak
daj gdzieś na początku żeby ci wypisał wszystkie zmienne - czasami można bardzo ciekawe rzeczy znaleźć...

Re: HTTP_REFERER w CGI i zmienne w bashu

: 07 mar 2014, 11:46
autor: novelek
Dawałem - posługuję się różnymi zmiennymi do różnych celów, ale dla mnie
poprawnie (skoro chcę odnieść się do nadrzędnego wywołania) powinien być np. HTTP_REFERER.
Nurtuje mnie co się może dziać, że dostaję błąd sugerujący pustą zmienną k1, a tymczasem skrypt
wyświetla prawidłową wartość i wykonuje się również OK.

Re: HTTP_REFERER w CGI i zmienne w bashu

: 07 mar 2014, 12:04
autor: ethanak
o ile pamiętam z czasów kiedy się w webmastera bawiłem object w misiu zawsze miał jakieś problemy.
ja bym sprawdził przede wszystkim, czy HTTP_REFERER jest taki sam przy wywołaniu skryptu w misiu jako obiekt i w inny sposób (form albo inna przeglądarka) - z dokładnością do wszelkich białych znaków z \r na czele. nic innego mi do głowy nie przychodzi a nie mam treaz dostępu do jakiegokolwiek serwera żeby sprawdzić. wrzuć najlepiej zawartość zmiennej do pliku bo na wyświetlaniu bym nie polegał.

-- 07 mar 2014 17:46 --

i jeszcze jedno - jaki jest doctype strony w którą wepchałeś ten obiekt? bo jeśli to nie 4.01 strict to może być powód nieprawidłowego działania.

Re: HTTP_REFERER w CGI i zmienne w bashu

: 10 mar 2014, 08:45
autor: novelek
Jeśli chodzi o doctype to mam html 5, ale zmieniłem na 4.01 strict i nie pomogło.

Natomiast ze zmienną HTTP_REFERER jest rzeczywiście coś nie tak. Pojedyńcza komenda wypchnięcia do pliku
generuje jedną pustą linię i drugą prawidłową. Ale na tym nie koniec. Idąc "za ciosem" :) wypchnąłem wszystkie
zmienne (set). Jakież zdziwienie: również dwie linie różniące się nieznacznie zmiennymi. Np. w pierwszej jest
CONTENT_LENGTH=0, a w drugiej nie ma. Zato w drugiej jest mój ulubiony HTTP_REFERER, a w pierwszej nie ma.
Dwa wywołania shella z różnymi zmiennymi? Jestem już zakręcony. Jakieś pomysły? Popełniam jakiś błąd?

Wygląda na to, że rzeczywiście mój skrypt wykonuje się dwa razy, (za drugim razem prawidłowo)....
dlaczego?...

Re: HTTP_REFERER w CGI i zmienne w bashu

: 10 mar 2014, 09:40
autor: ethanak
zaczynam wróżyć: subrequest? może brakuje gdzieś -L w konfiguracji mod_rewrite?
aż dzisiaj z czystej ciekawości sprawdzę... mam nadzieję że mój misio pod wine działa...

Re: HTTP_REFERER w CGI i zmienne w bashu

: 10 mar 2014, 12:57
autor: novelek
Podpowiem jeszcze, że testy robię na linaro (odmianie ubuntu na ARM) 13.09.
Sprawdzałem jednak również na Fedorze 19 (i686) i było identyczne zjawisko.