36 #include <sys/types.h>
124 static const char *ukn =
"Unknown";
126 kbck = (kbck < 0) ? 0 : kbck;
142 return memset((
void*)dst, c, len);
145 #ifndef USE_EXTERNAL_GETPASS
159 char *pw = getpass(prompt);
162 int k = 0, i = 0, len = strlen(pw);
164 if (pw[i] > 0x20) pw[k++] = pw[i];
169 DEBUG(
"error from getpass");
222 if (defact && (ask ==
'n' || ask ==
"no")) {
224 }
else if (!defact && (ask ==
'y' || ask ==
"yes")) {
252 for ( ; i < lin; i++)
255 sprintf(buff,
"%02x", (0xFF & in[i]));
256 strncat(out, buff, 3);
285 int lin = strlen(in);
288 for ( ; i<lin; i += 2) {
290 st[1] = ((i+1) < lin) ? in[i+1] : 0;
293 out[k++] = (char)(0x000000FF & c);
312 static char month[12][4] = {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
313 "Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"};
314 static short flen = strlen(
"24Apr2006:09:10:23");
327 if (!localtime_r(&ttmp,&tst))
332 sprintf(st,
"%2d%3s%4d-%2d%2d%2d",tst.tm_mday,month[tst.tm_mon],
334 tst.tm_hour,tst.tm_min,tst.tm_sec);
338 sprintf(st,
"%2d%3s%4d:%2d:%2d:%2d",tst.tm_mday,month[tst.tm_mon],
340 tst.tm_hour,tst.tm_min,tst.tm_sec);
344 if (st[0] == 0x20) st[0] = 0x30;
346 for (; i <= 16; i++ )
347 if (st[i] == 0x20) st[i] = 0x30;
376 if (path[0] ==
'~') {
379 int iu = path.
find(
'/');
382 unam.
assign(path, 1, iu-1);
390 DEBUG(
"cannot pwnam information for local user "<<
403 char *pwd = getenv(
"PWD");
409 DEBUG(
"PWD undefined ");
420 const char *ho,
const char *vo,
const char *gr,
const char *us)
434 if (ho && strlen(ho) > 0) path.
replace(
"<host>", ho);
437 if (vo && strlen(vo) > 0) path.
replace(
"<vo>", vo);
440 if (gr && strlen(gr) > 0) path.
replace(
"<group>", gr);
443 if (us && strlen(us) > 0) path.
replace(
"<user>", us);
466 if (homedir.
length() <= 0) {
469 homedir = getenv(
"HOME");
470 if (homedir.
length() <= 0) {
473 if (pw) homedir = pw->pw_dir;
475 if (homedir.
length() <= 0)
476 DEBUG(
"Warning: home directory undefined! ");
480 return homedir.
c_str();
487 int XrdSutMkdir(
const char *dir,
unsigned int mode,
const char *opt)
498 if (!strncmp(opt,
"-p",2)) {
503 if (dd[dd.
length()-1] !=
'/')
505 int lsl = dd.
find(
'/',1);
510 if (errno == ENOENT) {
519 lsl = dd.
find(
'/',lsl+1);
523 return mkdir(dir,mode);
556 int ld =
ts.find(
':',1);
557 ld = (ld == -1) ?
ts.length() - 1 : ld;
565 char u = fr[fr.
length()-1];
568 tsec += atoi(fr.
c_str())*31536000;
569 }
else if (u ==
'd') {
570 tsec += atoi(fr.
c_str())*86400;
571 }
else if (u ==
'h') {
572 tsec += atoi(fr.
c_str())*3600;
573 }
else if (u ==
'm') {
574 tsec += atoi(fr.
c_str())*60;
575 }
else if (u ==
's') {
576 tsec += atoi(fr.
c_str());
578 DEBUG(
"unknown unit: "<<u);
585 tsec += atoi(fr.
c_str())*3600;
587 tsec += atoi(fr.
c_str())*60;
589 tsec += atoi(fr.
c_str());
594 ld =
ts.find(
':',ls);
595 ld = (ld == -1) ?
ts.length() - 1 : ld;
627 memset(&flck, 0,
sizeof(flck));
628 flck.l_type = lockmode;
629 flck.l_whence = SEEK_SET;
630 if (
fcntl(fdesk, F_SETLK, &flck) != 0)
646 struct flock flck = {F_UNLCK, SEEK_SET, 0, 0, 0};
647 memset(&flck, 0,
sizeof(flck));
648 flck.l_type = F_UNLCK;
649 flck.l_whence = SEEK_SET;
650 fcntl(fdesk, F_SETLK, &flck);
static std::string ts()
timestamp output for logging messages
int stat(const char *path, struct stat *buf)
int fcntl(int fd, int cmd,...)
int mkdir(const char *path, mode_t mode)
int XrdSutGetPass(const char *prompt, XrdOucString &passwd)
int XrdSutParseTime(const char *tstr, int opt)
static XrdSysError eDest(0,"sut_")
int XrdSutExpand(XrdOucString &path)
int XrdSutResolve(XrdOucString &path, const char *ho, const char *vo, const char *gr, const char *us)
volatile void * XrdSutMemSet(volatile void *dst, int c, int len)
bool XrdSutAskConfirm(const char *msg1, bool defact, const char *msg2)
static const char * gXRSBucketTypes[]
int XrdSutToHex(const char *in, int lin, char *out)
const char * XrdSutHome()
int XrdSutMkdir(const char *dir, unsigned int mode, const char *opt)
const char * XrdSutBuckStr(int kbck)
static XrdSysLogger Logger
int XrdSutTimeString(int t, char *st, int opt)
void XrdSutSetTrace(kXR_int32 trace)
int XrdSutFromHex(const char *in, char *out, int &lout)
int XrdSutGetLine(XrdOucString &line, const char *prompt)
void insert(const int i, int start=-1)
const char * c_str() const
void assign(const char *s, int j, int k=-1)
int erase(int start=0, int size=0)
int replace(const char *s1, const char *s2, int from=0, int to=-1)
int find(const char c, int start=0, bool forward=1)
void lower(int pos, int size=0)
XrdSutFileLocker(int fd, ELockType lock)
static int GetString(int opt, int len, XrdOucString &s)
XrdSysLogger * logger(XrdSysLogger *lp=0)