66 strcpy(path_buff,
"start of file");
78 if (flags &isOpen)
Close();
82 if (authfn) free(authfn);
95 if (!authfn || !*authfn)
return 0;
99 if (dbfn && strcmp(dbfn, authfn))
return 1;
103 if (
stat(authfn, &statbuff))
104 {Eroute->
Emsg(
"AuthFile", errno,
"find", authfn);
110 return (modtime < statbuff.st_mtime);
121 if (!(flags & isOpen))
return 1;
133 flags = (DBflags)(flags & ~isOpen);
137 if (flags & dbError)
return 0;
147 char *pp, idcode[2] = {0,0};
151 if (!(flags & inRec))
return 0;
156 {flags = (DBflags)(flags & ~inRec);
164 if (strlen(pp) > 2 || !index(
"ghoru", *pp))
165 {Eroute->
Emsg(
"AuthFile",
"Invalid ID sprecifier -", pp);
166 flags = (DBflags)(flags | dbError);
174 {flags = (DBflags)(flags & ~inRec);
175 Eroute->
Emsg(
"AuthFile",
"ID value missing after", idcode);
176 flags = (DBflags)(flags | dbError);
182 Copy(path_buff, pp,
sizeof(path_buff)-1);
201 if (!(flags & inRec))
return 0;
206 {flags = (DBflags)(flags & ~inRec);
216 else {Eroute->
Emsg(
"AuthFile",
"Object ID missing after '\\'");
218 flags = (DBflags)(flags | dbError);
220 }
else if (*pp !=
'/') istmplt =
true;
225 if (path) Copy(path_buff, pp,
sizeof(path_buff)-1);
229 if (istmplt) {*priv = (
char *)0;
return 1;}
241 {flags = (DBflags)(flags & ~inRec);
242 Eroute->
Emsg(
"AuthFile",
"Privileges missing after", path_buff);
243 flags = (DBflags)(flags | dbError);
269 if (flags & inRec)
while(DBfile.
GetWord()) {}
270 else flags = (DBflags)(flags | inRec);
275 {*recname = (
char *)0;
return '\0';}
298 if (!idok) {Eroute->
Emsg(
"AuthFile",
"Invalid id type -", pp);
299 flags = (DBflags)(flags | dbError);
307 {Eroute->
Emsg(
"AuthFile",
"Record name is missing after",path_buff);
308 flags = (DBflags)(flags | dbError);
314 Copy(recname_buff, pp,
sizeof(recname_buff));
315 *recname = recname_buff;
327 struct stat statbuff;
338 {
if (authfn) free(authfn); authfn = strdup(path);}
339 if( !authfn || !*authfn)
return Bail(0,
"Authorization file not specified.");
343 if (
stat(authfn, &statbuff))
return Bail(errno,
"find", authfn);
347 if ( (authFD =
open(authfn, O_RDONLY, 0)) < 0)
348 return Bail(errno,
"open authorization file",authfn);
352 modtime = statbuff.st_mtime;
359 if (DBfile.
Attach(authFD))
360 return Bail(DBfile.
LastError(),
"initialize stream for", authfn);
371 int XrdAccAuthFile::Bail(
int retc,
const char *txt1,
const char *txt2)
375 flags = (DBflags)(flags & ~isOpen);
377 if (retc) Eroute->
Emsg(
"AuthFile", retc, txt1, txt2);
378 else Eroute->
Emsg(
"AuthFile", txt1, txt2);
388 char *XrdAccAuthFile::Copy(
char *dp,
char *sp,
int dplen)
392 while(--dplen && *sp) {*dp = *sp; dp++; sp++;}
XrdAccAuthDB * XrdAccAuthDBObject(XrdSysError *erp)
int stat(const char *path, struct stat *buf)
int open(const char *path, int oflag,...)
char getRec(char **recname)
int Open(XrdSysError &eroute, const char *path=0)
int Changed(const char *dbpath)
XrdAccAuthFile(XrdSysError *erp)
int getPP(char **path, char **priv, bool &istmplt)
char * GetWord(int lowcase=0)
int Attach(int FileDescriptor, int bsz=2047)
void SetEroute(XrdSysError *eroute)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)