summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/build/pidl/parser.pm12
-rw-r--r--source4/librpc/idl/idl_types.h4
-rw-r--r--source4/librpc/idl/misc.idl3
-rw-r--r--source4/librpc/idl/netlogon.idl540
-rw-r--r--source4/librpc/ndr/libndr.h3
-rw-r--r--source4/librpc/ndr/ndr_basic.c21
-rw-r--r--source4/torture/rpc/netlogon.c58
7 files changed, 376 insertions, 265 deletions
diff --git a/source4/build/pidl/parser.pm b/source4/build/pidl/parser.pm
index 5bf5e4220f..579c577d3c 100644
--- a/source4/build/pidl/parser.pm
+++ b/source4/build/pidl/parser.pm
@@ -405,7 +405,9 @@ sub ParseElementPrintScalar($$)
return;
}
- if (util::has_direct_buffers($e)) {
+ if (util::is_fixed_array($e)) {
+ ParseElementPrintBuffer($e, $var_prefix);
+ } elsif (util::has_direct_buffers($e)) {
pidl "\tndr_print_ptr(ndr, \"$e->{NAME}\", $var_prefix$e->{NAME});\n";
pidl "\tndr->depth++;\n";
ParseElementPrintBuffer($e, $var_prefix);
@@ -740,11 +742,15 @@ sub ParseStructPrint($)
return;
}
+ start_flags($struct);
+
pidl "\tndr->depth++;\n";
foreach my $e (@{$struct->{ELEMENTS}}) {
ParseElementPrintScalar($e, "r->");
}
pidl "\tndr->depth--;\n";
+
+ end_flags($struct);
}
#####################################################################
@@ -874,6 +880,8 @@ sub ParseUnionPrint($)
my $e = shift;
my $have_default = 0;
+ start_flags($e);
+
pidl "\tswitch (level) {\n";
foreach my $el (@{$e->{DATA}}) {
if ($el->{CASE} eq "default") {
@@ -891,6 +899,8 @@ sub ParseUnionPrint($)
pidl "\tdefault:\n\t\tndr_print_bad_level(ndr, name, level);\n";
}
pidl "\t}\n";
+
+ end_flags($e);
}
#####################################################################
diff --git a/source4/librpc/idl/idl_types.h b/source4/librpc/idl/idl_types.h
index 06794d0243..9a9d7fdaf6 100644
--- a/source4/librpc/idl/idl_types.h
+++ b/source4/librpc/idl/idl_types.h
@@ -59,3 +59,7 @@
#define boolean32 uint32
#define unsigned32 uint32
+/*
+ this is used to control formatting of uint8 arrays
+*/
+#define NDR_PAHEX LIBNDR_PRINT_ARRAY_HEX
diff --git a/source4/librpc/idl/misc.idl b/source4/librpc/idl/misc.idl
index 04e03fc814..076b128988 100644
--- a/source4/librpc/idl/misc.idl
+++ b/source4/librpc/idl/misc.idl
@@ -52,9 +52,8 @@ interface misc
/* we declare this noprint so we can supply
a nicer pretty-print routine */
- typedef [public, noprint] struct {
+ typedef [public, flag(NDR_PAHEX)] struct {
uint8 data[20];
} policy_handle;
-
}
diff --git a/source4/librpc/idl/netlogon.idl b/source4/librpc/idl/netlogon.idl
index 445f89d440..e0f38ac112 100644
--- a/source4/librpc/idl/netlogon.idl
+++ b/source4/librpc/idl/netlogon.idl
@@ -8,13 +8,16 @@
[
uuid(12345678-1234-abcd-ef00-01234567cffb),
- version(1.0)
+ version(1.0),
+ pointer_default(unique)
]
interface netlogon
{
+
/*****************/
/* Function 0x00 */
+
typedef struct {
unistr *effective_name;
uint32 priv;
@@ -41,194 +44,229 @@ interface netlogon
[out] netr_UasInfo *info
);
-#if 0
+
+ /*****************/
+ /* Function 0x01 */
+
typedef struct {
uint32 duration;
- short logon_count;
- } LOGOFF_UAS_INFO;
- uint32 netr_LogonUasLogoff(
- [in] unistr *ServerName,
- [in][ref][string] wchar_t *UserName,
- [in][ref][string] wchar_t *Workstation,
- [out][ref] LOGOFF_UAS_INFO *info
+ uint16 logon_count;
+ } netr_UasLogoffInfo;
+
+ WERROR netr_LogonUasLogoff(
+ [in] unistr *server_name,
+ [in] unistr username,
+ [in] unistr workstation,
+ [out] netr_UasLogoffInfo info
);
+
+
+ /*****************/
+ /* Function 0x02 */
+
+ typedef struct {
+ uint16 size;
+ uint16 length;
+ unistr *string;
+ } netr_String;
+
typedef struct {
- UNICODESTRING LogonDomainName;
+ netr_String LogonDomainName;
uint32 ParameterControl;
- uint64 LogonID;
- UNICODESTRING UserName;
- UNICODESTRING Workstation;
+ HYPER_T LogonID;
+ netr_String username;
+ netr_String workstation;
} LOGON_IDENTITY_INFO;
+
typedef struct {
- char password[16];
+ uint8 password[16];
} LM_OWF_PASSWORD;
+
typedef struct {
- char password[16];
+ uint8 password[16];
} NT_OWF_PASSWORD;
+
typedef struct {
LOGON_IDENTITY_INFO identity_info;
LM_OWF_PASSWORD lmpassword;
NT_OWF_PASSWORD ntpassword;
} INTERACTIVE_INFO;
+
typedef struct {
- char chl[8];
- } CHALLENGE;
+ uint8 chl[8];
+ } netr_Challenge;
+
typedef struct {
LOGON_IDENTITY_INFO logon_info;
- CHALLENGE chal;
- STRING ntchallengeresponse;
- STRING lmchallengeresponse;
+ netr_Challenge chal;
+ unistr ntchallengeresponse;
+ unistr lmchallengeresponse;
} NETWORK_INFO;
+
typedef struct {
LOGON_IDENTITY_INFO logon_info;
LM_OWF_PASSWORD lmpassword;
NT_OWF_PASSWORD ntpassword;
} SERVICE_INFO;
- typedef [switch_type(short)] union {
- [case(1)][unique] INTERACTIVE_INFO *iinfo;
- [case(2)][unique] NETWORK_INFO *ninfo;
- [case(3)][unique] SERVICE_INFO *sinfo;
- } LEVEL;
- typedef struct {
- char cred[8];
- } CREDENTIAL;
+
+ typedef union {
+ [case(1)] INTERACTIVE_INFO *iinfo;
+ [case(2)] NETWORK_INFO *ninfo;
+ [case(3)] SERVICE_INFO *sinfo;
+ } netr_LogonLevel;
+
+ typedef [flag(NDR_PAHEX)] struct {
+ uint8 cred[8];
+ } netr_Credential;
+
typedef struct {
- CREDENTIAL cred;
+ netr_Credential cred;
uint32 timestamp;
- } AUTHENTICATOR;
+ } netr_Authenticator;
+
typedef struct {
uint32 user_id;
uint32 attributes;
} GROUP_MEMBERSHIP;
+
typedef struct {
- char user_session_key[16];
+ uint8 user_session_key[16];
} USER_SESSION_KEY;
+
typedef struct {
- uint64 LogonTime;
- uint64 LogoffTime;
- uint64 KickOffTime;
- uint64 PasswdLastSet;
- uint64 PasswdCanChange;
- uint64 PasswdMustChange;
- unicodestring effectivename;
- unicodestring fullname;
- unicodestring logonscript;
- unicodestring profilepath;
- unicodestring homedirectory;
- unicodestring homedirectorydrive;
- short LogonCount;
- short BadPasswdCount;
+ NTTIME LogonTime;
+ NTTIME LogoffTime;
+ NTTIME KickOffTime;
+ NTTIME PasswdLastSet;
+ NTTIME PasswdCanChange;
+ NTTIME PasswdMustChange;
+ netr_String effectivename;
+ netr_String fullname;
+ netr_String logonscript;
+ netr_String profilepath;
+ netr_String homedirectory;
+ netr_String homedirectorydrive;
+ uint16 LogonCount;
+ uint16 BadPasswdCount;
uint32 userid;
uint32 primarygroup;
uint32 groupcount;
- [unique][size_is(groupcount)] GROUP_MEMBERSHIP *groupids;
+ [size_is(groupcount)] GROUP_MEMBERSHIP *groupids;
uint32 userflags;
USER_SESSION_KEY key;
- unicodestring logonserver;
- unicodestring domainname;
- [unique] SID logondomainid;
+ netr_String logonserver;
+ netr_String domainname;
+ dom_sid2 logondomainid;
uint32 expansionroom[10];
} VALIDATION_SAM_INFO;
+
typedef struct {
- uint64 LogonTime;
- uint64 LogoffTime;
- uint64 KickOffTime;
- uint64 PasswdLastSet;
- uint64 PasswdCanChange;
- uint64 PasswdMustChange;
- unicodestring effectivename;
- unicodestring fullname;
- unicodestring logonscript;
- unicodestring profilepath;
- unicodestring homedirectory;
- unicodestring homedirectorydrive;
- short LogonCount;
- short BadPasswdCount;
+ NTTIME LogonTime;
+ NTTIME LogoffTime;
+ NTTIME KickOffTime;
+ NTTIME PasswdLastSet;
+ NTTIME PasswdCanChange;
+ NTTIME PasswdMustChange;
+ netr_String effectivename;
+ netr_String fullname;
+ netr_String logonscript;
+ netr_String profilepath;
+ netr_String homedirectory;
+ netr_String homedirectorydrive;
+ uint16 LogonCount;
+ uint16 BadPasswdCount;
uint32 userid;
uint32 primarygroup;
uint32 groupcount;
- [unique] GROUP_MEMBERSHIP *groupids;
+ GROUP_MEMBERSHIP *groupids;
uint32 userflags;
USER_SESSION_KEY key;
- unicodestring logonserver;
- unicodestring domainname;
- [unique] SID logondomainid;
+ netr_String logonserver;
+ netr_String domainname;
+ dom_sid2 logondomainid;
uint32 expansionroom[10];
uint32 sidcount;
- [unique] SID_AND_ATTRIBS;
+ dom_sid2 sid;
+ uint32 sid_attribs;
} VALIDATION_SAM_INFO2;
+
typedef struct {
- uint32 pac_size
- [unique][size_is(pac_size)] char *pac;
- UNICODESTRING logondomain;
- UNICODESTRING logonserver;
- UNICODESTRING principalname;
+ uint32 pac_size;
+ [size_is(pac_size)] uint8 *pac;
+ netr_String logondomain;
+ netr_String logonserver;
+ netr_String principalname;
uint32 auth_size;
- [unique][size_is(auth_size)] char *auth;
+ [size_is(auth_size)] uint8 *auth;
USER_SESSION_KEY user_session_key;
uint32 expansionroom[10];
- UNICODESTRING dummy1;
- UNICODESTRING dummy2;
- UNICODESTRING dummy3;
- UNICODESTRING dummy4;
+ netr_String dummy1;
+ netr_String dummy2;
+ netr_String dummy3;
+ netr_String dummy4;
} VALIDATION_PAC_INFO;
- typedef [switch_type(short)] union {
- [case(2)][unique] VALIDATION_SAM_INFO *sam;
- [case(3)][unique] VALIDATION_SAM_INFO2 *sam2;
- [case(4)][unique] VALIDATION_PAC_INFO *pac;
- [case(5)][unique] VALIDATION_PAC_INFO *pac2;
- } VALIDATION;
- uint32 netr_LogonSamLogon(
- [in] unistr *ServerName,
- [in] unistr *Workstation,
- [in][unique] AUTHENTICATOR *credential,
- [in][out][unique] AUTHENTICATOR *returnauthenticator,
- [in] short LogonLevel,
- [in][ref] LOGON_LEVEL *logonlevel,
- [in] short ValidationLevel,
- [out][ref] VALIDATION *validation,
- [out][ref] boolean Authorative
+
+ typedef union {
+ [case(2)] VALIDATION_SAM_INFO *sam;
+ [case(3)] VALIDATION_SAM_INFO2 *sam2;
+ [case(4)] VALIDATION_PAC_INFO *pac;
+ [case(5)] VALIDATION_PAC_INFO *pac2;
+ } netr_Validation;
+
+ WERROR netr_LogonSamLogon(
+ [in] unistr *server_name,
+ [in] unistr *workstation,
+ [in] netr_Authenticator *credential,
+ [in][out] netr_Authenticator *authenticator,
+ [in] uint16 logon_level,
+ [in] [switch_is(logon_level)] netr_LogonLevel logon,
+ [in] uint16 validation_level,
+ [out] [switch_is(validation_level)] netr_Validation validation,
+ [out] uint32 authoritative
);
- uint32 netr_LogonSamLogoff(
- [in] unistr *ServerName,
- [in] unistr *ComputerName,
- [in][unique] AUTHENTICATOR credential,
- [in][unique] AUTHENTICATOR return_authenticator,
- [in] short logon_level,
- [in][ref] LEVEL logoninformation
+
+ WERROR netr_LogonSamLogoff(
+ [in] unistr *server_name,
+ [in] unistr *computer_name,
+ [in] netr_Authenticator credential,
+ [in] netr_Authenticator return_authenticator,
+ [in] uint16 logon_level,
+ [in] [switch_is(logon_level)] netr_LogonLevel logon
);
- uint32 netr_ServerReqChallenge(
- [in] unistr *ServerName,
- [in][ref][string] wchar_t *ComputerName,
- [in][ref] CREDENTIAL client_credential,
- [out][ref] CREDENTIAL server_credential
+
+ WERROR netr_ServerReqChallenge(
+ [in] unistr *server_name,
+ [in] unistr computer_name,
+ [in][out][ref] netr_Credential *credential
);
- uint32 netr_ServerAuthenticate(
- [in] unistr *ServerName,
- [in][ref][string] wchar_t *UserName,
- [in] short secure_challenge_type,
- [in][ref][string] wchar_t *ComputerName,
- [in][ref] CREDENTIAL client_challenge,
- [out][ref] CREDENTIAL server_challenge
+
+ WERROR netr_ServerAuthenticate(
+ [in] unistr *server_name,
+ [in] unistr username,
+ [in] uint16 secure_challenge_type,
+ [in] unistr computer_name,
+ [in,out,ref] netr_Credential *client_challenge
);
+
+#if 0
typedef struct {
- char encrypted_password[16];
+ uint8 encrypted_password[16];
} ENCRYPTED_LM_OWF_PASSWORD;
- uint32 netr_ServerPasswordSet(
- [in] unistr *ServerName,
- [in][ref][string] wchar_t *UserName,
- [in] short secure_challenge_type,
- [in][ref][string] wchar_t *ComputerName,
+ WERROR netr_ServerPasswordSet(
+ [in] unistr *server_name,
+ [in] unistr username,
+ [in] uint16 secure_challenge_type,
+ [in] unistr ComputerName,
[in][ref] AUTHENTICATOR credential,
[in][ref] LM_OWF_PASSWORD UasNewPassword,
[out][ref] AUTHENTICATOR return_authenticator
);
typedef struct {
- unistr *UserName;
- UNICODESTRING dummy1;
- UNICODESTRING dummy2;
- UNICODESTRING dummy3;
- UNICODESTRING dummy4;
+ unistr *username;
+ netr_String dummy1;
+ netr_String dummy2;
+ netr_String dummy3;
+ netr_String dummy4;
uint32 dummy5;
uint32 dummy6;
uint32 dummy7;
@@ -237,23 +275,23 @@ interface netlogon
typedef struct {
bool SensitiveDataFlag;
uint32 DataLength;
- [unique][size_is(DataLength)] char *SensitiveData;
+ [size_is(DataLength)] uint8 *SensitiveData;
} USER_PRIVATE_INFO;
typedef struct {
- UNICODESTRING UserName;
- UNICODESTRING FullName;
+ netr_String username;
+ netr_String FullName;
uint32 UserID;
uint32 PrimaryGroupID;
- UNICODESTRING HomeDir;
- UNICODESTRING HomeDirDrive;
- UNICODESTRING LogonScript;
- UNICODESTRING Comment;
- UNICODESTRING Workstations;
+ netr_String HomeDir;
+ netr_String HomeDirDrive;
+ netr_String LogonScript;
+ netr_String Comment;
+ netr_String workstations;
NTTIME LastLogon;
NTTIME LastLogoff;
LOGON_HOURS logonhours;
- short BadPwCount;
- short LogonCount;
+ uint16 BadPwCount;
+ uint16 LogonCount;
NTTIME PwLastSet;
NTTIME AccountExpires;
uint32 AccountControl;
@@ -262,73 +300,73 @@ interface netlogon
bool NTPwPresent;
bool LMPwPresent;
bool PwExpired;
- UNICODESTRING UserComment;
- UNICODESTRING Parameters;
- short CountryCode;
- short CodePage;
+ netr_String UserComment;
+ netr_String Parameters;
+ uint16 CountryCode;
+ uint16 CodePage;
USER_PRIVATE_INFO user_private_info;
uint32 SecurityInformation;
LSA_SECURITY_DESCRIPTOR sec_desc;
- UNICODESTRING dummy1;
- UNICODESTRING dummy2;
- UNICODESTRING dummy3;
- UNICODESTRING dummy4;
+ netr_String dummy1;
+ netr_String dummy2;
+ netr_String dummy3;
+ netr_String dummy4;
uint32 dummy5;
uint32 dummy6;
uint32 dummy7;
uint32 dummy8;
} DELTA_USER;
typedef struct {
- UNICODESTRING DomainName;
- UNICODESTRING OEMInfo;
+ netr_String DomainName;
+ netr_String OEMInfo;
NTTIME forcedlogoff;
- short minpasswdlen;
- short passwdhistorylen;
+ uint16 minpasswdlen;
+ uint16 passwdhistorylen;
NTTIME pwd_must_change_time;
NTTIME pwd_can_change_time;
NTTIME domain_modify_time;
NTTIME domain_create_time;
uint32 SecurityInformation;
LSA_SECURITY_DESCRIPTOR sec_desc;
- UNICODESTRING dummy1;
- UNICODESTRING dummy2;
- UNICODESTRING dummy3;
- UNICODESTRING dummy4;
+ netr_String dummy1;
+ netr_String dummy2;
+ netr_String dummy3;
+ netr_String dummy4;
uint32 dummy5;
uint32 dummy6;
uint32 dummy7;
uint32 dummy8;
} DELTA_DOMAIN;
typedef struct {
- UNICODESTRING groupname;
+ netr_String groupname;
GROUP_MEMBERSHIP group_membership;
- UNICODESTRING comment;
+ netr_String comment;
uint32 SecurityInformation;
LSA_SECURITY_DESCRIPTOR sec_desc;
- UNICODESTRING dummy1;
- UNICODESTRING dummy2;
- UNICODESTRING dummy3;
- UNICODESTRING dummy4;
+ netr_String dummy1;
+ netr_String dummy2;
+ netr_String dummy3;
+ netr_String dummy4;
uint32 dummy5;
uint32 dummy6;
uint32 dummy7;
uint32 dummy8;
} DELTA_GROUP;
typedef struct {
- UNICODESTRING OldName;
- UNICODESTRING NewName;
- UNICODESTRING dummy1;
- UNICODESTRING dummy2;
- UNICODESTRING dummy3;
- UNICODESTRING dummy4;
+ netr_String OldName;
+ netr_String NewName;
+ netr_String dummy1;
+ netr_String dummy2;
+ netr_String dummy3;
+ netr_String dummy4;
uint32 dummy5;
uint32 dummy6;
uint32 dummy7;
uint32 dummy8;
} DELTA_RENAME;
typedef struct {
- [unique][size_is(num_rids)] uint32 *rids;
- [unique][size_is(num_rids)] uint32 *attribs;
+ [size_is(num_rids)] uint32 *rids;
+ [size_is(num_rids)] uint32 *attribs;
uint32 num_rids;
uint32 dummy1;
uint32 dummy2;
@@ -336,21 +374,21 @@ interface netlogon
uint32 dummy4;
} DELTA_GROUP_MEMBER;
typedef struct {
- UNICODESTRING alias_name;
+ netr_String alias_name;
uint32 rid;
uint32 SecurityInformation;
LSA_SECURITY_DESCRIPTOR sec_desc;
- UNICODESTRING dummy1;
- UNICODESTRING dummy2;
- UNICODESTRING dummy3;
- UNICODESTRING dummy4;
+ netr_String dummy1;
+ netr_String dummy2;
+ netr_String dummy3;
+ netr_String dummy4;
uint32 dummy5;
uint32 dummy6;
uint32 dummy7;
uint32 dummy8;
} DELTA_ALIAS;
typedef struct {
- [unique] SID_ARRAY sids;
+ SID_ARRAY sids;
uint32 dummy1;
uint32 dummy2;
uint32 dummy3;
@@ -369,33 +407,33 @@ interface netlogon
NTTIME auditretentionperiod;
bool auditingmode;
uint32 maxauditeventcount;
- [unique][size_is(maxauditeventcount)] uint32 *eventauditoptions;
- UNICODESTRING primarydomainname;
- [unique] SID *sid;
+ [size_is(maxauditeventcount)] uint32 *eventauditoptions;
+ netr_String primarydomainname;
+ dom_sid2 *sid;
QUOTA_LIMITS quota_limits;
NTTIME db_modify_time;
NTTIME db_create_time;
uint32 SecurityInformation;
LSA_SECURITY_DESCRIPTOR sec_desc;
- UNICODESTRING dummy1;
- UNICODESTRING dummy2;
- UNICODESTRING dummy3;
- UNICODESTRING dummy4;
+ netr_String dummy1;
+ netr_String dummy2;
+ netr_String dummy3;
+ netr_String dummy4;
uint32 dummy5;
uint32 dummy6;
uint32 dummy7;
uint32 dummy8;
} DELTA_POLICY;
typedef struct {
- UNICODESTRING DomainName;
+ netr_String DomainName;
uint32 num_controllers;
- [unique][size_is(num_controllers)] UNICODESTRING *controller_names;
+ [size_is(num_controllers)] netr_String *controller_names;
uint32 SecurityInformation;
LSA_SECURITY_DESCRIPTOR sec_desc;
- UNICODESTRING dummy1;
- UNICODESTRING dummy2;
- UNICODESTRING dummy3;
- UNICODESTRING dummy4;
+ netr_String dummy1;
+ netr_String dummy2;
+ netr_String dummy3;
+ netr_String dummy4;
uint32 dummy5;
uint32 dummy6;
uint32 dummy7;
@@ -404,15 +442,15 @@ interface netlogon
typedef struct {
uint32 privilegeentries;
uint32 provolegecontrol;
- [unique][size_is(privilege_entries)] uint32 *privilege_attrib;
- [unique][size_is(privilege_entries)] UNICODESTRING *privilege_name;
+ [size_is(privilege_entries)] uint32 *privilege_attrib;
+ [size_is(privilege_entries)] netr_String *privilege_name;
QUOTALIMITS quotalimits;
uint32 SecurityInformation;
LSA_SECURITY_DESCRIPTOR sec_desc;
- UNICODESTRING dummy1;
- UNICODESTRING dummy2;
- UNICODESTRING dummy3;
- UNICODESTRING dummy4;
+ netr_String dummy1;
+ netr_String dummy2;
+ netr_String dummy3;
+ netr_String dummy4;
uint32 dummy5;
uint32 dummy6;
uint32 dummy7;
@@ -421,7 +459,7 @@ interface netlogon
typedef struct {
uint32 len;
uint32 maxlen;
- [unique][size_is(maxlen)][length_is(len)] char *cipher_data;
+ [size_is(maxlen)][length_is(len)] uint8 *cipher_data;
} CIPHER_VALUE;
typedef struct {
CIPHER_VALUE current_cipher;
@@ -430,10 +468,10 @@ interface netlogon
NTTIME old_cipher_set_time;
uint32 SecurityInformation;
LSA_SECURITY_DESCRIPTOR sec_desc;
- UNICODESTRING dummy1;
- UNICODESTRING dummy2;
- UNICODESTRING dummy3;
- UNICODESTRING dummy4;
+ netr_String dummy1;
+ netr_String dummy2;
+ netr_String dummy3;
+ netr_String dummy4;
uint32 dummy5;
uint32 dummy6;
uint32 dummy7;
@@ -445,22 +483,22 @@ interface netlogon
} xxx;
typedef [switch_type(short)] union {
- [case(1)][unique] DELTA_DOMAIN *domain;
- [case(2)][unique] DELTA_GROUP *group;
- [case(4)][unique] DELTA_RENAME_GROUP *rename_group;
- [case(5)][unique] DELTA_USER *user;
- [case(7)][unique] DELTA_RENAME_USER *rename_user;
- [case(8)][unique] DELTA_GROUP_MEMBER *group_member;
- [case(9)][unique] DELTA_ALIAS *alias;
- [case(11)][unique] DELTA_RENAME_ALIAS *rename_alias;
- [case(12)][unique] DELTA_ALIAS_MEMBER *alias_member;
- [case(13)][unique] DELTA_POLICY *policy;
- [case(14)][unique] DELTA_TRUSTED_DOMAINS *trusted_domains;
- [case(16)][unique] DELTA_ACCOUNTS *accounts;
- [case(18)][unique] DELTA_SECRET *secret;
- [case(20)][unique] DELTA_DELETE_USER *delete_group;
- [case(21)][unique] DELTA_DELETE_USER *delete_user;
- [case(22)][unique] MODIFIED_COUNT *modified_count;
+ [case(1)] DELTA_DOMAIN *domain;
+ [case(2)] DELTA_GROUP *group;
+ [case(4)] DELTA_RENAME_GROUP *rename_group;
+ [case(5)] DELTA_USER *user;
+ [case(7)] DELTA_RENAME_USER *rename_user;
+ [case(8)] DELTA_GROUP_MEMBER *group_member;
+ [case(9)] DELTA_ALIAS *alias;
+ [case(11)] DELTA_RENAME_ALIAS *rename_alias;
+ [case(12)] DELTA_ALIAS_MEMBER *alias_member;
+ [case(13)] DELTA_POLICY *policy;
+ [case(14)] DELTA_TRUSTED_DOMAINS *trusted_domains;
+ [case(16)] DELTA_ACCOUNTS *accounts;
+ [case(18)] DELTA_SECRET *secret;
+ [case(20)] DELTA_DELETE_USER *delete_group;
+ [case(21)] DELTA_DELETE_USER *delete_user;
+ [case(22)] MODIFIED_COUNT *modified_count;
} DELTA_UNION;
typedef [switch_type(short)] union {
@@ -476,26 +514,26 @@ interface netlogon
[case(10)] uint32 rid;
[case(11)] uint32 rid;
[case(12)] uint32 rid;
- [case(13)] [unique] SID *sid;
- [case(14)] [unique] SID *sid;
- [case(15)] [unique] SID *sid;
- [case(16)] [unique] SID *sid;
- [case(17)] [unique] SID *sid;
+ [case(13)] dom_sid2 *sid;
+ [case(14)] dom_sid2 *sid;
+ [case(15)] dom_sid2 *sid;
+ [case(16)] dom_sid2 *sid;
+ [case(17)] dom_sid2 *sid;
[case(18)] unistr *Name ;
[case(19)] unistr *Name ;
[case(20)] uint32 rid;
[case(21)] uint32 rid;
} DELTA_ID_UNION;
typedef struct {
- short delta_type;
+ uint16 delta_type;
DELTA_ID_UNION delta_id_union;
DELTA_UNION delta_union;
} DELTA_ENUM;
typedef struct {
uint32 num_deltas;
- [unique][size_is(num_deltas)] DELTA_ENUM *delta_enum;
+ [size_is(num_deltas)] DELTA_ENUM *delta_enum;
} DELTA_ENUM_ARRAY;
- uint32 netr_DatabaseDeltas(
+ WERROR netr_DatabaseDeltas(
[in][string][ref] wchar_t *logonserver, # REF!!!
[in][string][ref] wchar_t *computername,
[in][ref] AUTHENTICATOR credential,
@@ -503,9 +541,9 @@ interface netlogon
[in] uint32 database_id,
[in][out][ref] MODIFIED_COUNT domain_modify_count,
[in] uint32 preferredmaximumlength,
- [out][unique] DELTA_ENUM_ARRAY *delta_enum_array
+ [out] DELTA_ENUM_ARRAY *delta_enum_array
);
- uint32 netr_DatabaseSync(
+ WERROR netr_DatabaseSync(
[in][string][ref] wchar_t *logonserver, # REF!!!
[in][string][ref] wchar_t *computername,
[in][ref] AUTHENTICATOR credential,
@@ -513,19 +551,19 @@ interface netlogon
[in] uint32 database_id,
[in][out][ref] uint32 sync_context,
[in] uint32 preferredmaximumlength,
- [out][unique] DELTA_ENUM_ARRAY *delta_enum_array
+ [out] DELTA_ENUM_ARRAY *delta_enum_array
);
typedef struct {
- char computer_name[16];
+ uint8 computer_name[16];
uint32 timecreated;
uint32 serial_number;
} UAS_INFO_0;
- uint32 netr_AccountDeltas(
- [in][string][unique] wchar_t *logonserver,
+ WERROR netr_AccountDeltas(
+ [in][string] wchar_t *logonserver,
[in][string][ref] wchar_t *computername,
[in][ref] AUTHENTICATOR credential,
[in][out][ref] AUTHENTICATOR return_authenticator,
- [out][ref][size_is(count_returned)] char *Buffer,
+ [out][ref][size_is(count_returned)] uint8 *Buffer,
[out][ref] uint32 count_returned,
[out][ref] uint32 total_entries,
[in][out][ref] UAS_INFO_0 recordid,
@@ -533,12 +571,12 @@ interface netlogon
[in][long] level,
[in][long] buffersize,
);
- uint32 netr_AccountSync(
- [in][string][unique] wchar_t *logonserver,
+ WERROR netr_AccountSync(
+ [in][string] wchar_t *logonserver,
[in][string][ref] wchar_t *computername,
[in][ref] AUTHENTICATOR credential,
[in][out][ref] AUTHENTICATOR return_authenticator,
- [out][ref][size_is(count_returned)] char *Buffer,
+ [out][ref][size_is(count_returned)] uint8 *Buffer,
[out][ref] uint32 count_returned,
[out][ref] uint32 total_entries,
[out][ref] uint32 next_reference,
@@ -547,8 +585,8 @@ interface netlogon
[in][long] buffersize,
[in][out][ref] UAS_INFO_0 recordid,
);
- uint32 netr_GetDcName(
- [in][ref][string] wchar_t *logon_server,
+ WERROR netr_GetDcName(
+ [in] unistr logon_server,
[in] unistr *domainname,
[out]unistr *dcname,
};
@@ -572,17 +610,17 @@ interface netlogon
uint32 reserved;
} NETLOGON_INFO_3;
typedef [switch_type(long)] union {
- [case(1)] [unique] NETLOGON_INFO_1 *i1;
- [case(2)] [unique] NETLOGON_INFO_2 *i2;
- [case(3)] [unique] NETLOGON_INFO_3 *i3;
+ [case(1)] NETLOGON_INFO_1 *i1;
+ [case(2)] NETLOGON_INFO_2 *i2;
+ [case(3)] NETLOGON_INFO_3 *i3;
} CONTROL_QUERY_INFORMATION;
- uint32 netr_LogonControl(
- [in][string][unique] wchar_t *logonserver,
+ WERROR netr_LogonControl(
+ [in][string] wchar_t *logonserver,
[in] uint32 function_code,
[in] uint32 level,
[out][ref] CONTROL_QUERY_INFORMATION
);
- uint32 netr_GetAnyDCName(
+ WERROR netr_GetAnyDCName(
[in] unistr *logon_server,
[in] unistr *domainname,
[out]unistr *dcname,
@@ -593,44 +631,44 @@ interface netlogon
[case(0xfffe)] uint32 unknown;
[case(7)] unistry*unknown;
} CONTROL_DATA_INFORMATION;
- uint32 netr_LogonControl2(
- [in][string][unique] wchar_t *logonserver,
+ WERROR netr_LogonControl2(
+ [in][string] wchar_t *logonserver,
[in] uint32 function_code,
[in] uint32 level,
[in][ref] CONTROL_DATA_INFORMATION *data,
[out][ref] CONTROL_QUERY_INFORMATION *query
);
- uint32 netr_ServerAuthenticate2(
- [in][string][unique] wchar_t *logonserver,
- [in][ref][string] wchar_t *username,
- [in] short secure_channel_type,
- [in][ref][string] wchar_t *computername,
+ WERROR netr_ServerAuthenticate2(
+ [in][string] wchar_t *logonserver,
+ [in] unistr username,
+ [in] uint16 secure_channel_type,
+ [in] unistr computername,
[in][ref] CREDENTIAL *client_chal,
[out][ref] CREDENTIAL *server_chal,
[in][out][ref] uint32 *negotiate_flags,
);
- uint32 netr_DatabaseSync2(
+ WERROR netr_DatabaseSync2(
[in][string][ref] wchar_t *logonserver, # REF!!!
[in][string][ref] wchar_t *computername,
[in][ref] AUTHENTICATOR credential,
[in][out][ref] AUTHENTICATOR return_authenticator,
[in] uint32 database_id,
- [in] short restart_state,
+ [in] uint16 restart_state,
[in][out][ref] uint32 *sync_context,
[in] uint32 preferredmaximumlength,
- [out][unique] DELTA_ENUM_ARRAY *delta_enum_array
+ [out] DELTA_ENUM_ARRAY *delta_enum_array
);
- uint32 netr_DatabaseRedo(
+ WERROR netr_DatabaseRedo(
[in][string][ref] wchar_t *logonserver, # REF!!!
[in][string][ref] wchar_t *computername,
[in][ref] AUTHENTICATOR credential,
[in][out][ref] AUTHENTICATOR return_authenticator,
- [in][ref][size_is(change_log_entry_size)] char *change_log_entry,
+ [in][ref][size_is(change_log_entry_size)] uint8 *change_log_entry,
[in] uint32 change_log_entry_size,
- [out][unique] DELTA_ENUM_ARRAY *delta_enum_array
+ [out] DELTA_ENUM_ARRAY *delta_enum_array
);
- uint32 netr_LogonControl2Ex(
- [in][string][unique] wchar_t *logonserver,
+ WERROR netr_LogonControl2Ex(
+ [in][string] wchar_t *logonserver,
[in] uint32 function_code,
[in] uint32 level,
[in][ref] CONTROL_DATA_INFORMATION *data,
diff --git a/source4/librpc/ndr/libndr.h b/source4/librpc/ndr/libndr.h
index 8440e9c1a0..cce0b12b73 100644
--- a/source4/librpc/ndr/libndr.h
+++ b/source4/librpc/ndr/libndr.h
@@ -110,6 +110,9 @@ struct ndr_print {
#define LIBNDR_ALIGN_FLAGS (LIBNDR_FLAG_ALIGN2|LIBNDR_FLAG_ALIGN4|LIBNDR_FLAG_ALIGN8)
+#define LIBNDR_PRINT_ARRAY_HEX (1<<15)
+
+
/* useful macro for debugging */
#define NDR_PRINT_DEBUG(type, p) ndr_print_debug((ndr_print_fn_t)ndr_print_ ##type, #p, p)
#define NDR_PRINT_UNION_DEBUG(type, level, p) ndr_print_union_debug((ndr_print_union_fn_t)ndr_print_ ##type, #p, level, p)
diff --git a/source4/librpc/ndr/ndr_basic.c b/source4/librpc/ndr/ndr_basic.c
index 32cc7bac5f..0300bdd3fb 100644
--- a/source4/librpc/ndr/ndr_basic.c
+++ b/source4/librpc/ndr/ndr_basic.c
@@ -707,6 +707,16 @@ void ndr_print_array_uint8(struct ndr_print *ndr, const char *name,
{
int i;
+ if (count <= 32 && (ndr->flags & LIBNDR_PRINT_ARRAY_HEX)) {
+ char s[65];
+ for (i=0;i<count;i++) {
+ snprintf(&s[i*2], 3, "%02x", data[i]);
+ }
+ s[i*2] = 0;
+ ndr->print(ndr, "%-25s: %s", name, s);
+ return;
+ }
+
ndr->print(ndr, "%s: ARRAY(%d)", name, count);
ndr->depth++;
for (i=0;i<count;i++) {
@@ -830,14 +840,3 @@ NTSTATUS ndr_pull_DATA_BLOB(struct ndr_pull *ndr, DATA_BLOB *blob)
ndr->offset += length;
return NT_STATUS_OK;
}
-
-
-void ndr_print_policy_handle(struct ndr_print *ndr, const char *name, struct policy_handle *r)
-{
- ndr->print(ndr, "%-25s: policy_handle %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
- name,
- r->data[0], r->data[1], r->data[2], r->data[3], r->data[4],
- r->data[5], r->data[6], r->data[7], r->data[8], r->data[9],
- r->data[10], r->data[11], r->data[12], r->data[13], r->data[14],
- r->data[15], r->data[16], r->data[17], r->data[18], r->data[19]);
-}
diff --git a/source4/torture/rpc/netlogon.c b/source4/torture/rpc/netlogon.c
index 6ea51a9253..0f22b1a44b 100644
--- a/source4/torture/rpc/netlogon.c
+++ b/source4/torture/rpc/netlogon.c
@@ -32,6 +32,8 @@ static BOOL test_LogonUasLogon(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
r.in.username = lp_parm_string(-1, "torture", "username");
r.in.workstation = lp_netbios_name();
+ printf("Testing LogonUasLogon");
+
status = dcerpc_netr_LogonUasLogon(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
printf("LogonUasLogon - %s\n", nt_errstr(status));
@@ -42,6 +44,54 @@ static BOOL test_LogonUasLogon(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
}
+static BOOL test_LogonUasLogoff(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+{
+ NTSTATUS status;
+ struct netr_LogonUasLogoff r;
+
+ r.in.server_name = NULL;
+ r.in.username = lp_parm_string(-1, "torture", "username");
+ r.in.workstation = lp_netbios_name();
+
+ printf("Testing LogonUasLogoff");
+
+ status = dcerpc_netr_LogonUasLogoff(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("LogonUasLogoff - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ return True;
+
+}
+
+static BOOL test_Challenge(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+{
+ NTSTATUS status;
+ struct netr_ServerReqChallenge r;
+ struct netr_Credential creds;
+
+ printf("Testing ServerReqChallenge");
+
+ ZERO_STRUCT(creds);
+
+ generate_random_buffer(creds.cred, sizeof(creds.cred), False);
+
+ r.in.server_name = NULL;
+ r.in.computer_name = lp_netbios_name();
+ r.in.credential = &creds;
+ r.out.credential = &creds;
+
+ status = dcerpc_netr_ServerReqChallenge(p, mem_ctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("ServerReqChallenge - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ return True;
+
+}
+
BOOL torture_rpc_netlogon(int dummy)
{
@@ -66,6 +116,14 @@ BOOL torture_rpc_netlogon(int dummy)
ret = False;
}
+ if (!test_LogonUasLogoff(p, mem_ctx)) {
+ ret = False;
+ }
+
+ if (!test_Challenge(p, mem_ctx)) {
+ ret = False;
+ }
+
torture_rpc_close(p);
return ret;