PostgreSQL Source Code
git master
Loading...
Searching...
No Matches
username.c
Go to the documentation of this file.
1
/*-------------------------------------------------------------------------
2
*
3
* username.c
4
* get user name
5
*
6
* Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
7
* Portions Copyright (c) 1994, Regents of the University of California
8
*
9
* IDENTIFICATION
10
* src/common/username.c
11
*
12
*-------------------------------------------------------------------------
13
*/
14
15
#ifndef FRONTEND
16
#include "
postgres.h
"
17
#else
18
#include "
postgres_fe.h
"
19
#endif
20
21
#include <
pwd.h
>
22
#include <
unistd.h
>
23
24
#include "
common/username.h
"
25
26
/*
27
* Returns the current user name in a static buffer
28
* On error, returns NULL and sets *errstr to point to a palloc'd message
29
*/
30
const
char
*
31
get_user_name
(
char
**
errstr
)
32
{
33
#ifndef WIN32
34
struct
passwd
*
pw
;
35
uid_t
user_id =
geteuid
();
36
37
*
errstr
=
NULL
;
38
39
errno
= 0;
/* clear errno before call */
40
pw
=
getpwuid
(user_id);
41
if
(!
pw
)
42
{
43
*
errstr
=
psprintf
(
_
(
"could not look up effective user ID %ld: %s"
),
44
(
long
) user_id,
45
errno
?
strerror
(
errno
) :
_
(
"user does not exist"
));
46
return
NULL
;
47
}
48
49
return
pw
->pw_name;
50
#else
51
/* Microsoft recommends buffer size of UNLEN+1, where UNLEN = 256 */
52
/* "static" variable remains after function exit */
53
static
char
username
[256 + 1];
54
DWORD
len
=
sizeof
(
username
);
55
56
*
errstr
=
NULL
;
57
58
if
(!
GetUserName
(
username
, &
len
))
59
{
60
*
errstr
=
psprintf
(
_
(
"user name lookup failure: error code %lu"
),
61
GetLastError
());
62
return
NULL
;
63
}
64
65
return
username
;
66
#endif
67
}
68
69
70
/*
71
* Returns the current user name in a static buffer or exits
72
*/
73
const
char
*
74
get_user_name_or_exit
(
const
char
*
progname
)
75
{
76
const
char
*user_name;
77
char
*
errstr
;
78
79
user_name =
get_user_name
(&
errstr
);
80
81
if
(!user_name)
82
{
83
fprintf
(
stderr
,
"%s: %s\n"
,
progname
,
errstr
);
84
exit
(1);
85
}
86
return
user_name;
87
}
fprintf
#define fprintf(file, fmt, msg)
Definition
cubescan.l:21
_
#define _(x)
Definition
elog.c:91
username
static char * username
Definition
initdb.c:153
progname
const char * progname
Definition
main.c:44
len
const void size_t len
Definition
pg_crc32c_sse42.c:28
strerror
#define strerror
Definition
port.h:273
postgres.h
postgres_fe.h
fb
static int fb(int x)
Definition
preproc-init.c:92
psprintf
char * psprintf(const char *fmt,...)
Definition
psprintf.c:43
pwd.h
unistd.h
get_user_name
const char * get_user_name(char **errstr)
Definition
username.c:31
get_user_name_or_exit
const char * get_user_name_or_exit(const char *progname)
Definition
username.c:74
username.h
uid_t
int uid_t
Definition
win32_port.h:234
src
common
username.c
Generated on Tue Jan 27 2026 06:13:16 for PostgreSQL Source Code by
1.9.8