działa smile

dziękuje bardzo.

Racja, tworzą się zmienne, ale ciągle mam problem ze loginem:

#!/bin/sh
if [ "$REQUEST_METHOD" == "POST" ]; then
        read -t 3 QUERY_STRING
        eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fi
aaa=$QUERY_STRING

if [ "$REQUEST_METHOD" == "POST" ]; then
        read -t 3 QUERY_STRING
        eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fi
bbb=$QUERY_STRING


echo "Content-type: text/plain"
echo ""

if [ "$login" == "root" ]; then
        echo "=================LOGIN OK==============="
fi

if [ "$passwd" == "12345" ]; then
        echo "=================HASLO OK==============="
fi

echo "========"
echo "Login:  $login"
echo "Passwd: $passwd"
echo "oryginal query aaa :$aaa"
echo "oryginal query bbb :$bbb"

wynik na root/12345

=================HASLO OK===============
========
Login:  root
Passwd: 12345
oryginal query aaa :login=root
oryginal query bbb :passwd=12345

Cezary, Twoje evale robią

login=root
passwd=12345

a sedy

root
12345

i takie właśnie chce mieć zmienne.

Na pewno coś jest w SEDach, w domu będę myślał.

Po modyfikacji pozornie działa, ale musi jakiś niewidoczny znak jeszcze wrzucać w ciąg loginu, bo nie działa jakbym chciał:

#!/bin/sh
if [ "$REQUEST_METHOD" == "POST" ]; then
        read -t 3 QUERY_STRING
        eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fi
login=`echo "$QUERY_STRING" | sed -n 's/^.*login=\([^&]*\).*$/\1/p' | sed "s/[%20+]/ /g"`
#pass= `echo "$QUERY_STRING" | sed -n 's/^.*passwd=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
aaa=$QUERY_STRING

if [ "$REQUEST_METHOD" == "POST" ]; then
        read -t 3 QUERY_STRING
        eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fi
bbb=$QUERY_STRING

#login=`echo "$QUERY_STRING" | sed -n 's/^.*login=\([^&]*\).*$/\1/p' | sed "s/[%20+]/ /g"`
pass=`echo "$QUERY_STRING" | sed -n 's/^.*passwd=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`

echo "Content-type: text/plain"
echo ""

echo "Login:  $login"
echo "Passwd: $pass"
echo "oryginal query aaa :$aaa"
echo "oryginal query bbb :$bbb"

if [ "$login" == "root" ]; then
        echo "=================LOGIN OK==============="
fi

Wynik dla testowego hasła "12345" i login "root":

Login:  root
Passwd: 12345
oryginal query aaa :login=root
oryginal query bbb :passwd=12345

Warunek nie działa, czyli login musi mieć jakieś niewidoczne znaki dodane.

co do stylu to racja, dzięki za uwagę (dopieoro przyswajam więdzę w temacie HTMLa).

Co do głównego pytania będę testował.

root@OpenWrt:/www/skrypt/cgi-bin# cat ps.sh
#!/bin/sh
if [ "$REQUEST_METHOD" == "POST" ]; then
        read -t 3 QUERY_STRING
        eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fi
