summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2014-05-19 13:04:23 +0100
committerPádraig Brady <P@draigBrady.com>2014-05-19 13:30:28 +0100
commiteec20b4e10a8f59a1880c2e05c2ed978ed3c5d3b (patch)
tree065d1ff369e96ace288f991e529de118629f990e /tests
parent97177368709e802a3e5008e1e9687e33f14da35d (diff)
downloadgnulib-eec20b4e10a8f59a1880c2e05c2ed978ed3c5d3b.tar.gz
getlogin_r-tests: avoid false failure under sudo/ssh etc.
* tests/test-getlogin_r.c (main): Sync up with test-getlogin.c changes from commit 97249cf29 to not depend on environment variables.
Diffstat (limited to 'tests')
-rw-r--r--tests/test-getlogin_r.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/tests/test-getlogin_r.c b/tests/test-getlogin_r.c
index ed103c9fc7..fb3f9bffb1 100644
--- a/tests/test-getlogin_r.c
+++ b/tests/test-getlogin_r.c
@@ -63,11 +63,30 @@ main (void)
#if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__)
/* Unix platform */
{
- const char *name = getenv ("LOGNAME");
- if (name == NULL || name[0] == '\0')
- name = getenv ("USER");
- if (name != NULL && name[0] != '\0')
- ASSERT (strcmp (buf, name) == 0);
+# if HAVE_TTYNAME
+ const char *tty;
+ struct stat stat_buf;
+ struct passwd *pwd;
+
+ tty = ttyname (STDIN_FILENO);
+ if (tty == NULL)
+ {
+ fprintf (stderr, "Skipping test: stdin is not a tty.\n");
+ return 77;
+ }
+
+ ASSERT (stat (tty, &stat_buf) == 0);
+
+ pwd = getpwuid (stat_buf.st_uid);
+ if (! pwd)
+ {
+ fprintf (stderr, "Skipping test: no name found for uid %d\n",
+ stat_buf.st_uid);
+ return 77;
+ }
+
+ ASSERT (strcmp (pwd->pw_name, buf) == 0);
+# endif
}
#endif
#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__