mirror of
https://github.com/samba-team/samba.git
synced 2025-01-25 06:04:04 +03:00
- fixed the %U macro so that the old (and documented) semantics work
again. This got broken with one of the substitute.c updates a couple of months ago. - also fixed %u to return the username from the current_user structure when called via a method that does not have direct access to the username. I cache the uidtoname() result to prevent thrashing nss. (This used to be commit 2520a0eff9c5decbec79aababe9910db3535890a)
This commit is contained in:
parent
ebe8a05062
commit
e1b9b33e2b
@ -206,7 +206,7 @@ void standard_sub_advanced(int snum, char *user, char *connectpath, gid_t gid, c
|
|||||||
int l = sizeof(pstring) - (int)(p-str);
|
int l = sizeof(pstring) - (int)(p-str);
|
||||||
|
|
||||||
switch (*(p+1)) {
|
switch (*(p+1)) {
|
||||||
case 'U' : string_sub(p,"%U", user,l); break;
|
case 'U' : string_sub(p,"%U",sam_logon_in_ssb?samlogon_user:sesssetup_user,l); break;
|
||||||
case 'G' :
|
case 'G' :
|
||||||
if ((pass = Get_Pwnam(user,False))!=NULL) {
|
if ((pass = Get_Pwnam(user,False))!=NULL) {
|
||||||
string_sub(p,"%G",gidtoname(pass->pw_gid),l);
|
string_sub(p,"%G",gidtoname(pass->pw_gid),l);
|
||||||
@ -272,7 +272,18 @@ like standard_sub but by snum
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
void standard_sub_snum(int snum, char *str)
|
void standard_sub_snum(int snum, char *str)
|
||||||
{
|
{
|
||||||
standard_sub_advanced(snum, "", "", -1, str);
|
extern struct current_user current_user;
|
||||||
|
static uid_t cached_uid = -1;
|
||||||
|
static fstring cached_user;
|
||||||
|
/* calling uidtoname() on every substitute would be too expensive, so
|
||||||
|
we cache the result here as nearly every call is for the same uid */
|
||||||
|
|
||||||
|
if (cached_uid != current_user.uid) {
|
||||||
|
fstrcpy(cached_user, uidtoname(current_user.uid));
|
||||||
|
cached_uid = current_user.uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
standard_sub_advanced(snum, cached_user, "", -1, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
|
Loading…
x
Reference in New Issue
Block a user