about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/getlogin_r.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/getlogin_r.c')
-rw-r--r--sysdeps/unix/sysv/linux/getlogin_r.c120
1 files changed, 0 insertions, 120 deletions
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
deleted file mode 100644
index 05ac36b491..0000000000
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright (C) 2010-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <pwd.h>
-#include <unistd.h>
-#include <not-cancel.h>
-
-#define STATIC static
-static int getlogin_r_fd0 (char *name, size_t namesize);
-#define __getlogin_r getlogin_r_fd0
-#include <sysdeps/unix/getlogin_r.c>
-#undef __getlogin_r
-
-
-/* Try to determine login name from /proc/self/loginuid and return 0
-   if successful.  If /proc/self/loginuid cannot be read return -1.
-   Otherwise return the error number.  */
-
-int
-attribute_hidden
-__getlogin_r_loginuid (char *name, size_t namesize)
-{
-  int fd = open_not_cancel_2 ("/proc/self/loginuid", O_RDONLY);
-  if (fd == -1)
-    return -1;
-
-  /* We are reading a 32-bit number.  12 bytes are enough for the text
-     representation.  If not, something is wrong.  */
-  char uidbuf[12];
-  ssize_t n = TEMP_FAILURE_RETRY (read_not_cancel (fd, uidbuf,
-						   sizeof (uidbuf)));
-  close_not_cancel_no_status (fd);
-
-  uid_t uid;
-  char *endp;
-  if (n <= 0
-      || n == sizeof (uidbuf)
-      || (uidbuf[n] = '\0',
-	  uid = strtoul (uidbuf, &endp, 10),
-	  endp == uidbuf || *endp != '\0'))
-    return -1;
-
-  size_t buflen = 1024;
-  char *buf = alloca (buflen);
-  bool use_malloc = false;
-  struct passwd pwd;
-  struct passwd *tpwd;
-  int result = 0;
-  int res;
-
-  while ((res = __getpwuid_r (uid, &pwd, buf, buflen, &tpwd)) == ERANGE)
-    if (__libc_use_alloca (2 * buflen))
-      buf = extend_alloca (buf, buflen, 2 * buflen);
-    else
-      {
-	buflen *= 2;
-	char *newp = realloc (use_malloc ? buf : NULL, buflen);
-	if (newp == NULL)
-	  {
-	    result = ENOMEM;
-	    goto out;
-	  }
-	buf = newp;
-	use_malloc = true;
-      }
-
-  if (res != 0 || tpwd == NULL)
-    {
-      result = -1;
-      goto out;
-    }
-
-  size_t needed = strlen (pwd.pw_name) + 1;
-  if (needed > namesize)
-    {
-      __set_errno (ERANGE);
-      result = ERANGE;
-      goto out;
-    }
-
-  memcpy (name, pwd.pw_name, needed);
-
- out:
-  if (use_malloc)
-    free (buf);
-
-  return result;
-}
-
-
-/* Return at most NAME_LEN characters of the login name of the user in NAME.
-   If it cannot be determined or some other error occurred, return the error
-   code.  Otherwise return 0.  */
-
-int
-__getlogin_r (char *name, size_t namesize)
-{
-  int res = __getlogin_r_loginuid (name, namesize);
-  if (res >= 0)
-    return res;
-
-  return getlogin_r_fd0 (name, namesize);
-}
-libc_hidden_def (__getlogin_r)
-weak_alias (__getlogin_r, getlogin_r)
-libc_hidden_weak (getlogin_r)