summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Leighton <lkcl@samba.org>2000-03-07 00:16:37 +0000
committerLuke Leighton <lkcl@samba.org>2000-03-07 00:16:37 +0000
commit8b90114159c2396229994c68dee8107778632783 (patch)
treec273ef7c82435e27ad9cb328a68cdbfae198044e
parent7177eed7d1005b9a23d45c60eaf7b75fe24b75dc (diff)
downloadsamba-8b90114159c2396229994c68dee8107778632783.tar.gz
solving issue of cascade joining domain. it's decided that the
password set is to be an info level 0x12, due to get_usrdom_pwinfo. eh???
-rw-r--r--source/include/proto.h14
-rw-r--r--source/include/rpc_parse_proto.h1
-rw-r--r--source/include/rpc_samr.h9
-rw-r--r--source/include/winbindd_proto.h1
-rw-r--r--source/rpc_parse/parse_samr.c31
-rw-r--r--source/rpc_server/srv_samr.c3
-rw-r--r--source/samrd/srv_samr_passdb.c10
-rw-r--r--source/samrd/srv_samr_usr_nt5ldap.c10
-rw-r--r--source/samrd/srv_samr_usr_tdb.c9
9 files changed, 40 insertions, 48 deletions
diff --git a/source/include/proto.h b/source/include/proto.h
index abac275bcb2..a84ac890921 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -3895,8 +3895,9 @@ uint32 _samr_open_domain(const POLICY_HND *connect_pol,
const DOM_SID *sid,
POLICY_HND *domain_pol);
uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
- uint32 *unknown_0,
- uint32 *unknown_1);
+ uint16 *unknown_0,
+ uint16 *unknown_1,
+ uint32 *unknown_2);
uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SEC_DESC_BUF *buf);
uint32 _samr_enum_dom_users( const POLICY_HND *pol, uint32 *start_idx,
uint16 acb_mask, uint16 unk_1, uint32 size,
@@ -4086,8 +4087,9 @@ BOOL pwdbsam_initialise(void);
/*The following definitions come from samrd/srv_samr_usr_nt5ldap.c */
uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
- uint32 *unknown_0,
- uint32 *unknown_1);
+ uint16 *unknown_0,
+ uint16 *unknown_1,
+ uint32 *unknown_2);
uint32 _samr_query_sec_obj(const POLICY_HND *pol, SEC_DESC_BUF *buf);
uint32 _samr_query_usergroups(const POLICY_HND *pol,
uint32 *num_groups,
@@ -4115,7 +4117,9 @@ uint32 _samr_delete_dom_user(POLICY_HND *user_pol);
BOOL tdb_lookup_user(TDB_CONTEXT * tdb, SAM_USER_INFO_21 * usr);
uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
- uint32 * unknown_0, uint32 * unknown_1);
+ uint16 * unknown_0,
+ uint16 *unknown_1,
+ uint32 * unknown_2);
uint32 _samr_query_usergroups(const POLICY_HND *pol,
uint32 * num_groups, DOM_GID ** gids);
uint32 _samr_query_useraliases(const POLICY_HND *domain_pol,
diff --git a/source/include/rpc_parse_proto.h b/source/include/rpc_parse_proto.h
index 2f8e445f558..75c82792979 100644
--- a/source/include/rpc_parse_proto.h
+++ b/source/include/rpc_parse_proto.h
@@ -414,7 +414,6 @@ BOOL samr_io_q_open_domain(char *desc, SAMR_Q_OPEN_DOMAIN *q_u, prs_struct *ps,
BOOL samr_io_r_open_domain(char *desc, SAMR_R_OPEN_DOMAIN *r_u, prs_struct *ps, int depth);
BOOL make_samr_q_get_usrdom_pwinfo(SAMR_Q_GET_USRDOM_PWINFO *q_u, POLICY_HND *user_pol);
BOOL samr_io_q_get_usrdom_pwinfo(char *desc, SAMR_Q_GET_USRDOM_PWINFO *q_u, prs_struct *ps, int depth);
-BOOL make_samr_r_get_usrdom_pwinfo(SAMR_R_GET_USRDOM_PWINFO *q_u, uint32 status);
BOOL samr_io_r_get_usrdom_pwinfo(char *desc, SAMR_R_GET_USRDOM_PWINFO *r_u, prs_struct *ps, int depth);
BOOL make_samr_q_query_sec_obj(SAMR_Q_QUERY_SEC_OBJ *q_u,
const POLICY_HND *user_pol, uint32 sec_info);
diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h
index e577739fb1a..6deaf5383f5 100644
--- a/source/include/rpc_samr.h
+++ b/source/include/rpc_samr.h
@@ -285,11 +285,11 @@ typedef struct sam_user_info_21
/* SAM_USER_INFO_12 */
typedef struct sam_user_info_12
{
- uint16 acb_info; /* account control bits */
-
uint8 lm_pwd[16]; /* lm user passwords */
uint8 nt_pwd[16]; /* nt user passwords */
+ uint16 acb_info; /* account control bits */
+
} SAM_USER_INFO_12;
/* SAM_USER_INFO_11 */
@@ -376,8 +376,9 @@ SAMR_R_GET_USRDOM_PWINFO - a "set user info" occurs just after this
/* SAMR_R_GET_USRDOM_PWINFO */
typedef struct r_samr_usrdom_pwinfo_info
{
- uint32 unknown_0; /* 0x0016 0000 */
- uint32 unknown_1; /* 0x0000 0000 */
+ uint16 unknown_0; /* 0000 */
+ uint16 unknown_1; /* 0x0016 or 0x0015 */
+ uint32 unknown_2; /* 0x0000 0000 */
uint32 status;
} SAMR_R_GET_USRDOM_PWINFO;
diff --git a/source/include/winbindd_proto.h b/source/include/winbindd_proto.h
index 0bce2bda6db..63e92dd3ec3 100644
--- a/source/include/winbindd_proto.h
+++ b/source/include/winbindd_proto.h
@@ -2105,7 +2105,6 @@ BOOL samr_io_q_open_domain(char *desc, SAMR_Q_OPEN_DOMAIN *q_u, prs_struct *ps,
BOOL samr_io_r_open_domain(char *desc, SAMR_R_OPEN_DOMAIN *r_u, prs_struct *ps, int depth);
BOOL make_samr_q_get_usrdom_pwinfo(SAMR_Q_GET_USRDOM_PWINFO *q_u, POLICY_HND *user_pol);
BOOL samr_io_q_get_usrdom_pwinfo(char *desc, SAMR_Q_GET_USRDOM_PWINFO *q_u, prs_struct *ps, int depth);
-BOOL make_samr_r_get_usrdom_pwinfo(SAMR_R_GET_USRDOM_PWINFO *q_u, uint32 status);
BOOL samr_io_r_get_usrdom_pwinfo(char *desc, SAMR_R_GET_USRDOM_PWINFO *r_u, prs_struct *ps, int depth);
BOOL make_samr_q_query_sec_obj(SAMR_Q_QUERY_SEC_OBJ *q_u,
const POLICY_HND *user_pol, uint32 sec_info);
diff --git a/source/rpc_parse/parse_samr.c b/source/rpc_parse/parse_samr.c
index 3f0904183eb..a07059a4e14 100644
--- a/source/rpc_parse/parse_samr.c
+++ b/source/rpc_parse/parse_samr.c
@@ -323,23 +323,6 @@ BOOL samr_io_q_get_usrdom_pwinfo(char *desc, SAMR_Q_GET_USRDOM_PWINFO *q_u, prs
}
/*******************************************************************
-makes a structure.
-********************************************************************/
-BOOL make_samr_r_get_usrdom_pwinfo(SAMR_R_GET_USRDOM_PWINFO *q_u, uint32 status)
-{
- if (q_u == NULL) return False;
-
- DEBUG(5,("samr_make_r_get_usrdom_pwinfo\n"));
-
- q_u->unknown_0 = 0x00150000;
- q_u->unknown_1 = 0x00000000;
- q_u->status = status;
-
- return True;
-}
-
-
-/*******************************************************************
reads or writes a structure.
********************************************************************/
BOOL samr_io_r_get_usrdom_pwinfo(char *desc, SAMR_R_GET_USRDOM_PWINFO *r_u, prs_struct *ps, int depth)
@@ -351,8 +334,9 @@ BOOL samr_io_r_get_usrdom_pwinfo(char *desc, SAMR_R_GET_USRDOM_PWINFO *r_u, prs
prs_align(ps);
- prs_uint32("unknown_0", ps, depth, &(r_u->unknown_0));
- prs_uint32("unknown_1", ps, depth, &(r_u->unknown_1));
+ prs_uint16("unknown_0", ps, depth, &(r_u->unknown_0));
+ prs_uint16("unknown_1", ps, depth, &(r_u->unknown_1));
+ prs_uint32("unknown_2", ps, depth, &(r_u->unknown_2));
prs_uint32("status ", ps, depth, &(r_u->status ));
return True;
@@ -4666,21 +4650,18 @@ BOOL sam_io_user_info12(char *desc, SAM_USER_INFO_12 *u, prs_struct *ps, int de
DEBUG(0,("possible security breach!\n"));
- return False;
-#if 0
prs_debug(ps, depth, desc, "samr_io_r_user_info12");
depth++;
prs_align(ps);
- prs_uint16("acb_info", ps, depth, &u->acb_info);
- prs_align(ps);
-
prs_uint8s(False, "lm_pwd", ps, depth, u->lm_pwd, sizeof(u->lm_pwd));
prs_uint8s(False, "nt_pwd", ps, depth, u->nt_pwd, sizeof(u->nt_pwd));
+ prs_uint16("acb_info", ps, depth, &u->acb_info);
+ prs_align(ps);
+
return True;
-#endif
}
/*******************************************************************
diff --git a/source/rpc_server/srv_samr.c b/source/rpc_server/srv_samr.c
index 23553722cf8..25a7c77b6e3 100644
--- a/source/rpc_server/srv_samr.c
+++ b/source/rpc_server/srv_samr.c
@@ -94,7 +94,8 @@ static BOOL api_samr_get_usrdom_pwinfo( rpcsrv_struct *p, prs_struct *data, prs_
r_u.status = _samr_get_usrdom_pwinfo(&q_u.user_pol,
- &r_u.unknown_0, &r_u.unknown_1);
+ &r_u.unknown_0, &r_u.unknown_1,
+ &r_u.unknown_2);
return samr_io_r_get_usrdom_pwinfo("", &r_u, rdata, 0);
}
diff --git a/source/samrd/srv_samr_passdb.c b/source/samrd/srv_samr_passdb.c
index 5359d2895eb..a88c91b02e2 100644
--- a/source/samrd/srv_samr_passdb.c
+++ b/source/samrd/srv_samr_passdb.c
@@ -257,8 +257,9 @@ uint32 _samr_open_domain(const POLICY_HND *connect_pol,
samr_reply_get_usrdom_pwinfo
********************************************************************/
uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
- uint32 *unknown_0,
- uint32 *unknown_1)
+ uint16 *unknown_0,
+ uint16 *unknown_1,
+ uint32 *unknown_2)
{
uint32 rid;
DOM_SID sid;
@@ -271,8 +272,9 @@ uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
sid_split_rid(&sid, &rid);
- *unknown_0 = 0x00150000;
- *unknown_1 = 0x00000000;
+ *unknown_0 = 0x0000;
+ *unknown_1 = 0x0015;
+ *unknown_2 = 0x00000000;
DEBUG(5,("samr_get_usrdom_pwinfo: %d\n", __LINE__));
diff --git a/source/samrd/srv_samr_usr_nt5ldap.c b/source/samrd/srv_samr_usr_nt5ldap.c
index e6cecb6a921..390d92baa8c 100644
--- a/source/samrd/srv_samr_usr_nt5ldap.c
+++ b/source/samrd/srv_samr_usr_nt5ldap.c
@@ -159,8 +159,9 @@ static BOOL nt5ldap_set_userinfo_23(LDAPDB *hds, uint32 rid,
samr_reply_get_usrdom_pwinfo
********************************************************************/
uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
- uint32 *unknown_0,
- uint32 *unknown_1)
+ uint16 *unknown_0,
+ uint16 *unknown_1,
+ uint32 *unknown_2)
{
uint32 rid;
LDAPDB *hds = NULL;
@@ -171,8 +172,9 @@ uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
return NT_STATUS_INVALID_HANDLE;
}
- *unknown_0 = 0x00150000;
- *unknown_1 = 0x00000000;
+ *unknown_0 = 0x0000;
+ *unknown_1 = 0x0015;
+ *unknown_2 = 0x00000000;
DEBUG(5,("samr_get_usrdom_pwinfo: %d\n", __LINE__));
diff --git a/source/samrd/srv_samr_usr_tdb.c b/source/samrd/srv_samr_usr_tdb.c
index 4a4a942cc09..7c0ead27112 100644
--- a/source/samrd/srv_samr_usr_tdb.c
+++ b/source/samrd/srv_samr_usr_tdb.c
@@ -365,7 +365,9 @@ static BOOL tdb_set_userinfo_23(TDB_CONTEXT * tdb,
samr_reply_get_usrdom_pwinfo
********************************************************************/
uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
- uint32 * unknown_0, uint32 * unknown_1)
+ uint16 * unknown_0,
+ uint16 *unknown_1,
+ uint32 * unknown_2)
{
uint32 rid;
TDB_CONTEXT *tdb = NULL;
@@ -377,8 +379,9 @@ uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
return NT_STATUS_INVALID_HANDLE;
}
- *unknown_0 = 0x00150000;
- *unknown_1 = 0x00000000;
+ *unknown_0 = 0x0000;
+ *unknown_1 = 0x1515;
+ *unknown_2 = 0x00000000;
DEBUG(5, ("samr_get_usrdom_pwinfo: %d\n", __LINE__));