/*                     __           __           __
    .-----.--.--.----.|  |.--.--.--|  |.-----.--|  |  .-----.----.-----.
    |  -__|_   _|  __||  ||  |  |  -  ||  -__|  -  |__|  _  |   _|  _  |
    |_____|__.__|____||__||_____|_____||_____|_____|__|_____|__| |___  |
    								 |_____|
                   (c) 2003 by Takt <takt@excluded.org>								 

  Installing uptimed:
  first compile uptimed.c with "gcc by gcc -o uptimed uptimed.c"
  And start it with "screen -A -m -d -S uptimed ./uptimed"
  Now you can connect to uptimed by typing "telnet <ip> 1337".
  Of course you can change the port wich uptimed is listening to. 
  Have phun!
  by Takt
*/ 
 
#include <netinet/in.h> 
#include <sys/socket.h> 
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char argv[])
{
   int port = 1337; /* <- LOL */
   char UPTIME[1024]; /* Uptime */
   int sockfd, connfd;
   ssize_t len;
   struct sockaddr_in servaddr, cliaddr;
   FILE *ptr;
   
   if(getuid() != 0 || getgid() != 0)
   {
      printf("You cant start a Server-daemon without root...\n");
      return -1;
   }
   
   memset(&servaddr, '\0', sizeof(servaddr));
   
   servaddr.sin_family = AF_INET;
   servaddr.sin_port = htons(port);
   servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
   
   sockfd = socket(AF_INET, SOCK_STREAM, 0);
   
   bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
   
   listen(sockfd, 1);
   
   len = sizeof(cliaddr);
   
   while(0 == 0)
   {
      connfd = accept(sockfd, (struct sockaddr *)&cliaddr,&len);
      
      ptr = popen("uptime", "r");
      fgets(UPTIME, 1024, ptr);
      
      write(connfd, "Uptime:", 7);
      write(connfd, UPTIME, strlen(UPTIME));
      
      close(connfd);
   }
   
   return 0;
}
