Print

Print


Hi Matevz,

What Brian referred to is the traceid information. It has nothing to do with 
user identity but a short-hand to differentiate users strictly for logging 
purposes. The traceid comes via the login protocol which limits the 
"username" in the traceid to 8 characters and is unchangeable without 
seriously changing the protocol (which will not happen any time soon). The 
authenticated information is what should be used if you need to know the 
exact user.

The use of cuserid() is a different story. Note that for BSD we do use 
getpwuid(). Anyway, the segment of the code you are looking at is actually 
part of Socks4 support. For BSD the full username would be sent but would be 
truncated later to 8 characters during login. So, it really doesn't matter 
that it gets truncated early. That said, the cuserid() function should 
likely be replaced with the GetUserName() function that is used everywhere 
else.

Andy

-----Original Message----- 
From: Matevz Tadel
Sent: Monday, June 06, 2011 8:58 PM
To: xrootd-l
Cc: Brian Bockelman
Subject: Length of reported username

Hi,

Brian told me that the printout of client's username has a limit of 8 
characters
and as this is frequently too little for grid-username-slots I decided to 
have
to look into it.

So, I traced it down to usege of cuserid() in 
XrdClient/XrdClientSock.cc:487,
function:
    int XrdClientSock::Socks4Handshake(int sockid);
This function always returns at most L_cuserid - 1 characters, which is 8. 
So,
the username is truncated already in client, during handshake.

Here's what GNU manpage says about cuserid():

       Nobody knows precisely what cuserid() does; avoid it in  portable 
pro-
       grams.   Or  avoid  it  altogether: use getpwuid(geteuid()) instead, 
if
       that is what you meant.  Do not use cuserid().

I played with this a bit on my machine, mini program attached. That's what I 
get
with a specially created username: :)

[root@greed tmp]# sudo -u alongusername666 ./xxx
getlogin='matevz'; _r='matevz', ret=0
cuserid='alonguse'
getpwuid='alongusername666' -- 0x7fff7513b2c0 vs 0x7fff7513b2c0

I can provide a patch using getpwuid(geteuid()) ... but can't really test it 
on
anything but GNU/Linux.

Cheers,
Matevz