hjk=$QUERY_STRING
login=`echo "$QUERY_STRING" | sed -n 's/^.*login=\([^&]*\).*$/\1/p' | sed "s/[%20+]/ /g"`
pass=`echo "$QUERY_STRING" | sed -n 's/^.*passwd=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
echo "Content-type: text/plain"
echo ""
echo "========"
echo "Serwer Software = $SERVER_SOFTWARE"
echo "Serwer name= $SERVER_NAME"
echo "Gateway Inteface= $GATEWAY_INTERFACE"
echo "Serwer prokolo = $SERVER_PROTOCOL"
echo "Serwer post = $SERVER_PORT"
echo "request method = $REQUEST_METHOD"
echo "path info = $PATH_INFO"
echo "path translated = $PATH_TRANSLATED"
echo "script name = $SCRIPT_NAME"
echo "query string = $QUERY_STRING"
echo "remonte host = $REMOTE_HOST"
echo "remonte addr = $REMOTE_ADDR"
echo "auth type = $AUTH_TYPE"
echo "remonte user = $REMOTE_USER"
echo "remonte ident = $REMOTE_IDENT"
echo "content type = $CONTENT_TYPE"
echo "content lenght = $CONTENT_LENGTH"
echo "http accept = $HTTP_ACCEPT"
echo "http user agent = $HTTP_USER_AGENT"
echo "======="
echo "Login:  $login"
echo "Passwd: $pass"
echo "oryginal query: $hjk"
if [ "$pass" != "XXXX" ] && [ "$login" == "YYY" ]; then

KOD WŁAŚCIWY - DZIAŁA

        else
                echo "Bledy login lub haslo"
fi
exit 0
root@OpenWrt:/www/skrypt# cat open.html
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Polecenie</title>
<form action="/cgi-bin/ps.sh" method="post" enctype="text/plain" onreset="if (!confirm('Czy na pewno chcesz wyczyscic caly formularz?')) return false">
<div>

<fieldset>
<legend align="center">Formularz do wypelnienia open</legend>

<table align="center" bgcolor="silver">
<tr>
 <td>
    Podaj login: input type="text" name="login">
 </td>
 </tr>
 <tr>
     <td>
      Podaj haslo: input type="password" name="passwd">
 </tr>
 <tr>
    <td colspan="2" align="center">
     input type="submit" value="Wyslij" />
     input type="reset" value="Resetuj" />
<td>
     </tr>
     <table>
</div></form>
</fieldset>

</head>

Cezary, jednak coś nie tak, post podaje mi tylko pierwszy człon, drugiego z hasłem nie ma. Otrzymuje tylko (echo $QUERY STRING):

query string = login=root

Cezary, dziękuje działa (co prawda w SH będzie to wyglądać tak)

if [ "$REQUEST_METHOD" == "POST" ]; then
    read -t 3 QUERY_STRING
    eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fi

Ale dlaczego trzeba tak kombinować?

Cześć,

Mam prostą stronę, podaje login i hasło i wysyłam je do skryptu SH (w ciągach input type nie ma znaku "<" bo forum nie przyjmuje wiadomości).

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<title>Polecenie</title>

<form action="/cgi-bin/ps.sh" method="get">

<div>
<fieldset>
<legend align="center">Formularz do wypełnienia </legend>

<p align="center">open</p>
<table align="center" bgcolor="silver">
<tr>
 <td>
    Podaj login:  input type="text" name="login">
 </td>
 </tr>
 <tr>
     <td>
      Podaj haslo: input type="password" name="password">
 </tr>
 <tr>
    <td colspan="2" align="center">
     input type="submit" value="Wyslij" />
     input type="reset" value="Resetuj" />
<td>
     </tr>
     <table>
</div></form>
</fieldset>
</head>

Ale metoda POST nie wysyła danych, natomast GET tak. 
Skąd wiem, co wysyłam? Bo skypt SH to:

#!/bin/sh
login=`echo "$QUERY_STRING" | sed -n 's/^.*login=\([^&]*\).*$/\1/p' | sed "s/[%20+]/ /g"`
pass=`echo "$QUERY_STRING" | sed -n 's/^.*password=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
echo "Content-type: text/plain"
echo ""
echo "========"
echo "Serwer Software = $SERVER_SOFTWARE"
echo "Serwer name= $SERVER_NAME"
echo "Gateway Inteface= $GATEWAY_INTERFACE"
echo "Serwer prokolo = $SERVER_PROTOCOL"
echo "Serwer post = $SERVER_PORT"
echo "request method = $REQUEST_METHOD"
echo "path info = $PATH_INFO"
echo "path translated = $PATH_TRANSLATED"
echo "script name = $SCRIPT_NAME"
echo "query string = $QUERY_STRING"
echo "remonte host = $REMOTE_HOST"
echo "remonte addr = $REMOTE_ADDR"
echo "auth type = $AUTH_TYPE"
echo "remonte user = $REMOTE_USER"
echo "remonte ident = $REMOTE_IDENT"
echo "content type = $CONTENT_TYPE"
echo "content lenght = $CONTENT_LENGTH"
echo "http accept = $HTTP_ACCEPT"
echo "http user agent = $HTTP_USER_AGENT"
echo "======="

Wynik działania dla POST to:

