Thread View: pl.comp.os.linux.programowanie
4 messages
4 total messages
Started by Pawel Mojski
Sat, 02 Oct 1999 18:53
Takie moje male httpd, problem
Author: Pawel Mojski
Date: Sat, 02 Oct 1999 18:53
Date: Sat, 02 Oct 1999 18:53
189 lines
5826 bytes
5826 bytes
Witam ponownie, pisze sobie demona http, i mam pewiem problem
Dziala on w ten sposob, ze po odpaleniu odczytuje on jaka strone
chce obejrzec klient, sprawdza czy istnieje ona w SQL'u, i "redajrectuje"
potem klienta na strone wskazana z SQL'a, zrodlo wyglada tak:
-- CUT --
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>
#include <syslog.h>
#include <errno.h>
#include <grp.h>
#include <pwd.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <syslog.h>
#include <stdarg.h>
#include <alloca.h>
#include <string.h>
#define AUTH_FAILED 1
#define OK 10
struct optionstruct {
char host[256];
char database[17];
char dbuser[17];
char dbpasswd[17];
char table[17];
char usercolumn[17];
char passwdcolumn[17];
int crypt;
};
struct optionstruct options =
{
"localhost",
"host",
"root",
"MySQL",
"www",
"User",
"false",
0
};
int db_connect (MYSQL * auth_sql_server)
{
int retvalue = AUTH_FAILED;
MYSQL *mysql_auth = NULL;
mysql_init (auth_sql_server);
mysql_auth = mysql_real_connect (auth_sql_server,
options.host,
options.dbuser,
options.dbpasswd,
options.database, 0, NULL, 0);
if (mysql_auth != NULL) {
if (!mysql_select_db(auth_sql_server, options.database)) {
retvalue = OK;
}
}
return retvalue;
}
int db_get(MYSQL * auth_sql_server, const char * page, const char * args)
{
char *sql, *wynik, *truepage;
MYSQL_RES *result;
MYSQL_ROW sql_row;
int retvalue = AUTH_FAILED;
sql = (char *) malloc (110);
sprintf (sql, "select true from www where fake = '%s'",page);
mysql_query (auth_sql_server, sql);
free (sql);
result = mysql_store_result (auth_sql_server);
if (!result) {
return AUTH_FAILED;
}
sql_row = mysql_fetch_row (result);
//truepage = (char *) malloc (strlen (sql_row[0]) * sizeof (char) + 1);
printf("
HTTP/1.1 302 Found
Date: Fri, 17 Sep 1999 16:08:27 GMT
Server: Apache/1.3.9 (Unix)
Location: %s%s
Connection: close
Content-Type: text/html
<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">
<HTML><HEAD>
<TITLE>302 Found</TITLE>
</HEAD><BODY>
<H1>Found</H1>
The document has moved <A HREF=\"%s%s\">here</A>.<P>
<HR>
<ADDRESS>Apache/1.3.9 Server at server.to.ja.pl Port 80</ADDRESS>
</BODY></HTML>
",sql_row[0],args,sql_row[0],args);
return OK;
}
int main ()
{
char request[255], request2[255], buf[255], *page, *args;
char *string, *string2, *string3;
MYSQL auth_sql_server;
gets(request);
string = strdup(request);
args = strtok(string, " ");
args = strtok(NULL, " ");
gets(request2);
string2 = strdup(request2);
page = strtok(string2," ");
page = strtok(NULL," ");
sprintf(buf,"http://%s/",page);
if (db_connect(&auth_sql_server) != OK) {
printf("Nie moge polaczyc sie z baza\n");
exit(0); }
if (db_get(&auth_sql_server,buf,args) != 10) {
printf("Cos nie wyszlo\n");
exit(0); }
return 0;
}
-- CUT --
(Wiem ze od cholerny nie potrzebnych naglowkowych, ale to malo wazne, poprostu
skopiowalem z innych zrodel idac na latwizne, to akurat poprawie)
Z palca dziala w ten sposob:
[root@get http]# ./httpd
GET /dupa HTTP/1.0
Host: www.pawcio.to.ja.pl
HTTP/1.1 302 Found
Date: Fri, 17 Sep 1999 16:08:27 GMT
Server: Apache/1.3.9 (Unix)
Location: http://www.pawcio.cp.pl//dupa
Connection: close
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>302 Found</TITLE>
</HEAD><BODY>
<H1>Found</H1>
The document has moved <A HREF="http://www.pawcio.cp.pl//dupa">here</A>.<P>
<HR>
<ADDRESS>Apache/1.3.9 Server at server.to.ja.pl Port 80</ADDRESS>
</BODY></HTML>
Wiec zdaje mi sie ze dobrze.
Wiec, wpisuje go sobie do inetd.conf'a i odpalam na 80.
netcat na to:
[root@get http]# nc localhost 80
GET /a HTTP/1.0
Host: www.pawcio.to.ja.pl
HTTP/1.1 302 Found
Date: Fri, 17 Sep 1999 16:08:27 GMT
Server: Apache/1.3.9 (Unix)
Location: http://www.pawcio.cp.pl//a
Connection: close
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>302 Found</TITLE>
</HEAD><BODY>
<H1>Found</H1>
The document has moved <A HREF="http://www.pawcio.cp.pl//a">here</A>.<P>
<HR>
<ADDRESS>Apache/1.3.9 Server at server.to.ja.pl Port 80</ADDRESS>
</BODY></HTML>
Wiec chyba tez dobrze, natomiast ani lynx, ani inna przegladarka, nie chce strony otworzyc.
Gdzie popelniam blad ?
Blagam, pomocy ;P
Sorry ze tyle wcinek, ale chcialem zeby wszystko bylo zrozumiane.
Pozdrawiam,
--
[ Pawel Mojski (pawcio@link.pl) ]
[ Linux-Inside (luser & ladmin) ]
[ finger pawcio@link.pl for PGP key ]
Re: Takie moje male httpd, problem
Author: Przem Kowalczyk
Date: Sat, 02 Oct 1999 22:23
Date: Sat, 02 Oct 1999 22:23
91 lines
3618 bytes
3618 bytes
Pawel Mojski in pl.comp.os.linux.programowanie wrote:
>Witam ponownie, pisze sobie demona http, i mam pewiem problem
>Dziala on w ten sposob, ze po odpaleniu odczytuje on jaka strone
>chce obejrzec klient, sprawdza czy istnieje ona w SQL'u, i "redajrectuje"
>potem klienta na strone wskazana z SQL'a, zrodlo wyglada tak:
{big cut}
>(Wiem ze od cholerny nie potrzebnych naglowkowych, ale to malo wazne, poprostu
>skopiowalem z innych zrodel idac na latwizne, to akurat poprawie)
>
>Z palca dziala w ten sposob:
{cut}
>Wiec zdaje mi sie ze dobrze.
>Wiec, wpisuje go sobie do inetd.conf'a i odpalam na 80.
>netcat na to:
>
>[root@get http]# nc localhost 80
>GET /a HTTP/1.0
>Host: www.pawcio.to.ja.pl
>
>HTTP/1.1 302 Found
>Date: Fri, 17 Sep 1999 16:08:27 GMT
>Server: Apache/1.3.9 (Unix)
>Location: http://www.pawcio.cp.pl//a
>Connection: close
>Content-Type: text/html
>
><!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
><HTML><HEAD>
><TITLE>302 Found</TITLE>
></HEAD><BODY>
><H1>Found</H1>
>The document has moved <A HREF="http://www.pawcio.cp.pl//a">here</A>.<P>
><HR>
><ADDRESS>Apache/1.3.9 Server at server.to.ja.pl Port 80</ADDRESS>
></BODY></HTML>
>
>Wiec chyba tez dobrze, natomiast ani lynx, ani inna przegladarka, nie chce
>strony otworzyc.
>Gdzie popelniam blad ?
>Blagam, pomocy ;P
>
>Sorry ze tyle wcinek, ale chcialem zeby wszystko bylo zrozumiane.
Zrobiłem eksperyment. Napisałem skrypcik w perlu, który generuje taką
'redirektującą' stronę. Wynik jego działania jest następujący:
00:02:52 peterpan:~> telnet peterpan 80
Trying 192.168.1.2...
Connected to peterpan.neverland.org.
Escape character is '^]'.
GET /cgi-bin/redir.pl HTTP/1.0
HTTP/1.1 302 Moved
Date: Sat, 02 Oct 1999 22:09:43 GMT
Server: Apache/1.3.9 (Unix) (Red Hat/Linux) mod_ssl/2.4.1 OpenSSL/0.9.3a
mod_perl/1.19 PHP/3.0.12
Location: http://peterpan/index.html
Connection: close
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML><HEAD><TITLE>Found</TITLE>
</HEAD><BODY><A HREF="peterpan/index.html">Document has moved
here</A></BODY></HTML>Connection closed by foreign host.
Porównując z tym co ty dostałeś wydaje mi się, że różnica to jedynie
zwracany status:
HTTP/1.1 302 Found - u ciebie
HTTP/1.1 302 Moved - u mnie
Może akurat to? Poza tym czy próbowałeś samego redir, bez _jakichkolwiek_
komentarzy? Czyli tak:
HTTP/1.1 302 Moved
Date: Sat, 02 Oct 1999 22:22:37 GMT
Server: Apache/1.3.9 (Unix)
Location: http://peterpan/index.html
Connection: close
Content-Type: text/plain
Przem
--
the bull and the bear are marking
their territories
they're leading the blind with
their international glories
R.E.M
Re: Takie moje male httpd, problem
Author: Cezary H. Noweta
Date: Sun, 03 Oct 1999 11:23
Date: Sun, 03 Oct 1999 11:23
42 lines
2376 bytes
2376 bytes
Witam,
Pawel Mojski wrote:
> [...]
> int main ()
> {
> char request[255], request2[255], buf[255], *page, *args;
> char *string, *string2, *string3;
> MYSQL auth_sql_server;
> gets(request);
> string = strdup(request);
> args = strtok(string, " ");
> args = strtok(NULL, " ");
> gets(request2);
> string2 = strdup(request2);
> page = strtok(string2," ");
> page = strtok(NULL," ");
> sprintf(buf,"http://%s/",page);
> if (db_connect(&auth_sql_server) != OK) {
> printf("Nie moge polaczyc sie z baza\n");
> exit(0); }
> if (db_get(&auth_sql_server,buf,args) != 10) {
> printf("Cos nie wyszlo\n");
> exit(0); }
> return 0;
> }
> [...]
> Wiec chyba tez dobrze, natomiast ani lynx, ani inna przegladarka, nie chce strony otworzyc.
> Gdzie popelniam blad ?
Czytasz tylko dwa wiersze - przeczytaj caly request - az do pustej linii.
Lynx wysyla siedem i dopiero czyta. Po dwoch liniach Ty wysylasz i Lynx
wysyla - tylko odebrac nie ma kto ;)
A co gdy request bedzie samym "GET /costam/ HTTP/1.0\n\n" bez "Host:"?
Twoj server wyrzuci "Location: http///costam/".
-- pozdrawiam
--
Cezary H. Noweta 90-237 LODZ, ul. J.Matejki 34/38 POLAND
(chn@irys.usun.drugiitrzeciczlon.uni.lodz.pl) +48 42 6356013, 6356012
University of Lodz - Main Library fax 6781678
Re: Takie moje male httpd, problem
Author: Pawel Mojski
Date: Sun, 03 Oct 1999 14:41
Date: Sun, 03 Oct 1999 14:41
25 lines
1721 bytes
1721 bytes
Cezary H. Noweta <chn@irys.usundrugiczlon.uni.lodz.pl> napisał(a): > Witam, [cut] > Czytasz tylko dwa wiersze - przeczytaj caly request - az do pustej linii. > Lynx wysyla siedem i dopiero czyta. Po dwoch liniach Ty wysylasz i Lynx > wysyla - tylko odebrac nie ma kto ;) > A co gdy request bedzie samym "GET /costam/ HTTP/1.0\n\n" bez "Host:"? > Twoj server wyrzuci "Location: http///costam/". Nie, wywali SIGSEGV i pujdzie spać, faktycznie powinienem czytac wszystko, ale ja jestem jeszcze poczotkujacym programista, i nie wiem jak zrobic zeby czytac tak dlugo az nastapi pusta linia, moze jakas wskazowka ? Bardzo prosze ;> -- [ Pawel Mojski (pawcio@link.pl) ] [ Linux-Inside (luser & ladmin) ] [ finger pawcio@link.pl for PGP key ] > -- pozdrawiam > -- > Cezary H. Noweta 90-237 LODZ, ul. J.Matejki 34/38 POLAND > (chn@irys.usun.drugiitrzeciczlon.uni.lodz.pl) +48 42 6356013, 6356012 > University of Lodz - Main Library fax 6781678
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