who contributed!
*/
-import "misc.idl", "lsa.idl", "samr.idl", "security.idl", "nbt.idl";
+import "misc.idl", "lsa.idl", "samr.idl", "security.idl";
#include "idl_types.h"
version(1.0),
endpoint("ncacn_np:[\\pipe\\netlogon]","ncacn_ip_tcp:","ncalrpc:"),
helper("../librpc/ndr/ndr_netlogon.h"),
+ ms_union,
pointer_default(unique)
]
[case(NetlogonInteractiveTransitiveInformation)] netr_PasswordInfo *password;
[case(NetlogonNetworkTransitiveInformation)] netr_NetworkInfo *network;
[case(NetlogonServiceTransitiveInformation)] netr_PasswordInfo *password;
+ [default];
} netr_LogonLevel;
typedef [public,flag(NDR_PAHEX)] struct {
} netr_UserFlags;
typedef struct {
- NTTIME last_logon;
- NTTIME last_logoff;
- NTTIME acct_expiry;
+ NTTIME logon_time;
+ NTTIME logoff_time;
+ NTTIME kickoff_time;
NTTIME last_password_change;
NTTIME allow_password_change;
NTTIME force_password_change;
netr_UserFlags user_flags;
netr_UserSessionKey key;
lsa_StringLarge logon_server;
- lsa_StringLarge domain;
+ lsa_StringLarge logon_domain;
dom_sid2 *domain_sid;
netr_LMSessionKey LMSessKey;
samr_AcctFlags acct_flags;
- uint32 unknown[7];
+ uint32 sub_auth_status;
+ NTTIME last_successful_logon;
+ NTTIME last_failed_logon;
+ uint32 failed_logon_count;
+ uint32 reserved;
} netr_SamBaseInfo;
typedef struct {
netr_SamBaseInfo base;
uint32 sidcount;
[size_is(sidcount)] netr_SidAttr *sids;
- lsa_String forest;
+ lsa_String dns_domainname;
lsa_String principle;
uint32 unknown4[20];
} netr_SamInfo6;
[case(4)] netr_PacInfo *pac;
[case(NetlogonValidationGenericInfo2)] netr_GenericInfo2 *generic;
[case(NetlogonValidationSamInfo4)] netr_SamInfo6 *sam6;
+ [default];
} netr_Validation;
typedef [public, flag(NDR_PAHEX)] struct {
time_t timestamp;
} netr_Authenticator;
- NTSTATUS netr_LogonSamLogon(
+ [public] NTSTATUS netr_LogonSamLogon(
[in,unique] [string,charset(UTF16)] uint16 *server_name,
[in,unique] [string,charset(UTF16)] uint16 *computer_name,
[in,unique] netr_Authenticator *credential,
uint32 unknown8;
} netr_DELTA_TRUSTED_DOMAIN;
- typedef struct {
- uint16 unknown;
- } netr_DELTA_DELETE_TRUST;
-
typedef struct {
uint32 privilege_entries;
uint32 privilege_control;
uint32 unknown8;
} netr_DELTA_ACCOUNT;
- typedef struct {
- uint16 unknown;
- } netr_DELTA_DELETE_ACCOUNT;
-
- typedef struct {
- uint16 unknown;
- } netr_DELTA_DELETE_SECRET;
-
typedef struct {
uint32 len;
uint32 maxlen;
[case(NETR_DELTA_RENAME_ALIAS)] netr_DELTA_RENAME *rename_alias;
[case(NETR_DELTA_ALIAS_MEMBER)] netr_DELTA_ALIAS_MEMBER *alias_member;
[case(NETR_DELTA_POLICY)] netr_DELTA_POLICY *policy;
- [case(NETR_DELTA_TRUSTED_DOMAIN)] netr_DELTA_TRUSTED_DOMAIN *trusted_domain;
- [case(NETR_DELTA_DELETE_TRUST)] netr_DELTA_DELETE_TRUST delete_trust;
+ [case(NETR_DELTA_TRUSTED_DOMAIN)] netr_DELTA_TRUSTED_DOMAIN *trusted_domain;
+ [case(NETR_DELTA_DELETE_TRUST)] ; /* sid only */
[case(NETR_DELTA_ACCOUNT)] netr_DELTA_ACCOUNT *account;
- [case(NETR_DELTA_DELETE_ACCOUNT)] netr_DELTA_DELETE_ACCOUNT delete_account;
+ [case(NETR_DELTA_DELETE_ACCOUNT)] ; /* sid only */
[case(NETR_DELTA_SECRET)] netr_DELTA_SECRET *secret;
- [case(NETR_DELTA_DELETE_SECRET)] netr_DELTA_DELETE_SECRET delete_secret;
+ [case(NETR_DELTA_DELETE_SECRET)] ; /* name only */
[case(NETR_DELTA_DELETE_GROUP2)] netr_DELTA_DELETE_USER *delete_group;
[case(NETR_DELTA_DELETE_USER2)] netr_DELTA_DELETE_USER *delete_user;
[case(NETR_DELTA_MODIFY_COUNT)] udlong *modified_count;
+ [default];
} netr_DELTA_UNION;
typedef [switch_type(netr_DeltaEnum)] union {
[case(NETR_DELTA_DELETE_GROUP2)] uint32 rid;
[case(NETR_DELTA_DELETE_USER2)] uint32 rid;
[case(NETR_DELTA_MODIFY_COUNT)] ;
+ [default];
} netr_DELTA_ID_UNION;
typedef struct {
[in] [string,charset(UTF16)] uint16 *computername,
[in] netr_Authenticator *credential,
[in,out,ref] netr_Authenticator *return_authenticator,
- [in] [subcontext(4),subcontext_size(change_log_entry_size)] netr_ChangeLogEntry change_log_entry,
- [in] [value(ndr_size_netr_ChangeLogEntry(&change_log_entry, ndr->iconv_convenience, ndr->flags))] uint32 change_log_entry_size,
+ /*
+ * we cannot use subcontext_size() here, as
+ * change_log_entry_size is encoded after the subcontext
+ */
+ [in] [subcontext(4)/*,subcontext_size(change_log_entry_size)*/]
+ netr_ChangeLogEntry change_log_entry,
+ [in] [value(ndr_size_netr_ChangeLogEntry(&change_log_entry,
+ ndr->flags))]
+ uint32 change_log_entry_size,
[out,ref] netr_DELTA_ENUM_ARRAY **delta_enum_array
);
[size_is(length)] uint8 *data;
} netr_Blob;
- WERROR netr_NetrEnumerateTrustedDomains(
+ NTSTATUS netr_NetrEnumerateTrustedDomains(
[in,unique] [string,charset(UTF16)] uint16 *server_name,
[out,ref] netr_Blob *trusted_domains_blob
);
DS_ONLY_LDAP_NEEDED |
DS_IS_FLAT_NAME |
DS_IS_DNS_NAME |
+ DS_TRY_NEXTCLOSEST_SITE |
+ DS_DIRECTORY_SERVICE_6_REQUIRED |
+ DS_WEB_SERVICE_REQUIRED |
DS_RETURN_FLAT_NAME |
DS_RETURN_DNS_NAME);
} netr_DsRGetDCNameInfo_AddressType;
typedef [bitmap32bit] bitmap {
- DS_SERVER_PDC = NBT_SERVER_PDC,
- DS_SERVER_GC = NBT_SERVER_GC,
- DS_SERVER_LDAP = NBT_SERVER_LDAP,
- DS_SERVER_DS = NBT_SERVER_DS,
- DS_SERVER_KDC = NBT_SERVER_KDC,
- DS_SERVER_TIMESERV = NBT_SERVER_TIMESERV,
- DS_SERVER_CLOSEST = NBT_SERVER_CLOSEST,
- DS_SERVER_WRITABLE = NBT_SERVER_WRITABLE,
- DS_SERVER_GOOD_TIMESERV = NBT_SERVER_GOOD_TIMESERV,
- DS_SERVER_NDNC = NBT_SERVER_NDNC,
- DS_SERVER_SELECT_SECRET_DOMAIN_6 = NBT_SERVER_SELECT_SECRET_DOMAIN_6,
- DS_SERVER_FULL_SECRET_DOMAIN_6 = NBT_SERVER_FULL_SECRET_DOMAIN_6,
+ DS_SERVER_PDC = 0x00000001,
+ DS_SERVER_GC = 0x00000004,
+ DS_SERVER_LDAP = 0x00000008,
+ DS_SERVER_DS = 0x00000010,
+ DS_SERVER_KDC = 0x00000020,
+ DS_SERVER_TIMESERV = 0x00000040,
+ DS_SERVER_CLOSEST = 0x00000080,
+ DS_SERVER_WRITABLE = 0x00000100,
+ DS_SERVER_GOOD_TIMESERV = 0x00000200,
+ DS_SERVER_NDNC = 0x00000400,
+ DS_SERVER_SELECT_SECRET_DOMAIN_6 = 0x00000800,
+ DS_SERVER_FULL_SECRET_DOMAIN_6 = 0x00001000,
+ DS_SERVER_WEBSERV = 0x00002000,
+ DS_SERVER_DS_8 = 0x00004000,
DS_DNS_CONTROLLER = 0x20000000,
DS_DNS_DOMAIN = 0x40000000,
- DS_DNS_FOREST = 0x80000000
+ DS_DNS_FOREST_ROOT = 0x80000000
} netr_DsR_DcFlags;
typedef [public] struct {
} netr_trust_extension_container;
typedef struct {
- lsa_String domainname;
- lsa_String dns_domainname;
- lsa_String dns_forestname;
+ lsa_StringLarge domainname;
+ lsa_StringLarge dns_domainname;
+ lsa_StringLarge dns_forestname;
GUID domain_guid;
dom_sid2 *domain_sid;
netr_trust_extension_container trust_extension;
- lsa_String dummy_string2;
- lsa_String dummy_string3;
- lsa_String dummy_string4;
+ lsa_StringLarge dummy_string2;
+ lsa_StringLarge dummy_string3;
+ lsa_StringLarge dummy_string4;
uint32 dummy_long1;
uint32 dummy_long2;
uint32 dummy_long3;
uint32 trusted_domain_count;
[size_is(trusted_domain_count)] netr_OneDomainInfo *trusted_domains;
netr_LsaPolicyInformation lsa_policy;
- lsa_String dns_hostname;
- lsa_String dummy_string2;
- lsa_String dummy_string3;
- lsa_String dummy_string4;
+ lsa_StringLarge dns_hostname;
+ lsa_StringLarge dummy_string2;
+ lsa_StringLarge dummy_string3;
+ lsa_StringLarge dummy_string4;
netr_WorkstationFlags workstation_flags;
netr_SupportedEncTypes supported_enc_types;
uint32 dummy_long3;
/*****************/
/* Function 0x1e */
+
+ /* [MS-NRPC] 2.2.1.3.8 NL_PASSWORD_VERSION */
+
+ /* someone's birthday ? */
+ const int NETLOGON_PASSWORD_VERSION_NUMBER_PRESENT = 0x02231968;
+
+ typedef struct {
+ uint32 ReservedField;
+ uint32 PasswordVersionNumber;
+ uint32 PasswordVersionPresent;
+ } NL_PASSWORD_VERSION;
+
typedef [flag(NDR_PAHEX)] struct {
uint8 data[512];
uint32 length;
/****************/
/* Function 0x24 */
- typedef [v1_enum] enum {
- NETR_TRUST_TYPE_DOWNLEVEL = 1,
- NETR_TRUST_TYPE_UPLEVEL = 2,
- NETR_TRUST_TYPE_MIT = 3,
- NETR_TRUST_TYPE_DCE = 4
- } netr_TrustType;
-
- typedef [bitmap32bit] bitmap {
- NETR_TRUST_ATTRIBUTE_NON_TRANSITIVE = 0x00000001,
- NETR_TRUST_ATTRIBUTE_UPLEVEL_ONLY = 0x00000002,
- NETR_TRUST_ATTRIBUTE_QUARANTINED_DOMAIN = 0x00000004,
- NETR_TRUST_ATTRIBUTE_FOREST_TRANSITIVE = 0x00000008,
- NETR_TRUST_ATTRIBUTE_CROSS_ORGANIZATION = 0x00000010,
- NETR_TRUST_ATTRIBUTE_WITHIN_FOREST = 0x00000020,
- NETR_TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL = 0x00000040
- } netr_TrustAttributes;
-
typedef struct {
[string,charset(UTF16)] uint16 *netbios_name;
[string,charset(UTF16)] uint16 *dns_name;
netr_TrustFlags trust_flags;
uint32 parent_index;
- netr_TrustType trust_type;
- netr_TrustAttributes trust_attributes;
+ lsa_TrustType trust_type;
+ lsa_TrustAttributes trust_attributes;
dom_sid2 *sid;
GUID guid;
} netr_DomainTrust;
/****************/
/* Function 0x2c */
- WERROR netr_GetForestTrustInformation(
+ NTSTATUS netr_GetForestTrustInformation(
[in,unique] [string,charset(UTF16)] uint16 *server_name,
- [in,ref] [string,charset(UTF16)] uint16 *trusted_domain_name,
+ [in,ref] [string,charset(UTF16)] uint16 *computer_name,
[in,ref] netr_Authenticator *credential,
[out,ref] netr_Authenticator *return_authenticator,
[in] uint32 flags,
[out,ref] samr_Password *old_owf_password,
[out,ref] netr_TrustInfo **trust_info
);
+
+ /****************/
+ /* Function 0x2f */
+
+ NTSTATUS netr_Unused47(void);
+
+
+ /****************/
+ /* Function 0x30 */
+
+ typedef enum {
+ NlDnsLdapAtSite = 22,
+ NlDnsGcAtSite = 25,
+ NlDnsDsaCname = 28,
+ NlDnsKdcAtSite = 30,
+ NlDnsDcAtSite = 32,
+ NlDnsRfc1510KdcAtSite = 34,
+ NlDnsGenericGcAtSite = 36
+ } netr_DnsType;
+
+ typedef enum {
+ NlDnsInfoTypeNone = 0,
+ NlDnsDomainName = 1,
+ NlDnsDomainNameAlias = 2,
+ NlDnsForestName = 3,
+ NlDnsForestNameAlias = 4,
+ NlDnsNdncDomainName = 5,
+ NlDnsRecordName = 6
+ } netr_DnsDomainInfoType;
+
+ typedef struct {
+ netr_DnsType type;
+ [string,charset(UTF16)] uint16 *dns_domain_info;
+ netr_DnsDomainInfoType dns_domain_info_type;
+ uint32 priority;
+ uint32 weight;
+ uint32 port;
+ boolean32 dns_register;
+ uint32 status;
+ } NL_DNS_NAME_INFO;
+
+ typedef [public] struct {
+ uint32 count;
+ [size_is(count)] NL_DNS_NAME_INFO *names;
+ } NL_DNS_NAME_INFO_ARRAY;
+
+ NTSTATUS netr_DsrUpdateReadOnlyServerDnsRecords(
+ [in,unique] [string,charset(UTF16)] uint16 *server_name,
+ [in,ref] [string,charset(UTF16)] uint16 *computer_name,
+ [in, ref] netr_Authenticator *credential,
+ [out,ref] netr_Authenticator *return_authenticator,
+ [in,unique] [string,charset(UTF16)] uint16 *site_name,
+ [in] uint32 dns_ttl,
+ [in,out,ref] NL_DNS_NAME_INFO_ARRAY *dns_names
+ );
}