/* 
 * ftelnetd - fake telnet daemon
 *
 * ftelnetd.c
 * Main file, nothing interesting here. Just parsing the *argv[] elements and
 * function calls. 
 *
 * Tue Dec 12 22:47:31 CET 2006
 *
 * by Levent Kayan
 * levent[at]corehack[dot]org
 *
 */

#include "ftelnetd.h"
#include "banner.h"
#include "ferror.h"
#include "log.h"

#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <unistd.h>
#include <sys/types.h>
#include <ctype.h>


/* fake mode */
int mode;

int main(int argc, char **argv)
{
   /* group and user id -> default r00t*/
   gid_t grp_id = 0;
   uid_t usr_id = 0;
   
   /* default logfile */
	char *logfile = "ftelnetd.log";
   int c = 0;
   int port = DEFPORT; 

   if (argc < 2 ) {
      fprintf(stderr, "[!] -h for help and usage\n");
      exit(EXIT_FAILURE);
   }
   while ((c = getopt(argc, argv, "hf:p:g:u:l:vd")) != -1 ) {
      switch (c) {
       case 'h':
          usage(argv[0]);
          break;
       case 'f':
          /* choose fake mode */
          mode = atoi(optarg);
          /* TODO: switch */
          if (mode < 0 || mode > 5) {
             fprintf(stderr, "[-] Wrong mode!\n");
             exit(EXIT_FAILURE);
          }
          /* list all available fake modes */
          if (mode == 5) {
             print_modes();
          }
          break;
       case 'p':
          /*TODO: check numeric etc. */
          port = atoi(optarg);
          if ( port < 1 || port > 65535 ) {
             ERR_GEN;
          }
          break;
       case 'g':
          grp_id = atoi(optarg);
          break;
       case 'u':
          usr_id = atoi(optarg);
          break;
       case 'l':
          logfile = NULL;
          logfile = optarg;
          break;
       case 'v':
          puts(VERSION);
          exit(EXIT_SUCCESS);
          break;
       case 'd':
          /* check chosen mode then allow to daemonise */
          if (mode < 3 || mode > 0) {
            if (daemon_init() < 0) {
               ERR_GEN;
            }
          }
          break;
       default:
          exit(EXIT_FAILURE);
      }
   }
   /* check if a fake mode is chosen */
   if (mode < 0) {
      fprintf(stderr, "[-] Plesae choose a fake mode first!\n");
      exit(EXIT_FAILURE);
   }
   else {
		open_logfile(logfile);
      build_server(port, grp_id, usr_id);
   }
   return 0;
}

/* EOF */


syntax highlighted by Code2HTML, v. 0.9.1