s3:auth Remove NT_USER_TOKEN
[abartlet/samba.git/.git] / source3 / rpc_server / srv_samr_nt.c
index 70c162be9dbd4d17f37181d5afa10de6cf747b02..7755b3b7c33a40d1aeedfadf34225abfc8623b62 100644 (file)
 #include "smbd/globals.h"
 #include "../libcli/auth/libcli_auth.h"
 #include "../librpc/gen_ndr/srv_samr.h"
+#include "rpc_server/srv_samr_util.h"
+#include "../lib/crypto/arcfour.h"
+#include "secrets.h"
+#include "rpc_client/init_lsa.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
@@ -73,7 +77,7 @@ struct samr_alias_info {
 };
 
 typedef struct disp_info {
-       DOM_SID sid; /* identify which domain this is. */
+       struct dom_sid sid; /* identify which domain this is. */
        struct pdb_search *users; /* querydispinfo 1 and 4 */
        struct pdb_search *machines; /* querydispinfo 2 */
        struct pdb_search *groups; /* querydispinfo 3 and 5, enumgroups */
@@ -120,15 +124,15 @@ static const struct generic_mapping ali_generic_mapping = {
 /*******************************************************************
 *******************************************************************/
 
-static NTSTATUS make_samr_object_sd( TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd_size,
+static NTSTATUS make_samr_object_sd( TALLOC_CTX *ctx, struct security_descriptor **psd, size_t *sd_size,
                                      const struct generic_mapping *map,
-                                    DOM_SID *sid, uint32 sid_access )
+                                    struct dom_sid *sid, uint32 sid_access )
 {
-       DOM_SID domadmin_sid;
-       SEC_ACE ace[5];         /* at most 5 entries */
+       struct dom_sid domadmin_sid;
+       struct security_ace ace[5];             /* at most 5 entries */
        size_t i = 0;
 
-       SEC_ACL *psa = NULL;
+       struct security_acl *psa = NULL;
 
        /* basic access for Everyone */
 
@@ -175,8 +179,8 @@ static NTSTATUS make_samr_object_sd( TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd
  level of access for further checks.
 ********************************************************************/
 
-NTSTATUS access_check_object( SEC_DESC *psd, NT_USER_TOKEN *token,
-                                          SE_PRIV *rights, uint32 rights_mask,
+NTSTATUS access_check_object( struct security_descriptor *psd, struct security_token *token,
+                                          uint64_t *rights, uint32 rights_mask,
                                           uint32 des_access, uint32 *acc_granted,
                                          const char *debug )
 {
@@ -237,7 +241,7 @@ done:
  Map any MAXIMUM_ALLOWED_ACCESS request to a valid access set.
 ********************************************************************/
 
-void map_max_allowed_access(const NT_USER_TOKEN *nt_token,
+void map_max_allowed_access(const struct security_token *nt_token,
                            const struct unix_user_token *unix_token,
                            uint32_t *pacc_requested)
 {
@@ -265,7 +269,7 @@ void map_max_allowed_access(const NT_USER_TOKEN *nt_token,
 
        /* Full access for DOMAIN\Domain Admins. */
        if ( IS_DC ) {
-               DOM_SID domadmin_sid;
+               struct dom_sid domadmin_sid;
                sid_compose(&domadmin_sid, get_global_sam_sid(),
                            DOMAIN_RID_ADMINS);
                if (is_sid_in_token(nt_token, &domadmin_sid)) {
@@ -405,7 +409,7 @@ static void set_disp_info_cache_timeout(DISP_INFO *disp_info, time_t secs_fromno
                  (unsigned int)secs_fromnow ));
 
        disp_info->cache_timeout_event = event_add_timed(
-               smbd_event_context(), NULL,
+               server_event_context(), NULL,
                timeval_current_ofs(secs_fromnow, 0),
                disp_info_cache_idle_timeout_handler, (void *)disp_info);
 }
@@ -515,7 +519,7 @@ static uint32 count_sam_aliases(struct disp_info *info)
  _samr_Close
  ********************************************************************/
 
-NTSTATUS _samr_Close(pipes_struct *p, struct samr_Close *r)
+NTSTATUS _samr_Close(struct pipes_struct *p, struct samr_Close *r)
 {
        if (!close_policy_hnd(p, r->in.handle)) {
                return NT_STATUS_INVALID_HANDLE;
@@ -530,18 +534,18 @@ NTSTATUS _samr_Close(pipes_struct *p, struct samr_Close *r)
  _samr_OpenDomain
  ********************************************************************/
 
-NTSTATUS _samr_OpenDomain(pipes_struct *p,
+NTSTATUS _samr_OpenDomain(struct pipes_struct *p,
                          struct samr_OpenDomain *r)
 {
        struct samr_connect_info *cinfo;
        struct samr_domain_info *dinfo;
-       SEC_DESC *psd = NULL;
+       struct security_descriptor *psd = NULL;
        uint32    acc_granted;
        uint32    des_access = r->in.access_mask;
        NTSTATUS  status;
        size_t    sd_size;
        uint32_t extra_access = SAMR_DOMAIN_ACCESS_CREATE_USER;
-       SE_PRIV se_rights;
+       uint64_t se_rights;
 
        /* find the connection policy handle. */
 
@@ -607,7 +611,7 @@ NTSTATUS _samr_OpenDomain(pipes_struct *p,
  _samr_GetUserPwInfo
  ********************************************************************/
 
-NTSTATUS _samr_GetUserPwInfo(pipes_struct *p,
+NTSTATUS _samr_GetUserPwInfo(struct pipes_struct *p,
                             struct samr_GetUserPwInfo *r)
 {
        struct samr_user_info *uinfo;
@@ -667,12 +671,12 @@ NTSTATUS _samr_GetUserPwInfo(pipes_struct *p,
  _samr_SetSecurity
  ********************************************************************/
 
-NTSTATUS _samr_SetSecurity(pipes_struct *p,
+NTSTATUS _samr_SetSecurity(struct pipes_struct *p,
                           struct samr_SetSecurity *r)
 {
        struct samr_user_info *uinfo;
        uint32 i;
-       SEC_ACL *dacl;
+       struct security_acl *dacl;
        bool ret;
        struct samu *sampass=NULL;
        NTSTATUS status;
@@ -729,7 +733,7 @@ NTSTATUS _samr_SetSecurity(pipes_struct *p,
 /*******************************************************************
   build correct perms based on policies and password times for _samr_query_sec_obj
 *******************************************************************/
-static bool check_change_pw_access(TALLOC_CTX *mem_ctx, DOM_SID *user_sid)
+static bool check_change_pw_access(TALLOC_CTX *mem_ctx, struct dom_sid *user_sid)
 {
        struct samu *sampass=NULL;
        bool ret;
@@ -764,7 +768,7 @@ static bool check_change_pw_access(TALLOC_CTX *mem_ctx, DOM_SID *user_sid)
  _samr_QuerySecurity
  ********************************************************************/
 
-NTSTATUS _samr_QuerySecurity(pipes_struct *p,
+NTSTATUS _samr_QuerySecurity(struct pipes_struct *p,
                             struct samr_QuerySecurity *r)
 {
        struct samr_connect_info *cinfo;
@@ -773,11 +777,11 @@ NTSTATUS _samr_QuerySecurity(pipes_struct *p,
        struct samr_group_info *ginfo;
        struct samr_alias_info *ainfo;
        NTSTATUS status;
-       SEC_DESC * psd = NULL;
+       struct security_descriptor * psd = NULL;
        size_t sd_size = 0;
 
        cinfo = policy_handle_find(p, r->in.handle,
-                                  STD_RIGHT_READ_CONTROL_ACCESS, NULL,
+                                  SEC_STD_READ_CONTROL, NULL,
                                   struct samr_connect_info, &status);
        if (NT_STATUS_IS_OK(status)) {
                DEBUG(5,("_samr_QuerySecurity: querying security on SAM\n"));
@@ -787,7 +791,7 @@ NTSTATUS _samr_QuerySecurity(pipes_struct *p,
        }
 
        dinfo = policy_handle_find(p, r->in.handle,
-                                  STD_RIGHT_READ_CONTROL_ACCESS, NULL,
+                                  SEC_STD_READ_CONTROL, NULL,
                                   struct samr_domain_info, &status);
        if (NT_STATUS_IS_OK(status)) {
                DEBUG(5,("_samr_QuerySecurity: querying security on Domain "
@@ -802,7 +806,7 @@ NTSTATUS _samr_QuerySecurity(pipes_struct *p,
        }
 
        uinfo = policy_handle_find(p, r->in.handle,
-                                  STD_RIGHT_READ_CONTROL_ACCESS, NULL,
+                                  SEC_STD_READ_CONTROL, NULL,
                                   struct samr_user_info, &status);
        if (NT_STATUS_IS_OK(status)) {
                DEBUG(10,("_samr_QuerySecurity: querying security on user "
@@ -823,7 +827,7 @@ NTSTATUS _samr_QuerySecurity(pipes_struct *p,
        }
 
        ginfo = policy_handle_find(p, r->in.handle,
-                                  STD_RIGHT_READ_CONTROL_ACCESS, NULL,
+                                  SEC_STD_READ_CONTROL, NULL,
                                   struct samr_group_info, &status);
        if (NT_STATUS_IS_OK(status)) {
                /*
@@ -841,7 +845,7 @@ NTSTATUS _samr_QuerySecurity(pipes_struct *p,
        }
 
        ainfo = policy_handle_find(p, r->in.handle,
-                                  STD_RIGHT_READ_CONTROL_ACCESS, NULL,
+                                  SEC_STD_READ_CONTROL, NULL,
                                   struct samr_alias_info, &status);
        if (NT_STATUS_IS_OK(status)) {
                /*
@@ -920,7 +924,7 @@ static NTSTATUS make_user_sam_entry_list(TALLOC_CTX *ctx,
  _samr_EnumDomainUsers
  ********************************************************************/
 
-NTSTATUS _samr_EnumDomainUsers(pipes_struct *p,
+NTSTATUS _samr_EnumDomainUsers(struct pipes_struct *p,
                               struct samr_EnumDomainUsers *r)
 {
        NTSTATUS status;
@@ -1059,7 +1063,7 @@ static void make_group_sam_entry_list(TALLOC_CTX *ctx,
  _samr_EnumDomainGroups
  ********************************************************************/
 
-NTSTATUS _samr_EnumDomainGroups(pipes_struct *p,
+NTSTATUS _samr_EnumDomainGroups(struct pipes_struct *p,
                                struct samr_EnumDomainGroups *r)
 {
        NTSTATUS status;
@@ -1136,7 +1140,7 @@ NTSTATUS _samr_EnumDomainGroups(pipes_struct *p,
  _samr_EnumDomainAliases
  ********************************************************************/
 
-NTSTATUS _samr_EnumDomainAliases(pipes_struct *p,
+NTSTATUS _samr_EnumDomainAliases(struct pipes_struct *p,
                                 struct samr_EnumDomainAliases *r)
 {
        NTSTATUS status;
@@ -1403,7 +1407,7 @@ static NTSTATUS init_samr_dispinfo_5(TALLOC_CTX *ctx,
  _samr_QueryDisplayInfo
  ********************************************************************/
 
-NTSTATUS _samr_QueryDisplayInfo(pipes_struct *p,
+NTSTATUS _samr_QueryDisplayInfo(struct pipes_struct *p,
                                struct samr_QueryDisplayInfo *r)
 {
        NTSTATUS status;
@@ -1616,7 +1620,7 @@ NTSTATUS _samr_QueryDisplayInfo(pipes_struct *p,
  _samr_QueryDisplayInfo2
 ****************************************************************/
 
-NTSTATUS _samr_QueryDisplayInfo2(pipes_struct *p,
+NTSTATUS _samr_QueryDisplayInfo2(struct pipes_struct *p,
                                 struct samr_QueryDisplayInfo2 *r)
 {
        struct samr_QueryDisplayInfo q;
@@ -1638,7 +1642,7 @@ NTSTATUS _samr_QueryDisplayInfo2(pipes_struct *p,
  _samr_QueryDisplayInfo3
 ****************************************************************/
 
-NTSTATUS _samr_QueryDisplayInfo3(pipes_struct *p,
+NTSTATUS _samr_QueryDisplayInfo3(struct pipes_struct *p,
                                 struct samr_QueryDisplayInfo3 *r)
 {
        struct samr_QueryDisplayInfo q;
@@ -1660,7 +1664,7 @@ NTSTATUS _samr_QueryDisplayInfo3(pipes_struct *p,
  _samr_QueryAliasInfo
  ********************************************************************/
 
-NTSTATUS _samr_QueryAliasInfo(pipes_struct *p,
+NTSTATUS _samr_QueryAliasInfo(struct pipes_struct *p,
                              struct samr_QueryAliasInfo *r)
 {
        struct samr_alias_info *ainfo;
@@ -1722,7 +1726,7 @@ NTSTATUS _samr_QueryAliasInfo(pipes_struct *p,
  _samr_LookupNames
  ********************************************************************/
 
-NTSTATUS _samr_LookupNames(pipes_struct *p,
+NTSTATUS _samr_LookupNames(struct pipes_struct *p,
                           struct samr_LookupNames *r)
 {
        struct samr_domain_info *dinfo;
@@ -1792,7 +1796,11 @@ NTSTATUS _samr_LookupNames(pipes_struct *p,
        rids.ids = rid;
 
        types.count = num_rids;
-       types.ids = type;
+       types.ids = talloc_array(p->mem_ctx, uint32_t, num_rids);
+       NT_STATUS_HAVE_NO_MEMORY(type);
+       for (i = 0; i < num_rids; i++) {
+               types.ids[i] = (type[i] & 0xffffffff);
+       }
 
        *r->out.rids = rids;
        *r->out.types = types;
@@ -1806,7 +1814,7 @@ NTSTATUS _samr_LookupNames(pipes_struct *p,
  _samr_ChangePasswordUser
 ****************************************************************/
 
-NTSTATUS _samr_ChangePasswordUser(pipes_struct *p,
+NTSTATUS _samr_ChangePasswordUser(struct pipes_struct *p,
                                  struct samr_ChangePasswordUser *r)
 {
        NTSTATUS status;
@@ -1917,10 +1925,9 @@ NTSTATUS _samr_ChangePasswordUser(pipes_struct *p,
  _samr_ChangePasswordUser2
  ********************************************************************/
 
-NTSTATUS _samr_ChangePasswordUser2(pipes_struct *p,
+NTSTATUS _samr_ChangePasswordUser2(struct pipes_struct *p,
                                   struct samr_ChangePasswordUser2 *r)
 {
-       struct smbd_server_connection *sconn = smbd_server_conn;
        NTSTATUS status;
        fstring user_name;
        fstring wks;
@@ -1937,7 +1944,7 @@ NTSTATUS _samr_ChangePasswordUser2(pipes_struct *p,
         * function.
         */
 
-       (void)map_username(sconn, user_name);
+       (void)map_username(user_name);
 
        /*
         * UNIX username case mangling not required, pass_oem_change
@@ -1945,6 +1952,7 @@ NTSTATUS _samr_ChangePasswordUser2(pipes_struct *p,
         */
 
        status = pass_oem_change(user_name,
+                                p->client_id->name,
                                 r->in.lm_password->data,
                                 r->in.lm_verifier->hash,
                                 r->in.nt_password->data,
@@ -1964,10 +1972,9 @@ NTSTATUS _samr_ChangePasswordUser2(pipes_struct *p,
  _samr_OemChangePasswordUser2
 ****************************************************************/
 
-NTSTATUS _samr_OemChangePasswordUser2(pipes_struct *p,
+NTSTATUS _samr_OemChangePasswordUser2(struct pipes_struct *p,
                                      struct samr_OemChangePasswordUser2 *r)
 {
-       struct smbd_server_connection *sconn = smbd_server_conn;
        NTSTATUS status;
        fstring user_name;
        const char *wks = NULL;
@@ -1986,7 +1993,7 @@ NTSTATUS _samr_OemChangePasswordUser2(pipes_struct *p,
         * function.
         */
 
-       (void)map_username(sconn, user_name);
+       (void)map_username(user_name);
 
        /*
         * UNIX username case mangling not required, pass_oem_change
@@ -1998,6 +2005,7 @@ NTSTATUS _samr_OemChangePasswordUser2(pipes_struct *p,
        }
 
        status = pass_oem_change(user_name,
+                                p->client_id->name,
                                 r->in.password->data,
                                 r->in.hash->hash,
                                 0,
@@ -2017,10 +2025,9 @@ NTSTATUS _samr_OemChangePasswordUser2(pipes_struct *p,
  _samr_ChangePasswordUser3
  ********************************************************************/
 
-NTSTATUS _samr_ChangePasswordUser3(pipes_struct *p,
+NTSTATUS _samr_ChangePasswordUser3(struct pipes_struct *p,
                                   struct samr_ChangePasswordUser3 *r)
 {
-       struct smbd_server_connection *sconn = smbd_server_conn;
        NTSTATUS status;
        fstring user_name;
        const char *wks = NULL;
@@ -2043,7 +2050,7 @@ NTSTATUS _samr_ChangePasswordUser3(pipes_struct *p,
         * function.
         */
 
-       (void)map_username(sconn, user_name);
+       (void)map_username(user_name);
 
        /*
         * UNIX username case mangling not required, pass_oem_change
@@ -2051,6 +2058,7 @@ NTSTATUS _samr_ChangePasswordUser3(pipes_struct *p,
         */
 
        status = pass_oem_change(user_name,
+                                p->client_id->name,
                                 r->in.lm_password->data,
                                 r->in.lm_verifier->hash,
                                 r->in.nt_password->data,
@@ -2152,7 +2160,7 @@ static bool make_samr_lookup_rids(TALLOC_CTX *ctx, uint32 num_names,
  _samr_LookupRids
  ********************************************************************/
 
-NTSTATUS _samr_LookupRids(pipes_struct *p,
+NTSTATUS _samr_LookupRids(struct pipes_struct *p,
                          struct samr_LookupRids *r)
 {
        struct samr_domain_info *dinfo;
@@ -2231,21 +2239,21 @@ NTSTATUS _samr_LookupRids(pipes_struct *p,
  _samr_OpenUser
 ********************************************************************/
 
-NTSTATUS _samr_OpenUser(pipes_struct *p,
+NTSTATUS _samr_OpenUser(struct pipes_struct *p,
                        struct samr_OpenUser *r)
 {
        struct samu *sampass=NULL;
-       DOM_SID sid;
+       struct dom_sid sid;
        struct samr_domain_info *dinfo;
        struct samr_user_info *uinfo;
-       SEC_DESC *psd = NULL;
+       struct security_descriptor *psd = NULL;
        uint32    acc_granted;
        uint32    des_access = r->in.access_mask;
        uint32_t extra_access = 0;
        size_t    sd_size;
        bool ret;
        NTSTATUS nt_status;
-       SE_PRIV se_rights;
+       uint64_t se_rights;
        NTSTATUS status;
 
        dinfo = policy_handle_find(p, r->in.domain_handle,
@@ -2397,6 +2405,32 @@ static NTSTATUS init_samr_parameters_string(TALLOC_CTX *mem_ctx,
        return NT_STATUS_OK;
 }
 
+/*************************************************************************
+ *************************************************************************/
+
+static struct samr_LogonHours get_logon_hours_from_pdb(TALLOC_CTX *mem_ctx,
+                                                      struct samu *pw)
+{
+       struct samr_LogonHours hours;
+       const int units_per_week = 168;
+
+       ZERO_STRUCT(hours);
+       hours.bits = talloc_array(mem_ctx, uint8_t, units_per_week);
+       if (!hours.bits) {
+               return hours;
+       }
+
+       hours.units_per_week = units_per_week;
+       memset(hours.bits, 0xFF, units_per_week);
+
+       if (pdb_get_hours(pw)) {
+               memcpy(hours.bits, pdb_get_hours(pw),
+                      MIN(pdb_get_hours_len(pw), units_per_week));
+       }
+
+       return hours;
+}
+
 /*************************************************************************
  get_user_info_1.
  *************************************************************************/
@@ -2404,9 +2438,9 @@ static NTSTATUS init_samr_parameters_string(TALLOC_CTX *mem_ctx,
 static NTSTATUS get_user_info_1(TALLOC_CTX *mem_ctx,
                                struct samr_UserInfo1 *r,
                                struct samu *pw,
-                               DOM_SID *domain_sid)
+                               struct dom_sid *domain_sid)
 {
-       const DOM_SID *sid_group;
+       const struct dom_sid *sid_group;
        uint32_t primary_gid;
 
        become_root();
@@ -2439,7 +2473,7 @@ static NTSTATUS get_user_info_2(TALLOC_CTX *mem_ctx,
                                struct samu *pw)
 {
        r->comment.string               = talloc_strdup(mem_ctx, pdb_get_comment(pw));
-       r->unknown.string               = NULL;
+       r->reserved.string              = NULL;
        r->country_code                 = 0;
        r->code_page                    = 0;
 
@@ -2453,9 +2487,9 @@ static NTSTATUS get_user_info_2(TALLOC_CTX *mem_ctx,
 static NTSTATUS get_user_info_3(TALLOC_CTX *mem_ctx,
                                struct samr_UserInfo3 *r,
                                struct samu *pw,
-                               DOM_SID *domain_sid)
+                               struct dom_sid *domain_sid)
 {
-       const DOM_SID *sid_user, *sid_group;
+       const struct dom_sid *sid_user, *sid_group;
        uint32_t rid, primary_gid;
 
        sid_user = pdb_get_user_sid(pw);
@@ -2524,9 +2558,9 @@ static NTSTATUS get_user_info_4(TALLOC_CTX *mem_ctx,
 static NTSTATUS get_user_info_5(TALLOC_CTX *mem_ctx,
                                struct samr_UserInfo5 *r,
                                struct samu *pw,
-                               DOM_SID *domain_sid)
+                               struct dom_sid *domain_sid)
 {
-       const DOM_SID *sid_user, *sid_group;
+       const struct dom_sid *sid_user, *sid_group;
        uint32_t rid, primary_gid;
 
        sid_user = pdb_get_user_sid(pw);
@@ -2729,17 +2763,25 @@ static NTSTATUS get_user_info_17(TALLOC_CTX *mem_ctx,
  user. JRA.
  *************************************************************************/
 
-static NTSTATUS get_user_info_18(pipes_struct *p,
+static NTSTATUS get_user_info_18(struct pipes_struct *p,
                                 TALLOC_CTX *mem_ctx,
                                 struct samr_UserInfo18 *r,
-                                DOM_SID *user_sid)
+                                struct dom_sid *user_sid)
 {
        struct samu *smbpass=NULL;
        bool ret;
+       const uint8_t *nt_pass = NULL;
+       const uint8_t *lm_pass = NULL;
 
        ZERO_STRUCTP(r);
 
-       if (p->auth.auth_type != PIPE_AUTH_TYPE_NTLMSSP || p->auth.auth_type != PIPE_AUTH_TYPE_SPNEGO_NTLMSSP) {
+       if (p->server_info->system) {
+               goto query;
+       }
+
+       if ((p->auth.auth_type != DCERPC_AUTH_TYPE_NTLMSSP) ||
+           ((p->auth.auth_type == DCERPC_AUTH_TYPE_SPNEGO) &&
+            (p->auth.spnego_type != PIPE_AUTH_TYPE_SPNEGO_NTLMSSP))) {
                return NT_STATUS_ACCESS_DENIED;
        }
 
@@ -2747,6 +2789,7 @@ static NTSTATUS get_user_info_18(pipes_struct *p,
                return NT_STATUS_ACCESS_DENIED;
        }
 
+ query:
        /*
         * Do *NOT* do become_root()/unbecome_root() here ! JRA.
         */
@@ -2770,10 +2813,17 @@ static NTSTATUS get_user_info_18(pipes_struct *p,
                return NT_STATUS_ACCOUNT_DISABLED;
        }
 
-       r->lm_pwd_active = true;
-       r->nt_pwd_active = true;
-       memcpy(r->lm_pwd.hash, pdb_get_lanman_passwd(smbpass), 16);
-       memcpy(r->nt_pwd.hash, pdb_get_nt_passwd(smbpass), 16);
+       lm_pass = pdb_get_lanman_passwd(smbpass);
+       if (lm_pass != NULL) {
+               memcpy(r->lm_pwd.hash, lm_pass, 16);
+               r->lm_pwd_active = true;
+       }
+
+       nt_pass = pdb_get_nt_passwd(smbpass);
+       if (nt_pass != NULL) {
+               memcpy(r->nt_pwd.hash, nt_pass, 16);
+               r->nt_pwd_active = true;
+       }
        r->password_expired = 0; /* FIXME */
 
        TALLOC_FREE(smbpass);
@@ -2826,11 +2876,11 @@ static NTSTATUS get_user_info_20(TALLOC_CTX *mem_ctx,
 static NTSTATUS get_user_info_21(TALLOC_CTX *mem_ctx,
                                 struct samr_UserInfo21 *r,
                                 struct samu *pw,
-                                DOM_SID *domain_sid,
+                                struct dom_sid *domain_sid,
                                 uint32_t acc_granted)
 {
        NTSTATUS status;
-       const DOM_SID *sid_user, *sid_group;
+       const struct dom_sid *sid_user, *sid_group;
        uint32_t rid, primary_gid;
        NTTIME force_password_change;
        time_t must_change_time;
@@ -2937,13 +2987,13 @@ static NTSTATUS get_user_info_21(TALLOC_CTX *mem_ctx,
  _samr_QueryUserInfo
  ********************************************************************/
 
-NTSTATUS _samr_QueryUserInfo(pipes_struct *p,
+NTSTATUS _samr_QueryUserInfo(struct pipes_struct *p,
                             struct samr_QueryUserInfo *r)
 {
        NTSTATUS status;
        union samr_UserInfo *user_info = NULL;
        struct samr_user_info *uinfo;
-       DOM_SID domain_sid;
+       struct dom_sid domain_sid;
        uint32 rid;
        bool ret = false;
        struct samu *pwd = NULL;
@@ -3139,7 +3189,7 @@ NTSTATUS _samr_QueryUserInfo(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_QueryUserInfo2(pipes_struct *p,
+NTSTATUS _samr_QueryUserInfo2(struct pipes_struct *p,
                              struct samr_QueryUserInfo2 *r)
 {
        struct samr_QueryUserInfo u;
@@ -3155,12 +3205,12 @@ NTSTATUS _samr_QueryUserInfo2(pipes_struct *p,
  _samr_GetGroupsForUser
  ********************************************************************/
 
-NTSTATUS _samr_GetGroupsForUser(pipes_struct *p,
+NTSTATUS _samr_GetGroupsForUser(struct pipes_struct *p,
                                struct samr_GetGroupsForUser *r)
 {
        struct samr_user_info *uinfo;
        struct samu *sam_pass=NULL;
-       DOM_SID *sids;
+       struct dom_sid *sids;
        struct samr_RidWithAttribute dom_gid;
        struct samr_RidWithAttribute *gids = NULL;
        uint32 primary_group_rid;
@@ -3371,7 +3421,7 @@ static NTSTATUS query_dom_info_2(TALLOC_CTX *mem_ctx,
        r->primary.string               = global_myname();
        r->sequence_num                 = seq_num;
        r->domain_server_state          = DOMAIN_SERVER_ENABLED;
-       r->role                         = samr_get_server_role();
+       r->role                         = (enum samr_Role) samr_get_server_role();
        r->unknown3                     = 1;
 
        return NT_STATUS_OK;
@@ -3446,7 +3496,7 @@ static NTSTATUS query_dom_info_6(TALLOC_CTX *mem_ctx,
 static NTSTATUS query_dom_info_7(TALLOC_CTX *mem_ctx,
                                 struct samr_DomInfo7 *r)
 {
-       r->role = samr_get_server_role();
+       r->role = (enum samr_Role) samr_get_server_role();
 
        return NT_STATUS_OK;
 }
@@ -3596,7 +3646,7 @@ static NTSTATUS query_dom_info_13(TALLOC_CTX *mem_ctx,
  _samr_QueryDomainInfo
  ********************************************************************/
 
-NTSTATUS _samr_QueryDomainInfo(pipes_struct *p,
+NTSTATUS _samr_QueryDomainInfo(struct pipes_struct *p,
                               struct samr_QueryDomainInfo *r)
 {
        NTSTATUS status = NT_STATUS_OK;
@@ -3742,22 +3792,22 @@ static NTSTATUS can_create(TALLOC_CTX *mem_ctx, const char *new_name)
  _samr_CreateUser2
  ********************************************************************/
 
-NTSTATUS _samr_CreateUser2(pipes_struct *p,
+NTSTATUS _samr_CreateUser2(struct pipes_struct *p,
                           struct samr_CreateUser2 *r)
 {
        const char *account = NULL;
-       DOM_SID sid;
+       struct dom_sid sid;
        uint32_t acb_info = r->in.acct_flags;
        struct samr_domain_info *dinfo;
        struct samr_user_info *uinfo;
        NTSTATUS nt_status;
        uint32 acc_granted;
-       SEC_DESC *psd;
+       struct security_descriptor *psd;
        size_t    sd_size;
        /* check this, when giving away 'add computer to domain' privs */
        uint32    des_access = GENERIC_RIGHTS_USER_ALL_ACCESS;
        bool can_add_account = False;
-       SE_PRIV se_rights;
+       uint64_t se_rights;
 
        dinfo = policy_handle_find(p, r->in.domain_handle,
                                   SAMR_DOMAIN_ACCESS_CREATE_USER, NULL,
@@ -3881,7 +3931,7 @@ NTSTATUS _samr_CreateUser2(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_CreateUser(pipes_struct *p,
+NTSTATUS _samr_CreateUser(struct pipes_struct *p,
                          struct samr_CreateUser *r)
 {
        struct samr_CreateUser2 c;
@@ -3902,7 +3952,7 @@ NTSTATUS _samr_CreateUser(pipes_struct *p,
  _samr_Connect
  ********************************************************************/
 
-NTSTATUS _samr_Connect(pipes_struct *p,
+NTSTATUS _samr_Connect(struct pipes_struct *p,
                       struct samr_Connect *r)
 {
        struct samr_connect_info *info;
@@ -3948,19 +3998,19 @@ NTSTATUS _samr_Connect(pipes_struct *p,
  _samr_Connect2
  ********************************************************************/
 
-NTSTATUS _samr_Connect2(pipes_struct *p,
+NTSTATUS _samr_Connect2(struct pipes_struct *p,
                        struct samr_Connect2 *r)
 {
        struct samr_connect_info *info = NULL;
        struct policy_handle hnd;
-       SEC_DESC *psd = NULL;
+       struct security_descriptor *psd = NULL;
        uint32    acc_granted;
        uint32    des_access = r->in.access_mask;
        NTSTATUS  nt_status;
        size_t    sd_size;
        const char *fn = "_samr_Connect2";
 
-       switch (p->hdr_req.opnum) {
+       switch (p->opnum) {
        case NDR_SAMR_CONNECT2:
                fn = "_samr_Connect2";
                break;
@@ -4013,7 +4063,7 @@ NTSTATUS _samr_Connect2(pipes_struct *p,
  _samr_Connect3
 ****************************************************************/
 
-NTSTATUS _samr_Connect3(pipes_struct *p,
+NTSTATUS _samr_Connect3(struct pipes_struct *p,
                        struct samr_Connect3 *r)
 {
        struct samr_Connect2 c;
@@ -4029,7 +4079,7 @@ NTSTATUS _samr_Connect3(pipes_struct *p,
  _samr_Connect4
  ********************************************************************/
 
-NTSTATUS _samr_Connect4(pipes_struct *p,
+NTSTATUS _samr_Connect4(struct pipes_struct *p,
                        struct samr_Connect4 *r)
 {
        struct samr_Connect2 c;
@@ -4045,7 +4095,7 @@ NTSTATUS _samr_Connect4(pipes_struct *p,
  _samr_Connect5
  ********************************************************************/
 
-NTSTATUS _samr_Connect5(pipes_struct *p,
+NTSTATUS _samr_Connect5(struct pipes_struct *p,
                        struct samr_Connect5 *r)
 {
        NTSTATUS status;
@@ -4075,13 +4125,13 @@ NTSTATUS _samr_Connect5(pipes_struct *p,
  _samr_LookupDomain
  **********************************************************************/
 
-NTSTATUS _samr_LookupDomain(pipes_struct *p,
+NTSTATUS _samr_LookupDomain(struct pipes_struct *p,
                            struct samr_LookupDomain *r)
 {
        NTSTATUS status;
        struct samr_connect_info *info;
        const char *domain_name;
-       DOM_SID *sid = NULL;
+       struct dom_sid *sid = NULL;
 
        /* win9x user manager likes to use SAMR_ACCESS_ENUM_DOMAINS here.
           Reverted that change so we will work with RAS servers again */
@@ -4124,7 +4174,7 @@ NTSTATUS _samr_LookupDomain(pipes_struct *p,
  _samr_EnumDomains
  **********************************************************************/
 
-NTSTATUS _samr_EnumDomains(pipes_struct *p,
+NTSTATUS _samr_EnumDomains(struct pipes_struct *p,
                           struct samr_EnumDomains *r)
 {
        NTSTATUS status;
@@ -4171,19 +4221,19 @@ NTSTATUS _samr_EnumDomains(pipes_struct *p,
  _samr_OpenAlias
  ********************************************************************/
 
-NTSTATUS _samr_OpenAlias(pipes_struct *p,
+NTSTATUS _samr_OpenAlias(struct pipes_struct *p,
                         struct samr_OpenAlias *r)
 {
-       DOM_SID sid;
+       struct dom_sid sid;
        uint32 alias_rid = r->in.rid;
        struct samr_alias_info *ainfo;
        struct samr_domain_info *dinfo;
-       SEC_DESC *psd = NULL;
+       struct security_descriptor *psd = NULL;
        uint32    acc_granted;
        uint32    des_access = r->in.access_mask;
        size_t    sd_size;
        NTSTATUS  status;
-       SE_PRIV se_rights;
+       uint64_t se_rights;
 
        dinfo = policy_handle_find(p, r->in.domain_handle,
                                   SAMR_DOMAIN_ACCESS_OPEN_ACCOUNT, NULL,
@@ -4702,6 +4752,7 @@ static NTSTATUS set_user_info_21(struct samr_UserInfo21 *id21,
 
 static NTSTATUS set_user_info_23(TALLOC_CTX *mem_ctx,
                                 struct samr_UserInfo23 *id23,
+                                const char *rhost,
                                 struct samu *pwd)
 {
        char *plaintext_buf = NULL;
@@ -4764,7 +4815,8 @@ static NTSTATUS set_user_info_23(TALLOC_CTX *mem_ctx,
                                DEBUG(1, ("chgpasswd: Username does not exist in system !?!\n"));
                        }
 
-                       if(!chgpasswd(pdb_get_username(pwd), passwd, "", plaintext_buf, True)) {
+                       if(!chgpasswd(pdb_get_username(pwd), rhost,
+                                     passwd, "", plaintext_buf, True)) {
                                return NT_STATUS_ACCESS_DENIED;
                        }
                        TALLOC_FREE(passwd);
@@ -4792,7 +4844,7 @@ static NTSTATUS set_user_info_23(TALLOC_CTX *mem_ctx,
  set_user_info_pw
  ********************************************************************/
 
-static bool set_user_info_pw(uint8 *pass, struct samu *pwd)
+static bool set_user_info_pw(uint8 *pass, const char *rhost, struct samu *pwd)
 {
        size_t len = 0;
        char *plaintext_buf = NULL;
@@ -4835,7 +4887,8 @@ static bool set_user_info_pw(uint8 *pass, struct samu *pwd)
                                DEBUG(1, ("chgpasswd: Username does not exist in system !?!\n"));
                        }
 
-                       if(!chgpasswd(pdb_get_username(pwd), passwd, "", plaintext_buf, True)) {
+                       if(!chgpasswd(pdb_get_username(pwd), rhost, passwd,
+                                     "", plaintext_buf, True)) {
                                return False;
                        }
                        TALLOC_FREE(passwd);
@@ -4854,6 +4907,7 @@ static bool set_user_info_pw(uint8 *pass, struct samu *pwd)
  ********************************************************************/
 
 static NTSTATUS set_user_info_24(TALLOC_CTX *mem_ctx,
+                                const char *rhost,
                                 struct samr_UserInfo24 *id24,
                                 struct samu *pwd)
 {
@@ -4864,7 +4918,7 @@ static NTSTATUS set_user_info_24(TALLOC_CTX *mem_ctx,
                return NT_STATUS_INVALID_PARAMETER;
        }
 
-       if (!set_user_info_pw(id24->password.data, pwd)) {
+       if (!set_user_info_pw(id24->password.data, rhost, pwd)) {
                return NT_STATUS_WRONG_PASSWORD;
        }
 
@@ -4883,6 +4937,7 @@ static NTSTATUS set_user_info_24(TALLOC_CTX *mem_ctx,
  ********************************************************************/
 
 static NTSTATUS set_user_info_25(TALLOC_CTX *mem_ctx,
+                                const char *rhost,
                                 struct samr_UserInfo25 *id25,
                                 struct samu *pwd)
 {
@@ -4904,7 +4959,7 @@ static NTSTATUS set_user_info_25(TALLOC_CTX *mem_ctx,
        if ((id25->info.fields_present & SAMR_FIELD_NT_PASSWORD_PRESENT) ||
            (id25->info.fields_present & SAMR_FIELD_LM_PASSWORD_PRESENT)) {
 
-               if (!set_user_info_pw(id25->password.data, pwd)) {
+               if (!set_user_info_pw(id25->password.data, rhost, pwd)) {
                        return NT_STATUS_WRONG_PASSWORD;
                }
        }
@@ -4939,6 +4994,7 @@ static NTSTATUS set_user_info_25(TALLOC_CTX *mem_ctx,
  ********************************************************************/
 
 static NTSTATUS set_user_info_26(TALLOC_CTX *mem_ctx,
+                                const char *rhost,
                                 struct samr_UserInfo26 *id26,
                                 struct samu *pwd)
 {
@@ -4949,7 +5005,7 @@ static NTSTATUS set_user_info_26(TALLOC_CTX *mem_ctx,
                return NT_STATUS_INVALID_PARAMETER;
        }
 
-       if (!set_user_info_pw(id26->password.data, pwd)) {
+       if (!set_user_info_pw(id26->password.data, rhost, pwd)) {
                return NT_STATUS_WRONG_PASSWORD;
        }
 
@@ -5035,7 +5091,7 @@ static uint32_t samr_set_user_info_map_fields_to_access_mask(uint32_t fields)
  samr_SetUserInfo
  ********************************************************************/
 
-NTSTATUS _samr_SetUserInfo(pipes_struct *p,
+NTSTATUS _samr_SetUserInfo(struct pipes_struct *p,
                           struct samr_SetUserInfo *r)
 {
        struct samr_user_info *uinfo;
@@ -5225,7 +5281,9 @@ NTSTATUS _samr_SetUserInfo(pipes_struct *p,
                        dump_data(100, info->info23.password.data, 516);
 
                        status = set_user_info_23(p->mem_ctx,
-                                                 &info->info23, pwd);
+                                                 &info->info23,
+                                                 p->client_id->name,
+                                                 pwd);
                        break;
 
                case 24:
@@ -5239,6 +5297,7 @@ NTSTATUS _samr_SetUserInfo(pipes_struct *p,
                        dump_data(100, info->info24.password.data, 516);
 
                        status = set_user_info_24(p->mem_ctx,
+                                                 p->client_id->name,
                                                  &info->info24, pwd);
                        break;
 
@@ -5253,6 +5312,7 @@ NTSTATUS _samr_SetUserInfo(pipes_struct *p,
                        dump_data(100, info->info25.password.data, 532);
 
                        status = set_user_info_25(p->mem_ctx,
+                                                 p->client_id->name,
                                                  &info->info25, pwd);
                        break;
 
@@ -5267,6 +5327,7 @@ NTSTATUS _samr_SetUserInfo(pipes_struct *p,
                        dump_data(100, info->info26.password.data, 516);
 
                        status = set_user_info_26(p->mem_ctx,
+                                                 p->client_id->name,
                                                  &info->info26, pwd);
                        break;
 
@@ -5291,7 +5352,7 @@ NTSTATUS _samr_SetUserInfo(pipes_struct *p,
  _samr_SetUserInfo2
  ********************************************************************/
 
-NTSTATUS _samr_SetUserInfo2(pipes_struct *p,
+NTSTATUS _samr_SetUserInfo2(struct pipes_struct *p,
                            struct samr_SetUserInfo2 *r)
 {
        struct samr_SetUserInfo q;
@@ -5307,7 +5368,7 @@ NTSTATUS _samr_SetUserInfo2(pipes_struct *p,
  _samr_GetAliasMembership
 *********************************************************************/
 
-NTSTATUS _samr_GetAliasMembership(pipes_struct *p,
+NTSTATUS _samr_GetAliasMembership(struct pipes_struct *p,
                                  struct samr_GetAliasMembership *r)
 {
        size_t num_alias_rids;
@@ -5317,7 +5378,7 @@ NTSTATUS _samr_GetAliasMembership(pipes_struct *p,
 
        NTSTATUS status;
 
-       DOM_SID *members;
+       struct dom_sid *members;
 
        DEBUG(5,("_samr_GetAliasMembership: %d\n", __LINE__));
 
@@ -5334,7 +5395,7 @@ NTSTATUS _samr_GetAliasMembership(pipes_struct *p,
                return NT_STATUS_OBJECT_TYPE_MISMATCH;
 
        if (r->in.sids->num_sids) {
-               members = TALLOC_ARRAY(p->mem_ctx, DOM_SID, r->in.sids->num_sids);
+               members = TALLOC_ARRAY(p->mem_ctx, struct dom_sid, r->in.sids->num_sids);
 
                if (members == NULL)
                        return NT_STATUS_NO_MEMORY;
@@ -5376,7 +5437,7 @@ NTSTATUS _samr_GetAliasMembership(pipes_struct *p,
  _samr_GetMembersInAlias
 *********************************************************************/
 
-NTSTATUS _samr_GetMembersInAlias(pipes_struct *p,
+NTSTATUS _samr_GetMembersInAlias(struct pipes_struct *p,
                                 struct samr_GetMembersInAlias *r)
 {
        struct samr_alias_info *ainfo;
@@ -5384,7 +5445,7 @@ NTSTATUS _samr_GetMembersInAlias(pipes_struct *p,
        size_t i;
        size_t num_sids = 0;
        struct lsa_SidPtr *sids = NULL;
-       DOM_SID *pdb_sids = NULL;
+       struct dom_sid *pdb_sids = NULL;
 
        ainfo = policy_handle_find(p, r->in.alias_handle,
                                   SAMR_ALIAS_ACCESS_GET_MEMBERS, NULL,
@@ -5432,7 +5493,7 @@ NTSTATUS _samr_GetMembersInAlias(pipes_struct *p,
  _samr_QueryGroupMember
 *********************************************************************/
 
-NTSTATUS _samr_QueryGroupMember(pipes_struct *p,
+NTSTATUS _samr_QueryGroupMember(struct pipes_struct *p,
                                struct samr_QueryGroupMember *r)
 {
        struct samr_group_info *ginfo;
@@ -5499,7 +5560,7 @@ NTSTATUS _samr_QueryGroupMember(pipes_struct *p,
  _samr_AddAliasMember
 *********************************************************************/
 
-NTSTATUS _samr_AddAliasMember(pipes_struct *p,
+NTSTATUS _samr_AddAliasMember(struct pipes_struct *p,
                              struct samr_AddAliasMember *r)
 {
        struct samr_alias_info *ainfo;
@@ -5533,7 +5594,7 @@ NTSTATUS _samr_AddAliasMember(pipes_struct *p,
  _samr_DeleteAliasMember
 *********************************************************************/
 
-NTSTATUS _samr_DeleteAliasMember(pipes_struct *p,
+NTSTATUS _samr_DeleteAliasMember(struct pipes_struct *p,
                                 struct samr_DeleteAliasMember *r)
 {
        struct samr_alias_info *ainfo;
@@ -5568,7 +5629,7 @@ NTSTATUS _samr_DeleteAliasMember(pipes_struct *p,
  _samr_AddGroupMember
 *********************************************************************/
 
-NTSTATUS _samr_AddGroupMember(pipes_struct *p,
+NTSTATUS _samr_AddGroupMember(struct pipes_struct *p,
                              struct samr_AddGroupMember *r)
 {
        struct samr_group_info *ginfo;
@@ -5606,7 +5667,7 @@ NTSTATUS _samr_AddGroupMember(pipes_struct *p,
  _samr_DeleteGroupMember
 *********************************************************************/
 
-NTSTATUS _samr_DeleteGroupMember(pipes_struct *p,
+NTSTATUS _samr_DeleteGroupMember(struct pipes_struct *p,
                                 struct samr_DeleteGroupMember *r)
 
 {
@@ -5649,7 +5710,7 @@ NTSTATUS _samr_DeleteGroupMember(pipes_struct *p,
  _samr_DeleteUser
 *********************************************************************/
 
-NTSTATUS _samr_DeleteUser(pipes_struct *p,
+NTSTATUS _samr_DeleteUser(struct pipes_struct *p,
                          struct samr_DeleteUser *r)
 {
        struct samr_user_info *uinfo;
@@ -5660,7 +5721,7 @@ NTSTATUS _samr_DeleteUser(pipes_struct *p,
        DEBUG(5, ("_samr_DeleteUser: %d\n", __LINE__));
 
        uinfo = policy_handle_find(p, r->in.user_handle,
-                                  STD_RIGHT_DELETE_ACCESS, NULL,
+                                  SEC_STD_DELETE, NULL,
                                   struct samr_user_info, &status);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
@@ -5718,7 +5779,7 @@ NTSTATUS _samr_DeleteUser(pipes_struct *p,
  _samr_DeleteDomainGroup
 *********************************************************************/
 
-NTSTATUS _samr_DeleteDomainGroup(pipes_struct *p,
+NTSTATUS _samr_DeleteDomainGroup(struct pipes_struct *p,
                                 struct samr_DeleteDomainGroup *r)
 {
        struct samr_group_info *ginfo;
@@ -5728,7 +5789,7 @@ NTSTATUS _samr_DeleteDomainGroup(pipes_struct *p,
        DEBUG(5, ("samr_DeleteDomainGroup: %d\n", __LINE__));
 
        ginfo = policy_handle_find(p, r->in.group_handle,
-                                  STD_RIGHT_DELETE_ACCESS, NULL,
+                                  SEC_STD_DELETE, NULL,
                                   struct samr_group_info, &status);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
@@ -5769,7 +5830,7 @@ NTSTATUS _samr_DeleteDomainGroup(pipes_struct *p,
  _samr_DeleteDomAlias
 *********************************************************************/
 
-NTSTATUS _samr_DeleteDomAlias(pipes_struct *p,
+NTSTATUS _samr_DeleteDomAlias(struct pipes_struct *p,
                              struct samr_DeleteDomAlias *r)
 {
        struct samr_alias_info *ainfo;
@@ -5778,7 +5839,7 @@ NTSTATUS _samr_DeleteDomAlias(pipes_struct *p,
        DEBUG(5, ("_samr_DeleteDomAlias: %d\n", __LINE__));
 
        ainfo = policy_handle_find(p, r->in.alias_handle,
-                                  STD_RIGHT_DELETE_ACCESS, NULL,
+                                  SEC_STD_DELETE, NULL,
                                   struct samr_alias_info, &status);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
@@ -5821,7 +5882,7 @@ NTSTATUS _samr_DeleteDomAlias(pipes_struct *p,
  _samr_CreateDomainGroup
 *********************************************************************/
 
-NTSTATUS _samr_CreateDomainGroup(pipes_struct *p,
+NTSTATUS _samr_CreateDomainGroup(struct pipes_struct *p,
                                 struct samr_CreateDomainGroup *r)
 
 {
@@ -5882,10 +5943,10 @@ NTSTATUS _samr_CreateDomainGroup(pipes_struct *p,
  _samr_CreateDomAlias
 *********************************************************************/
 
-NTSTATUS _samr_CreateDomAlias(pipes_struct *p,
+NTSTATUS _samr_CreateDomAlias(struct pipes_struct *p,
                              struct samr_CreateDomAlias *r)
 {
-       DOM_SID info_sid;
+       struct dom_sid info_sid;
        const char *name = NULL;
        struct samr_domain_info *dinfo;
        struct samr_alias_info *ainfo;
@@ -5956,7 +6017,7 @@ NTSTATUS _samr_CreateDomAlias(pipes_struct *p,
  _samr_QueryGroupInfo
 *********************************************************************/
 
-NTSTATUS _samr_QueryGroupInfo(pipes_struct *p,
+NTSTATUS _samr_QueryGroupInfo(struct pipes_struct *p,
                              struct samr_QueryGroupInfo *r)
 {
        struct samr_group_info *ginfo;
@@ -6059,7 +6120,7 @@ NTSTATUS _samr_QueryGroupInfo(pipes_struct *p,
  _samr_SetGroupInfo
 *********************************************************************/
 
-NTSTATUS _samr_SetGroupInfo(pipes_struct *p,
+NTSTATUS _samr_SetGroupInfo(struct pipes_struct *p,
                            struct samr_SetGroupInfo *r)
 {
        struct samr_group_info *ginfo;
@@ -6112,7 +6173,7 @@ NTSTATUS _samr_SetGroupInfo(pipes_struct *p,
  _samr_SetAliasInfo
 *********************************************************************/
 
-NTSTATUS _samr_SetAliasInfo(pipes_struct *p,
+NTSTATUS _samr_SetAliasInfo(struct pipes_struct *p,
                            struct samr_SetAliasInfo *r)
 {
        struct samr_alias_info *ainfo;
@@ -6201,7 +6262,7 @@ NTSTATUS _samr_SetAliasInfo(pipes_struct *p,
  _samr_GetDomPwInfo
 ****************************************************************/
 
-NTSTATUS _samr_GetDomPwInfo(pipes_struct *p,
+NTSTATUS _samr_GetDomPwInfo(struct pipes_struct *p,
                            struct samr_GetDomPwInfo *r)
 {
        uint32_t min_password_length = 0;
@@ -6237,21 +6298,21 @@ NTSTATUS _samr_GetDomPwInfo(pipes_struct *p,
  _samr_OpenGroup
 *********************************************************************/
 
-NTSTATUS _samr_OpenGroup(pipes_struct *p,
+NTSTATUS _samr_OpenGroup(struct pipes_struct *p,
                         struct samr_OpenGroup *r)
 
 {
-       DOM_SID info_sid;
+       struct dom_sid info_sid;
        GROUP_MAP map;
        struct samr_domain_info *dinfo;
        struct samr_group_info *ginfo;
-       SEC_DESC         *psd = NULL;
+       struct security_descriptor         *psd = NULL;
        uint32            acc_granted;
        uint32            des_access = r->in.access_mask;
        size_t            sd_size;
        NTSTATUS          status;
        bool ret;
-       SE_PRIV se_rights;
+       uint64_t se_rights;
 
        dinfo = policy_handle_find(p, r->in.domain_handle,
                                   SAMR_DOMAIN_ACCESS_OPEN_ACCOUNT, NULL,
@@ -6310,7 +6371,7 @@ NTSTATUS _samr_OpenGroup(pipes_struct *p,
  _samr_RemoveMemberFromForeignDomain
 *********************************************************************/
 
-NTSTATUS _samr_RemoveMemberFromForeignDomain(pipes_struct *p,
+NTSTATUS _samr_RemoveMemberFromForeignDomain(struct pipes_struct *p,
                                             struct samr_RemoveMemberFromForeignDomain *r)
 {
        struct samr_domain_info *dinfo;
@@ -6365,7 +6426,7 @@ NTSTATUS _samr_RemoveMemberFromForeignDomain(pipes_struct *p,
  _samr_QueryDomainInfo2
  ********************************************************************/
 
-NTSTATUS _samr_QueryDomainInfo2(pipes_struct *p,
+NTSTATUS _samr_QueryDomainInfo2(struct pipes_struct *p,
                                struct samr_QueryDomainInfo2 *r)
 {
        struct samr_QueryDomainInfo q;
@@ -6443,7 +6504,7 @@ static NTSTATUS set_dom_info_12(TALLOC_CTX *mem_ctx,
  _samr_SetDomainInfo
  ********************************************************************/
 
-NTSTATUS _samr_SetDomainInfo(pipes_struct *p,
+NTSTATUS _samr_SetDomainInfo(struct pipes_struct *p,
                             struct samr_SetDomainInfo *r)
 {
        struct samr_domain_info *dinfo;
@@ -6517,7 +6578,7 @@ NTSTATUS _samr_SetDomainInfo(pipes_struct *p,
  _samr_GetDisplayEnumerationIndex
 ****************************************************************/
 
-NTSTATUS _samr_GetDisplayEnumerationIndex(pipes_struct *p,
+NTSTATUS _samr_GetDisplayEnumerationIndex(struct pipes_struct *p,
                                          struct samr_GetDisplayEnumerationIndex *r)
 {
        struct samr_domain_info *dinfo;
@@ -6643,7 +6704,7 @@ NTSTATUS _samr_GetDisplayEnumerationIndex(pipes_struct *p,
  _samr_GetDisplayEnumerationIndex2
 ****************************************************************/
 
-NTSTATUS _samr_GetDisplayEnumerationIndex2(pipes_struct *p,
+NTSTATUS _samr_GetDisplayEnumerationIndex2(struct pipes_struct *p,
                                           struct samr_GetDisplayEnumerationIndex2 *r)
 {
        struct samr_GetDisplayEnumerationIndex q;
@@ -6661,7 +6722,7 @@ NTSTATUS _samr_GetDisplayEnumerationIndex2(pipes_struct *p,
  _samr_RidToSid
 ****************************************************************/
 
-NTSTATUS _samr_RidToSid(pipes_struct *p,
+NTSTATUS _samr_RidToSid(struct pipes_struct *p,
                        struct samr_RidToSid *r)
 {
        struct samr_domain_info *dinfo;
@@ -6751,7 +6812,7 @@ static enum samr_ValidationStatus samr_ValidatePassword_Reset(TALLOC_CTX *mem_ct
  _samr_ValidatePassword
 ****************************************************************/
 
-NTSTATUS _samr_ValidatePassword(pipes_struct *p,
+NTSTATUS _samr_ValidatePassword(struct pipes_struct *p,
                                struct samr_ValidatePassword *r)
 {
        union samr_ValidatePasswordRep *rep;
@@ -6810,7 +6871,7 @@ NTSTATUS _samr_ValidatePassword(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_Shutdown(pipes_struct *p,
+NTSTATUS _samr_Shutdown(struct pipes_struct *p,
                        struct samr_Shutdown *r)
 {
        p->rng_fault_state = true;
@@ -6820,7 +6881,7 @@ NTSTATUS _samr_Shutdown(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_SetMemberAttributesOfGroup(pipes_struct *p,
+NTSTATUS _samr_SetMemberAttributesOfGroup(struct pipes_struct *p,
                                          struct samr_SetMemberAttributesOfGroup *r)
 {
        p->rng_fault_state = true;
@@ -6830,7 +6891,7 @@ NTSTATUS _samr_SetMemberAttributesOfGroup(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_TestPrivateFunctionsDomain(pipes_struct *p,
+NTSTATUS _samr_TestPrivateFunctionsDomain(struct pipes_struct *p,
                                          struct samr_TestPrivateFunctionsDomain *r)
 {
        return NT_STATUS_NOT_IMPLEMENTED;
@@ -6839,7 +6900,7 @@ NTSTATUS _samr_TestPrivateFunctionsDomain(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_TestPrivateFunctionsUser(pipes_struct *p,
+NTSTATUS _samr_TestPrivateFunctionsUser(struct pipes_struct *p,
                                        struct samr_TestPrivateFunctionsUser *r)
 {
        return NT_STATUS_NOT_IMPLEMENTED;
@@ -6848,7 +6909,7 @@ NTSTATUS _samr_TestPrivateFunctionsUser(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_AddMultipleMembersToAlias(pipes_struct *p,
+NTSTATUS _samr_AddMultipleMembersToAlias(struct pipes_struct *p,
                                         struct samr_AddMultipleMembersToAlias *r)
 {
        p->rng_fault_state = true;
@@ -6858,7 +6919,7 @@ NTSTATUS _samr_AddMultipleMembersToAlias(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_RemoveMultipleMembersFromAlias(pipes_struct *p,
+NTSTATUS _samr_RemoveMultipleMembersFromAlias(struct pipes_struct *p,
                                              struct samr_RemoveMultipleMembersFromAlias *r)
 {
        p->rng_fault_state = true;
@@ -6868,7 +6929,7 @@ NTSTATUS _samr_RemoveMultipleMembersFromAlias(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_SetBootKeyInformation(pipes_struct *p,
+NTSTATUS _samr_SetBootKeyInformation(struct pipes_struct *p,
                                     struct samr_SetBootKeyInformation *r)
 {
        p->rng_fault_state = true;
@@ -6878,7 +6939,7 @@ NTSTATUS _samr_SetBootKeyInformation(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_GetBootKeyInformation(pipes_struct *p,
+NTSTATUS _samr_GetBootKeyInformation(struct pipes_struct *p,
                                     struct samr_GetBootKeyInformation *r)
 {
        p->rng_fault_state = true;
@@ -6888,7 +6949,7 @@ NTSTATUS _samr_GetBootKeyInformation(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_SetDsrmPassword(pipes_struct *p,
+NTSTATUS _samr_SetDsrmPassword(struct pipes_struct *p,
                               struct samr_SetDsrmPassword *r)
 {
        p->rng_fault_state = true;