21 #include "RConfigure.h"
32 ClassImp(TSecContext);
33 ClassImp(TSecContextCleanup);
35 const TDatime kROOTTZERO = 788914800;
40 TSecContext::TSecContext(
const char *user,
const char *host, Int_t meth,
41 Int_t offset,
const char *
id,
42 const char *token, TDatime expdate,
void *ctx)
51 if (fExpDate < TDatime()) {
54 fExpDate.Set(TDatime().GetDate() + 1, TDatime().GetTime());
67 R__LOCKGUARD(gROOTMutex);
68 gROOT->GetListOfSecContexts()->Add(
this);
76 TSecContext::TSecContext(
const char *url, Int_t meth, Int_t offset,
77 const char *token,
const char *
id,
78 TDatime expdate,
void *ctx)
87 if (fExpDate < TDatime()) {
90 fExpDate.Set(TDatime().GetDate() + 1, TDatime().GetTime());
93 fHost = TUrl(url).GetHost();
99 fUser = TUrl(url).GetUser();
103 R__LOCKGUARD(gROOTMutex);
104 gROOT->GetListOfSecContexts()->Add(
this);
111 TSecContext::TSecContext(
const TSecContext& sc) :
113 fContext(sc.fContext),
114 fCleanup(sc.fCleanup),
115 fExpDate(sc.fExpDate),
119 fMethodName(sc.fMethodName),
129 TSecContext& TSecContext::operator=(
const TSecContext& sc)
132 TObject::operator=(sc);
133 fContext=sc.fContext;
134 fCleanup=sc.fCleanup;
135 fExpDate=sc.fExpDate;
139 fMethodName=sc.fMethodName;
151 TSecContext::~TSecContext()
158 void TSecContext::Cleanup()
161 CleanupSecContext(kTRUE);
164 TIter nxtl(gROOT->GetListOfSecContexts());
166 while ((nscl = (TSecContext *)nxtl())) {
167 if (nscl !=
this && !strcmp(nscl->GetHost(), fHost.Data())) {
170 nscl->DeActivate(
"");
190 void TSecContext::DeActivate(Option_t *Opt)
193 Bool_t clean = (strstr(Opt,
"C") || strstr(Opt,
"c"));
194 if (clean && fOffSet > -1)
195 CleanupSecContext(kFALSE);
197 Bool_t
remove = (strstr(Opt,
"R") || strstr(Opt,
"r"));
198 if (
remove && fOffSet > -1){
199 R__LOCKGUARD(gROOTMutex);
201 gROOT->GetListOfSecContexts()->Remove(
this);
206 fExpDate = kROOTTZERO;
213 void TSecContext::AddForCleanup(Int_t port, Int_t proto, Int_t type)
215 TSecContextCleanup *tscc =
new TSecContextCleanup(port, proto, type);
224 Bool_t TSecContext::IsA(
const char *methname)
226 return Bool_t(!strcmp(methname, GetMethodName()));
232 Bool_t TSecContext::IsActive()
const
234 if (fOffSet > -1 && fExpDate > TDatime())
247 void TSecContext::Print(Option_t *opt)
const
253 Int_t ord = -1, i = 0;
254 for (; i < (Int_t)strlen(opt); i++) {
255 if (opt[i] < 48 || opt[i] > 57) {
266 snprintf(aOrd,
sizeof(aOrd),
"%d)", ord);
268 Int_t len=strlen(aOrd);
270 strlcat(aSpc,
" ",
sizeof(aSpc));
273 if (!strncasecmp(opt,
"F",1)) {
275 "+------------------------------------------------------+");
277 "+ Host:%s Method:%d (%s) User:'%s'",
278 GetHost(), fMethod, GetMethodName(),
281 "+ OffSet:%d, id:%s", fOffSet, fID.Data());
284 "+ Expiration time: %s",fExpDate.AsString());
286 "+------------------------------------------------------+");
287 }
else if (!strncasecmp(opt,
"S",1)) {
289 Printf(
"Security context: Method: %d (%s) expiring on %s",
290 fMethod, GetMethodName(),
291 fExpDate.AsString());
293 Printf(
"Security context: Method: %d (%s) not reusable",
294 fMethod, GetMethodName());
298 Info(
"PrintEstblshed",
"+ %s h:%s met:%d (%s) us:'%s'",
299 aOrd, GetHost(), fMethod, GetMethodName(),
301 Info(
"PrintEstblshed",
"+ %s offset:%d id:%s", aSpc, fOffSet, fID.Data());
303 Info(
"PrintEstblshed",
"+ %s expiring: %s",aSpc,fExpDate.AsString());
311 const char *TSecContext::AsString(TString &out)
315 out = Form(
"Method: %d (%s) expiring on %s",
316 fMethod, GetMethodName(), fExpDate.AsString(expdate));
319 out = Form(
"Method: %d (%s) not reusable", fMethod, GetMethodName());
320 else if (fOffSet == -3)
321 out = Form(
"Method: %d (%s) authorized by /etc/hosts.equiv or $HOME/.rhosts",
322 fMethod, GetMethodName());
323 else if (fOffSet == -4)
324 out = Form(
"No authentication required remotely");
334 Bool_t TSecContext::CleanupSecContext(Bool_t)
336 AbstractMethod(
"CleanupSecContext");