diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2019-03-02 14:43:34 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2019-03-02 14:43:34 +0300 |
commit | 6c86b85f4ea30662b16e22e1803cc18de2658f4f (patch) | |
tree | 36ee4d7383e4a2c615bea74b4d7ca7da3ef46f03 | |
parent | 40958b0d867849199b38e2e2f04b3b9131a1e322 (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.cc | 14 |
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 { |