summaryrefslogtreecommitdiffstats
path: root/compiler-rt/test/sanitizer_common/TestCases/Posix/getpass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'compiler-rt/test/sanitizer_common/TestCases/Posix/getpass.cpp')
-rw-r--r--compiler-rt/test/sanitizer_common/TestCases/Posix/getpass.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/compiler-rt/test/sanitizer_common/TestCases/Posix/getpass.cpp b/compiler-rt/test/sanitizer_common/TestCases/Posix/getpass.cpp
new file mode 100644
index 00000000000..bf198eff91d
--- /dev/null
+++ b/compiler-rt/test/sanitizer_common/TestCases/Posix/getpass.cpp
@@ -0,0 +1,46 @@
+// RUN: %clangxx -O0 -g %s -lutil -o %t && %run %t | FileCheck %s
+
+// REQUIRES: stable-runtime
+// XFAIL: android && asan
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#if __linux__
+#include <pty.h>
+#elif defined(__FreeBSD__)
+#include <libutil.h>
+#include <pwd.h>
+#include <sys/ioctl.h>
+#include <sys/termios.h>
+#include <sys/types.h>
+#else
+#include <util.h>
+#endif
+#include <unistd.h>
+
+int
+main (int argc, char** argv)
+{
+ int master;
+ int pid = forkpty(&master, NULL, NULL, NULL);
+
+ if(pid == -1) {
+ fprintf(stderr, "forkpty failed\n");
+ return 1;
+ } else if (pid > 0) {
+ char buf[1024];
+ int res = read(master, buf, sizeof(buf));
+ write(1, buf, res);
+ write(master, "password\n", 9);
+ while ((res = read(master, buf, sizeof(buf))) > 0) write(1, buf, res);
+ } else {
+ char *s = getpass("prompt");
+ assert(strcmp(s, "password") == 0);
+ write(1, "done\n", 5);
+ }
+ return 0;
+}
+
+// CHECK: prompt
+// CHECK: done
OpenPOWER on IntegriCloud