diff options
author | Luke Leighton <lkcl@samba.org> | 1997-10-10 14:48:05 +0000 |
---|---|---|
committer | Luke Leighton <lkcl@samba.org> | 1997-10-10 14:48:05 +0000 |
commit | c5e739febe5ab3bcc5d147fe791c788ec72531a3 (patch) | |
tree | cbb87b08ca03c05b27e6cf80c281ef4d1505f0a5 /source3/smbd/server.c | |
parent | 33d8f5ecbb869edbdfe0f958c989a3fcb7a056ff (diff) | |
download | samba-c5e739febe5ab3bcc5d147fe791c788ec72531a3.tar.gz samba-c5e739febe5ab3bcc5d147fe791c788ec72531a3.tar.bz2 samba-c5e739febe5ab3bcc5d147fe791c788ec72531a3.zip |
Makefile:
added credentials.c to smbd
credentials.c:
using credential structures instead of char*
password.c uid.c server.c:
added sid and attr to user_struct.
smbdes.c:
smbhash and str_to_key make public instead of private.
pipes.c smb.h:
lsa structures, sub-functions.
proto.h:
usual.
(This used to be commit 87a0a944855a673d693d934e446bdc231b1c7f02)
Diffstat (limited to 'source3/smbd/server.c')
-rw-r--r-- | source3/smbd/server.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/source3/smbd/server.c b/source3/smbd/server.c index d387b7375b..1c31f69389 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -3003,7 +3003,8 @@ static int sig_hup() Setup the groups a user belongs to. ****************************************************************************/ int setup_groups(char *user, int uid, int gid, int *p_ngroups, - int **p_igroups, gid_t **p_groups) + int **p_igroups, gid_t **p_groups, + int **p_attrs) { if (-1 == initgroups(user,gid)) { @@ -3018,19 +3019,25 @@ int setup_groups(char *user, int uid, int gid, int *p_ngroups, { int i,ngroups; int *igroups; + int *attrs; gid_t grp = 0; ngroups = getgroups(0,&grp); if (ngroups <= 0) ngroups = 32; igroups = (int *)malloc(sizeof(int)*ngroups); + attrs = (int *)malloc(sizeof(int)*ngroups); for (i=0;i<ngroups;i++) + { + attrs [i] = 0x7; /* XXXX don't know what NT user attributes are yet! */ igroups[i] = 0x42424242; + } ngroups = getgroups(ngroups,(gid_t *)igroups); if (igroups[0] == 0x42424242) ngroups = 0; *p_ngroups = ngroups; + *p_attrs = attrs; /* The following bit of code is very strange. It is due to the fact that some OSes use int* and some use gid_t* for @@ -3052,16 +3059,18 @@ int setup_groups(char *user, int uid, int gid, int *p_ngroups, groups_use_ints = False; if (groups_use_ints) - { + { *p_igroups = igroups; *p_groups = (gid_t *)igroups; - } + } else - { + { gid_t *groups = (gid_t *)igroups; igroups = (int *)malloc(sizeof(int)*ngroups); for (i=0;i<ngroups;i++) + { igroups[i] = groups[i]; + } *p_igroups = igroups; *p_groups = (gid_t *)groups; } @@ -3270,12 +3279,15 @@ int make_connection(char *service,char *user,char *password, int pwlen, char *de /* groups stuff added by ih */ pcon->ngroups = 0; + pcon->igroups = NULL; pcon->groups = NULL; + pcon->attrs = NULL; if (!IS_IPC(cnum)) { /* Find all the groups this uid is in and store them. Used by become_user() */ - setup_groups(pcon->user,pcon->uid,pcon->gid,&pcon->ngroups,&pcon->igroups,&pcon->groups); + setup_groups(pcon->user,pcon->uid,pcon->gid, + &pcon->ngroups,&pcon->igroups,&pcon->groups,&pcon->attrs); /* check number of connections */ if (!claim_connection(cnum, |