ROOT logo
// $Id: XrdUser.cxx 2737 2012-04-25 00:55:41Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#include "XrdUser.h"
#include "XrdServer.h"
#include "XrdUser.c7"
#include "XrdFile.h"
#include "TPRegexp.h"

// XrdUser

//______________________________________________________________________________
//
// Represents a xrootd session on a given server.
// Can open several files, all stored as children.

ClassImp(XrdUser);

//==============================================================================

void XrdUser::_init()
{
  m_dict_id = 0;
  bTraceMon = false;
}

XrdUser::XrdUser(const TString& n, const TString& t) :
  ZList(n, t),
  bNumericHost(false),
  mLoginTime(GTime::I_Never), mDisconnectTime(GTime::I_Never), mLastMsgTime(GTime::I_Never)
{
  _init();
}

XrdUser::XrdUser(const TString& n, const TString& t,
		 const TString& dn, const TString& vo, const TString& ro, const TString& gr,
                 const TString& su, const TString& fh, const TString& fd, Bool_t num_host,
                 const GTime& st) :
  ZList(n, t),
  mDN(dn), mVO(vo), mRole(ro), mGroup(gr),
  mServerUsername(su), mFromHost(fh), mFromDomain(fd), bNumericHost(num_host),
  mLoginTime(st), mDisconnectTime(GTime::I_Never), mLastMsgTime(GTime::I_Never)

{
  _init();
  mRealName = ParseHumanName(mDN);
}

XrdUser::~XrdUser()
{}

//------------------------------------------------------------------------------

TString XrdUser::GetFromFqhn() const
{
  if (bNumericHost)
    return mFromHost + "@" + mFromDomain;
  else
    return mFromHost + "." + mFromDomain;
}

//==============================================================================

void XrdUser::AddFile(XrdFile* file)
{
  Add(file);
}

void XrdUser::AppendAppInfo(const TString& app_info)
{
  mAppInfo += app_info;
  Stamp(FID());
}

//==============================================================================

TString XrdUser::ParseHumanName(const TString& dn)
{
  static TPMERegexp re("/CN=(.*?)(?=(?:/CN=)|$)", "g");
  static TPMERegexp numex("(.*) (\\d+)");
  static TPMERegexp mail1("(.*) \\(?[\\w\\.]+@[\\w\\.]+\\(?");
  static TPMERegexp mail2("(.*)/Email=[\\w\\.]+@[\\w\\.]+");

  static GMutex re_mutex;
  GMutexHolder _lck(re_mutex);

  TString user;
  while (re.Match(dn))
  {
    if (re.NMatches() == 2)
    {
      // keep last matched user, except if it starts with UID 
      if (strncmp( "UID:", re[1].Data(), 4))
        user =  re[1].Data();
    } 
    else 
    {
      // set value to CN if mach fails
      user = dn;
    }
  }

  // remove numeric values from CN
  if (numex.Match(user))
    user = numex[1].Data();

  // remove email addresses
  if (mail1.Match(user))
    user = mail1[1].Data();
  else if (mail2.Match(user)) 
    user = mail2[1].Data();

  return user;
}
 XrdUser.cxx:1
 XrdUser.cxx:2
 XrdUser.cxx:3
 XrdUser.cxx:4
 XrdUser.cxx:5
 XrdUser.cxx:6
 XrdUser.cxx:7
 XrdUser.cxx:8
 XrdUser.cxx:9
 XrdUser.cxx:10
 XrdUser.cxx:11
 XrdUser.cxx:12
 XrdUser.cxx:13
 XrdUser.cxx:14
 XrdUser.cxx:15
 XrdUser.cxx:16
 XrdUser.cxx:17
 XrdUser.cxx:18
 XrdUser.cxx:19
 XrdUser.cxx:20
 XrdUser.cxx:21
 XrdUser.cxx:22
 XrdUser.cxx:23
 XrdUser.cxx:24
 XrdUser.cxx:25
 XrdUser.cxx:26
 XrdUser.cxx:27
 XrdUser.cxx:28
 XrdUser.cxx:29
 XrdUser.cxx:30
 XrdUser.cxx:31
 XrdUser.cxx:32
 XrdUser.cxx:33
 XrdUser.cxx:34
 XrdUser.cxx:35
 XrdUser.cxx:36
 XrdUser.cxx:37
 XrdUser.cxx:38
 XrdUser.cxx:39
 XrdUser.cxx:40
 XrdUser.cxx:41
 XrdUser.cxx:42
 XrdUser.cxx:43
 XrdUser.cxx:44
 XrdUser.cxx:45
 XrdUser.cxx:46
 XrdUser.cxx:47
 XrdUser.cxx:48
 XrdUser.cxx:49
 XrdUser.cxx:50
 XrdUser.cxx:51
 XrdUser.cxx:52
 XrdUser.cxx:53
 XrdUser.cxx:54
 XrdUser.cxx:55
 XrdUser.cxx:56
 XrdUser.cxx:57
 XrdUser.cxx:58
 XrdUser.cxx:59
 XrdUser.cxx:60
 XrdUser.cxx:61
 XrdUser.cxx:62
 XrdUser.cxx:63
 XrdUser.cxx:64
 XrdUser.cxx:65
 XrdUser.cxx:66
 XrdUser.cxx:67
 XrdUser.cxx:68
 XrdUser.cxx:69
 XrdUser.cxx:70
 XrdUser.cxx:71
 XrdUser.cxx:72
 XrdUser.cxx:73
 XrdUser.cxx:74
 XrdUser.cxx:75
 XrdUser.cxx:76
 XrdUser.cxx:77
 XrdUser.cxx:78
 XrdUser.cxx:79
 XrdUser.cxx:80
 XrdUser.cxx:81
 XrdUser.cxx:82
 XrdUser.cxx:83
 XrdUser.cxx:84
 XrdUser.cxx:85
 XrdUser.cxx:86
 XrdUser.cxx:87
 XrdUser.cxx:88
 XrdUser.cxx:89
 XrdUser.cxx:90
 XrdUser.cxx:91
 XrdUser.cxx:92
 XrdUser.cxx:93
 XrdUser.cxx:94
 XrdUser.cxx:95
 XrdUser.cxx:96
 XrdUser.cxx:97
 XrdUser.cxx:98
 XrdUser.cxx:99
 XrdUser.cxx:100
 XrdUser.cxx:101
 XrdUser.cxx:102
 XrdUser.cxx:103
 XrdUser.cxx:104
 XrdUser.cxx:105
 XrdUser.cxx:106
 XrdUser.cxx:107
 XrdUser.cxx:108
 XrdUser.cxx:109
 XrdUser.cxx:110
 XrdUser.cxx:111
 XrdUser.cxx:112
 XrdUser.cxx:113
 XrdUser.cxx:114
 XrdUser.cxx:115
 XrdUser.cxx:116
 XrdUser.cxx:117