PostgreSQL Source Code  git master
user.c File Reference
#include "c.h"
#include <pwd.h>
Include dependency graph for user.c:

Go to the source code of this file.

Functions

bool pg_get_user_name (uid_t user_id, char *buffer, size_t buflen)
 
bool pg_get_user_home_dir (uid_t user_id, char *buffer, size_t buflen)
 

Function Documentation

◆ pg_get_user_home_dir()

bool pg_get_user_home_dir ( uid_t  user_id,
char *  buffer,
size_t  buflen 
)

Definition at line 64 of file user.c.

65 {
66  char pwdbuf[BUFSIZ];
67  struct passwd pwdstr;
68  struct passwd *pw = NULL;
69  int pwerr;
70 
71  pwerr = getpwuid_r(user_id, &pwdstr, pwdbuf, sizeof(pwdbuf), &pw);
72  if (pw != NULL)
73  {
74  strlcpy(buffer, pw->pw_dir, buflen);
75  return true;
76  }
77  if (pwerr != 0)
78  snprintf(buffer, buflen,
79  _("could not look up local user ID %d: %s"),
80  (int) user_id,
81  strerror_r(pwerr, pwdbuf, sizeof(pwdbuf)));
82  else
83  snprintf(buffer, buflen,
84  _("local user with ID %d does not exist"),
85  (int) user_id);
86  return false;
87 }
#define _(x)
Definition: elog.c:90
#define snprintf
Definition: port.h:238
#define strerror_r
Definition: port.h:255
size_t strlcpy(char *dst, const char *src, size_t siz)
Definition: strlcpy.c:45

References _, snprintf, strerror_r, and strlcpy().

Referenced by get_home_path(), and pqGetHomeDirectory().

◆ pg_get_user_name()

bool pg_get_user_name ( uid_t  user_id,
char *  buffer,
size_t  buflen 
)

Definition at line 28 of file user.c.

29 {
30  char pwdbuf[BUFSIZ];
31  struct passwd pwdstr;
32  struct passwd *pw = NULL;
33  int pwerr;
34 
35  pwerr = getpwuid_r(user_id, &pwdstr, pwdbuf, sizeof(pwdbuf), &pw);
36  if (pw != NULL)
37  {
38  strlcpy(buffer, pw->pw_name, buflen);
39  return true;
40  }
41  if (pwerr != 0)
42  snprintf(buffer, buflen,
43  _("could not look up local user ID %d: %s"),
44  (int) user_id,
45  strerror_r(pwerr, pwdbuf, sizeof(pwdbuf)));
46  else
47  snprintf(buffer, buflen,
48  _("local user with ID %d does not exist"),
49  (int) user_id);
50  return false;
51 }

References _, snprintf, strerror_r, and strlcpy().

Referenced by pg_fe_getusername().