You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by fu...@apache.org on 2008/06/06 15:49:42 UTC

svn commit: r663941 - in /apr/apr/trunk: include/arch/netware/apr_private.h passwd/apr_getpass.c

Author: fuankg
Date: Fri Jun  6 06:49:41 2008
New Revision: 663941

URL: http://svn.apache.org/viewvc?rev=663941&view=rev
Log:
added usage of threadsafe getpass_r();
enabled HAVE_GETPASS_R for NetWare platform.

Modified:
    apr/apr/trunk/include/arch/netware/apr_private.h
    apr/apr/trunk/passwd/apr_getpass.c

Modified: apr/apr/trunk/include/arch/netware/apr_private.h
URL: http://svn.apache.org/viewvc/apr/apr/trunk/include/arch/netware/apr_private.h?rev=663941&r1=663940&r2=663941&view=diff
==============================================================================
--- apr/apr/trunk/include/arch/netware/apr_private.h (original)
+++ apr/apr/trunk/include/arch/netware/apr_private.h Fri Jun  6 06:49:41 2008
@@ -70,6 +70,15 @@
 
 #define HAVE_WRITEV     1
 
+#define HAVE_GETPASS_R  1
+/*
+ * check for older NDKs which have only the getpassword() function.
+ */
+#include <ndkvers.h>
+#if (CURRENT_NDK_THRESHOLD < 709060000)
+#define getpass_r getpassword
+#endif
+
 /* 64-bit integer conversion function */
 #define APR_INT64_STRFN	      strtoll
 

Modified: apr/apr/trunk/passwd/apr_getpass.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/passwd/apr_getpass.c?rev=663941&r1=663940&r2=663941&view=diff
==============================================================================
--- apr/apr/trunk/passwd/apr_getpass.c (original)
+++ apr/apr/trunk/passwd/apr_getpass.c Fri Jun  6 06:49:41 2008
@@ -70,7 +70,7 @@
 
 #define ERR_OVERFLOW 5
 
-#if !defined(HAVE_GETPASS) && !defined(HAVE_GETPASSPHRASE)
+#if !defined(HAVE_GETPASS) && !defined(HAVE_GETPASSPHRASE) && !defined(HAVE_GETPASS_R)
 
 /* MPE, Win32, NetWare and BeOS all lack a native getpass() */
 
@@ -202,7 +202,7 @@
 
 #endif /* no getchar or _getch */
 
-#endif /* no getpass */
+#endif /* no getpass or getpassphrase or getpass_r */
 
 /*
  * Use the OS getpass() routine (or our own) to obtain a password from
@@ -221,6 +221,11 @@
 
 APR_DECLARE(apr_status_t) apr_password_get(const char *prompt, char *pwbuf, apr_size_t *bufsiz)
 {
+    apr_status_t rv = APR_SUCCESS;
+#if defined(HAVE_GETPASS_R)
+    if (getpass_r(prompt, pwbuf, *bufsiz) == NULL)
+        return APR_EINVAL;
+#else
 #if defined(HAVE_GETPASSPHRASE)
     char *pw_got = getpassphrase(prompt);
 #elif defined(HAVE_GETPASS)
@@ -228,7 +233,6 @@
 #else /* use the replacement implementation above */
     char *pw_got = get_password(prompt);
 #endif
-    apr_status_t rv = APR_SUCCESS;
 
     if (!pw_got)
         return APR_EINVAL;
@@ -237,5 +241,6 @@
     }
     apr_cpystrn(pwbuf, pw_got, *bufsiz);
     memset(pw_got, 0, strlen(pw_got));
+#endif /* HAVE_GETPASS_R */
     return rv;
 }



Re: svn commit: r663941 - in /apr/apr/trunk: include/arch/netware/apr_private.hpasswd/apr_getpass.c