========
Serwer Software = lighttpd/1.4.30
Serwer name= xxxxxxx.xxx
Gateway Inteface= CGI/1.1
Serwer prokolo = HTTP/1.1
Serwer post = 81
request method = POST
path info = 
path translated = 
script name = /cgi-bin/ps.sh
query string = 
remonte host = 
remonte addr = xx.xx.xx.xx
auth type = 
remonte user = 
remonte ident = 
content type = application/x-www-form-urlencoded
content lenght = 27
http accept = text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
http user agent = Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
=======

Czyli query string jest pusty.  Jak pisałem, dla GET działa.

Testowałem dla HTTP oraz HTTPS,  dla lighttpd oraz uhttpd, na róznych przeglądarach, ciągle to samo.  Jakieś sugestie?

Pozdrawiam, Krzysiek

235

(1 odpowiedzi, napisanych Oprogramowanie / Software)

Cześć,

Zadanie sztuki dla sztuki. Czy bez restartu da się ustawić rootfs na ext_root zlokalizowanego na pendrive?

Wszystko skonfigurowane, wystarczy zrobić reboot i będzie działać, ale pytanie sztuki dla sztuki - da się przepiąć bez restartu systemu?

Pozdrawiam, Krzysiek

236

(3 odpowiedzi, napisanych Oprogramowanie / Software)

Dzięki, nie ma getmaila w repozytorium (u mnie dystrybucja AA), ale znalzałem takie coś

http://eko.one.pl/forum/viewtopic.php?id=1435

na temat fetchmail + procmail + zapisywanie na nośnik e-maili.

Niestety, po konfiguracji nie działa, może ktoś pomoże.


Utworzyłem .fetchmailrc i dla konta na wp mam takie coś

pool pop3.wp.pl protocol pop3 port 995 username "UŻYTNIK" password "HASŁO"  sllcertck
mda "/usr/bin/procmail -f -F% -d root"

potem daję

fetchmail -vvv  (czasami z opcja a) i mam, że

......   pool started
Trayning to connect to 212.77.101.140/995....connected
.... pool timeout
... error while fetching USERNAME@pop3.wp.pl

Ktoś może pomoże z konfiguracją do wp?

Witam,

Jak na OpenWrt ściągać pocztę np. w konta na WP/ONET/GMAIL/Inny do pliku (najlepiej z zachowanym formatowaniem).
Od czego zacząć?

Chcę zrobić niezależne archwimum wiadomości w stosunku do poczty na koncie e-mail.

Pozdrawiam, Krzysiek

238

(7 odpowiedzi, napisanych Inne)

DObra, był bąłd w przykładzie poniższe działa

#!/bin/bash
r=$1
#usuwam spacje
r=$(echo $1 | sed 's/ /_/g')

#usuwam znaki specjalne PL
#r=$(echo $r | sed 's/Ą/A/g' | sed 's/Ć/C/g' | sed 's/Ę/E/g' | sed 's/Ł/L/g' | sed 's/Ń/N/g' | sed 's/Ó/O/g' | sed 's/Ś/S/g' | sed 's/Ź/Z/g' | sed 's/Ż/Z/g' | sed 's/ą/a/g' | sed 's/ć/c/g' | sed 's/ę/e/g' | sed 's/ł/l/g' | sed 's/ń/n/g' | sed 's/ó/o/g' | sed 's/ś/s/g' | sed 's/ź/z/g' | sed 's/ż/z/g' |sed 's/@/_at_/g' | sed 's/(/_/g' | sed 's/)/_/g' )

r=$(echo $r | sed -e 's/Ą/A/g; s/Ć/C/g ;s/Ę/E/g ;s/Ł/L/g ;s/Ń/N/g ;s/Ó/O/g; s/Ś/S/g ; s/Ź/Z/g ; s/Ż/Z/g ; s/ą/a/g ; s/ć/c/g ;s/ę/e/g;s/ł/l/g ; s/ń/n/g ;s/ó/o/g ; s/ś/s/g ; s/ź/z/g ; s/ż/z/g ;s/@/_at_/g ; s/(/_/g ; s/)/_/g; s/,/_/g; s/~/_/g; s/%/_/g; s/\[/_/g; s/\]/_/g' )



if [ "$1" != "$r" ]
        then
        if [ ! -f "$r" ]; then
        echo "$1" '<<>>' "$r"
        mv  "$1" "$r"
                else echo "Plik istnieje $r"
                fi
        fi
#echo $r
exit 0

