netlogon: add new DS_SERVER_DS_8 flag.
[samba.git] / librpc / idl / netlogon.idl
index 1cc0f2bc20091dea4d00e0c6e51f9b140e51c1e2..f3dfc1b79d1885878d9280a008195f3409df1f62 100644 (file)
@@ -4,7 +4,7 @@
   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"
 
@@ -16,6 +16,7 @@ cpp_quote("#define netr_SamDatabaseID8Bit netr_SamDatabaseID")
   version(1.0),
   endpoint("ncacn_np:[\\pipe\\netlogon]","ncacn_ip_tcp:","ncalrpc:"),
   helper("../librpc/ndr/ndr_netlogon.h"),
+  ms_union,
   pointer_default(unique)
 ]
 
@@ -179,6 +180,7 @@ interface netlogon
                [case(NetlogonInteractiveTransitiveInformation)] netr_PasswordInfo *password;
                [case(NetlogonNetworkTransitiveInformation)]     netr_NetworkInfo  *network;
                [case(NetlogonServiceTransitiveInformation)]     netr_PasswordInfo *password;
+               [default];
        } netr_LogonLevel;
 
        typedef [public,flag(NDR_PAHEX)] struct {
@@ -205,9 +207,9 @@ interface netlogon
        } 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;
@@ -225,11 +227,15 @@ interface netlogon
                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 {
@@ -251,7 +257,7 @@ interface netlogon
                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;
@@ -291,6 +297,7 @@ interface netlogon
                [case(4)] netr_PacInfo  *pac;
                [case(NetlogonValidationGenericInfo2)] netr_GenericInfo2  *generic;
                [case(NetlogonValidationSamInfo4)] netr_SamInfo6 *sam6;
+               [default];
        } netr_Validation;
 
        typedef [public, flag(NDR_PAHEX)] struct {
@@ -302,7 +309,7 @@ interface netlogon
                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,
@@ -601,10 +608,6 @@ interface netlogon
                uint32 unknown8;
        } netr_DELTA_TRUSTED_DOMAIN;
 
-       typedef struct {
-               uint16 unknown;
-       } netr_DELTA_DELETE_TRUST;
-
        typedef struct {
                uint32 privilege_entries;
                uint32 privilege_control;
@@ -624,14 +627,6 @@ interface netlogon
                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;
@@ -694,15 +689,16 @@ interface netlogon
                [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 {
@@ -728,6 +724,7 @@ interface netlogon
                [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 {
@@ -1049,8 +1046,15 @@ interface netlogon
                [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
                );
 
@@ -1073,7 +1077,7 @@ interface netlogon
                [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
                );
@@ -1098,6 +1102,9 @@ interface netlogon
                                         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);
 
@@ -1130,21 +1137,23 @@ interface netlogon
        } 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 {
@@ -1357,15 +1366,15 @@ interface netlogon
        } 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;
@@ -1385,10 +1394,10 @@ interface netlogon
                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;
@@ -1412,6 +1421,18 @@ interface netlogon
 
        /*****************/
        /* 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;
@@ -1482,30 +1503,13 @@ interface netlogon
        /****************/
        /* 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;
@@ -1608,9 +1612,9 @@ interface netlogon
 
        /****************/
        /* 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,
@@ -1655,4 +1659,59 @@ interface netlogon
                [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
+               );
 }