From 84651aca04cbcbf50ab2e78333cc9d9e49dd92f5 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 19 Jul 2005 00:59:25 +0000 Subject: [PATCH] r8564: Sometimes we're too dumb to live... Fix samr calls where we were using USER_INFO_XX structs and functions where XX was sometimes in hex and sometimes in decimal. Now it's all in decimal (should be no functionality change). Jeremy. --- source/include/rpc_samr.h | 36 +++++++------- source/python/py_samr.c | 8 +-- source/python/py_samr.h | 4 +- source/python/py_samr_conv.c | 16 +++--- source/rpc_parse/parse_samr.c | 88 ++++++++++++++++----------------- source/rpc_server/srv_samr_nt.c | 70 +++++++++++++------------- source/utils/net_rpc_join.c | 10 ++-- 7 files changed, 116 insertions(+), 116 deletions(-) diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h index adf41018809..fb829558d44 100644 --- a/source/include/rpc_samr.h +++ b/source/include/rpc_samr.h @@ -351,8 +351,8 @@ typedef struct sam_user_info_20 } SAM_USER_INFO_20; -/* SAM_USER_INFO_12 */ -typedef struct sam_user_info_12 +/* SAM_USER_INFO_18 */ +typedef struct sam_user_info_18 { uint8 lm_pwd[16]; /* lm user passwords */ uint8 nt_pwd[16]; /* nt user passwords */ @@ -360,10 +360,10 @@ typedef struct sam_user_info_12 uint8 lm_pwd_active; uint8 nt_pwd_active; -} SAM_USER_INFO_12; +} SAM_USER_INFO_18; -/* SAM_USER_INFO_11 */ -typedef struct sam_user_info_11 +/* SAM_USER_INFO_17 */ +typedef struct sam_user_info_17 { uint8 padding_0[16]; /* 0 - padding 16 bytes */ NTTIME expiry; /* expiry time or something? */ @@ -398,15 +398,15 @@ typedef struct sam_user_info_11 uint8 padding_9[48]; /* 0 - padding 48 bytes */ -} SAM_USER_INFO_11; +} SAM_USER_INFO_17; -/* SAM_USER_INFO_10 */ -typedef struct sam_user_info_10 +/* SAM_USER_INFO_16 */ +typedef struct sam_user_info_16 { uint32 acb_info; -} SAM_USER_INFO_10; +} SAM_USER_INFO_16; /* SAM_USER_INFO_7 */ typedef struct sam_user_info_7 @@ -1254,15 +1254,15 @@ typedef struct sam_userinfo_ctr_info union { - SAM_USER_INFO_7 *id7; /* auth-level 0x07 */ - SAM_USER_INFO_10 *id10; /* auth-level 0x10 */ - SAM_USER_INFO_11 *id11; /* auth-level 0x11 */ - SAM_USER_INFO_12 *id12; /* auth-level 0x12 */ - SAM_USER_INFO_20 *id20; /* auth-level 20 */ - SAM_USER_INFO_21 *id21; /* auth-level 21 */ - SAM_USER_INFO_23 *id23; /* auth-level 0x17 */ - SAM_USER_INFO_24 *id24; /* auth-level 0x18 */ - SAM_USER_INFO_25 *id25; /* auth-level 0x19 */ + SAM_USER_INFO_7 *id7; + SAM_USER_INFO_16 *id16; + SAM_USER_INFO_17 *id17; + SAM_USER_INFO_18 *id18; + SAM_USER_INFO_20 *id20; + SAM_USER_INFO_21 *id21; + SAM_USER_INFO_23 *id23; + SAM_USER_INFO_24 *id24; + SAM_USER_INFO_25 *id25; void* id; /* to make typecasting easy */ } info; diff --git a/source/python/py_samr.c b/source/python/py_samr.c index 57acd74bedb..77431e24475 100644 --- a/source/python/py_samr.c +++ b/source/python/py_samr.c @@ -146,7 +146,7 @@ static PyObject *samr_set_user_info2(PyObject *self, PyObject *args, NTSTATUS ntstatus; int level; union { - SAM_USER_INFO_10 id10; + SAM_USER_INFO_16 id16; SAM_USER_INFO_21 id21; } pinfo; @@ -164,10 +164,10 @@ static PyObject *samr_set_user_info2(PyObject *self, PyObject *args, ctr.switch_value = level; switch(level) { - case 0x10: - ctr.info.id10 = &pinfo.id10; + case 16: + ctr.info.id16 = &pinfo.id16; - if (!py_to_SAM_USER_INFO_10(ctr.info.id10, info)) { + if (!py_to_SAM_USER_INFO_16(ctr.info.id16, info)) { PyErr_SetString( samr_error, "error converting user info"); goto done; diff --git a/source/python/py_samr.h b/source/python/py_samr.h index 4d2b0675b47..8e91b1671ec 100644 --- a/source/python/py_samr.h +++ b/source/python/py_samr.h @@ -78,8 +78,8 @@ extern PyObject *samr_error; /* The following definitions are from py_samr_conv.c */ BOOL py_from_acct_info(PyObject **array, struct acct_info *info, int num_accts); -BOOL py_from_SAM_USER_INFO_10(PyObject **dict, SAM_USER_INFO_10 *info); -BOOL py_to_SAM_USER_INFO_10(SAM_USER_INFO_10 *info, PyObject *dict); +BOOL py_from_SAM_USER_INFO_16(PyObject **dict, SAM_USER_INFO_16 *info); +BOOL py_to_SAM_USER_INFO_16(SAM_USER_INFO_16 *info, PyObject *dict); BOOL py_from_SAM_USER_INFO_21(PyObject **dict, SAM_USER_INFO_21 *info); BOOL py_to_SAM_USER_INFO_21(SAM_USER_INFO_21 *info, PyObject *dict); diff --git a/source/python/py_samr_conv.c b/source/python/py_samr_conv.c index 7523ee7dfcb..94bedcf779e 100644 --- a/source/python/py_samr_conv.c +++ b/source/python/py_samr_conv.c @@ -22,22 +22,22 @@ #include "python/py_conv.h" /* - * Convert between SAM_USER_INFO_10 and Python + * Convert between SAM_USER_INFO_16 and Python */ -struct pyconv py_SAM_USER_INFO_10[] = { - { "acb_info", PY_UINT32, offsetof(SAM_USER_INFO_10, acb_info) }, +struct pyconv py_SAM_USER_INFO_16[] = { + { "acb_info", PY_UINT32, offsetof(SAM_USER_INFO_16, acb_info) }, { NULL } }; -BOOL py_from_SAM_USER_INFO_10(PyObject **dict, SAM_USER_INFO_10 *info) +BOOL py_from_SAM_USER_INFO_16(PyObject **dict, SAM_USER_INFO_16 *info) { - *dict = from_struct(info, py_SAM_USER_INFO_10); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(0x10)); + *dict = from_struct(info, py_SAM_USER_INFO_16); + PyDict_SetItemString(*dict, "level", PyInt_FromLong(16)); return True; } -BOOL py_to_SAM_USER_INFO_10(SAM_USER_INFO_10 *info, PyObject *dict) +BOOL py_to_SAM_USER_INFO_16(SAM_USER_INFO_16 *info, PyObject *dict) { PyObject *obj, *dict_copy = PyDict_Copy(dict); BOOL result = False; @@ -48,7 +48,7 @@ BOOL py_to_SAM_USER_INFO_10(SAM_USER_INFO_10 *info, PyObject *dict) PyDict_DelItemString(dict_copy, "level"); - if (!to_struct(info, dict_copy, py_SAM_USER_INFO_10)) + if (!to_struct(info, dict_copy, py_SAM_USER_INFO_16)) goto done; result = True; diff --git a/source/rpc_parse/parse_samr.c b/source/rpc_parse/parse_samr.c index ba8b367a425..6b0193c6e46 100644 --- a/source/rpc_parse/parse_samr.c +++ b/source/rpc_parse/parse_samr.c @@ -5103,13 +5103,13 @@ static BOOL sam_io_logon_hrs(const char *desc, LOGON_HRS * hrs, } /******************************************************************* -inits a SAM_USER_INFO_12 structure. +inits a SAM_USER_INFO_18 structure. ********************************************************************/ -void init_sam_user_info12(SAM_USER_INFO_12 * usr, +void init_sam_user_info18(SAM_USER_INFO_18 * usr, const uint8 lm_pwd[16], const uint8 nt_pwd[16]) { - DEBUG(5, ("init_sam_user_info12\n")); + DEBUG(5, ("init_sam_user_info18\n")); usr->lm_pwd_active = memcpy(usr->lm_pwd, lm_pwd, sizeof(usr->lm_pwd)) ? 1 : 0; @@ -5121,13 +5121,13 @@ void init_sam_user_info12(SAM_USER_INFO_12 * usr, reads or writes a structure. ********************************************************************/ -static BOOL sam_io_user_info12(const char *desc, SAM_USER_INFO_12 * u, +static BOOL sam_io_user_info18(const char *desc, SAM_USER_INFO_18 * u, prs_struct *ps, int depth) { if (u == NULL) return False; - prs_debug(ps, depth, desc, "samr_io_r_user_info12"); + prs_debug(ps, depth, desc, "samr_io_r_user_info18"); depth++; if(!prs_align(ps)) @@ -5185,12 +5185,12 @@ static BOOL sam_io_user_info7(const char *desc, SAM_USER_INFO_7 * usr, } /******************************************************************* -inits a SAM_USER_INFO_10 structure. +inits a SAM_USER_INFO_16 structure. ********************************************************************/ -void init_sam_user_info10(SAM_USER_INFO_10 * usr, uint32 acb_info) +void init_sam_user_info16(SAM_USER_INFO_16 * usr, uint32 acb_info) { - DEBUG(5, ("init_sam_user_info10\n")); + DEBUG(5, ("init_sam_user_info16\n")); usr->acb_info = acb_info; } @@ -5199,13 +5199,13 @@ void init_sam_user_info10(SAM_USER_INFO_10 * usr, uint32 acb_info) reads or writes a structure. ********************************************************************/ -static BOOL sam_io_user_info10(const char *desc, SAM_USER_INFO_10 * usr, +static BOOL sam_io_user_info16(const char *desc, SAM_USER_INFO_16 * usr, prs_struct *ps, int depth) { if (usr == NULL) return False; - prs_debug(ps, depth, desc, "samr_io_r_user_info10"); + prs_debug(ps, depth, desc, "samr_io_r_user_info16"); depth++; if(!prs_align(ps)) @@ -5218,15 +5218,15 @@ static BOOL sam_io_user_info10(const char *desc, SAM_USER_INFO_10 * usr, } /******************************************************************* -inits a SAM_USER_INFO_11 structure. +inits a SAM_USER_INFO_17 structure. ********************************************************************/ -void init_sam_user_info11(SAM_USER_INFO_11 * usr, +void init_sam_user_info17(SAM_USER_INFO_17 * usr, NTTIME * expiry, char *mach_acct, uint32 rid_user, uint32 rid_group, uint16 acct_ctrl) { - DEBUG(5, ("init_sam_user_info11\n")); + DEBUG(5, ("init_sam_user_info17\n")); memcpy(&usr->expiry, expiry, sizeof(usr->expiry)); /* expiry time or something? */ ZERO_STRUCT(usr->padding_1); /* 0 - padding 24 bytes */ @@ -5263,13 +5263,13 @@ void init_sam_user_info11(SAM_USER_INFO_11 * usr, reads or writes a structure. ********************************************************************/ -static BOOL sam_io_user_info11(const char *desc, SAM_USER_INFO_11 * usr, +static BOOL sam_io_user_info17(const char *desc, SAM_USER_INFO_17 * usr, prs_struct *ps, int depth) { if (usr == NULL) return False; - prs_debug(ps, depth, desc, "samr_io_r_unknown_11"); + prs_debug(ps, depth, desc, "samr_io_r_unknown_17"); depth++; if(!prs_align(ps)) @@ -6231,16 +6231,16 @@ NTSTATUS make_samr_userinfo_ctr_usr21(TALLOC_CTX *ctx, SAM_USERINFO_CTR * ctr, ctr->info.id = NULL; switch (switch_value) { - case 0x10: - ctr->info.id10 = TALLOC_ZERO_P(ctx,SAM_USER_INFO_10); - if (ctr->info.id10 == NULL) + case 16: + ctr->info.id16 = TALLOC_ZERO_P(ctx,SAM_USER_INFO_16); + if (ctr->info.id16 == NULL) return NT_STATUS_NO_MEMORY; - init_sam_user_info10(ctr->info.id10, usr->acb_info); + init_sam_user_info16(ctr->info.id16, usr->acb_info); break; #if 0 /* whoops - got this wrong. i think. or don't understand what's happening. */ - case 0x11: + case 17: { NTTIME expire; info = (void *)&id11; @@ -6248,8 +6248,8 @@ NTSTATUS make_samr_userinfo_ctr_usr21(TALLOC_CTX *ctx, SAM_USERINFO_CTR * ctr, expire.low = 0xffffffff; expire.high = 0x7fffffff; - ctr->info.id = TALLOC_ZERO_P(ctx,SAM_USER_INFO_11); - init_sam_user_info11(ctr->info.id11, &expire, + ctr->info.id = TALLOC_ZERO_P(ctx,SAM_USER_INFO_17); + init_sam_user_info11(ctr->info.id17, &expire, "BROOKFIELDS$", /* name */ 0x03ef, /* user rid */ 0x201, /* group rid */ @@ -6258,12 +6258,12 @@ NTSTATUS make_samr_userinfo_ctr_usr21(TALLOC_CTX *ctx, SAM_USERINFO_CTR * ctr, break; } #endif - case 0x12: - ctr->info.id12 = TALLOC_ZERO_P(ctx,SAM_USER_INFO_12); - if (ctr->info.id12 == NULL) + case 18: + ctr->info.id18 = TALLOC_ZERO_P(ctx,SAM_USER_INFO_18); + if (ctr->info.id18 == NULL) return NT_STATUS_NO_MEMORY; - init_sam_user_info12(ctr->info.id12, usr->lm_pwd, usr->nt_pwd); + init_sam_user_info18(ctr->info.id18, usr->lm_pwd, usr->nt_pwd); break; case 21: { @@ -6347,7 +6347,7 @@ static BOOL samr_io_userinfo_ctr(const char *desc, SAM_USERINFO_CTR **ppctr, ret = False; switch (ctr->switch_value) { - case 0x07: + case 7: if (UNMARSHALLING(ps)) ctr->info.id7 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_7,1); if (ctr->info.id7 == NULL) { @@ -6356,34 +6356,34 @@ static BOOL samr_io_userinfo_ctr(const char *desc, SAM_USERINFO_CTR **ppctr, } ret = sam_io_user_info7("", ctr->info.id7, ps, depth); break; - case 0x10: + case 16: if (UNMARSHALLING(ps)) - ctr->info.id10 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_10,1); - if (ctr->info.id10 == NULL) { + ctr->info.id16 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_16,1); + if (ctr->info.id16 == NULL) { DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n")); return False; } - ret = sam_io_user_info10("", ctr->info.id10, ps, depth); + ret = sam_io_user_info16("", ctr->info.id16, ps, depth); break; - case 0x11: + case 17: if (UNMARSHALLING(ps)) - ctr->info.id11 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_11,1); + ctr->info.id17 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_17,1); - if (ctr->info.id11 == NULL) { + if (ctr->info.id17 == NULL) { DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n")); return False; } - ret = sam_io_user_info11("", ctr->info.id11, ps, depth); + ret = sam_io_user_info17("", ctr->info.id17, ps, depth); break; - case 0x12: + case 18: if (UNMARSHALLING(ps)) - ctr->info.id12 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_12,1); + ctr->info.id18 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_18,1); - if (ctr->info.id12 == NULL) { + if (ctr->info.id18 == NULL) { DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n")); return False; } - ret = sam_io_user_info12("", ctr->info.id12, ps, depth); + ret = sam_io_user_info18("", ctr->info.id18, ps, depth); break; case 20: if (UNMARSHALLING(ps)) @@ -6588,12 +6588,12 @@ void init_samr_q_set_userinfo2(SAMR_Q_SET_USERINFO2 * q_u, q_u->ctr->switch_value = switch_value; switch (switch_value) { - case 0x12: - SamOEMhashBlob(ctr->info.id12->lm_pwd, 16, sess_key); - SamOEMhashBlob(ctr->info.id12->nt_pwd, 16, sess_key); + case 18: + SamOEMhashBlob(ctr->info.id18->lm_pwd, 16, sess_key); + SamOEMhashBlob(ctr->info.id18->nt_pwd, 16, sess_key); dump_data(100, (char *)sess_key->data, sess_key->length); - dump_data(100, (char *)ctr->info.id12->lm_pwd, 16); - dump_data(100, (char *)ctr->info.id12->nt_pwd, 16); + dump_data(100, (char *)ctr->info.id18->lm_pwd, 16); + dump_data(100, (char *)ctr->info.id18->nt_pwd, 16); break; } } diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index 9b98d4cb168..2e73db28070 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -1411,10 +1411,10 @@ static NTSTATUS get_user_info_7(TALLOC_CTX *mem_ctx, SAM_USER_INFO_7 *id7, DOM_S return NT_STATUS_OK; } /************************************************************************* - get_user_info_10. Safe. Only gives out acb bits. + get_user_info_16. Safe. Only gives out acb bits. *************************************************************************/ -static NTSTATUS get_user_info_10(TALLOC_CTX *mem_ctx, SAM_USER_INFO_10 *id10, DOM_SID *user_sid) +static NTSTATUS get_user_info_16(TALLOC_CTX *mem_ctx, SAM_USER_INFO_16 *id16, DOM_SID *user_sid) { SAM_ACCOUNT *smbpass=NULL; BOOL ret; @@ -1437,8 +1437,8 @@ static NTSTATUS get_user_info_10(TALLOC_CTX *mem_ctx, SAM_USER_INFO_10 *id10, DO DEBUG(3,("User:[%s]\n", pdb_get_username(smbpass) )); - ZERO_STRUCTP(id10); - init_sam_user_info10(id10, pdb_get_acct_ctrl(smbpass) ); + ZERO_STRUCTP(id16); + init_sam_user_info16(id16, pdb_get_acct_ctrl(smbpass) ); pdb_free_sam(&smbpass); @@ -1446,12 +1446,12 @@ static NTSTATUS get_user_info_10(TALLOC_CTX *mem_ctx, SAM_USER_INFO_10 *id10, DO } /************************************************************************* - get_user_info_12. OK - this is the killer as it gives out password info. + get_user_info_18. OK - this is the killer as it gives out password info. Ensure that this is only allowed on an encrypted connection with a root user. JRA. *************************************************************************/ -static NTSTATUS get_user_info_12(pipes_struct *p, TALLOC_CTX *mem_ctx, SAM_USER_INFO_12 * id12, DOM_SID *user_sid) +static NTSTATUS get_user_info_18(pipes_struct *p, TALLOC_CTX *mem_ctx, SAM_USER_INFO_18 * id18, DOM_SID *user_sid) { SAM_ACCOUNT *smbpass=NULL; BOOL ret; @@ -1488,8 +1488,8 @@ static NTSTATUS get_user_info_12(pipes_struct *p, TALLOC_CTX *mem_ctx, SAM_USER_ return NT_STATUS_ACCOUNT_DISABLED; } - ZERO_STRUCTP(id12); - init_sam_user_info12(id12, pdb_get_lanman_passwd(smbpass), pdb_get_nt_passwd(smbpass)); + ZERO_STRUCTP(id18); + init_sam_user_info18(id18, pdb_get_lanman_passwd(smbpass), pdb_get_nt_passwd(smbpass)); pdb_free_sam(&smbpass); @@ -1601,7 +1601,7 @@ NTSTATUS _samr_query_userinfo(pipes_struct *p, SAMR_Q_QUERY_USERINFO *q_u, SAMR_ ctr->switch_value = q_u->switch_value; switch (q_u->switch_value) { - case 0x07: + case 7: ctr->info.id7 = TALLOC_ZERO_P(p->mem_ctx, SAM_USER_INFO_7); if (ctr->info.id7 == NULL) return NT_STATUS_NO_MEMORY; @@ -1609,18 +1609,18 @@ NTSTATUS _samr_query_userinfo(pipes_struct *p, SAMR_Q_QUERY_USERINFO *q_u, SAMR_ if (!NT_STATUS_IS_OK(r_u->status = get_user_info_7(p->mem_ctx, ctr->info.id7, &info->sid))) return r_u->status; break; - case 0x10: - ctr->info.id10 = TALLOC_ZERO_P(p->mem_ctx, SAM_USER_INFO_10); - if (ctr->info.id10 == NULL) + case 16: + ctr->info.id16 = TALLOC_ZERO_P(p->mem_ctx, SAM_USER_INFO_16); + if (ctr->info.id16 == NULL) return NT_STATUS_NO_MEMORY; - if (!NT_STATUS_IS_OK(r_u->status = get_user_info_10(p->mem_ctx, ctr->info.id10, &info->sid))) + if (!NT_STATUS_IS_OK(r_u->status = get_user_info_16(p->mem_ctx, ctr->info.id16, &info->sid))) return r_u->status; break; #if 0 /* whoops - got this wrong. i think. or don't understand what's happening. */ - case 0x11: + case 17: { NTTIME expire; info = (void *)&id11; @@ -1628,9 +1628,9 @@ NTSTATUS _samr_query_userinfo(pipes_struct *p, SAMR_Q_QUERY_USERINFO *q_u, SAMR_ expire.low = 0xffffffff; expire.high = 0x7fffffff; - ctr->info.id = TALLOC_ZERO_P(p->mem_ctx, SAM_USER_INFO_11)); - ZERO_STRUCTP(ctr->info.id11); - init_sam_user_info11(ctr->info.id11, &expire, + ctr->info.id = TALLOC_ZERO_P(p->mem_ctx, SAM_USER_INFO_17)); + ZERO_STRUCTP(ctr->info.id17); + init_sam_user_info17(ctr->info.id17, &expire, "BROOKFIELDS$", /* name */ 0x03ef, /* user rid */ 0x201, /* group rid */ @@ -1640,12 +1640,12 @@ NTSTATUS _samr_query_userinfo(pipes_struct *p, SAMR_Q_QUERY_USERINFO *q_u, SAMR_ } #endif - case 0x12: - ctr->info.id12 = TALLOC_ZERO_P(p->mem_ctx, SAM_USER_INFO_12); - if (ctr->info.id12 == NULL) + case 18: + ctr->info.id18 = TALLOC_ZERO_P(p->mem_ctx, SAM_USER_INFO_18); + if (ctr->info.id18 == NULL) return NT_STATUS_NO_MEMORY; - if (!NT_STATUS_IS_OK(r_u->status = get_user_info_12(p, p->mem_ctx, ctr->info.id12, &info->sid))) + if (!NT_STATUS_IS_OK(r_u->status = get_user_info_18(p, p->mem_ctx, ctr->info.id18, &info->sid))) return r_u->status; break; @@ -2418,19 +2418,19 @@ NTSTATUS _samr_open_alias(pipes_struct *p, SAMR_Q_OPEN_ALIAS *q_u, SAMR_R_OPEN_A } /******************************************************************* - set_user_info_10 + set_user_info_16 ********************************************************************/ -static BOOL set_user_info_10(const SAM_USER_INFO_10 *id10, SAM_ACCOUNT *pwd) +static BOOL set_user_info_16(const SAM_USER_INFO_16 *id16, SAM_ACCOUNT *pwd) { - if (id10 == NULL) { - DEBUG(5, ("set_user_info_10: NULL id10\n")); + if (id16 == NULL) { + DEBUG(5, ("set_user_info_16: NULL id16\n")); pdb_free_sam(&pwd); return False; } /* FIX ME: check if the value is really changed --metze */ - if (!pdb_set_acct_ctrl(pwd, id10->acb_info, PDB_CHANGED)) { + if (!pdb_set_acct_ctrl(pwd, id16->acb_info, PDB_CHANGED)) { pdb_free_sam(&pwd); return False; } @@ -2446,23 +2446,23 @@ static BOOL set_user_info_10(const SAM_USER_INFO_10 *id10, SAM_ACCOUNT *pwd) } /******************************************************************* - set_user_info_12 + set_user_info_18 ********************************************************************/ -static BOOL set_user_info_12(SAM_USER_INFO_12 *id12, SAM_ACCOUNT *pwd) +static BOOL set_user_info_18(SAM_USER_INFO_18 *id18, SAM_ACCOUNT *pwd) { - if (id12 == NULL) { - DEBUG(2, ("set_user_info_12: id12 is NULL\n")); + if (id18 == NULL) { + DEBUG(2, ("set_user_info_18: id18 is NULL\n")); pdb_free_sam(&pwd); return False; } - if (!pdb_set_lanman_passwd (pwd, id12->lm_pwd, PDB_CHANGED)) { + if (!pdb_set_lanman_passwd (pwd, id18->lm_pwd, PDB_CHANGED)) { pdb_free_sam(&pwd); return False; } - if (!pdb_set_nt_passwd (pwd, id12->nt_pwd, PDB_CHANGED)) { + if (!pdb_set_nt_passwd (pwd, id18->nt_pwd, PDB_CHANGED)) { pdb_free_sam(&pwd); return False; } @@ -2779,7 +2779,7 @@ NTSTATUS _samr_set_userinfo(pipes_struct *p, SAMR_Q_SET_USERINFO *q_u, SAMR_R_SE switch (switch_value) { case 18: - if (!set_user_info_12(ctr->info.id12, pwd)) + if (!set_user_info_18(ctr->info.id18, pwd)) r_u->status = NT_STATUS_ACCESS_DENIED; break; @@ -2919,12 +2919,12 @@ NTSTATUS _samr_set_userinfo2(pipes_struct *p, SAMR_Q_SET_USERINFO2 *q_u, SAMR_R_ switch (switch_value) { case 16: - if (!set_user_info_10(ctr->info.id10, pwd)) + if (!set_user_info_16(ctr->info.id16, pwd)) r_u->status = NT_STATUS_ACCESS_DENIED; break; case 18: /* Used by AS/U JRA. */ - if (!set_user_info_12(ctr->info.id12, pwd)) + if (!set_user_info_18(ctr->info.id18, pwd)) r_u->status = NT_STATUS_ACCESS_DENIED; break; case 20: diff --git a/source/utils/net_rpc_join.c b/source/utils/net_rpc_join.c index 6888076a147..8d19ad888fc 100644 --- a/source/utils/net_rpc_join.c +++ b/source/utils/net_rpc_join.c @@ -117,7 +117,7 @@ int net_rpc_join_newstyle(int argc, const char **argv) uchar pwbuf[516]; SAM_USERINFO_CTR ctr; SAM_USER_INFO_24 p24; - SAM_USER_INFO_10 p10; + SAM_USER_INFO_16 p16; uchar md4_trust_password[16]; /* Misc */ @@ -287,15 +287,15 @@ int net_rpc_join_newstyle(int argc, const char **argv) userinfo2 level 0x10 fails. -tpot */ ZERO_STRUCT(ctr); - ctr.switch_value = 0x10; - ctr.info.id10 = &p10; + ctr.switch_value = 16; + ctr.info.id16 = &p16; - init_sam_user_info10(&p10, acb_info); + init_sam_user_info16(&p16, acb_info); /* Ignoring the return value is necessary for joining a domain as a normal user with "Add workstation to domain" privilege. */ - result = cli_samr_set_userinfo2(cli, mem_ctx, &user_pol, 0x10, + result = cli_samr_set_userinfo2(cli, mem_ctx, &user_pol, 16, &cli->user_session_key, &ctr); /* Now check the whole process from top-to-bottom */ -- 2.34.1