Changeset 451a0e07f83d6599e8716c96d353c9737726a91b
- Timestamp:
- 09/09/08 17:08:23
(5 years ago)
- Author:
- Theo Schlossnagle <jesus@omniti.com>
- git-committer:
- Theo Schlossnagle <jesus@omniti.com> 1220980103 +0000
- git-parent:
[6e87939280730807a0a6d7da385a756a72fbde13]
- git-author:
- Theo Schlossnagle <jesus@omniti.com> 1220980103 +0000
- Message:
better detection and correct use of POSIX.1c getpwnam_r
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r1ba4732 |
r451a0e0 |
|
| 10 | 10 | |
|---|
| 11 | 11 | AC_MSG_CHECKING(for POSIX.1c getpwnam_r) |
|---|
| 12 | | AC_TRY_COMPILE([ |
|---|
| | 12 | AC_TRY_LINK([ |
|---|
| 13 | 13 | #include <pwd.h> |
|---|
| 14 | 14 | #include <stdlib.h>], |
|---|
| 15 | | getpwnam_r(NULL,NULL,NULL,0);, |
|---|
| | 15 | getpwnam_r(NULL,NULL,NULL,0,NULL);, |
|---|
| 16 | 16 | AC_DEFINE(HAVE_GETPWNAM_R_POSIX,1,POSIX.1c getpwnam_r) |
|---|
| 17 | 17 | AC_MSG_RESULT(yes), |
|---|
| … | … | |
| 28 | 28 | |
|---|
| 29 | 29 | AC_MSG_CHECKING(for POSIX.1c getgrnam_r) |
|---|
| 30 | | AC_TRY_COMPILE([ |
|---|
| | 30 | AC_TRY_LINK([ |
|---|
| 31 | 31 | #include <grp.h> |
|---|
| 32 | 32 | #include <stdlib.h>], |
|---|
| 33 | | getgrnam_r(NULL,NULL,NULL,0);, |
|---|
| | 33 | getgrnam_r(NULL,NULL,NULL,0,NULL);, |
|---|
| 34 | 34 | AC_DEFINE(HAVE_GETGRNAM_R_POSIX,1,POSIX.1c getgrnam_r) |
|---|
| 35 | 35 | AC_MSG_RESULT(yes), |
|---|
| r66c613e |
r451a0e0 |
|
| 280 | 280 | stropts.h sys/stream.h alloca.h sys/wait.h) |
|---|
| 281 | 281 | |
|---|
| | 282 | AC_CHECK_FUNCS(getpwnam_r) |
|---|
| 282 | 283 | GETPWNAM_R_POSIX |
|---|
| | 284 | AC_CHECK_FUNCS(getgrnam_r) |
|---|
| 283 | 285 | GETGRNAM_R_POSIX |
|---|
| 284 | 286 | |
|---|
| r4bd337d |
r451a0e0 |
|
| 81 | 81 | #undef WORKING_SEM_INIT |
|---|
| 82 | 82 | |
|---|
| | 83 | #undef HAVE_GETPWNAM_R |
|---|
| | 84 | #undef HAVE_GETPWNAM_R_POSIX |
|---|
| | 85 | #undef HAVE_GETGRNAM_R |
|---|
| | 86 | #undef HAVE_GETGRNAM_R_POSIX |
|---|
| | 87 | |
|---|
| 83 | 88 | #ifdef HAVE_STRING_H |
|---|
| 84 | 89 | #include <string.h> |
|---|
| r1ba4732 |
r451a0e0 |
|
| 44 | 44 | char *buf, size_t len) { |
|---|
| 45 | 45 | #ifdef HAVE_GETPWNAM_R_POSIX |
|---|
| 46 | | return getpwnam_r(user, pw, buf, len); |
|---|
| 47 | | #else |
|---|
| 48 | 46 | struct passwd *r; |
|---|
| 49 | 47 | if(0 == getpwnam_r(user, pw, buf, len, &r)) return r; |
|---|
| 50 | 48 | return NULL; |
|---|
| | 49 | #else |
|---|
| | 50 | #if HAVE_GETPWNAM_R |
|---|
| | 51 | return getpwnam_r(user, pw, buf, len); |
|---|
| | 52 | #else |
|---|
| | 53 | return getpwnam(user); |
|---|
| | 54 | #endif |
|---|
| 51 | 55 | #endif |
|---|
| 52 | 56 | } |
|---|
| … | … | |
| 55 | 59 | char *buf, size_t len) { |
|---|
| 56 | 60 | #ifdef HAVE_GETGRNAM_R_POSIX |
|---|
| 57 | | return getgrnam_r(group, gr, buf, len); |
|---|
| 58 | | #else |
|---|
| 59 | 61 | struct group *r; |
|---|
| 60 | 62 | if(0 == getgrnam_r(group, gr, buf, len, &r)) return r; |
|---|
| 61 | 63 | return NULL; |
|---|
| | 64 | #else |
|---|
| | 65 | #ifdef HAVE_GETGRNAM_R |
|---|
| | 66 | return getgrnam_r(group, gr, buf, len); |
|---|
| | 67 | #else |
|---|
| | 68 | return getgrnam(group); |
|---|
| | 69 | #endif |
|---|
| 62 | 70 | #endif |
|---|
| 63 | 71 | } |
|---|
| … | … | |
| 67 | 75 | static long pwnam_buflen = 0; |
|---|
| 68 | 76 | static long grnam_buflen = 0; |
|---|
| 69 | | uid_t uid; |
|---|
| 70 | | gid_t gid; |
|---|
| | 77 | uid_t uid = 0; |
|---|
| | 78 | gid_t gid = 0; |
|---|
| 71 | 79 | |
|---|
| 72 | | if(pwnam_buflen == 0) pwnam_buflen = sysconf(_SC_GETPW_R_SIZE_MAX); |
|---|
| 73 | | if(grnam_buflen == 0) grnam_buflen = sysconf(_SC_GETGR_R_SIZE_MAX); |
|---|
| | 80 | if(pwnam_buflen == 0) |
|---|
| | 81 | #ifdef _SC_GETPW_R_SIZE_MAX |
|---|
| | 82 | pwnam_buflen = sysconf(_SC_GETPW_R_SIZE_MAX); |
|---|
| | 83 | #else |
|---|
| | 84 | pwnam_buflen = 100; /* This shouldn't be used, so size is not important. */ |
|---|
| | 85 | #endif |
|---|
| | 86 | if(grnam_buflen == 0) |
|---|
| | 87 | #ifdef _SC_GETGR_R_SIZE_MAX |
|---|
| | 88 | grnam_buflen = sysconf(_SC_GETGR_R_SIZE_MAX); |
|---|
| | 89 | #else |
|---|
| | 90 | grnam_buflen = 100; |
|---|
| | 91 | #endif |
|---|
| 74 | 92 | |
|---|
| 75 | 93 | if(user) { |
|---|