1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-04 17:47:26 +03:00

moved get_unixgroups it will be needed by the unix instance of the group

DB API
This commit is contained in:
Luke Leighton -
parent 50fa4822df
commit ef58e48bc9
3 changed files with 50 additions and 50 deletions

View File

@ -400,6 +400,7 @@ void standard_sub(connection_struct *conn,char *str);
BOOL same_net(struct in_addr ip1,struct in_addr ip2,struct in_addr mask);
struct hostent *Get_Hostbyname(const char *name);
BOOL process_exists(int pid);
int get_unixgroups(char *user, uid_t uid, gid_t gid, int *p_ngroups, gid_t **p_groups);
char *uidtoname(uid_t uid);
char *gidtoname(gid_t gid);
BOOL nametogid(const char *name, gid_t *gid);
@ -2739,7 +2740,6 @@ BOOL set_challenge(unsigned char *challenge);
user_struct *get_valid_user_struct(uint16 vuid);
void invalidate_vuid(uint16 vuid);
char *validated_username(uint16 vuid);
int get_unixgroups(char *user, 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, BOOL guest);
void add_session_user(char *user);
BOOL smb_password_check(char *password, unsigned char *part_passwd, unsigned char *c8);

View File

@ -2321,6 +2321,55 @@ BOOL process_exists(int pid)
}
/****************************************************************************
Setup the groups a user belongs to.
****************************************************************************/
int get_unixgroups(char *user, uid_t uid, gid_t gid, int *p_ngroups, gid_t **p_groups)
{
int i,ngroups;
gid_t grp = 0;
gid_t *groups = NULL;
if (-1 == initgroups(user,gid))
{
if (getuid() == 0)
{
DEBUG(0,("Unable to initgroups!\n"));
if (gid < 0 || gid > 16000 || uid < 0 || uid > 16000)
{
DEBUG(0,("This is probably a problem with the account %s\n", user));
}
}
return -1;
}
ngroups = sys_getgroups(0,&grp);
if (ngroups <= 0)
{
ngroups = 32;
}
if((groups = (gid_t *)malloc(sizeof(gid_t)*ngroups)) == NULL)
{
DEBUG(0,("get_unixgroups malloc fail !\n"));
return -1;
}
ngroups = sys_getgroups(ngroups,groups);
(*p_ngroups) = ngroups;
(*p_groups) = groups;
DEBUG( 3, ( "%s is in %d groups: ", user, ngroups ) );
for (i = 0; i < ngroups; i++ )
{
DEBUG( 3, ( "%s%d", (i ? ", " : ""), (int)groups[i] ) );
}
DEBUG( 3, ( "\n" ) );
return 0;
}
/*******************************************************************
turn a uid into a user name
********************************************************************/

View File

@ -150,55 +150,6 @@ char *validated_username(uint16 vuid)
}
/****************************************************************************
Setup the groups a user belongs to.
****************************************************************************/
int get_unixgroups(char *user, uid_t uid, gid_t gid, int *p_ngroups, gid_t **p_groups)
{
int i,ngroups;
gid_t grp = 0;
gid_t *groups = NULL;
if (-1 == initgroups(user,gid))
{
if (getuid() == 0)
{
DEBUG(0,("Unable to initgroups!\n"));
if (gid < 0 || gid > 16000 || uid < 0 || uid > 16000)
{
DEBUG(0,("This is probably a problem with the account %s\n", user));
}
}
return -1;
}
ngroups = sys_getgroups(0,&grp);
if (ngroups <= 0)
{
ngroups = 32;
}
if((groups = (gid_t *)malloc(sizeof(gid_t)*ngroups)) == NULL)
{
DEBUG(0,("get_unixgroups malloc fail !\n"));
return -1;
}
ngroups = sys_getgroups(ngroups,groups);
(*p_ngroups) = ngroups;
(*p_groups) = groups;
DEBUG( 3, ( "%s is in %d groups: ", user, ngroups ) );
for (i = 0; i < ngroups; i++ )
{
DEBUG( 3, ( "%s%d", (i ? ", " : ""), (int)groups[i] ) );
}
DEBUG( 3, ( "\n" ) );
return 0;
}
/****************************************************************************
register a uid/name pair as being valid and that a valid password