239

(7 odpowiedzi, napisanych Inne)

Racja, nie dotyczyłem. Ale mam jakiś problem

#!/bin/bash
r=$1
#usuwam spacje
r=$(echo $1 | sed 's/ /_/g')

#usuwam znaki specjalne PL
r=$(echo $1 | sed 's/Ą/A/g' | sed 's/Ć/C/g' | sed 's/Ę/E/g' | sed 's/Ł/L/g' | sed 's/Ń/N/g' | sed 's/Ó/O/g' | sed 's/Ś/S/g' | sed 's/Ź/Z/g' | sed 's/Ż/Z/g' | sed 's/ą/a/g' | sed 's/ć/c/g' | sed 's/ę/e/g' | sed 's/ł/l/g' | sed 's/ń/n/g' | sed 's/ó/o/g' | sed 's/ś/s/g' | sed 's/ź/z/g' | sed 's/ż/z/g')

echo '>>>' "$r" '<<>>' "$1" '|||' "$r" '<<<';

mv "$1" "$r"
exit 0

Na przykładzie jednego katalogu mam:

root@omv:/media/6acff0b7-3a30-4c39-839a-76abecf91c04/backup/wspolny/Zdjęcia/Nasze/2006_Zdjecia_od_Krzysika# find  -exec /zmiana.sh "{}" \;
>>> . <<>> . ||| . <<<
mv: `.' i `./.' to ten sam plik
>>> ./DSCN0995.JPG <<>> ./DSCN0995.JPG ||| ./DSCN0995.JPG <<<
mv: `./DSCN0995.JPG' i `./DSCN0995.JPG' to ten sam plik
>>> ./Krzysiek Oneiro.bmp <<>> ./Krzysiek Oneiro.bmp ||| ./Krzysiek Oneiro.bmp <<<
mv: `./Krzysiek Oneiro.bmp' i `./Krzysiek Oneiro.bmp' to ten sam plik
>>> ./DSCN0983.JPG <<>> ./DSCN0983.JPG ||| ./DSCN0983.JPG <<<
mv: `./DSCN0983.JPG' i `./DSCN0983.JPG' to ten sam plik
>>> ./Thumbs.db <<>> ./Thumbs.db ||| ./Thumbs.db <<<
mv: `./Thumbs.db' i `./Thumbs.db' to ten sam plik
>>> ./Krzys Ilo 1.jpg <<>> ./Krzys Ilo 1.jpg ||| ./Krzys Ilo 1.jpg <<<
mv: `./Krzys Ilo 1.jpg' i `./Krzys Ilo 1.jpg' to ten sam plik
>>> ./DSCN0965.JPG <<>> ./DSCN0965.JPG ||| ./DSCN0965.JPG <<<
mv: `./DSCN0965.JPG' i `./DSCN0965.JPG' to ten sam plik
>>> ./aacc.txt <<>> ./aacc.txt ||| ./aacc.txt <<<
mv: `./aacc.txt' i `./aacc.txt' to ten sam plik

Wydaje się, że znikły polski litery, ale ciągle mam problem ze spacjami.

240

(7 odpowiedzi, napisanych Inne)

O super za przykład.

A mogę jeszcze prosić o podpowiedź, jak "chodzić" po katalogach, bo przykład uruchomię na bieżącym katalogu, a w sumie mam około 600 katalogów i wolałbym, aby automat przeszukał drzewo katalogów.

241

(7 odpowiedzi, napisanych Inne)

Wykonam go na Debianie, myślę o BASH/SH

242

(7 odpowiedzi, napisanych Inne)

Witam,

Potrzebuję napisać skrypt, który zamieni wszystkie polskie litery na nie-polskie (tzn. Ł-->L  Ą-->A  Ń-->N itp) oraz spacje zastąpi podkreśleniem "_".

Potrzebuję zmieni kilkadziesiąt tys. plików (zdjęć), bez tego webowa galeria nie chce ich przyjąć.

Pętlę for mogę zrobić na jednym katalogu, ale chciałbym zapuścić skrypt na główmy katalogu i aby "zszedł" do końca i pomieniał nazwy plików.
Wyobrażam sobie, że odczytuje nazwę pliku do zmiennej, obrabiam string (jeszcze nie wiem jakim polecniem) oraz zmieniam nazwę pliku na nowy.


