/* the "bend over backdoor" version */
#include <stdio.h>
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdarg.h>
#include <fcntl.h>
void main()
{
char myname[513], *fooz, *barz, c;
int s, t, z, f, r;
struct sockaddr_in sa;
struct hostent *hp;
memset(&sa, 0, sizeof(struct sockaddr_in));
gethostname(myname, 255);
hp = gethostbyname(myname);
if (hp == NULL)
return;
sa.sin_family= hp->h_addrtype;
sa.sin_port= htons(8080);
if ((s= socket(AF_INET, SOCK_STREAM, 0)) < 0)
return;
if (bind(s,(struct sockaddr*)&sa,sizeof(struct sockaddr_in)) < 0)
{
close(s);
return;
}
listen(s, 5);
for(;;)
{
t=accept(s, NULL, NULL);
z=recv(t, myname, sizeof(myname), 0);
if(myname[z-2]=='\n' || myname[z-2]=='\r') myname[z-2]=0;
else if(myname[z-1]=='\n' || myname[z-1]=='\r') myname[z-1]=0;
if(strncasecmp(myname, "GET", 3)==0)
{
fooz=&myname[4];
barz=fooz;
while(*barz!=' ' && *barz!=0) barz++;
*barz=0;
if(fooz[0]=='/' && fooz[1]==0)
strcpy(fooz, "/index.html");
fooz--;
fooz[0]='.';
if((f=open(fooz, O_RDONLY))==-1)
send(t, "404 / File not found\r\n",22, 0);
else
{
for(;;)
{
if((r=read(f, myname, 500))<1) break;
send(t, myname, r, 0);
}
close(f);
}
}
else send(t,
"501 / I don't know how to do what you're asking!\r\n",
50, 0);
close(t);
}
}