mirror of
https://github.com/samba-team/samba.git
synced 2025-03-08 04:58:40 +03:00
Force algorithmic rid base to sane values and talk about it.
Volker (This used to be commit ce5b2d991b42bbf6865ff75194f8ee4b46694841)
This commit is contained in:
parent
670764e38c
commit
9422775efd
@ -500,9 +500,30 @@ BOOL pdb_gethexpwd(const char *p, unsigned char *pwd)
|
||||
Converts NT user RID to a UNIX uid.
|
||||
********************************************************************/
|
||||
|
||||
static int algorithmic_rid_base(void)
|
||||
{
|
||||
static int rid_offset = 0;
|
||||
|
||||
if (rid_offset != 0)
|
||||
return rid_offset;
|
||||
|
||||
rid_offset = lp_algorithmic_rid_base();
|
||||
|
||||
if (rid_offset < 1000) {
|
||||
DEBUG(0, ("algorithmic rid base must be above 1000\n"));
|
||||
rid_offset = 1000;
|
||||
}
|
||||
if (rid_offset & 1) {
|
||||
DEBUG(0, ("algorithmic rid base must be even\n"));
|
||||
rid_offset += 1;
|
||||
}
|
||||
return rid_offset;
|
||||
}
|
||||
|
||||
|
||||
uid_t fallback_pdb_user_rid_to_uid(uint32 user_rid)
|
||||
{
|
||||
int rid_offset = lp_algorithmic_rid_base();
|
||||
int rid_offset = algorithmic_rid_base();
|
||||
return (uid_t)(((user_rid & (~USER_RID_TYPE))- rid_offset)/RID_MULTIPLIER);
|
||||
}
|
||||
|
||||
@ -513,7 +534,7 @@ uid_t fallback_pdb_user_rid_to_uid(uint32 user_rid)
|
||||
|
||||
uint32 fallback_pdb_uid_to_user_rid(uid_t uid)
|
||||
{
|
||||
int rid_offset = lp_algorithmic_rid_base();
|
||||
int rid_offset = algorithmic_rid_base();
|
||||
return (((((uint32)uid)*RID_MULTIPLIER) + rid_offset) | USER_RID_TYPE);
|
||||
}
|
||||
|
||||
@ -523,7 +544,7 @@ uint32 fallback_pdb_uid_to_user_rid(uid_t uid)
|
||||
|
||||
gid_t pdb_group_rid_to_gid(uint32 group_rid)
|
||||
{
|
||||
int rid_offset = lp_algorithmic_rid_base();
|
||||
int rid_offset = algorithmic_rid_base();
|
||||
return (gid_t)(((group_rid & (~GROUP_RID_TYPE))- rid_offset)/RID_MULTIPLIER);
|
||||
}
|
||||
|
||||
@ -537,7 +558,7 @@ gid_t pdb_group_rid_to_gid(uint32 group_rid)
|
||||
|
||||
uint32 pdb_gid_to_group_rid(gid_t gid)
|
||||
{
|
||||
int rid_offset = lp_algorithmic_rid_base();
|
||||
int rid_offset = algorithmic_rid_base();
|
||||
return (((((uint32)gid)*RID_MULTIPLIER) + rid_offset) | GROUP_RID_TYPE);
|
||||
}
|
||||
|
||||
|
@ -168,6 +168,14 @@ via the %%o substitution. With encrypted passwords this is not possible.\n", lp_
|
||||
printf("'winbind separator = +' might cause problems with group membership.\n");
|
||||
}
|
||||
|
||||
if (lp_algorithmic_rid_base() < 1000) {
|
||||
printf("'algorithmic rid base' must be equal or above 1000.\n");
|
||||
}
|
||||
|
||||
if (lp_algorithmic_rid_base() & 1) {
|
||||
printf("'algorithmic rid base' must be even.\n");
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user