Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2008-12-15 21:07:35 +0300
committerCorinna Vinschen <corinna@vinschen.de>2008-12-15 21:07:35 +0300
commit63a89e8464e457b89a1905e2e443edd1c7ff1b02 (patch)
treeb612545df6a613f65fed1d0c3e0f88acc5543035
parentfaded04e6c1891797b36fd17166ed03ad6de8d28 (diff)
* setlsapwd.cc (setlsapwd): Simplify code. Only try to call cygserver
if opening local policy fails. Don't treat removing non-existant private data as error.
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/setlsapwd.cc16
2 files changed, 15 insertions, 7 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 0fdc97b15..fdaaf2b99 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,11 @@
2008-12-15 Corinna Vinschen <corinna@vinschen.de>
+ * setlsapwd.cc (setlsapwd): Simplify code. Only try to call cygserver
+ if opening local policy fails. Don't treat removing non-existant
+ private data as error.
+
+2008-12-15 Corinna Vinschen <corinna@vinschen.de>
+
* setlsapwd.cc (setlsapwd): Explicitely erase password buffer content
after usage.
diff --git a/winsup/cygwin/setlsapwd.cc b/winsup/cygwin/setlsapwd.cc
index 401e48768..1efee1dd6 100644
--- a/winsup/cygwin/setlsapwd.cc
+++ b/winsup/cygwin/setlsapwd.cc
@@ -56,8 +56,6 @@ setlsapwd (const char *passwd)
if (!passwd || ! *passwd
|| sys_mbstowcs_alloc (&data_buf, HEAP_NOTHEAP, passwd))
{
- NTSTATUS status = STATUS_ACCESS_DENIED;
-
memset (&data, 0, sizeof data);
if (data_buf)
RtlInitUnicodeString (&data, data_buf);
@@ -65,13 +63,19 @@ setlsapwd (const char *passwd)
if ((lsa = open_local_policy (POLICY_CREATE_SECRET))
!= INVALID_HANDLE_VALUE)
{
- status = LsaStorePrivateData (lsa, &key, data.Length ? &data : NULL);
- if (NT_SUCCESS (status))
+ NTSTATUS status = LsaStorePrivateData (lsa, &key,
+ data.Length ? &data : NULL);
+ /* Success or we're trying to remove a password entry which doesn't
+ exist. */
+ if (NT_SUCCESS (status)
+ || (data.Length == 0 && status == STATUS_OBJECT_NAME_NOT_FOUND))
ret = 0;
+ else
+ __seterrno_from_nt_status (status);
LsaClose (lsa);
}
- if (ret)
#ifdef USE_SERVER
+ else if (ret)
{
/* If that fails, ask cygserver. */
client_request_setpwd request (&data);
@@ -80,8 +84,6 @@ setlsapwd (const char *passwd)
else
ret = 0;
}
-#else
- __seterrno_from_nt_status (status);
#endif
if (data_buf)
{