diff options
author | olli <olli@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2011-03-11 12:12:40 +0000 |
---|---|---|
committer | olli <olli@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2011-03-11 12:12:40 +0000 |
commit | 8757d55d32fca9a07a3434ce8f53d2f6d7d54605 (patch) | |
tree | 0ebf07e7bc836df6cfca84368fda88c8ad14030d /ACE | |
parent | 6560923ab7f2ab855eb5b1320d0b984d6d28c890 (diff) | |
download | ATCD-8757d55d32fca9a07a3434ce8f53d2f6d7d54605.tar.gz |
ChangeLogTag: Fri Mar 11 12:09:00 UTC 2011 Olli Savia <ops@iki.fi>
Diffstat (limited to 'ACE')
-rw-r--r-- | ACE/ChangeLog | 25 | ||||
-rw-r--r-- | ACE/ace/OS_NS_pwd.h | 10 | ||||
-rw-r--r-- | ACE/ace/OS_NS_pwd.inl | 78 | ||||
-rw-r--r-- | ACE/ace/config-aix-5.x.h | 1 | ||||
-rw-r--r-- | ACE/ace/config-cygwin32.h | 2 | ||||
-rw-r--r-- | ACE/ace/config-freebsd.h | 1 | ||||
-rw-r--r-- | ACE/ace/config-hpux-11.00.h | 3 | ||||
-rw-r--r-- | ACE/ace/config-kfreebsd.h | 3 | ||||
-rw-r--r-- | ACE/ace/config-linux.h | 1 | ||||
-rw-r--r-- | ACE/ace/config-lynxos.h | 2 | ||||
-rw-r--r-- | ACE/ace/config-netbsd.h | 1 | ||||
-rw-r--r-- | ACE/ace/config-openbsd.h | 2 | ||||
-rw-r--r-- | ACE/ace/config-openvms.h | 2 | ||||
-rw-r--r-- | ACE/ace/config-rtems.h | 1 | ||||
-rw-r--r-- | ACE/ace/config-sunos5.5.h | 6 | ||||
-rw-r--r-- | ACE/ace/config-win32-interix.h | 1 | ||||
-rw-r--r-- | ACE/tests/OS_Test.cpp | 32 |
17 files changed, 83 insertions, 88 deletions
diff --git a/ACE/ChangeLog b/ACE/ChangeLog index e80a220eb9f..f798736396e 100644 --- a/ACE/ChangeLog +++ b/ACE/ChangeLog @@ -1,3 +1,28 @@ +Fri Mar 11 12:09:00 UTC 2011 Olli Savia <ops@iki.fi> + + * ace/OS_NS_pwd.h: + * ace/OS_NS_pwd.inl: + Rewrote getpwnam_r(). Changed API to conform POSIX. + Fixes Bug #3952. + + * ace/config-aix-5.x.h: + * ace/config-cygwin32.h: + * ace/config-freebsd.h: + * ace/config-hpux-11.00.h: + * ace/config-kfreebsd.h: + * ace/config-linux.h: + * ace/config-lynxos.h: + * ace/config-netbsd.h: + * ace/config-openbsd.h: + * ace/config-openvms.h: + * ace/config-rtems.h: + * ace/config-sunos5.5.h: + * ace/config-win32-interix.h: + Config changes due getpwnam_r() rewrite and API change. + + * tests/OS_Test.cpp: + Added atest for getpwnam_r(). + Thu Mar 10 16:42:30 UTC 2011 Phil Mesnier <mesnier_p@ociweb.com> * bin/fuzz.pl: diff --git a/ACE/ace/OS_NS_pwd.h b/ACE/ace/OS_NS_pwd.h index 7e3bef0907d..252285d88cb 100644 --- a/ACE/ace/OS_NS_pwd.h +++ b/ACE/ace/OS_NS_pwd.h @@ -53,10 +53,12 @@ namespace ACE_OS struct passwd *getpwnam (const char *user); ACE_NAMESPACE_INLINE_FUNCTION - struct passwd *getpwnam_r (const char *name, - struct passwd *pwent, - char *buffer, - int buflen); + int getpwnam_r (const char *name, + struct passwd *pwd, + char *buffer, + size_t bufsize, + struct passwd **result); + ACE_NAMESPACE_INLINE_FUNCTION void setpwent (void); //@} diff --git a/ACE/ace/OS_NS_pwd.inl b/ACE/ace/OS_NS_pwd.inl index 99ece415aa5..b8d03a0e824 100644 --- a/ACE/ace/OS_NS_pwd.inl +++ b/ACE/ace/OS_NS_pwd.inl @@ -37,71 +37,29 @@ ACE_OS::getpwnam (const char *name) #endif /* ACE_LACKS_PWD_FUNCTIONS */ } -ACE_INLINE struct passwd * -ACE_OS::getpwnam_r (const char *name, struct passwd *pwent, - char *buffer, int buflen) +ACE_INLINE int +ACE_OS::getpwnam_r (const char *name, + struct passwd *pwd, + char *buffer, + size_t bufsize, + struct passwd **result) { -#if defined (ACE_HAS_POSIX_GETPWNAM_R) - struct passwd *result = 0; - - int const status = ::getpwnam_r (name, pwent, buffer, buflen, &result); - - if (status != 0) - { - errno = status; - result = 0; - } - return result; -#elif !defined (ACE_LACKS_PWD_FUNCTIONS) -# if defined (ACE_HAS_REENTRANT_FUNCTIONS) -# if !defined (ACE_LACKS_PWD_REENTRANT_FUNCTIONS) -# if defined (ACE_HAS_PTHREADS) && \ - !defined (ACE_HAS_STHREADS) || \ - defined (HPUX_11) - struct passwd *result = 0; - int status; - // VAC++ doesn't correctly grok the ::getpwnam_r - the function is redefined - // in pwd.h, and that redefinition is used here -# if defined (__IBMCPP__) && (__IBMCPP__ >= 400) /* VAC++ 4 */ - status = _posix_getpwnam_r (name, pwent, buffer, buflen, &result); -# else - status = ::getpwnam_r (name, pwent, buffer, buflen, &result); -# endif /* __IBMCPP__ && (__IBMCPP__ >= 400) */ - if (status != 0) - { - errno = status; - result = 0; - } - return result; -# elif defined (AIX) - if (::getpwnam_r (name, pwent, buffer, buflen) == -1) - return 0; - else - return pwent; -# else - return ::getpwnam_r (name, pwent, buffer, buflen); -# endif /* ACE_HAS_PTHREADS */ -# else - ACE_UNUSED_ARG (name); - ACE_UNUSED_ARG (pwent); - ACE_UNUSED_ARG (buffer); - ACE_UNUSED_ARG (buflen); - ACE_NOTSUP_RETURN (0); -# endif /* ! ACE_LACKS_PWD_REENTRANT_FUNCTIONS */ -# else +#if defined (ACE_LACKS_PWD_FUNCTIONS) ACE_UNUSED_ARG (name); - ACE_UNUSED_ARG (pwent); + ACE_UNUSED_ARG (pwd); ACE_UNUSED_ARG (buffer); - ACE_UNUSED_ARG (buflen); + ACE_UNUSED_ARG (bufsize); + ACE_UNUSED_ARG (result); ACE_NOTSUP_RETURN (0); -# endif /* ACE_HAS_REENTRANT_FUNCTIONS */ +#elif defined (ACE_HAS_NONSTD_GETPWNAM_R) + if (::getpwnam_r (pwd, const_cast<char*>(name), buffer, bufsize) == -1) + return -1; + + *result = pwd; + return 0; #else - ACE_UNUSED_ARG (name); - ACE_UNUSED_ARG (pwent); - ACE_UNUSED_ARG (buffer); - ACE_UNUSED_ARG (buflen); - ACE_NOTSUP_RETURN (0); -#endif /* ACE_HAS_POSIX_GETPWNAM_R */ + return ::getpwnam_r (name, pwd, buffer, bufsize, result); +#endif /* ACE_LACKS_PWD_FUNCTIONS */ } ACE_INLINE void diff --git a/ACE/ace/config-aix-5.x.h b/ACE/ace/config-aix-5.x.h index 56cbe17ff14..04869085c1d 100644 --- a/ACE/ace/config-aix-5.x.h +++ b/ACE/ace/config-aix-5.x.h @@ -312,7 +312,6 @@ #undef ACE_LACKS_NETINET_TCP_H #define ACE_HAS_3_PARAM_READDIR_R -#define ACE_HAS_POSIX_GETPWNAM_R #define ACE_HAS_SCANDIR #define ACE_SCANDIR_CMP_USES_VOIDPTR #define ACE_SCANDIR_SEL_LACKS_CONST diff --git a/ACE/ace/config-cygwin32.h b/ACE/ace/config-cygwin32.h index e075b51c3e2..198da4f12a9 100644 --- a/ACE/ace/config-cygwin32.h +++ b/ACE/ace/config-cygwin32.h @@ -64,7 +64,6 @@ #define ACE_HAS_VOIDPTR_SOCKOPT 1 #define ACE_HAS_UALARM 1 #define ACE_HAS_STRNLEN 1 -#define ACE_HAS_POSIX_GETPWNAM_R 1 #define ACE_HAS_POSIX_NONBLOCK 1 #define ACE_HAS_POSIX_TIME #define ACE_HAS_CLOCK_GETTIME 1 @@ -73,7 +72,6 @@ #define ACE_DEFAULT_BASE_ADDR ((char *) 0x8000000) #define ACE_HAS_NONCONST_SELECT_TIMEVAL #define ACE_HAS_SVR4_DYNAMIC_LINKING -//#define ACE_HAS_SYSV_IPC #define ACE_HAS_VOIDPTR_MMAP #define ACE_HAS_CPLUSPLUS_HEADERS #define ACE_HAS_POLL diff --git a/ACE/ace/config-freebsd.h b/ACE/ace/config-freebsd.h index b5a156d8bdd..6c85b1784ce 100644 --- a/ACE/ace/config-freebsd.h +++ b/ACE/ace/config-freebsd.h @@ -160,7 +160,6 @@ enum schedparam_policy { #if (__FreeBSD_version < 501000) # define ACE_LACKS_STDINT_H -# define ACE_LACKS_PWD_REENTRANT_FUNCTIONS #endif #if (__FreeBSD_version >= 501000) diff --git a/ACE/ace/config-hpux-11.00.h b/ACE/ace/config-hpux-11.00.h index f8a6166c094..eabd4a4bb20 100644 --- a/ACE/ace/config-hpux-11.00.h +++ b/ACE/ace/config-hpux-11.00.h @@ -205,9 +205,6 @@ // Compiler/platform supports poll(). #define ACE_HAS_POLL -/* Platform supports POSIX getpwnam_r() function */ -#define ACE_HAS_POSIX_GETPWNAM_R 1 - // Platform supports POSIX O_NONBLOCK semantics. #define ACE_HAS_POSIX_NONBLOCK diff --git a/ACE/ace/config-kfreebsd.h b/ACE/ace/config-kfreebsd.h index ffb0ce436f3..59d02857d96 100644 --- a/ACE/ace/config-kfreebsd.h +++ b/ACE/ace/config-kfreebsd.h @@ -153,9 +153,6 @@ /* Platform contains <poll.h> */ #define ACE_HAS_POLL 1 -/* Platform supports POSIX getpwnam_r() function */ -#define ACE_HAS_POSIX_GETPWNAM_R 1 - /* Platform supports POSIX O_NONBLOCK semantics */ #define ACE_HAS_POSIX_NONBLOCK 1 diff --git a/ACE/ace/config-linux.h b/ACE/ace/config-linux.h index b29b896b9e1..fcc2d124133 100644 --- a/ACE/ace/config-linux.h +++ b/ACE/ace/config-linux.h @@ -26,7 +26,6 @@ #define ACE_HAS_THREAD_SPECIFIC_STORAGE #define ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS #define ACE_HAS_2_PARAM_ASCTIME_R_AND_CTIME_R -#define ACE_HAS_POSIX_GETPWNAM_R #define ACE_HAS_REENTRANT_FUNCTIONS #include /**/ "ace/post.h" diff --git a/ACE/ace/config-lynxos.h b/ACE/ace/config-lynxos.h index 0af94f525c1..a28545a4db4 100644 --- a/ACE/ace/config-lynxos.h +++ b/ACE/ace/config-lynxos.h @@ -101,7 +101,6 @@ #define ACE_LACKS_MKTEMP_PROTOTYPE #define ACE_LACKS_NETDB_REENTRANT_FUNCTIONS #define ACE_LACKS_PUTENV_PROTOTYPE -#define ACE_LACKS_PWD_REENTRANT_FUNCTIONS /*fixme */ #define ACE_LACKS_REALPATH #define ACE_LACKS_RLIMIT_NOFILE #define ACE_LACKS_RWLOCK_T @@ -169,6 +168,7 @@ #else // LynxOS 5.0 Removals # define ACE_HAS_LYNXOS4_SIGNALS +# define ACE_HAS_NONSTD_GETPWNAM_R # define ACE_HAS_SEMUN # define ACE_HAS_STRBUF_T # define ACE_HAS_SYSV_IPC diff --git a/ACE/ace/config-netbsd.h b/ACE/ace/config-netbsd.h index 4f35fc5db32..e4a2fd160c1 100644 --- a/ACE/ace/config-netbsd.h +++ b/ACE/ace/config-netbsd.h @@ -103,7 +103,6 @@ #define ACE_LACKS_PRI_T 1 #define ACE_LACKS_PTHREAD_THR_SIGSETMASK 1 #define ACE_LACKS_PTHREAD_YIELD 1 -#define ACE_LACKS_PWD_REENTRANT_FUNCTIONS 1 #define ACE_LACKS_RWLOCKATTR_PSHARED 1 #define ACE_LACKS_RWLOCK_T 1 #define ACE_LACKS_SETSCHED 1 diff --git a/ACE/ace/config-openbsd.h b/ACE/ace/config-openbsd.h index 5f972e206d4..097c135781c 100644 --- a/ACE/ace/config-openbsd.h +++ b/ACE/ace/config-openbsd.h @@ -53,7 +53,6 @@ #define ACE_HAS_NONCONST_SELECT_TIMEVAL #define ACE_HAS_NONCONST_SWAB #define ACE_HAS_POLL -#define ACE_HAS_POSIX_GETPWNAM_R #define ACE_HAS_POSIX_NONBLOCK #define ACE_HAS_POSIX_TIME #define ACE_HAS_PTHREADS_STD @@ -121,7 +120,6 @@ #define ACE_LACKS_PERFECT_MULTICAST_FILTERING #define ACE_LACKS_PRI_T #define ACE_LACKS_PTHREAD_THR_SIGSETMASK -#define ACE_LACKS_PWD_REENTRANT_FUNCTIONS #define ACE_LACKS_RAND_REENTRANT_FUNCTIONS #define ACE_LACKS_RLIMIT_PROTOTYPE #define ACE_LACKS_RWLOCK_T diff --git a/ACE/ace/config-openvms.h b/ACE/ace/config-openvms.h index 61e31f7bcc0..2bd63db5646 100644 --- a/ACE/ace/config-openvms.h +++ b/ACE/ace/config-openvms.h @@ -87,7 +87,7 @@ #define ACE_LACKS_SYMLINKS 1 -#define ACE_LACKS_PWD_REENTRANT_FUNCTIONS 1 +#define ACE_HAS_NONSTD_GETPWNAM_R #define ACE_LACKS_RAND_REENTRANT_FUNCTIONS 1 #define ACE_HAS_P_READ_WRITE diff --git a/ACE/ace/config-rtems.h b/ACE/ace/config-rtems.h index f32098da5c6..f1e7a6cbf5a 100644 --- a/ACE/ace/config-rtems.h +++ b/ACE/ace/config-rtems.h @@ -76,7 +76,6 @@ # define ACE_HAS_PTHREAD_SCHEDPARAM # define ACE_LACKS_THREAD_PROCESS_SCOPING #else -# define ACE_HAS_POSIX_GETPWNAM_R # define ACE_HAS_2_PARAM_ASCTIME_R_AND_CTIME_R #endif diff --git a/ACE/ace/config-sunos5.5.h b/ACE/ace/config-sunos5.5.h index 8a827749816..6591a7a8c73 100644 --- a/ACE/ace/config-sunos5.5.h +++ b/ACE/ace/config-sunos5.5.h @@ -282,12 +282,6 @@ # define ACE_HAS_CHARPTR_SHMDT #endif -// Platform has posix getpwnam_r -#if (defined (_POSIX_C_SOURCE) && _POSIX_C_SOURCE - 0 >= 199506L) || \ - defined(_POSIX_PTHREAD_SEMANTICS) -# define ACE_HAS_POSIX_GETPWNAM_R -#endif /* _POSIX_C_SOURCE || _POSIX_PTHREAD_SEMANTICS */ - #if !defined (ACE_MT_SAFE) || (ACE_MT_SAFE == 1) #if defined (_REENTRANT) || \ (defined (_POSIX_C_SOURCE) && (_POSIX_C_SOURCE - 0 >= 199506L)) || \ diff --git a/ACE/ace/config-win32-interix.h b/ACE/ace/config-win32-interix.h index 2e031bf91fe..030255c4102 100644 --- a/ACE/ace/config-win32-interix.h +++ b/ACE/ace/config-win32-interix.h @@ -33,7 +33,6 @@ #define ACE_HAS_NEW_NO_H #define ACE_HAS_NONCONST_SELECT_TIMEVAL #define ACE_HAS_POLL -#define ACE_HAS_POSIX_GETPWNAM_R #define ACE_HAS_POSIX_NONBLOCK #define ACE_HAS_POSIX_TIME #define ACE_HAS_PTHREADS_STD diff --git a/ACE/tests/OS_Test.cpp b/ACE/tests/OS_Test.cpp index 700d640b8c9..f77b042d454 100644 --- a/ACE/tests/OS_Test.cpp +++ b/ACE/tests/OS_Test.cpp @@ -648,6 +648,35 @@ snprintf_test (void) } static int +getpwnam_r_test (void) +{ + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Testing getpwnam_r\n"))); + + int result = 0; + + struct passwd pwd; + struct passwd *pwd_ptr; + char buf[1024]; + + if (ACE_OS::getpwnam_r (getlogin (), + &pwd, + buf, + sizeof (buf), + &pwd_ptr) != 0) + { + result = 1; + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("getpwnam_r() failed\n"))); + } + else + { + ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" User '%s' has uid=%d and gid=%d\n"), + pwd_ptr->pw_name, pwd_ptr->pw_uid, pwd_ptr->pw_gid)); + } + + return result; +} + +static int ctime_r_test (void) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Testing ctime_r\n"))); @@ -1346,6 +1375,9 @@ run_main (int, ACE_TCHAR *[]) status = result; #endif /* !ACE_LACKS_VSNPRINTF || ACE_HAS_TRIO */ + if ((result = getpwnam_r_test ()) != 0) + status = result; + if ((result = ctime_r_test ()) != 0) status = result; |