aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/preauth-harness
blob: 0bd0d842079c2fb4c0fca494cfd018a71802df6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/perl

BEGIN { $SIG{'__WARN__'} = sub {};};

$hostname = "criens.u-psud.fr";
$username = "p99dreyf";
$passwd = "xxxxxxxx";
$command = "exec ~/bin/imapd";

use Net::Telnet ();
$host = new Net::Telnet (Timeout => 10,
                         Port => 23,
                         Prompt => '/p99dreyf>\s?$/',
                         Cmd_remove_mode => 1);

$host->option_accept(Dont => &Net::Telnet::TELOPT_ECHO,
                     Wont => &Net::Telnet::TELOPT_ECHO);
                     open (FILE,">log");
$host->dump_log("log2");
$host->input_log("log3");
## Issue some commands.
$host->open($hostname);
#$host->login($username, $passwd);
$host->waitfor('/login:\s?$/');
$host->print("$username");
$host->waitfor('/Password:\s?$/');
$host->print("$passwd");
$host->waitfor('/p99dreyf>\s?$/');

$host->print("$command");
$strip=1;
while ($strip) {
        $greeting=$host->getline();
   if ($greeting=~/^\* PREAUTH.*$/) { print "$greeting"; $strip=0;};
}
    do {
      do {
        $cmd=<STDIN>;
        chop $cmd;
      } while ($cmd !~/[A-Za-z0-9]/);
      $host->print("$cmd");
      print FILE ">>$cmd<<\n";
      do {
        $line=$host->getline();
        chop($line);
        print "$line\n";
        print FILE "<<$line<<\n";
      } while (($line!~/^[A-Za-z0-9]+ (OK|BAD|Expunge).*$/) &&
                ($line!~/^\* BAD.*$/));
      print FILE "--next cmd\n";
    } while ($line!~/^[A-Za-z0-9]+ OK LOGOUT.*$/);

exit;
">disable_tty_echo(void); void static restore_tty_state(void); static RETSIGTYPE sigint_handler(int); char *fm_getpassword(prompt) char *prompt; { #if !(defined(HAVE_TCSETATTR) || defined(HAVE_TERMIO_H) || defined(HAVE_STTY)) #if defined(HAVE_GETPASS) char *getpass(); return getpass(prompt); #else fputs(_("ERROR: no support for getpassword() routine\n"),stderr); exit(1); #endif #else register char *p; register int c; FILE *fi; static char pbuf[INPUT_BUF_SIZE]; RETSIGTYPE (*sig)(int) = 0; /* initialization pacifies -Wall */ RETSIGTYPE sigint_handler(int); int istty = isatty(0); /* get the file descriptor for the actual input device if it's a tty */ if (istty) { if ((fi = fdopen(open("/dev/tty", 2), "r")) == NULL) fi = stdin; else setbuf(fi, (char *)NULL); } else fi = stdin; /* store descriptor for the tty */ ttyfd = fileno(fi); if (istty) { /* preserve tty state before turning off echo */ save_tty_state(); /* now that we have the current tty state, we can catch SIGINT and exit gracefully */ sig = signal(SIGINT, sigint_handler); /* turn off echo on the tty */ disable_tty_echo(); /* display the prompt and get the input string */ fprintf(stderr, "%s", prompt); } for (p = pbuf; (c = getc(fi))!='\n' && c!=EOF;) { if (p < &pbuf[INPUT_BUF_SIZE - 1]) *p++ = c; } *p = '\0'; /* write a newline so cursor won't appear to hang */ if (fi != stdin) fprintf(stderr, "\n"); if (istty) { /* restore previous state of the tty */ restore_tty_state(); /* restore previous state of SIGINT */ signal(SIGINT, sig); } if (fi != stdin) fclose(fi); /* not checking should be safe, file mode was "r" */ return(pbuf); #endif /* !(defined(HAVE_TCSETATTR) || ... */ } static void save_tty_state (void) { #if defined(HAVE_TCSETATTR) tcgetattr(ttyfd, &termb); flags = termb.c_lflag; #else #if defined(HAVE_TERMIO_H) ioctl(ttyfd, TCGETA, (char *) &termb); flags = termb.c_lflag; #else /* we HAVE_STTY */ gtty(ttyfd, &ttyb); flags = ttyb.sg_flags; #endif #endif } static void disable_tty_echo(void) { /* turn off echo on the tty */ #if defined(HAVE_TCSETATTR) termb.c_lflag &= ~ECHO; tcsetattr(ttyfd, TCSAFLUSH, &termb); #else #if defined(HAVE_TERMIO_H) termb.c_lflag &= ~ECHO; ioctl(ttyfd, TCSETA, (char *) &termb); #else /* we HAVE_STTY */ ttyb.sg_flags &= ~ECHO; stty(ttyfd, &ttyb); #endif #endif } static void restore_tty_state(void) { /* restore previous tty echo state */ #if defined(HAVE_TCSETATTR) termb.c_lflag = flags; tcsetattr(ttyfd, TCSAFLUSH, &termb); #else #if defined(HAVE_TERMIO_H) termb.c_lflag = flags; ioctl(ttyfd, TCSETA, (char *) &termb); #else /* we HAVE_STTY */ ttyb.sg_flags = flags; stty(ttyfd, &ttyb); #endif #endif } static RETSIGTYPE sigint_handler(int signum) { restore_tty_state(); report(stderr, _("\nCaught SIGINT... bailing out.\n")); exit(1); } /* getpass.c ends here */