From: Volker Lendecke Date: Thu, 10 Apr 2008 09:52:44 +0000 (+0200) Subject: Also accept 0x15 getdc replies X-Git-Tag: samba-3.3.0pre1~2763 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=79bc6796b81395d591fc6ef389f153dd981fe68b;p=thirdparty%2Fsamba.git Also accept 0x15 getdc replies My NT4SP6 which my DC here trusts sends 0x15 instead of 0x13, from looking at the sniff at least the DC name is at the same place. --- diff --git a/source/winbindd/winbindd_cm.c b/source/winbindd/winbindd_cm.c index 80261862b10..8e275b22698 100644 --- a/source/winbindd/winbindd_cm.c +++ b/source/winbindd/winbindd_cm.c @@ -1145,28 +1145,31 @@ static bool receive_getdc_response(struct sockaddr_storage *dc_ss, /* This should be (buf-4)+SVAL(buf-4, smb_vwv12)... */ p = buf+SVAL(buf, smb_vwv10); - if (CVAL(p,0) != SAMLOGON_R) { - DEBUG(8, ("GetDC got invalid response type %d\n", CVAL(p, 0))); - return False; - } + switch (CVAL(p, 0)) { + case SAMLOGON_R: + case SAMLOGON_UNK_R: + p+=2; + pull_ucs2(buf, dcname, p, sizeof(dcname), PTR_DIFF(buf+len, p), + STR_TERMINATE|STR_NOALIGN); + p = skip_unibuf(p, PTR_DIFF(buf+len, p)); + pull_ucs2(buf, user, p, sizeof(user), PTR_DIFF(buf+len, p), + STR_TERMINATE|STR_NOALIGN); + p = skip_unibuf(p, PTR_DIFF(buf+len, p)); + pull_ucs2(buf, domain, p, sizeof(domain), PTR_DIFF(buf+len, p), + STR_TERMINATE|STR_NOALIGN); + p = skip_unibuf(p, PTR_DIFF(buf+len, p)); + + if (!strequal(domain, domain_name)) { + DEBUG(3, ("GetDC: Expected domain %s, got %s\n", + domain_name, domain)); + return False; + } + break; - p+=2; - pull_ucs2(buf, dcname, p, sizeof(dcname), PTR_DIFF(buf+len, p), - STR_TERMINATE|STR_NOALIGN); - p = skip_unibuf(p, PTR_DIFF(buf+len, p)); - pull_ucs2(buf, user, p, sizeof(dcname), PTR_DIFF(buf+len, p), - STR_TERMINATE|STR_NOALIGN); - p = skip_unibuf(p, PTR_DIFF(buf+len, p)); - pull_ucs2(buf, domain, p, sizeof(dcname), PTR_DIFF(buf+len, p), - STR_TERMINATE|STR_NOALIGN); - p = skip_unibuf(p, PTR_DIFF(buf+len, p)); - - if (!strequal(domain, domain_name)) { - DEBUG(3, ("GetDC: Expected domain %s, got %s\n", - domain_name, domain)); + default: + DEBUG(8, ("GetDC got invalid response type %d\n", CVAL(p, 0))); return False; } - p = dcname; if (*p == '\\') p += 1; if (*p == '\\') p += 1;