summaryrefslogtreecommitdiffstats
path: root/source3
diff options
context:
space:
mode:
authorJean-François Micouleau <jfm@samba.org>2000-09-27 13:02:57 +0000
committerJean-François Micouleau <jfm@samba.org>2000-09-27 13:02:57 +0000
commit8c93ddf3e0ea80d482cbee7bf233c32fc69955bb (patch)
treeca4da3e33310108a2e455da1aeb554d12ca2d7fa /source3
parente8fbf2cbadb81eee9e342da7bdbe6f30c3bb7cb2 (diff)
samr unknown 0x32 is in fact samr create user.
so renamed and tidy up of the server function. J.F. (This used to be commit 0f707ac1fb5685b800d6599b9074ec1d4e65b1c1)
Diffstat (limited to 'source3')
-rw-r--r--source3/include/proto.h4
-rw-r--r--source3/include/rpc_samr_old.h18
-rw-r--r--source3/rpc_parse/parse_samr.c6
-rw-r--r--source3/rpc_server/srv_samr.c77
4 files changed, 42 insertions, 63 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 38afa0c222..be773f0bc3 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -2656,8 +2656,8 @@ void init_sam_user_info21(SAM_USER_INFO_21 *usr,
void init_samr_r_query_userinfo(SAMR_R_QUERY_USERINFO *r_u,
uint16 switch_value, void *info, uint32 status);
BOOL samr_io_r_query_userinfo(char *desc, SAMR_R_QUERY_USERINFO *r_u, prs_struct *ps, int depth);
-BOOL samr_io_q_unknown_32(char *desc, SAMR_Q_UNKNOWN_32 *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_unknown_32(char *desc, SAMR_R_UNKNOWN_32 *r_u, prs_struct *ps, int depth);
+BOOL samr_io_q_create_user(char *desc, SAMR_Q_CREATE_USER *q_u, prs_struct *ps, int depth);
+BOOL samr_io_r_create_user(char *desc, SAMR_R_CREATE_USER *r_u, prs_struct *ps, int depth);
void init_samr_q_connect(SAMR_Q_CONNECT *q_u,
char *srv_name, uint32 unknown_0);
BOOL samr_io_q_connect(char *desc, SAMR_Q_CONNECT *q_u, prs_struct *ps, int depth);
diff --git a/source3/include/rpc_samr_old.h b/source3/include/rpc_samr_old.h
index 29c1672425..d385f18e76 100644
--- a/source3/include/rpc_samr_old.h
+++ b/source3/include/rpc_samr_old.h
@@ -92,7 +92,7 @@ SamrTestPrivateFunctionsUser
#define SAMR_UNKNOWN_12 0x12
#define SAMR_UNKNOWN_21 0x21
#define SAMR_UNKNOWN_2C 0x2c
-#define SAMR_UNKNOWN_32 0x32
+#define SAMR_CREATE_USER 0x32
#define SAMR_UNKNOWN_34 0x34
#define SAMR_CHGPASSWD_USER 0x37
#define SAMR_UNKNOWN_38 0x38
@@ -983,10 +983,10 @@ typedef struct q_samr_unknown_21_info
} SAMR_Q_UNKNOWN_21;
-/* SAMR_Q_UNKNOWN_32 - probably a "create SAM entry" */
-typedef struct q_samr_unknown_32_info
+/* SAMR_Q_CREATE_USER - probably a "create SAM entry" */
+typedef struct q_samr_create_user_info
{
- POLICY_HND pol; /* policy handle */
+ POLICY_HND pol; /* policy handle */
UNIHDR hdr_mach_acct; /* unicode machine account name header */
UNISTR2 uni_mach_acct; /* unicode machine account name */
@@ -995,20 +995,20 @@ typedef struct q_samr_unknown_32_info
uint16 unknown_1; /* 16 bit unknown - 0x00B0 */
uint16 unknown_2; /* 16 bit unknown - 0xe005 */
-} SAMR_Q_UNKNOWN_32;
+} SAMR_Q_CREATE_USER;
-/* SAMR_R_UNKNOWN_32 - probably a "create SAM entry" */
-typedef struct r_samr_unknown_32_info
+/* SAMR_R_CREATE_USER - probably a "create SAM entry" */
+typedef struct r_samr_create_user_info
{
- POLICY_HND pol; /* policy handle */
+ POLICY_HND pol; /* policy handle */
/* rid4.unknown - fail: 0030 success: 0x03ff */
DOM_RID4 rid4; /* rid and attributes */
uint32 status; /* return status - fail: 0xC000 0099: user exists */
-} SAMR_R_UNKNOWN_32;
+} SAMR_R_CREATE_USER;
/* SAMR_Q_OPEN_ALIAS - probably an open */
typedef struct q_samr_open_alias_info
diff --git a/source3/rpc_parse/parse_samr.c b/source3/rpc_parse/parse_samr.c
index 58e65fa0af..72e803d22b 100644
--- a/source3/rpc_parse/parse_samr.c
+++ b/source3/rpc_parse/parse_samr.c
@@ -3058,12 +3058,12 @@ BOOL samr_io_r_query_userinfo(char *desc, SAMR_R_QUERY_USERINFO *r_u, prs_struc
Reads or writes a structure.
********************************************************************/
-BOOL samr_io_q_unknown_32(char *desc, SAMR_Q_UNKNOWN_32 *q_u, prs_struct *ps, int depth)
+BOOL samr_io_q_create_user(char *desc, SAMR_Q_CREATE_USER *q_u, prs_struct *ps, int depth)
{
if (q_u == NULL)
return False;
- prs_debug(ps, depth, desc, "samr_io_q_unknown_32");
+ prs_debug(ps, depth, desc, "samr_io_q_create_user");
depth++;
if(!prs_align(ps))
@@ -3096,7 +3096,7 @@ BOOL samr_io_q_unknown_32(char *desc, SAMR_Q_UNKNOWN_32 *q_u, prs_struct *ps, i
Reads or writes a structure.
********************************************************************/
-BOOL samr_io_r_unknown_32(char *desc, SAMR_R_UNKNOWN_32 *r_u, prs_struct *ps, int depth)
+BOOL samr_io_r_create_user(char *desc, SAMR_R_CREATE_USER *r_u, prs_struct *ps, int depth)
{
if (r_u == NULL)
return False;
diff --git a/source3/rpc_server/srv_samr.c b/source3/rpc_server/srv_samr.c
index 95c3e7c6ca..ab32bfe563 100644
--- a/source3/rpc_server/srv_samr.c
+++ b/source3/rpc_server/srv_samr.c
@@ -1827,54 +1827,24 @@ static BOOL api_samr_query_dom_info(pipes_struct *p)
}
/*******************************************************************
- samr_reply_unknown_32
+ api_samr_create_user
********************************************************************/
-static BOOL samr_reply_unknown_32(SAMR_Q_UNKNOWN_32 *q_u,
- prs_struct *rdata,
- int status)
-{
- int i;
- SAMR_R_UNKNOWN_32 r_u;
-
- /* set up the SAMR unknown_32 response */
- memset((char *)r_u.pol.data, '\0', POL_HND_SIZE);
- if (status == 0)
- {
- for (i = 4; i < POL_HND_SIZE; i++)
- {
- r_u.pol.data[i] = i+1;
- }
- }
-
- init_dom_rid4(&(r_u.rid4), 0x0030, 0, 0);
- r_u.status = status;
-
- DEBUG(5,("samr_unknown_32: %d\n", __LINE__));
-
- /* store the response in the SMB stream */
- if(!samr_io_r_unknown_32("", &r_u, rdata, 0))
- return False;
-
- DEBUG(5,("samr_unknown_32: %d\n", __LINE__));
-
- return True;
-}
-
-/*******************************************************************
- api_samr_unknown_32
- ********************************************************************/
-static BOOL api_samr_unknown_32(pipes_struct *p)
+static BOOL api_samr_create_user(pipes_struct *p)
{
uint32 status = 0;
struct sam_passwd *sam_pass;
fstring mach_acct;
prs_struct *data = &p->in_data.data;
prs_struct *rdata = &p->out_data.rdata;
+ int i;
- SAMR_Q_UNKNOWN_32 q_u;
+ SAMR_Q_CREATE_USER q_u;
+ SAMR_R_CREATE_USER r_u;
- /* grab the samr unknown 32 */
- samr_io_q_unknown_32("", &q_u, data, 0);
+ DEBUG(5,("api_samr_create_user: %d\n", __LINE__));
+
+ /* grab the samr create user */
+ samr_io_q_create_user("", &q_u, data, 0);
/* find the machine account: tell the caller if it exists.
lkclXXXX i have *no* idea if this is a problem or not
@@ -1882,29 +1852,38 @@ static BOOL api_samr_unknown_32(pipes_struct *p)
reply if the account already exists...
*/
- fstrcpy(mach_acct, dos_unistrn2(q_u.uni_mach_acct.buffer,
- q_u.uni_mach_acct.uni_str_len));
+ fstrcpy(mach_acct, dos_unistrn2(q_u.uni_mach_acct.buffer, q_u.uni_mach_acct.uni_str_len));
become_root();
sam_pass = getsam21pwnam(mach_acct);
unbecome_root();
- if (sam_pass != NULL)
- {
+ if (sam_pass != NULL) {
/* machine account exists: say so */
status = 0xC0000000 | NT_STATUS_USER_EXISTS;
- }
- else
- {
+ } else {
/* this could cause trouble... */
DEBUG(0,("trouble!\n"));
status = 0;
}
- /* construct reply. */
- if(!samr_reply_unknown_32(&q_u, rdata, status))
+ /* set up the SAMR create_user response */
+ memset((char *)r_u.pol.data, '\0', POL_HND_SIZE);
+ if (status == 0) {
+ for (i = 4; i < POL_HND_SIZE; i++) {
+ r_u.pol.data[i] = i+1;
+ }
+ }
+
+ init_dom_rid4(&(r_u.rid4), 0x0030, 0, 0);
+ r_u.status = status;
+
+ /* store the response in the SMB stream */
+ if(!samr_io_r_create_user("", &r_u, rdata, 0))
return False;
+ DEBUG(5,("api_samr_create_user: %d\n", __LINE__));
+
return True;
}
@@ -2197,7 +2176,7 @@ static struct api_struct api_samr_cmds [] =
{ "SAMR_QUERY_USERGROUPS" , SAMR_QUERY_USERGROUPS , api_samr_query_usergroups },
{ "SAMR_QUERY_DISPINFO" , SAMR_QUERY_DISPINFO , api_samr_query_dispinfo },
{ "SAMR_QUERY_ALIASINFO" , SAMR_QUERY_ALIASINFO , api_samr_query_aliasinfo },
- { "SAMR_0x32" , 0x32 , api_samr_unknown_32 },
+ { "SAMR_CREATE_USER" , SAMR_CREATE_USER , api_samr_create_user },
{ "SAMR_UNKNOWN_12" , SAMR_UNKNOWN_12 , api_samr_unknown_12 },
{ "SAMR_UNKNOWN_38" , SAMR_UNKNOWN_38 , api_samr_unknown_38 },
{ "SAMR_CHGPASSWD_USER" , SAMR_CHGPASSWD_USER , api_samr_chgpasswd_user },