r4774: It appears the SensitiveData contains the password history, as the
[samba.git] / source4 / librpc / idl / samr.idl
index 8feb726ac88f4738b4f48a25a11d3c487fc4f8a2..89a06112a7325f9d5cad0190f30ecba1e09d7b06 100644 (file)
@@ -8,25 +8,27 @@
   Thanks to Todd Sabin for some information from his samr.idl in acltools
 */
 
-[ uuid(12345778-1234-abcd-ef00-0123456789ac),
+[ uuid("12345778-1234-abcd-ef00-0123456789ac"),
   version(1.0),
-  endpoints(samr,TCP-0),
-  pointer_default(unique)
+  endpoint("ncacn_np:[\\pipe\\samr]","ncacn_ip_tcp:", "ncalrpc:"),
+  pointer_default(unique),
+  depends(lsa,security)
 ] interface samr
 {
        /* account control (acct_flags) bits */
-       const int ACB_DISABLED  = 0x0001;  /* 1 = User account disabled */
-       const int ACB_HOMDIRREQ = 0x0002;  /* 1 = Home directory required */
-       const int ACB_PWNOTREQ  = 0x0004;  /* 1 = User password not required */
-       const int ACB_TEMPDUP   = 0x0008;  /* 1 = Temporary duplicate account */
-       const int ACB_NORMAL    = 0x0010;  /* 1 = Normal user account */
-       const int ACB_MNS       = 0x0020;  /* 1 = MNS logon user account */
-       const int ACB_DOMTRUST  = 0x0040;  /* 1 = Interdomain trust account */
-       const int ACB_WSTRUST   = 0x0080;  /* 1 = Workstation trust account */
-       const int ACB_SVRTRUST  = 0x0100;  /* 1 = Server trust account */
-       const int ACB_PWNOEXP   = 0x0200;  /* 1 = User password does not expire */
-       const int ACB_AUTOLOCK  = 0x0400;  /* 1 = Account auto locked */
-
+       typedef [public] bitmap {
+               ACB_DISABLED  = 0x00000001,  /* 1 = User account disabled */
+               ACB_HOMDIRREQ = 0x00000002,  /* 1 = Home directory required */
+               ACB_PWNOTREQ  = 0x00000004,  /* 1 = User password not required */
+               ACB_TEMPDUP   = 0x00000008,  /* 1 = Temporary duplicate account */
+               ACB_NORMAL    = 0x00000010,  /* 1 = Normal user account */
+               ACB_MNS       = 0x00000020,  /* 1 = MNS logon user account */
+               ACB_DOMTRUST  = 0x00000040,  /* 1 = Interdomain trust account */
+               ACB_WSTRUST   = 0x00000080,  /* 1 = Workstation trust account */
+               ACB_SVRTRUST  = 0x00000100,  /* 1 = Server trust account */
+               ACB_PWNOEXP   = 0x00000200,  /* 1 = User password does not expire */
+               ACB_AUTOLOCK  = 0x00000400   /* 1 = Account auto locked */
+       } samr_AcctFlags;
 
        /******************/
        /* Function: 0x00 */
        /******************/
        /* Function: 0x02 */
 
-       typedef struct {
-               [range(0,0x40000),value(ndr_size_security_descriptor(r->sd))] uint32 sd_size;
-               [subcontext(4)] security_descriptor *sd;
-       } samr_SdBuf;
-
        NTSTATUS samr_SetSecurity (
                [in,ref]          policy_handle *handle,
                [in]              uint32 sec_info,
-               [in,ref]          samr_SdBuf *sdbuf
+               [in,ref]          sec_desc_buf *sdbuf
                );
 
        /******************/
@@ -64,7 +61,7 @@
        NTSTATUS samr_QuerySecurity (
                [in,ref]          policy_handle *handle,
                [in]              uint32 sec_info,
-               [out]             samr_SdBuf *sdbuf
+               [out]             sec_desc_buf *sdbuf
                );
 
        /******************/
        /******************/
        /* Function: 0x05 */
        typedef struct {
-               [value(2*strlen_m(r->name))] uint16 name_len;
-               [value(r->name_len)] uint16 name_size;
-               unistr_noterm *name;
-       } samr_Name;    
+               [value(2*strlen_m(r->string))] uint16 length;
+               [value(r->length)] uint16 size;
+               unistr_noterm *string;
+       } samr_String;  
 
        NTSTATUS samr_LookupDomain (
                [in,ref]  policy_handle *connect_handle,                
-               [in,ref]  samr_Name *domain,
+               [in,ref]  samr_String *domain,
                [out]     dom_sid2 *sid
                );
 
@@ -97,7 +94,7 @@
 
        typedef struct {
                uint32 idx;
-               samr_Name name;
+               samr_String name;
        } samr_SamEntry;
 
        typedef struct {
 
        /************************/
        /* Function    0x08     */
-
        /* server roles */
-       typedef enum {
+       typedef [v1_enum] enum {
                ROLE_STANDALONE    = 0,
                ROLE_DOMAIN_MEMBER = 1,
                ROLE_DOMAIN_BDC    = 2,
        } samr_Role;
 
        typedef struct {
-               uint16 min_password_len;
-               uint16 password_history;
+               uint16 min_password_length;
+               uint16 password_history_length;
                uint32 password_properties;
                /* yes, these are signed. They are in negative 100ns */
                int64  max_password_age;
        } samr_DomInfo1;
 
        typedef struct {
-               uint64 force_logoff_time;
-               samr_Name comment;
-               samr_Name domain;  /* domain name */
-               samr_Name primary; /* PDC name if this is a BDC */
+               NTTIME force_logoff_time;
+               samr_String comment;
+               samr_String domain;  /* domain name */
+               samr_String primary; /* PDC name if this is a BDC */
                uint64 sequence_num;
                uint32 unknown2;
-               uint32 role;
+               samr_Role role;
                uint32 unknown3;
                uint32 num_users;
                uint32 num_groups;
        } samr_DomInfo2;
 
        typedef struct {
-               uint64 force_logoff_time;
+               NTTIME force_logoff_time;
        } samr_DomInfo3;
 
        typedef struct {
-               /* I'm not entirely sure this is a comment. win2003
-                  allows it to be set, and it seems harmless (like a
-                  comment) but I haven't seen it show up anywhere */
-               samr_Name comment;
+               samr_String comment;
        } samr_DomInfo4;
 
        typedef struct {
-               samr_Name domain;
+               samr_String domain_name;
        } samr_DomInfo5;
 
        typedef struct {
-               samr_Name primary;
+               samr_String primary;
        } samr_DomInfo6;
 
        typedef struct {
-               uint32 role;
+               samr_Role role;
        } samr_DomInfo7;
 
        typedef struct {
                HYPER_T sequence_num;
-               NTTIME last_xxx_time;
+               NTTIME domain_create_time;
        } samr_DomInfo8;
 
        typedef struct {
 
        typedef struct {
                HYPER_T sequence_num;
-               NTTIME last_xxx_time;
+               NTTIME domain_create_time;
                uint32 unknown1;
                uint32 unknown2;
        } samr_DomInfo13;
        /* Function    0x0a     */
        NTSTATUS samr_CreateDomainGroup(
                [in,ref]      policy_handle *domain_handle,
-               [in,ref]      samr_Name *name,
+               [in,ref]      samr_String *name,
                [in]          uint32 access_mask,
                [out,ref]     policy_handle *group_handle,
                [out,ref]     uint32 *rid
        /* Function    0x0c     */
        NTSTATUS samr_CreateUser(
                [in,ref]      policy_handle *domain_handle,
-               [in,ref]      samr_Name *account_name,
+               [in,ref]      samr_String *account_name,
                [in]          uint32 access_mask,
                [out,ref]     policy_handle *user_handle,
                [out,ref]     uint32 *rid
        NTSTATUS samr_EnumDomainUsers(
                [in,ref]      policy_handle *domain_handle,
                [in,out,ref]  uint32 *resume_handle,
-               [in]          uint32 acct_flags,
+               [in]          samr_AcctFlags acct_flags,
                [in]          uint32 max_size,
                [out]         samr_SamArray *sam,
                [out]         uint32 num_entries
        /* Function    0x0e     */
        NTSTATUS samr_CreateDomAlias(
                [in,ref]      policy_handle *domain_handle,
-               [in,ref]      samr_Name     *aliasname,
+               [in,ref]      samr_String     *aliasname,
                [in]          uint32         access_mask,
                [out,ref]     policy_handle *alias_handle,
                [out,ref]     uint32        *rid
        NTSTATUS samr_EnumDomainAliases(
                [in,ref]      policy_handle *domain_handle,
                [in,out,ref]  uint32 *resume_handle,
-               [in]          uint32 acct_flags,
+               [in]          samr_AcctFlags acct_flags,
                [out]         samr_SamArray *sam,
                [out]         uint32 num_entries
                );
        /************************/
        /* Function    0x10     */
 
-       typedef enum {
-               SID_NAME_USE_NONE = 0,/* NOTUSED */
-               SID_NAME_USER    = 1, /* user */
-               SID_NAME_DOM_GRP = 2, /* domain group */
-               SID_NAME_DOMAIN  = 3, /* domain: don't know what this is */
-               SID_NAME_ALIAS   = 4, /* local group */
-               SID_NAME_WKN_GRP = 5, /* well-known group */
-               SID_NAME_DELETED = 6, /* deleted account: needed for c2 rating */
-               SID_NAME_INVALID = 7, /* invalid account */
-               SID_NAME_UNKNOWN = 8  /* oops. */
-       } samr_SidType;
-
        typedef struct {
                [range(0,1024)]  uint32 count;
                [size_is(count)] uint32 *ids;
        } samr_Ids;
 
        NTSTATUS samr_GetAliasMembership(
-               [in,ref]      policy_handle *alias_handle,
+               [in,ref]      policy_handle *domain_handle,
                [in,ref]      lsa_SidArray  *sids,
-               [out]         samr_Ids *rids
+               [out,ref]     samr_Ids *rids
                );
 
        /************************/
        NTSTATUS samr_LookupNames(
                [in,ref]      policy_handle *domain_handle,
                [in,range(0,1000)] uint32 num_names,
-               [in,ref,size_is(1000),length_is(num_names)] samr_Name *names,
+               [in,ref,size_is(1000),length_is(num_names)] samr_String *names,
                [out]         samr_Ids rids,
                [out]         samr_Ids types
                );
 
        typedef struct {
                uint32 count;
-               [size_is(count)] samr_Name *names;
-       } samr_Names;
+               [size_is(count)] samr_String *names;
+       } samr_Strings;
 
        NTSTATUS samr_LookupRids(
                [in,ref]      policy_handle *domain_handle,
                [in,range(0,1000)] uint32 num_rids,
                [in,ref,size_is(1000),length_is(num_rids)] uint32 *rids,
-               [out]         samr_Names names,
+               [out]         samr_Strings names,
                [out]         samr_Ids types
                );
 
        /* Function    0x14     */
 
        typedef struct {
-               samr_Name name;
-               uint32 unknown;
+               samr_String name;
+               uint32 attributes;
                uint32 num_members;
-               samr_Name description;
+               samr_String description;
        } samr_GroupInfoAll;
 
        typedef struct {
        } samr_GroupInfoX;
 
        typedef struct {
-               samr_Name description;
+               samr_String description;
        } samr_GroupInfoDesciption;
 
        typedef enum {
 
        typedef union {
                [case(GroupInfoAll)]         samr_GroupInfoAll    all;
-               [case(GroupInfoName)]        samr_Name            name;
+               [case(GroupInfoName)]        samr_String            name;
                [case(GroupInfoX)]           samr_GroupInfoX      unknown;
-               [case(GroupInfoDescription)] samr_Name            description;
+               [case(GroupInfoDescription)] samr_String            description;
                [case(GroupInfoAll2)]        samr_GroupInfoAll    all2;
        } samr_GroupInfo;
 
        NTSTATUS samr_QueryGroupInfo(
                [in,ref]                  policy_handle *group_handle,
-               [in]                      uint16 level,
+               [in]                      GroupInfo level,
                [out,switch_is(level)]    samr_GroupInfo *info
                );
 
        /* Function    0x15     */
        NTSTATUS samr_SetGroupInfo(
                [in,ref]                  policy_handle *group_handle,
-               [in]                      uint16 level,
+               [in]                      GroupInfo level,
                [in,switch_is(level),ref] samr_GroupInfo *info
                );
 
        /* Function    0x1c     */
 
        typedef struct {
-               samr_Name name;
+               samr_String name;
                uint32 num_members;
-               samr_Name description;
+               samr_String description;
        } samr_AliasInfoAll;
 
+       typedef enum {
+               AliasInfoAll          = 1,
+               AliasInfoName         = 2,
+               AliasInfoDescription  = 3
+       } AliasInfo;
+
        typedef union {
-               [case(1)] samr_AliasInfoAll all;
-               [case(2)] samr_Name name;
-               [case(3)] samr_Name description;
+               [case(AliasInfoAll)] samr_AliasInfoAll all;
+               [case(AliasInfoName)] samr_String name;
+               [case(AliasInfoDescription)] samr_String description;
        } samr_AliasInfo;
 
        NTSTATUS samr_QueryAliasInfo(
-               [in,ref]                  policy_handle *alias_handle,
-               [in]                      uint16 level,
+               [in,ref]                  policy_handle  *alias_handle,
+               [in]                      AliasInfo      level,
                [out,switch_is(level)]    samr_AliasInfo *info
                );
 
        /* Function    0x1d     */
        NTSTATUS samr_SetAliasInfo(
                [in,ref]                  policy_handle  *alias_handle,
-               [in]                      uint16          level,
-               [in,switch_is(level)]     samr_AliasInfo  info
+               [in]                      AliasInfo      level,
+               [in,switch_is(level),ref] samr_AliasInfo *info
                );
 
        /************************/
        /************************/
        /* Function    0x24     */
        typedef struct {
-               samr_Name account_name;
-               samr_Name full_name;
+               samr_String account_name;
+               samr_String full_name;
                uint32 primary_gid;
-               samr_Name description;
-               samr_Name comment;
+               samr_String description;
+               samr_String comment;
        } samr_UserInfo1;
 
        typedef struct {
-               samr_Name comment;
-               samr_Name unknown; /* settable, but doesn't stick. probably obsolete */
+               samr_String comment;
+               samr_String unknown; /* settable, but doesn't stick. probably obsolete */
                uint16 country_code;
                uint16 code_page;
        } samr_UserInfo2;
 
+       /* this is also used in samr and netlogon */
+       typedef [public, flag(NDR_PAHEX)] struct {
+               uint16 units_per_week;
+               [size_is(1260), length_is(units_per_week/8)] uint8 *bits;
+       } samr_LogonHours;
+
        typedef struct {
-               samr_Name account_name;
-               samr_Name full_name;
+               samr_String account_name;
+               samr_String full_name;
                uint32 rid;
                uint32 primary_gid;
-               samr_Name home_directory;
-               samr_Name home_drive;
-               samr_Name logon_script;
-               samr_Name profile_path;
-               samr_Name workstations;
+               samr_String home_directory;
+               samr_String home_drive;
+               samr_String logon_script;
+               samr_String profile_path;
+               samr_String workstations;
                NTTIME last_logon;
                NTTIME last_logoff;
                NTTIME last_password_change;
                NTTIME force_password_change;
                samr_LogonHours logon_hours;
                uint16 bad_password_count;
-               uint16 num_logons;
-               uint32 acct_flags;
+               uint16 logon_count;
+               samr_AcctFlags acct_flags;
        } samr_UserInfo3;
 
        typedef struct {
        } samr_UserInfo4;
 
        typedef struct {
-               samr_Name account_name;
-               samr_Name full_name;
+               samr_String account_name;
+               samr_String full_name;
                uint32 rid;
                uint32 primary_gid;
-               samr_Name home_directory;
-               samr_Name home_drive;
-               samr_Name logon_script;
-               samr_Name profile_path;
-               samr_Name description;
-               samr_Name workstations;
+               samr_String home_directory;
+               samr_String home_drive;
+               samr_String logon_script;
+               samr_String profile_path;
+               samr_String description;
+               samr_String workstations;
                NTTIME last_logon;
                NTTIME last_logoff;
                samr_LogonHours logon_hours;
                uint16 bad_password_count;
-               uint16 num_logons;
+               uint16 logon_count;
                NTTIME last_password_change;
                NTTIME acct_expiry;
-               uint32 acct_flags;
+               samr_AcctFlags acct_flags;
        } samr_UserInfo5;
 
        typedef struct {
-               samr_Name account_name;
-               samr_Name full_name;
+               samr_String account_name;
+               samr_String full_name;
        } samr_UserInfo6;
 
        typedef struct {
-               samr_Name account_name;
+               samr_String account_name;
        } samr_UserInfo7;
 
        typedef struct {
-               samr_Name full_name;
+               samr_String full_name;
        } samr_UserInfo8;
 
        typedef struct {
        } samr_UserInfo9;
 
        typedef struct {
-               samr_Name home_directory;
-               samr_Name home_drive;
+               samr_String home_directory;
+               samr_String home_drive;
        } samr_UserInfo10;
 
        typedef struct {
-               samr_Name logon_script;
+               samr_String logon_script;
        } samr_UserInfo11;
 
        typedef struct {
-               samr_Name profile_path;
+               samr_String profile_path;
        } samr_UserInfo12;
 
        typedef struct {
-               samr_Name description;
+               samr_String description;
        } samr_UserInfo13;
 
        typedef struct {
-               samr_Name workstations;
+               samr_String workstations;
        } samr_UserInfo14;
 
        typedef struct {
-               uint32 acct_flags;
+               samr_AcctFlags acct_flags;
        } samr_UserInfo16;
        
        typedef struct {
        } samr_UserInfo17;
 
        typedef struct {
-               samr_Name callback;
+               samr_String parameters;
        } samr_UserInfo20;
 
        /* this defines the bits used for fields_present in info21 */
-       const int SAMR_FIELD_NAME         = 0x00000002;
-       const int SAMR_FIELD_DESCRIPTION  = 0x00000010;
-       const int SAMR_FIELD_COMMENT      = 0x00000020;
-       const int SAMR_FIELD_LOGON_SCRIPT = 0x00000100;
-       const int SAMR_FIELD_PROFILE_PATH = 0x00000200;
-       const int SAMR_FIELD_WORKSTATION  = 0x00000400;
-       const int SAMR_FIELD_LOGON_HOURS  = 0x00002000;
-       const int SAMR_FIELD_CALLBACK     = 0x00200000;
-       const int SAMR_FIELD_COUNTRY_CODE = 0x00400000;
-       const int SAMR_FIELD_CODE_PAGE    = 0x00800000;
-       const int SAMR_FIELD_PASSWORD     = 0x03000000; /* 2 bits!? */
+       typedef bitmap {
+               SAMR_FIELD_NAME         = 0x00000002,
+               SAMR_FIELD_DESCRIPTION  = 0x00000010,
+               SAMR_FIELD_COMMENT      = 0x00000020,
+               SAMR_FIELD_LOGON_SCRIPT = 0x00000100,
+               SAMR_FIELD_PROFILE_PATH = 0x00000200,
+               SAMR_FIELD_WORKSTATION  = 0x00000400,
+               SAMR_FIELD_LOGON_HOURS  = 0x00002000,
+               SAMR_FIELD_ACCT_FLAGS   = 0x00100000,
+               SAMR_FIELD_PARAMETERS   = 0x00200000,
+               SAMR_FIELD_COUNTRY_CODE = 0x00400000,
+               SAMR_FIELD_CODE_PAGE    = 0x00800000,
+               SAMR_FIELD_PASSWORD     = 0x01000000, /* either of these */
+               SAMR_FIELD_PASSWORD2    = 0x02000000 /* two bits seems to work */
+       } samr_FieldsPresent;
 
        typedef struct {
                NTTIME last_logon;
                NTTIME acct_expiry;
                NTTIME allow_password_change;
                NTTIME force_password_change;
-               samr_Name account_name;
-               samr_Name full_name;
-               samr_Name home_directory;
-               samr_Name home_drive;
-               samr_Name logon_script;
-               samr_Name profile_path;
-               samr_Name description;
-               samr_Name workstations;
-               samr_Name comment;
-               samr_Name callback;
-               samr_Name unknown1;
-               samr_Name unknown2;
-               samr_Name unknown3;
+               samr_String account_name;
+               samr_String full_name;
+               samr_String home_directory;
+               samr_String home_drive;
+               samr_String logon_script;
+               samr_String profile_path;
+               samr_String description;
+               samr_String workstations;
+               samr_String comment;
+               samr_String parameters;
+               samr_String unknown1;
+               samr_String unknown2;
+               samr_String unknown3;
                uint32 buf_count;
                [size_is(buf_count)] uint8 *buffer;
                uint32 rid;
                uint32 primary_gid;
-               uint32 acct_flags;
-               uint32 fields_present;
+               samr_AcctFlags acct_flags;
+               samr_FieldsPresent fields_present;
                samr_LogonHours logon_hours;
                uint16 bad_password_count;
-               uint16 num_logons;
+               uint16 logon_count;
                uint16 country_code;
                uint16 code_page;
                uint8  nt_password_set;
                uint8  lm_password_set;
-               uint8  expired_flag;
+               uint8  password_expired;
                uint8  unknown4;
        } samr_UserInfo21;
 
-       typedef [flag(NDR_PAHEX)] struct {
+       typedef [public, flag(NDR_PAHEX)] struct {
                uint8 data[516];
        } samr_CryptPassword;
 
 
        /************************/
        /* Function    0x26     */
-       
+       typedef [public, flag(NDR_PAHEX)] struct {
+               uint8 hash[16];
+       } samr_Password;
+
        /*
          this is a password change interface that doesn't give
          the server the plaintext password. Depricated.
        typedef struct {
                uint32    idx;
                uint32    rid;
-               uint32    acct_flags;
-               samr_Name account_name;
-               samr_Name full_name;
-               samr_Name description;
+               samr_AcctFlags acct_flags;
+               samr_String account_name;
+               samr_String full_name;
+               samr_String description;
        } samr_DispEntryGeneral;
 
        typedef struct {
        typedef struct {
                uint32    idx;
                uint32    rid;
-               uint32    acct_flags;
-               samr_Name account_name;
-               samr_Name description;
+               samr_AcctFlags acct_flags;
+               samr_String account_name;
+               samr_String description;
        } samr_DispEntryFull;
 
        typedef struct {
        } samr_DispInfoFull;
 
        typedef struct {
-               [value(strlen_m(r->name))] uint16 name_len;
-               [value(strlen_m(r->name))] uint16 name_size;
-               ascstr_noterm *name;
+               [value(strlen_m(r->string))] uint16 length;
+               [value(strlen_m(r->string))] uint16 size;
+               ascstr_noterm *string;
        } samr_AsciiName;       
 
        typedef struct {
        NTSTATUS samr_GetDisplayEnumerationIndex(
                [in,ref]    policy_handle *domain_handle,
                [in]        uint16 level,
-               [in]        samr_Name name,
+               [in]        samr_String name,
                [out]       uint32 idx
                );
 
        const uint32 DOMAIN_REFUSE_PASSWORD_CHANGE   = 0x00000020;
 
        typedef struct {
-               uint16 min_password_len;
+               uint16 min_password_length;
                uint32 password_properties;
        } samr_PwInfo;
 
        NTSTATUS samr_GetDisplayEnumerationIndex2(
                [in,ref]    policy_handle *domain_handle,
                [in]        uint16 level,
-               [in]        samr_Name name,
+               [in]        samr_String name,
                [out]       uint32 idx
                );
 
        /* Function    0x32     */
        NTSTATUS samr_CreateUser2(
                [in,ref]      policy_handle *domain_handle,
-               [in,ref]      samr_Name *account_name,
-               [in]          uint32 acct_flags,
+               [in,ref]      samr_String *account_name,
+               [in]          samr_AcctFlags acct_flags,
                [in]          uint32 access_mask,
                [out,ref]     policy_handle *user_handle,
                [out,ref]     uint32 *access_granted,
        /************************/
        /* Function    0x37     */
        NTSTATUS samr_ChangePasswordUser2(
-               [in]              samr_Name *server,
-               [in,ref]          samr_Name *account,
+               [in]              samr_String *server,
+               [in,ref]          samr_String *account,
                [in]              samr_CryptPassword *nt_password,
                [in]              samr_Password *nt_verifier,
                [in]              bool8 lm_change,
        /************************/
        /* Function    0x38     */
        NTSTATUS samr_GetDomPwInfo(
-               [in]        samr_Name *name,
+               [in]        samr_String *name,
                [out]       samr_PwInfo info
                );
 
        /************************/
        /* Function    0x3f     */
 
-       const int SAMR_REJECT_OTHER      = 0;
-       const int SAMR_REJECT_TOO_SHORT  = 1;
-       const int SAMR_REJECT_COMPLEXITY = 2;
+       typedef [v1_enum] enum {
+               SAMR_REJECT_OTHER      = 0,
+               SAMR_REJECT_TOO_SHORT  = 1,
+               SAMR_REJECT_COMPLEXITY = 2
+       } samr_RejectReason;
 
        typedef struct {
-               uint32 reason;
+               samr_RejectReason reason;
                uint32 unknown1;
                uint32 unknown2;
        } samr_ChangeReject;
 
        NTSTATUS samr_ChangePasswordUser3(
-               [in]              samr_Name *server,
-               [in,ref]          samr_Name *account,
+               [in]              samr_String *server,
+               [in,ref]          samr_String *account,
                [in]              samr_CryptPassword *nt_password,
                [in]              samr_Password *nt_verifier,
                [in]              bool8 lm_change,
        */
 
        NTSTATUS samr_SetDsrmPassword(
-               [in]       samr_Name *name,
+               [in]       samr_String *name,
                [in]       uint32 unknown,
                [in]       samr_Password *hash
                );