[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha8-1248-g9b844e7

Günther Deschner gd at samba.org
Fri Aug 28 02:06:44 MDT 2009


The branch, master has been updated
       via  9b844e7ff3ea512c4967dbdaba07b36ab187a704 (commit)
       via  b4a860ba81441e6e5be5eb82031151c09796f898 (commit)
       via  e65a3cb0db7ac079c4667d3bc7b56bfb19a89f7a (commit)
       via  c3a6f288476a285e7039bf35da83f31bac46d075 (commit)
       via  4e7edc7906aa0ec260ad2e1faf5e414b968a6310 (commit)
       via  d4d2b42a921af11dc34ce48b8f4668171e388f95 (commit)
       via  ff7958394c4729a5e194795b19cb863e9b31ebb0 (commit)
      from  76d91156c82e20bbd68c752376cb814d71759033 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 9b844e7ff3ea512c4967dbdaba07b36ab187a704
Author: Günther Deschner <gd at samba.org>
Date:   Fri Aug 14 01:01:21 2009 +0200

    ntlmssp: add NTLMSSP_MESSAGE_SIGNATURE to IDL.
    
    Guenther

commit b4a860ba81441e6e5be5eb82031151c09796f898
Author: Günther Deschner <gd at samba.org>
Date:   Wed Aug 12 23:18:52 2009 +0200

    ntlmssp: add AUTHENTICATE_MESSAGE to idl.
    
    Guenther

commit e65a3cb0db7ac079c4667d3bc7b56bfb19a89f7a
Author: Günther Deschner <gd at samba.org>
Date:   Wed Aug 12 18:14:31 2009 +0200

    ntlmssp: add CHALLENGE_MESSAGE to IDL.
    
    Guenther

commit c3a6f288476a285e7039bf35da83f31bac46d075
Author: Günther Deschner <gd at samba.org>
Date:   Fri Aug 14 00:31:53 2009 +0200

    ntlmssp: add NEGOTIATE_MESSAGE to IDL.
    
    Guenther

commit 4e7edc7906aa0ec260ad2e1faf5e414b968a6310
Author: Günther Deschner <gd at samba.org>
Date:   Fri Aug 14 00:48:58 2009 +0200

    ntlmssp: add string helper functions to handle OEM and UNICODE charset.
    
    Guenther

commit d4d2b42a921af11dc34ce48b8f4668171e388f95
Author: Günther Deschner <gd at samba.org>
Date:   Thu Aug 13 17:11:07 2009 +0200

    ntlmssp: add ntlmssp helper skeleton.
    
    Guenther

commit ff7958394c4729a5e194795b19cb863e9b31ebb0
Author: Günther Deschner <gd at samba.org>
Date:   Wed Aug 12 15:23:28 2009 +0200

    ntlmssp: add IDL.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 librpc/idl/ntlmssp.idl   |  273 ++++++++++++++++++++++++++++++++++++++++++++++
 librpc/ndr/ndr_ntlmssp.c |  109 ++++++++++++++++++
 librpc/ndr/ndr_ntlmssp.h |   25 ++++
 3 files changed, 407 insertions(+), 0 deletions(-)
 create mode 100644 librpc/idl/ntlmssp.idl
 create mode 100644 librpc/ndr/ndr_ntlmssp.c
 create mode 100644 librpc/ndr/ndr_ntlmssp.h


Changeset truncated at 500 lines:

diff --git a/librpc/idl/ntlmssp.idl b/librpc/idl/ntlmssp.idl
new file mode 100644
index 0000000..dd42da0
--- /dev/null
+++ b/librpc/idl/ntlmssp.idl
@@ -0,0 +1,273 @@
+#include "idl_types.h"
+
+/*
+  ntlmssp interface definition
+*/
+
+[
+	pointer_default(unique),
+	helper("../librpc/ndr/ndr_ntlmssp.h")
+]
+interface ntlmssp
+{
+	typedef [v1_enum] enum {
+		NtLmNegotiate		= 0x00000001,
+		NtLmChallenge		= 0x00000002,
+		NtLmAuthenticate	= 0x00000003
+	} ntlmssp_MessageType;
+
+	typedef [bitmap32bit] bitmap {
+		NTLMSSP_NEGOTIATE_UNICODE			= 0x00000001,
+		NTLMSSP_NEGOTIATE_OEM				= 0x00000002, /* NTLM_NEGOTIATE_OEM in MS-NLMP */
+		NTLMSSP_REQUEST_TARGET				= 0x00000004,
+		NTLMSSP_NEGOTIATE_SIGN				= 0x00000010, /* Message integrity */
+		NTLMSSP_NEGOTIATE_SEAL				= 0x00000020, /* Message confidentiality */
+		NTLMSSP_NEGOTIATE_DATAGRAM			= 0x00000040,
+		NTLMSSP_NEGOTIATE_LM_KEY			= 0x00000080,
+		NTLMSSP_NEGOTIATE_NETWARE			= 0x00000100, /* not mentioned in MS-NLMP */
+		NTLMSSP_NEGOTIATE_NTLM				= 0x00000200,
+		NTLMSSP_NEGOTIATE_NT_ONLY			= 0x00000400,
+		NTLMSSP_ANONYMOUS				= 0x00000800, /* no symbol name in MS-NLMP */
+		NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED		= 0x00001000,
+		NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED	= 0x00002000,
+		NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL		= 0x00004000, /* not mentioned in MS-NLMP */
+		NTLMSSP_NEGOTIATE_ALWAYS_SIGN			= 0x00008000,
+		NTLMSSP_TARGET_TYPE_DOMAIN			= 0x00010000,
+		NTLMSSP_TARGET_TYPE_SERVER			= 0x00020000,
+		NTLMSSP_TARGET_TYPE_SHARE			= 0x00040000,
+		NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY	= 0x00080000,
+		NTLMSSP_NEGOTIATE_IDENTIFY			= 0x00100000,
+		NTLMSSP_REQUEST_NON_NT_SESSION_KEY		= 0x00400000,
+		NTLMSSP_NEGOTIATE_TARGET_INFO			= 0x00800000,
+		NTLMSSP_NEGOTIATE_VERSION			= 0x02000000,
+		NTLMSSP_NEGOTIATE_128				= 0x20000000, /* 128-bit encryption */
+		NTLMSSP_NEGOTIATE_KEY_EXCH			= 0x40000000,
+		NTLMSSP_NEGOTIATE_56				= 0x80000000
+	} NEGOTIATE;
+
+	/* convenience mapping */
+	const int NTLMSSP_NEGOTIATE_NTLM2 = NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY;
+
+	/*
+	   NTLMSSP_WINDOWS_MAJOR_VERSION_5: Windows XP SP2 and Server 2003
+	   NTLMSSP_WINDOWS_MAJOR_VERSION_6: Windows Vista, Server 2008, 7 and Server 2008 R2
+	 */
+
+	typedef [enum8bit] enum {
+		NTLMSSP_WINDOWS_MAJOR_VERSION_5	= 0x05,
+		NTLMSSP_WINDOWS_MAJOR_VERSION_6	= 0x06
+	} ntlmssp_WindowsMajorVersion;
+
+	/*
+	   NTLMSSP_WINDOWS_MINOR_VERSION_0: Windows Vista, Server 2008, 7, Server 2008 R2
+	   NTLMSSP_WINDOWS_MINOR_VERSION_1: Windows XP SP2
+	   NTLMSSP_WINDOWS_MINOR_VERSION_2: Windows Server 2003
+	 */
+
+	typedef [enum8bit] enum {
+		NTLMSSP_WINDOWS_MINOR_VERSION_0	= 0x00,
+		NTLMSSP_WINDOWS_MINOR_VERSION_1	= 0x01,
+		NTLMSSP_WINDOWS_MINOR_VERSION_2	= 0x02
+	} ntlmssp_WindowsMinorVersion;
+
+	/*
+	   NTLMSSP_REVISION_W2K3_RC1:
+	   NTLMSSP_REVISION_W2K3: Windows XP SP2, Server 2003, Vista, Server 2008, 7, Server 2008 R2
+	 */
+
+	typedef [enum8bit] enum {
+		NTLMSSP_REVISION_W2K3_RC1	= 0x0A,
+		NTLMSSP_REVISION_W2K3		= 0x0F
+	} ntlmssp_NTLMRevisionCurrent;
+
+	typedef struct {
+		ntlmssp_WindowsMajorVersion ProductMajorVersion;
+		ntlmssp_WindowsMinorVersion ProductMinorVersion;
+		uint16 ProductBuild;
+		uint8 Reserved[3];
+		ntlmssp_NTLMRevisionCurrent NTLMRevisionCurrent;
+	} VERSION;
+
+	typedef [nodiscriminant] union {
+		[case(NTLMSSP_NEGOTIATE_VERSION)] VERSION version;
+		[default];
+	} ntlmssp_Version;
+
+	/* NTLMSSP negotiate message */
+
+	typedef [public] struct {
+		[charset(DOS),value("NTLMSSP")] uint8 Signature[8];
+		[value(NtLmNegotiate)] ntlmssp_MessageType MessageType;
+		NEGOTIATE NegotiateFlags;
+		[value(strlen(DomainName))] uint16 DomainNameLen;
+		[value(DomainNameLen)] uint16 DomainNameMaxLen;
+		[relative] [subcontext(0),subcontext_size(DomainNameLen)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM))] string *DomainName;
+		[value(strlen(Workstation))] uint16 WorkstationLen;
+		[value(WorkstationLen)] uint16 WorkstationMaxLen;
+		[relative] [subcontext(0),subcontext_size(WorkstationLen)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM))] string *Workstation;
+		[switch_is(NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)] ntlmssp_Version Version;
+	} NEGOTIATE_MESSAGE;
+
+	typedef enum {
+		MsvAvEOL		= 0,
+		MsvAvNbComputerName	= 1,
+		MsvAvNbDomainName	= 2,
+		MsvAvDnsComputerName	= 3,
+		MsvAvDnsDomainName	= 4,
+		MsvAvDnsTreeName	= 5,
+		MsvAvFlags		= 6,
+		MsvAvTimestamp		= 7,
+		MsAvRestrictions	= 8,
+		MsvAvTargetName		= 9,
+		MsvChannelBindings	= 10
+	} ntlmssp_AvId;
+
+	typedef struct {
+		uint32 Size;
+		[value(0)] uint32 Z4;
+		boolean32 IntegrityLevel;
+		uint32 SubjectIntegrityLevel;
+		uint8 MachineId[32];
+	} Restriction_Encoding;
+
+	typedef [bitmap32bit] bitmap {
+		NTLMSSP_AVFLAG_CONSTRAINTED_ACCOUNT		= 0x00000001,
+		NTLMSSP_AVFLAG_MIC_IN_AUTHENTICATE_MESSAGE	= 0x00000002
+	} ntlmssp_AvFlags;
+
+	typedef [gensize,nodiscriminant,flag(NDR_NOALIGN)] union {
+		[case(MsvAvEOL)]		;
+		[case(MsvAvNbComputerName)]	[flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvNbComputerName;
+		[case(MsvAvNbDomainName)]	[flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvNbDomainName;
+		[case(MsvAvDnsComputerName)]	[flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvDnsComputerName;
+		[case(MsvAvDnsDomainName)]	[flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvDnsDomainName;
+		[case(MsvAvDnsTreeName)]	[flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvDnsTreeName;
+		[case(MsvAvFlags)]		ntlmssp_AvFlags AvFlags;
+		[case(MsvAvTimestamp)]		NTTIME AvTimestamp;
+		[case(MsAvRestrictions)]	Restriction_Encoding AvRestrictions;
+		[case(MsvAvTargetName)]		[flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvTargetName;
+		[case(MsvChannelBindings)]	uint8 ChannelBindings[16];
+		[default]			[flag(NDR_REMAINING)] DATA_BLOB blob;
+	} ntlmssp_AvValue;
+
+	typedef [public,flag(NDR_NOALIGN)] struct {
+		ntlmssp_AvId AvId;
+		[value(ndr_size_ntlmssp_AvValue(&r->Value, r->AvId, ndr->iconv_convenience, 0))] uint16 AvLen;
+		[subcontext(0),subcontext_size(AvLen),switch_is(AvId)] ntlmssp_AvValue Value;
+	} AV_PAIR;
+
+	typedef [gensize,nopush,nopull,flag(NDR_NOALIGN)] struct {
+		uint32 count;
+		AV_PAIR pair[count];
+	} AV_PAIR_LIST;
+
+	/* NTLMSSP challenge message */
+
+	typedef [public,flag(NDR_PAHEX)] struct {
+		[charset(DOS),value("NTLMSSP")] uint8 Signature[8];
+		[value(NtLmChallenge)] ntlmssp_MessageType MessageType;
+		[value(ndr_ntlmssp_string_length(NegotiateFlags, TargetName))] uint16 TargetNameLen;
+		[value(TargetNameLen)] uint16 TargetNameMaxLen;
+		[relative] [subcontext(0),subcontext_size(TargetNameLen)] [flag(ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags))] string *TargetName;
+		NEGOTIATE NegotiateFlags;
+		uint8 ServerChallenge[8];
+		uint8 Reserved[8];
+		[value(ndr_size_AV_PAIR_LIST(TargetInfo, ndr->iconv_convenience, ndr->flags))] uint16 TargetInfoLen;
+		[value(TargetInfoLen)] uint16 TargetNameInfoMaxLen;
+		[relative] [subcontext(0),subcontext_size(TargetInfoLen)] AV_PAIR_LIST *TargetInfo;
+		[switch_is(NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)] ntlmssp_Version Version;
+	} CHALLENGE_MESSAGE;
+
+	typedef [public,flag(NDR_PAHEX)] struct {
+		uint8 Response[24];
+	} LM_RESPONSE;
+
+	typedef [public,flag(NDR_PAHEX)] struct {
+		uint8 Response[16];
+		uint8 ChallengeFromClient[8];
+	} LMv2_RESPONSE;
+
+	typedef [nodiscriminant] union {
+		[case(24)] LM_RESPONSE v1;
+		[default];
+	} ntlmssp_LM_RESPONSE;
+
+	typedef [public,flag(NDR_PAHEX)] struct {
+		uint8 Response[24];
+	} NTLM_RESPONSE;
+
+	typedef [flag(NDR_PAHEX)] struct {
+		[value(1)] uint8 RespType;
+		[value(1)] uint8 HiRespType;
+		uint16 Reserved1;
+		uint32 Reserved2;
+		NTTIME TimeStamp;
+		uint8 ChallengeFromClient[8];
+		uint32 Reserved3;
+		[subcontext(0)] [flag(NDR_REMAINING)] AV_PAIR_LIST AvPairs;
+	} NTLMv2_CLIENT_CHALLENGE;
+
+	typedef [public,flag(NDR_PAHEX)] struct {
+		uint8 Response[16];
+		NTLMv2_CLIENT_CHALLENGE Challenge;
+	} NTLMv2_RESPONSE;
+
+	typedef [public,nodiscriminant] union {
+		[case(0)] ;
+		[case(0x18)] NTLM_RESPONSE v1;
+		[default] NTLMv2_RESPONSE v2;
+	} ntlmssp_NTLM_RESPONSE;
+
+	typedef [flag(NDR_PAHEX)] struct {
+		uint8 MIC[16];
+	} MIC;
+
+	/* NTLMSSP authenticate message */
+
+	typedef [public,flag(NDR_REMAINING)] struct {
+		[charset(DOS),value("NTLMSSP")] uint8 Signature[8];
+		[value(NtLmAuthenticate)] ntlmssp_MessageType MessageType;
+		uint16 LmChallengeResponseLen;
+		[value(LmChallengeResponseLen)] uint16 LmChallengeResponseMaxLen;
+		[relative] [subcontext(0),subcontext_size(LmChallengeResponseLen),switch_is(LmChallengeResponseLen)] ntlmssp_LM_RESPONSE *LmChallengeResponse;
+		uint16 NtChallengeResponseLen;
+		[value(NtChallengeResponseLen)] uint16 NtChallengeResponseMaxLen;
+		[relative] [subcontext(0),subcontext_size(NtChallengeResponseMaxLen),switch_is(NtChallengeResponseLen)] ntlmssp_NTLM_RESPONSE *NtChallengeResponse;
+		[value(ndr_ntlmssp_string_length(NegotiateFlags, DomainName))] uint16 DomainNameLen;
+		[value(DomainNameLen)] uint16 DomainNameMaxLen;
+		[relative] [subcontext(0),subcontext_size(DomainNameLen)] [flag(ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags))] string *DomainName;
+		[value(ndr_ntlmssp_string_length(NegotiateFlags, UserName))] uint16 UserNameLen;
+		[value(UserNameLen)] uint16 UserNameMaxLen;
+		[relative] [subcontext(0),subcontext_size(UserNameLen)] [flag(ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags))] string *UserName;
+		[value(ndr_ntlmssp_string_length(NegotiateFlags, Workstation))] uint16 WorkstationLen;
+		[value(WorkstationLen)] uint16 WorkstationMaxLen;
+		[relative] [subcontext(0),subcontext_size(WorkstationLen)] [flag(ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags))] string *Workstation;
+		[value(EncryptedRandomSessionKey->length)] uint16 EncryptedRandomSessionKeyLen;
+		[value(EncryptedRandomSessionKeyLen)] uint16 EncryptedRandomSessionKeyMaxLen;
+		[relative] [subcontext(0),subcontext_size(EncryptedRandomSessionKeyLen)] DATA_BLOB *EncryptedRandomSessionKey;
+		NEGOTIATE NegotiateFlags;
+		[switch_is(NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)] ntlmssp_Version Version;
+		/* MIC (Message Integrity) is only included when the client has
+		 * sent a timestap Av struct in the CHALLENGE_MESSAGE AvPair */
+		/* [flag(NDR_REMAINING)] MIC mic; */
+	} AUTHENTICATE_MESSAGE;
+
+	/* NTLMSSP signature version */
+	const int NTLMSSP_SIGN_VERSION = 0x01;
+
+	/* NTLMSSP signature size */
+	const int NTLMSSP_SIG_SIZE = 16;
+
+	typedef [public] struct {
+		 [value(NTLMSSP_SIGN_VERSION)] uint32 Version;
+		 uint32 RandomPad;
+		 uint32 Checksum;
+		 uint32 SeqNum;
+	} NTLMSSP_MESSAGE_SIGNATURE;
+
+	typedef [public,flag(NDR_PAHEX)] struct {
+		 [value(NTLMSSP_SIGN_VERSION)] uint32 Version;
+		 uint8 Checksum[8];
+		 uint32 SeqNum;
+	} NTLMSSP_MESSAGE_SIGNATURE_NTLMv2;
+}
diff --git a/librpc/ndr/ndr_ntlmssp.c b/librpc/ndr/ndr_ntlmssp.c
new file mode 100644
index 0000000..b91b143
--- /dev/null
+++ b/librpc/ndr/ndr_ntlmssp.c
@@ -0,0 +1,109 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   routines for marshalling/unmarshalling special ntlmssp structures
+
+   Copyright (C) Guenther Deschner 2009
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "../librpc/ndr/ndr_ntlmssp.h"
+#include "../librpc/gen_ndr/ndr_ntlmssp.h"
+
+_PUBLIC_ size_t ndr_ntlmssp_string_length(uint32_t negotiate_flags, const char *s)
+{
+	if (!s) {
+		return 0;
+	}
+
+	if (negotiate_flags & NTLMSSP_NEGOTIATE_UNICODE) {
+		return strlen(s) * 2;
+	}
+
+	return strlen(s);
+}
+
+_PUBLIC_ uint32_t ndr_ntlmssp_negotiated_string_flags(uint32_t negotiate_flags)
+{
+	uint32_t flags = LIBNDR_FLAG_STR_NOTERM |
+			 LIBNDR_FLAG_STR_CHARLEN |
+			 LIBNDR_FLAG_REMAINING;
+
+	if (!(negotiate_flags & NTLMSSP_NEGOTIATE_UNICODE)) {
+		flags |= LIBNDR_FLAG_STR_ASCII;
+	}
+
+	return flags;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_push_AV_PAIR_LIST(struct ndr_push *ndr, int ndr_flags, const struct AV_PAIR_LIST *r)
+{
+	uint32_t cntr_pair_0;
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_push_align(ndr, 4));
+		for (cntr_pair_0 = 0; cntr_pair_0 < r->count; cntr_pair_0++) {
+			NDR_CHECK(ndr_push_AV_PAIR(ndr, NDR_SCALARS, &r->pair[cntr_pair_0]));
+		}
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		for (cntr_pair_0 = 0; cntr_pair_0 < r->count; cntr_pair_0++) {
+			NDR_CHECK(ndr_push_AV_PAIR(ndr, NDR_BUFFERS, &r->pair[cntr_pair_0]));
+		}
+	}
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_AV_PAIR_LIST(struct ndr_pull *ndr, int ndr_flags, struct AV_PAIR_LIST *r)
+{
+	uint32_t cntr_pair_0;
+	TALLOC_CTX *_mem_save_pair_0;
+	if (ndr_flags & NDR_SCALARS) {
+		uint32_t offset = 0;
+		NDR_CHECK(ndr_pull_align(ndr, 4));
+		r->count = 0;
+		if (ndr->data_size > 0) {
+			NDR_PULL_NEED_BYTES(ndr, 4);
+		}
+		while (offset + 4 <= ndr->data_size) {
+			uint16_t length;
+			uint16_t type;
+			type = SVAL(ndr->data + offset, 0);
+			if (type == MsvAvEOL) {
+				r->count++;
+				break;
+			}
+			length = SVAL(ndr->data + offset, 2);
+			offset += length + 4;
+			r->count++;
+		}
+		NDR_PULL_ALLOC_N(ndr, r->pair, r->count);
+		_mem_save_pair_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->pair, 0);
+		for (cntr_pair_0 = 0; cntr_pair_0 < r->count; cntr_pair_0++) {
+			NDR_CHECK(ndr_pull_AV_PAIR(ndr, NDR_SCALARS, &r->pair[cntr_pair_0]));
+		}
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pair_0, 0);
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		_mem_save_pair_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->pair, 0);
+		for (cntr_pair_0 = 0; cntr_pair_0 < r->count; cntr_pair_0++) {
+			NDR_CHECK(ndr_pull_AV_PAIR(ndr, NDR_BUFFERS, &r->pair[cntr_pair_0]));
+		}
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pair_0, 0);
+	}
+	return NDR_ERR_SUCCESS;
+}
diff --git a/librpc/ndr/ndr_ntlmssp.h b/librpc/ndr/ndr_ntlmssp.h
new file mode 100644
index 0000000..4b21b4f
--- /dev/null
+++ b/librpc/ndr/ndr_ntlmssp.h
@@ -0,0 +1,25 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   routines for marshalling/unmarshalling special ntlmssp structures
+
+   Copyright (C) Guenther Deschner 2009
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+_PUBLIC_ size_t ndr_ntlmssp_string_length(uint32_t negotiate_flags, const char *s);
+_PUBLIC_ uint32_t ndr_ntlmssp_negotiated_string_flags(uint32_t negotiate_flags);
+_PUBLIC_ enum ndr_err_code ndr_push_AV_PAIR_LIST(struct ndr_push *ndr, int ndr_flags, const struct AV_PAIR_LIST *r);
+_PUBLIC_ enum ndr_err_code ndr_pull_AV_PAIR_LIST(struct ndr_pull *ndr, int ndr_flags, struct AV_PAIR_LIST *r);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list