Posted by Guenter Knauf <fu...@apache.org>.
Hi,
I've just introduced getpass_r() in apr_getpass.c, and ifdef'd with HAVE_GETPASS_R;
I need this on NetWare platform where the existing stuff doesnt work properly.
Since getpass_r() should be threadsafe I thought it might be useful for other platforms too;
if not then let me know and I will ifdef with the NETWARE macro.
Please review my changes.

Thanks, Guen.

> Author: fuankg
> Date: Fri Jun  6 06:49:41 2008
> New Revision: 663941

> URL: http://svn.apache.org/viewvc?rev=663941&view=rev
> Log:
> added usage of threadsafe getpass_r();
> enabled HAVE_GETPASS_R for NetWare platform.

> Modified:
>     apr/apr/trunk/include/arch/netware/apr_private.h
>     apr/apr/trunk/passwd/apr_getpass.c

> Modified: apr/apr/trunk/include/arch/netware/apr_private.h
> URL: http://svn.apache.org/viewvc/apr/apr/trunk/include/arch/netware/apr_p
> rivate.h?rev=663941&r1=663940&r2=663941&view=diff
> ==========================================================================
> ====
> --- apr/apr/trunk/include/arch/netware/apr_private.h (original)
> +++ apr/apr/trunk/include/arch/netware/apr_private.h Fri Jun  6 06:49:41
> 2008
> @@ -70,6 +70,15 @@

>  #define HAVE_WRITEV     1

> +#define HAVE_GETPASS_R  1
> +/*
> + * check for older NDKs which have only the getpassword() function.
> + */
> +#include <ndkvers.h>
> +#if (CURRENT_NDK_THRESHOLD < 709060000)
> +#define getpass_r getpassword
> +#endif
> +
>  /* 64-bit integer conversion function */
>  #define APR_INT64_STRFN	      strtoll


> Modified: apr/apr/trunk/passwd/apr_getpass.c
> URL: http://svn.apache.org/viewvc/apr/apr/trunk/passwd/apr_getpass.c?rev=6
> 63941&r1=663940&r2=663941&view=diff
> ==========================================================================
> ====
> --- apr/apr/trunk/passwd/apr_getpass.c (original)
> +++ apr/apr/trunk/passwd/apr_getpass.c Fri Jun  6 06:49:41 2008
> @@ -70,7 +70,7 @@

>  #define ERR_OVERFLOW 5

> -#if !defined(HAVE_GETPASS) && !defined(HAVE_GETPASSPHRASE)
> +#if !defined(HAVE_GETPASS) && !defined(HAVE_GETPASSPHRASE) &&
> !defined(HAVE_GETPASS_R)

>  /* MPE, Win32, NetWare and BeOS all lack a native getpass() */

> @@ -202,7 +202,7 @@

>  #endif /* no getchar or _getch */

> -#endif /* no getpass */
> +#endif /* no getpass or getpassphrase or getpass_r */

>  /*
>   * Use the OS getpass() routine (or our own) to obtain a password from
> @@ -221,6 +221,11 @@

>  APR_DECLARE(apr_status_t) apr_password_get(const char *prompt, char
>  *pwbuf, apr_size_t *bufsiz)
>  {
> +    apr_status_t rv = APR_SUCCESS;
> +#if defined(HAVE_GETPASS_R)
> +    if (getpass_r(prompt, pwbuf, *bufsiz) == NULL)
> +        return APR_EINVAL;
> +#else
>  #if defined(HAVE_GETPASSPHRASE)
>      char *pw_got = getpassphrase(prompt);
>  #elif defined(HAVE_GETPASS)
> @@ -228,7 +233,6 @@
>  #else /* use the replacement implementation above */
>      char *pw_got = get_password(prompt);
>  #endif
> -    apr_status_t rv = APR_SUCCESS;

>      if (!pw_got)
>          return APR_EINVAL;
> @@ -237,5 +241,6 @@
>      }
>      apr_cpystrn(pwbuf, pw_got, *bufsiz);
>      memset(pw_got, 0, strlen(pw_got));
> +#endif /* HAVE_GETPASS_R */
>      return rv;
>  }