diff options
author | Brent Cook <bcook@openbsd.org> | 2015-02-16 22:19:01 -0600 |
---|---|---|
committer | Brent Cook <bcook@openbsd.org> | 2015-02-16 22:30:27 -0600 |
commit | adc416e922f98b4b52093f26c91216e3b4106f3d (patch) | |
tree | fbadeb7715964afeacb5a066d7e94933b6eb15f2 | |
parent | ad7ac48d030b5ba7b8449bf3621b817affe3190f (diff) | |
download | portable-adc416e922f98b4b52093f26c91216e3b4106f3d.tar.gz portable-adc416e922f98b4b52093f26c91216e3b4106f3d.tar.bz2 portable-adc416e922f98b4b52093f26c91216e3b4106f3d.zip |
remove getuid/getgid fallbacks from hp-ux issetugid emulation
Fail closed if we cannot obtain the process flags. Noticed while looking
at a similar function for AIX.
-rw-r--r-- | crypto/compat/issetugid_hpux.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/crypto/compat/issetugid_hpux.c b/crypto/compat/issetugid_hpux.c index 73def9b..ca0e42c 100644 --- a/crypto/compat/issetugid_hpux.c +++ b/crypto/compat/issetugid_hpux.c | |||
@@ -4,23 +4,14 @@ | |||
4 | 4 | ||
5 | /* | 5 | /* |
6 | * HP-UX does not have issetugid(). | 6 | * HP-UX does not have issetugid(). |
7 | * This experimental implementation uses pstat_getproc() and get*id(). | 7 | * Use pstat_getproc() and check PS_CHANGEDPRIV bit of pst_flag. If this call |
8 | * First, try pstat_getproc() and check PS_CHANGEDPRIV bit of pst_flag. | 8 | * cannot be used, assume we must be running in a privileged environment. |
9 | * In case unsuccessful calling pstat_getproc(), using get*id(). | ||
10 | * | ||
11 | */ | 9 | */ |
12 | int issetugid(void) | 10 | int issetugid(void) |
13 | { | 11 | { |
14 | struct pst_status buf; | 12 | struct pst_status buf; |
15 | if(pstat_getproc(&buf, sizeof(buf), 0, getpid()) != 1) { | 13 | if (pstat_getproc(&buf, sizeof(buf), 0, getpid()) == 1 && |
16 | perror("pstat_getproc()"); | 14 | !(buf.pst_flag & PS_CHANGEDPRIV)) |
17 | } else { | 15 | return 0; |
18 | if(buf.pst_flag & PS_CHANGEDPRIV) | 16 | return 1; |
19 | return 1; | ||
20 | } | ||
21 | if(getuid() != geteuid()) | ||
22 | return 1; | ||
23 | if(getgid() != getegid()) | ||
24 | return 1; | ||
25 | return 0; | ||
26 | } | 17 | } |