#ifndef __XRDOUCGMAP_H__
#define __XRDOUCGMAP_H__
/******************************************************************************/
/* */
/* X r d O u c G M a p . h h */
/* */
/* (c) 2006 by the Board of Trustees of the Leland Stanford, Jr., University */
/* All Rights Reserved */
/* Produced by Andrew Hanushevsky for Stanford University under contract */
/* DE-AC02-76-SFO0515 with the Department of Energy */
/* */
/* This file is part of the XRootD software suite. */
/* */
/* XRootD is free software: you can redistribute it and/or modify it under */
/* the terms of the GNU Lesser General Public License as published by the */
/* Free Software Foundation, either version 3 of the License, or (at your */
/* option) any later version. */
/* */
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
/* COPYING (GPL license). If not, see . */
/* */
/* The copyright holder's institutional names and contributor's names may not */
/* be used to endorse or promote products derived from this software without */
/* specific prior written permission of the institution or contributor. */
/******************************************************************************/
#include "XrdOuc/XrdOucHash.hh"
#include "XrdOuc/XrdOucString.hh"
#include "XrdSys/XrdSysXSLock.hh"
class XrdOucTrace;
class XrdSysError;
class XrdSecGMapEntry_t
{
public:
XrdSecGMapEntry_t(const char *v, const char *u, int t) : val(v), user(u), type(t) { }
XrdOucString val;
XrdOucString user;
int type;
};
class XrdOucGMap
{
public:
//------------------------------------------------------------------------------
//! Map a distinguished name (dn) to a user name.
//!
//! @param dn -> Distinguished name.
//! @param user -> Buffer where the user name is to be placed.
//! It must end with a null byte.
//! @param ulen -> The length of the 'user' buffer.
//! @param now -> Current time (result of time(0)) or 0 if not available.
//!
//! @return Success: Zero.
//! Failure: An errno number describing the failure; typically
//! -EFAULT - No valid matching found.
//! -errno - If problems reloading the file
//------------------------------------------------------------------------------
virtual int dn2user(const char *dn, char *user, int ulen, time_t now = 0);
//------------------------------------------------------------------------------
//! Constructor
//!
//! @param eDest -> The error object that must be used to print any errors or
//! other messages (see XrdSysError.hh).
//! @param mapfn -> Path to the grid map file to be used. This pointer
//! may be null; the default path will be tested then.
//! @param parms -> Argument string specified on the gridmap directive. It may
//! be null or point to a null string if no parms exist.
//! Curently supported parms:
//! dbg to enable debug printouts
//! to=timeout to set a timeout in secs on the validity
//! of the information loaded from the file
//! Default is 600 (10'); the reload is
//! triggered by the first mapping request
//! after the timeout is expired; the file is
//! reloaded only if changed.
//!
//------------------------------------------------------------------------------
#define XrdOucGMapArgs XrdSysError *eDest, \
const char *mapfn, \
const char *parms
XrdOucGMap(XrdOucGMapArgs);
//------------------------------------------------------------------------------
//! Destructor
//------------------------------------------------------------------------------
virtual ~XrdOucGMap() {}
//------------------------------------------------------------------------------
//! Validity checker
//------------------------------------------------------------------------------
bool isValid() const { return valid; }
private:
//------------------------------------------------------------------------------
//! Internal members
//------------------------------------------------------------------------------
bool valid;
XrdOucHash mappings;
XrdOucString mf_name;
time_t mf_mtime;
time_t notafter;
long timeout;
XrdSysError *elogger;
XrdOucTrace *tracer;
bool dbg;
XrdSysXSLock xsl;
//------------------------------------------------------------------------------
//! Internal methods
//------------------------------------------------------------------------------
int load(const char *mf, bool force = 0);
};
/******************************************************************************/
/* X r d O u c g e t G M a p */
/******************************************************************************/
//------------------------------------------------------------------------------
//! Obtain an instance of the XrdOucGMap object.
//!
//! This extern "C" function is called when a shared library plug-in containing
//! implementation of this class is loaded. It must exist in the shared library
//! and must be thread-safe.
//!
//! @param eDest -> The error object that must be used to print any errors or
//! other messages (see XrdSysError.hh).
//! @param mapfn -> Path to the grid map file to be used. This pointer
//! may be null; the default path will be tested then.
//! @param parms -> Argument string specified on the gridmap directive. It may
//! be null or point to a null string if no parms exist.
//!
//! @return Success: A pointer to an instance of the XrdOucGMap object.
//! Failure: A null pointer which causes initialization to fail.
//!
//! The GMap object is used frequently in the course of creating new physical
//! connections.
//! The algorithms used by this object *must* be efficient and speedy;
//! otherwise system performance will be severely degraded.
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//! Declare compilation version.
//!
//! Additionally, you *should* declare the xrootd version you used to compile
//! your plug-in. While not currently required, it is highly recommended to
//! avoid execution issues should the class definition change. Declare it as:
//------------------------------------------------------------------------------
/*!
#include "XrdVersion.hh"
XrdVERSIONINFO(XrdOucgetGMap,);
where is a 1- to 15-character unquoted name identifying your plugin.
*/
extern "C" XrdOucGMap *XrdOucgetGMap(XrdOucGMapArgs);
#endif