summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/include/proto.h3
-rw-r--r--source3/include/smb.h7
-rw-r--r--source3/include/smb_macros.h8
-rw-r--r--source3/passdb/passdb.c43
-rw-r--r--source3/rpc_parse/parse_net.c4
-rw-r--r--source3/smbd/password.c66
-rw-r--r--source3/smbd/reply.c4
7 files changed, 65 insertions, 70 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 3887d96589..a5da95cd7d 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -3304,8 +3304,7 @@ char *validated_domain(uint16 vuid);
int setup_groups(char *user, char *domain,
uid_t uid, gid_t gid, int *p_ngroups, gid_t **p_groups);
uint16 register_vuid(uid_t uid,gid_t gid, char *unix_name, char *requested_name,
- char *domain,BOOL guest,
- NET_USER_INFO_3 *usr);
+ char *domain,BOOL guest);
void add_session_user(char *user);
BOOL smb_password_check(char *password, unsigned char *part_passwd, unsigned char *c8);
BOOL smb_password_ok(struct smb_passwd *smb_pass, uchar chal[8],
diff --git a/source3/include/smb.h b/source3/include/smb.h
index 0efced2e38..91f0e04b48 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -1696,7 +1696,12 @@ typedef struct
int n_groups;
gid_t *groups;
- NET_USER_INFO_3 usr;
+#if 0
+ NET_USER_INFO_3 usr; /* This should not be here. */
+#else
+ DOM_SID user_sid;
+ DOM_SID *group_sids;
+#endif
/* per-user authentication information on NT RPCs */
/* lkclXXXX - THIS SHOULD NOT BE HERE! */
diff --git a/source3/include/smb_macros.h b/source3/include/smb_macros.h
index 267b061f65..51c7c1c638 100644
--- a/source3/include/smb_macros.h
+++ b/source3/include/smb_macros.h
@@ -42,14 +42,6 @@
#define IS_DOS_SYSTEM(test_mode) (((test_mode) & aSYSTEM) != 0)
#define IS_DOS_HIDDEN(test_mode) (((test_mode) & aHIDDEN) != 0)
-/* memory-allocation-helpers (idea and names from glib) */
-#define g_new(type, count) \
- ((type *) malloc(sizeof(type) * (count)))
-#define g_new0(type, count) \
- ((type *) calloc((count), sizeof(type)))
-#define g_renew(type, mem, count) \
- ((type *) Realloc(mem, sizeof(type) * (count)))
-
/* zero a structure */
#define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c
index 957ba06874..6556503dca 100644
--- a/source3/passdb/passdb.c
+++ b/source3/passdb/passdb.c
@@ -1214,7 +1214,6 @@ BOOL lookup_local_name(char *domain, char *user, DOM_SID *psid, uint8 *psid_name
return True;
}
-#if 0
/****************************************************************************
Create a list of SIDS for a user - primary and group.
This is really the wrong way to do this and needs to go via winbind. JRA.
@@ -1242,5 +1241,45 @@ BOOL setup_user_sids(user_struct *vuser)
}
return True;
-}
+#if 0
+ /* Luke's code. */
+ if (usr == NULL)
+ {
+ int i;
+ extern DOM_SID global_sam_sid;
+
+ DEBUG(0,("vuser struct usr being filled in with trash, today\n"));
+ DEBUG(0,("this needs to be replaced with a proper surs impl.\n"));
+ DEBUG(0,("e.g. the one used in winbindd. in fact, all\n"));
+ DEBUG(0,("occurrences of pdb_xxx_to_xxx should be replaced\n"));
+ DEBUG(0,("as soon as possible.\n"));
+ vuser->usr.user_id = pdb_uid_to_user_rid(uid);
+ vuser->usr.group_id = pdb_gid_to_group_rid(gid);
+ vuser->usr.num_groups = vuser->n_groups;
+ if (vuser->n_groups != 0)
+ {
+ vuser->usr.gids = g_new(DOM_GID, vuser->usr.num_groups);
+ if (vuser->usr.gids == NULL)
+ return UID_FIELD_INVALID;
+ }
+
+ for (i = 0; i < vuser->usr.num_groups; i++)
+ {
+ DOM_GID *ntgid = &vuser->usr.gids[i];
+ ntgid->attr = 0x7;
+ ntgid->g_rid = pdb_gid_to_group_rid(vuser->groups[i]);
+ }
+
+ /* this is possibly the worst thing to do, ever. it assumes */
+ /* that all users of this system are in the local SAM database */
+ /* however, because there is no code to do anything otherwise, */
+ /* we have no choice */
+
+ init_dom_sid2(&vuser->usr.dom_sid, &global_sam_sid);
+ }
+ else
+ {
+ vuser->usr = *usr;
+ }
#endif
+}
diff --git a/source3/rpc_parse/parse_net.c b/source3/rpc_parse/parse_net.c
index c1b16b8864..bcc8e876b5 100644
--- a/source3/rpc_parse/parse_net.c
+++ b/source3/rpc_parse/parse_net.c
@@ -1072,7 +1072,7 @@ void init_net_user_info3(NET_USER_INFO_3 *usr,
if (num_groups > 0)
{
- usr->gids = g_new(DOM_GID, num_groups);
+ usr->gids = (DOM_GID *)malloc(sizeof(DOM_GID) * num_groups);
if (usr->gids == NULL)
return;
for (i = 0; i < num_groups; i++)
@@ -1190,7 +1190,7 @@ static BOOL net_io_user_info3(char *desc, NET_USER_INFO_3 *usr, prs_struct *ps,
if (UNMARSHALLING(ps) && usr->num_groups2 > 0)
{
- usr->gids = g_new(DOM_GID, usr->num_groups2);
+ usr->gids = (DOM_GID *)malloc(sizeof(DOM_GID)*usr->num_groups2);
if (usr->gids == NULL)
return False;
}
diff --git a/source3/smbd/password.c b/source3/smbd/password.c
index 4110530c0b..c38a6a0f2b 100644
--- a/source3/smbd/password.c
+++ b/source3/smbd/password.c
@@ -117,24 +117,24 @@ invalidate a uid
****************************************************************************/
void invalidate_vuid(uint16 vuid)
{
- user_struct *vuser = get_valid_user_struct(vuid);
+ user_struct *vuser = get_valid_user_struct(vuid);
- if (vuser == NULL) return;
+ if (vuser == NULL)
+ return;
- vuser->uid = (uid_t)-1;
- vuser->gid = (gid_t)-1;
+ vuser->uid = (uid_t)-1;
+ vuser->gid = (gid_t)-1;
- /* same number of igroups as groups */
- vuser->n_groups = 0;
+ /* same number of igroups as groups */
+ vuser->n_groups = 0;
- if (vuser->groups)
- free((char *)vuser->groups);
+ if (vuser->groups)
+ free((char *)vuser->groups);
- vuser->groups = NULL;
+ vuser->groups = NULL;
- if (vuser->usr.gids != NULL)
- free (vuser->usr.gids);
- vuser->usr.gids = NULL;
+ if (vuser->group_sids != NULL)
+ free (vuser->group_sids);
}
@@ -218,8 +218,7 @@ has been given. vuid is biased by an offset. This allows us to
tell random client vuid's (normally zero) from valid vuids.
****************************************************************************/
uint16 register_vuid(uid_t uid,gid_t gid, char *unix_name, char *requested_name,
- char *domain,BOOL guest,
- NET_USER_INFO_3 *usr)
+ char *domain,BOOL guest)
{
user_struct *vuser;
struct passwd *pwfile; /* for getting real name from passwd file */
@@ -279,44 +278,7 @@ uint16 register_vuid(uid_t uid,gid_t gid, char *unix_name, char *requested_name,
&vuser->n_groups,
&vuser->groups);
- if (usr == NULL)
- {
- int i;
- extern DOM_SID global_sam_sid;
-
- DEBUG(0,("vuser struct usr being filled in with trash, today\n"));
- DEBUG(0,("this needs to be replaced with a proper surs impl.\n"));
- DEBUG(0,("e.g. the one used in winbindd. in fact, all\n"));
- DEBUG(0,("occurrences of pdb_xxx_to_xxx should be replaced\n"));
- DEBUG(0,("as soon as possible.\n"));
- vuser->usr.user_id = pdb_uid_to_user_rid(uid);
- vuser->usr.group_id = pdb_gid_to_group_rid(gid);
- vuser->usr.num_groups = vuser->n_groups;
- if (vuser->n_groups != 0)
- {
- vuser->usr.gids = g_new(DOM_GID, vuser->usr.num_groups);
- if (vuser->usr.gids == NULL)
- return UID_FIELD_INVALID;
- }
-
- for (i = 0; i < vuser->usr.num_groups; i++)
- {
- DOM_GID *ntgid = &vuser->usr.gids[i];
- ntgid->attr = 0x7;
- ntgid->g_rid = pdb_gid_to_group_rid(vuser->groups[i]);
- }
-
- /* this is possibly the worst thing to do, ever. it assumes */
- /* that all users of this system are in the local SAM database */
- /* however, because there is no code to do anything otherwise, */
- /* we have no choice */
-
- init_dom_sid2(&vuser->usr.dom_sid, &global_sam_sid);
- }
- else
- {
- vuser->usr = *usr;
- }
+ setup_user_sids(vuser);
DEBUG(3,("uid %d registered to name %s\n",(int)uid,unix_name));
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index f9c0695a39..00a0ce3c4a 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -1001,9 +1001,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
/* register the name and uid as being validated, so further connections
to a uid can get through without a password, on the same VC */
- DEBUG(0,("must call domain_client_validate() which returns a "));
- DEBUG(0,("NET_USER_INFO_3 structure to pass to register_vuid()"));
- sess_vuid = register_vuid(uid,gid,user,sesssetup_user,domain,guest, NULL);
+ sess_vuid = register_vuid(uid,gid,user,sesssetup_user,domain,guest);
SSVAL(outbuf,smb_uid,sess_vuid);
SSVAL(inbuf,smb_uid,sess_vuid);