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>2019-03-02 14:43:34 +0300
committerCorinna Vinschen <corinna@vinschen.de>2019-03-02 14:43:34 +0300
commit6c86b85f4ea30662b16e22e1803cc18de2658f4f (patch)
tree36ee4d7383e4a2c615bea74b4d7ca7da3ef46f03
parent40958b0d867849199b38e2e2f04b3b9131a1e322 (diff)
Cygwin: ldap: Fix overwriting domain when creating naming context
cyg_ldap::fetch_ad_account creates a naming context from the incoming domain, if it's not NULL. The algorithm overwrites dots with \0 in domain while creating the naming context, but neglects to restore the dots. Fix that by never overwriting the incoming domain name. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--winsup/cygwin/ldap.cc14
1 files changed, 7 insertions, 7 deletions
diff --git a/winsup/cygwin/ldap.cc b/winsup/cygwin/ldap.cc
index 01e892f03..3c9fd13a1 100644
--- a/winsup/cygwin/ldap.cc
+++ b/winsup/cygwin/ldap.cc
@@ -7,6 +7,10 @@ Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
#include "winsup.h"
+#include <lm.h>
+#include <dsgetdc.h>
+#include <iptypes.h>
+#include <sys/param.h>
#include "ldap.h"
#include "cygerrno.h"
#include "security.h"
@@ -16,10 +20,7 @@ details. */
#include "cygheap.h"
#include "registry.h"
#include "pinfo.h"
-#include "lm.h"
-#include "dsgetdc.h"
#include "tls_pbuf.h"
-#include <sys/param.h>
#define CYG_LDAP_ENUM_PAGESIZE 100 /* entries per page */
@@ -452,16 +453,15 @@ cyg_ldap::fetch_ad_account (PSID sid, bool group, PCWSTR domain)
problems, we know what to do. */
base = tp.w_get ();
PWCHAR b = base;
- for (PWCHAR dotp = (PWCHAR) domain; dotp && *dotp; domain = dotp)
+ for (PCWSTR dotp = domain; dotp && *dotp; domain = dotp)
{
dotp = wcschr (domain, L'.');
- if (dotp)
- *dotp++ = L'\0';
if (b > base)
*b++ = L',';
b = wcpcpy (b, L"DC=");
- b = wcpcpy (b, domain);
+ b = dotp ? wcpncpy (b, domain, dotp++ - domain) : wcpcpy (b, domain);
}
+ debug_printf ("naming context <%W>", base);
}
else
{