16d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// RUN: %clangxx -O0 -g %s -lutil -o %t && %run %t | FileCheck %s 2799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// REQUIRES: stable-runtime 36d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#include <assert.h> 46d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#include <stdio.h> 56d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#include <unistd.h> 66d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#include <string.h> 7c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar#if __linux__ 86d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#include <pty.h> 9c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar#else 10c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar#include <util.h> 11c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar#endif 126d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 136d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesint 146d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesmain (int argc, char** argv) 156d1862363c88c183b0ed7740fca876342cf0474bStephen Hines{ 166d1862363c88c183b0ed7740fca876342cf0474bStephen Hines int master; 176d1862363c88c183b0ed7740fca876342cf0474bStephen Hines int pid = forkpty(&master, NULL, NULL, NULL); 186d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 196d1862363c88c183b0ed7740fca876342cf0474bStephen Hines if(pid == -1) { 206d1862363c88c183b0ed7740fca876342cf0474bStephen Hines fprintf(stderr, "forkpty failed\n"); 216d1862363c88c183b0ed7740fca876342cf0474bStephen Hines return 1; 226d1862363c88c183b0ed7740fca876342cf0474bStephen Hines } else if (pid > 0) { 236d1862363c88c183b0ed7740fca876342cf0474bStephen Hines char buf[1024]; 246d1862363c88c183b0ed7740fca876342cf0474bStephen Hines int res = read(master, buf, sizeof(buf)); 256d1862363c88c183b0ed7740fca876342cf0474bStephen Hines write(1, buf, res); 266d1862363c88c183b0ed7740fca876342cf0474bStephen Hines write(master, "password\n", 9); 276d1862363c88c183b0ed7740fca876342cf0474bStephen Hines while ((res = read(master, buf, sizeof(buf))) > 0) write(1, buf, res); 286d1862363c88c183b0ed7740fca876342cf0474bStephen Hines } else { 296d1862363c88c183b0ed7740fca876342cf0474bStephen Hines char *s = getpass("prompt"); 306d1862363c88c183b0ed7740fca876342cf0474bStephen Hines assert(strcmp(s, "password") == 0); 316d1862363c88c183b0ed7740fca876342cf0474bStephen Hines write(1, "done\n", 5); 326d1862363c88c183b0ed7740fca876342cf0474bStephen Hines } 336d1862363c88c183b0ed7740fca876342cf0474bStephen Hines return 0; 346d1862363c88c183b0ed7740fca876342cf0474bStephen Hines} 356d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 366d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// CHECK: prompt 376d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// CHECK: done 38