Nazwy katalogów zakładam niezmienne.

Pozdrawiam, Krzysiek

@Cezary,

Generalnie działa, ale chciałbym po pewnym czasie zamkną połączenie, a poniższe powoduje, że strona www "kreci się" czekając na zakończenie.

kod otwierający port
sleep 60
kod zamykający port 

Jakoś nie mam pomysłu na zakończanie tego.
A da się zrobić tak, aby pytało o login/hasło przed wejściem na stronę?


@g0f3r 
Jakbyś miał chęć, to chętnie zobaczę Twoje rozwiązanie

Skro tak jest to w domu powalczę, dam znać....

Ok, prawdopodobnie zadziała, ale częściowo, bo skąd knock będzie wiedziało, skąd uderzam (jakie adres IP)?
Zauważ, że otwieram port tylko dla wskazanego adresu IP (czyli z którego uruchamiam przeglądarkę www - w moim przypadku adres IP zewnętrznego pracodawcy).

To od początku.

1. Teraz działa na routerze usługa knockd i jestem zadowolony z jego działania
2. Program, który wysyła pakiety (tzw. puka do routera) pod OS Widnows nazywa się knock.exe (pod *inux knock)
3. W pracy program knock.exe nie działa. Prawdopodobnie jest zablokowany na wysyłanie danych (jakieś reguły domenowe windowsa blokują to ewentualnie firewall - nie mam jak tego sprawdzić)
4. O dziwo w pracy działa putty, może dlatego, że uderzam na port 22? (wiem, bo jak permanentnie otworzę port na świat to loguję się w pracy do routera)
5. Aby wbić się router muszę otworzyć port na routerze
6. Stąd pomysł, aby wywołać (nowy?) skrypt SH poprzez stronę www, odpowiedzialny za otwarcie portu (i jego zamknięcie po zadanym czasie)
7. Skrypt SH mogę napisać/zmodyfikować pod siebie jak chcę (coś tam ogarniam smile )
8. Strony www/php nie zbuduje, bo nie mam żadnego doświadczenia, stąd prośba o kod źródłowy pliku strona.html lub strona.php, który umieszczę w katalogu root-www

PROFIT - mam dostęp do routera via SSH w pracy zachowując funkcjonalność otwierania portów na życzenie (poprzez przycisk na stornie www).

Moje obecne rozwiązanie (knockd) jest takie, że w pliku /etc/knockd.con po wystukaniu odpowiedniej sekwencji uruchamia się skrypt, kod odpowiedzialny za to:

/opensshport %IP%

Adres IP mam niejako "gratis", samo knockd je podaje.

Kod skryptu /opensshport to polecania IPTABLES plus zapisanie adresu IP do pliku

#!/bin/sh
iptables -I INPUT -p tcp  -i pppoe-wan --dport 22 -s $1 -j ACCEPT
echo $1>/ip
exit 0

Później na podstawie adresu w pliki /ip  uruchamiam inne skrypy w putty, które dają mi dostęp np. VPN.
Oczywiście mam jeszcze 2-gi skrypt zamykający porty uruchamiany też przez knockd po określonym czasie po uruchomieniu otwarcia portu.

Chodzi o to, że adres IP z którego wbijam się do routera nie jest stały.

Byłbym wdzięczny

Może inaczej, teorie (chyba znam).

1. Miej uruchomioną usługę PHP oraz WWW - MAM
2. Utwórz skrypt bash przyjmujący parametry - MAM
3. Zrób stronę www/php - NIE MAM

Właśnie rozchodzi się i www/php - jestem kompletnie zielony w tych sprawach.

Witam,

Normlanie otwieram port poprzez knockd, który uruchamia odpowiedni skrypt, ale w mojej pracy nie mogę zapukać (prawdopodobnie knock.exe jest zablokowany na wysyłanie danych w sieć).

Wobec tego chciałbym utworzyć prostą stronę www z guzikiem, który będzie uruchamiał skrypt z knockd. Czy mogę prosić o pomoc.

Dodam, że port otwiera się tylko na pukający IP na określony czas, wobec tego rozwiązanie powinno być na tyle inteligentne, aby udało się odczytać adres IP z którego loguję się do routera (do www).

Ewentualnie jak obejść problem.

Pozdrawiam, Krzysiek