1 // RUN: %clangxx -O0 -g %s -lutil -o %t && %run %t | FileCheck %s 2 3 // REQUIRES: stable-runtime 4 // XFAIL: android && asan 5 // No libutil. 6 // UNSUPPORTED: solaris 7 8 #include <assert.h> 9 #include <stdio.h> 10 #include <string.h> 11 #if __linux__ 12 #include <pty.h> 13 #elif defined(__FreeBSD__) 14 #include <libutil.h> 15 #include <pwd.h> 16 #include <sys/ioctl.h> 17 #include <sys/termios.h> 18 #include <sys/types.h> 19 #elif defined(__sun__) && defined(__svr4__) 20 #include <termios.h> 21 #else 22 #include <util.h> 23 #endif 24 #include <unistd.h> 25 26 int 27 main (int argc, char** argv) 28 { 29 int m; 30 int pid = forkpty(&m, NULL, NULL, NULL); 31 32 if(pid == -1) { 33 fprintf(stderr, "forkpty failed\n"); 34 return 1; 35 } else if (pid > 0) { 36 char buf[1024]; 37 int res = read(m, buf, sizeof(buf)); 38 write(1, buf, res); 39 write(m, "password\n", 9); 40 while ((res = read(m, buf, sizeof(buf))) > 0) write(1, buf, res); 41 } else { 42 char *s = getpass("prompt"); 43 assert(strcmp(s, "password") == 0); 44 write(1, "done\n", 5); 45 } 46 return 0; 47 } 48 49 // CHECK: prompt 50 // CHECK: done 51