36 #include <sys/types.h>
124 static const char *ukn =
"Unknown";
126 kbck = (kbck < 0) ? 0 : kbck;
147 for (buf = (
volatile char *)dst; len; buf[--len] = c) {}
151 #ifndef USE_EXTERNAL_GETPASS
165 char *pw = getpass(prompt);
168 int k = 0, i = 0, len = strlen(pw);
170 if (pw[i] > 0x20) pw[k++] = pw[i];
175 DEBUG(
"error from getpass");
228 if (defact && (ask ==
'n' || ask ==
"no")) {
230 }
else if (!defact && (ask ==
'y' || ask ==
"yes")) {
258 for ( ; i < lin; i++)
261 sprintf(buff,
"%02x", (0xFF & in[i]));
262 strncat(out, buff, 3);
291 int lin = strlen(in);
294 for ( ; i<lin; i += 2) {
296 st[1] = ((i+1) < lin) ? in[i+1] : 0;
299 out[k++] = (char)(0x000000FF & c);
318 static char month[12][4] = {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
319 "Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"};
320 static short flen = strlen(
"24Apr2006:09:10:23");
333 if (!localtime_r(&ttmp,&tst))
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 sprintf(st,
"%2d%3s%4d:%2d:%2d:%2d",tst.tm_mday,month[tst.tm_mon],
346 tst.tm_hour,tst.tm_min,tst.tm_sec);
350 if (st[0] == 0x20) st[0] = 0x30;
352 for (; i <= 16; i++ )
353 if (st[i] == 0x20) st[i] = 0x30;
382 if (path[0] ==
'~') {
385 int iu = path.
find(
'/');
388 unam.
assign(path, 1, iu-1);
396 DEBUG(
"cannot pwnam information for local user "<<
409 char *pwd = getenv(
"PWD");
415 DEBUG(
"PWD undefined ");
426 const char *ho,
const char *vo,
const char *gr,
const char *us)
440 if (ho && strlen(ho) > 0) path.
replace(
"<host>", ho);
443 if (vo && strlen(vo) > 0) path.
replace(
"<vo>", vo);
446 if (gr && strlen(gr) > 0) path.
replace(
"<group>", gr);
449 if (us && strlen(us) > 0) path.
replace(
"<user>", us);
472 if (homedir.
length() <= 0) {
475 homedir = getenv(
"HOME");
476 if (homedir.
length() <= 0) {
479 if (pw) homedir = pw->pw_dir;
481 if (homedir.
length() <= 0)
482 DEBUG(
"Warning: home directory undefined! ");
486 return homedir.
c_str();
493 int XrdSutMkdir(
const char *dir,
unsigned int mode,
const char *opt)
504 if (!strncmp(opt,
"-p",2)) {
509 if (dd[dd.
length()-1] !=
'/')
511 int lsl = dd.
find(
'/',1);
516 if (errno == ENOENT) {
525 lsl = dd.
find(
'/',lsl+1);
529 return mkdir(dir,mode);
562 int ld = ts.
find(
':',1);
563 ld = (ld == -1) ? ts.
length() - 1 : ld;
571 char u = fr[fr.
length()-1];
574 tsec += atoi(fr.
c_str())*31536000;
575 }
else if (u ==
'd') {
576 tsec += atoi(fr.
c_str())*86400;
577 }
else if (u ==
'h') {
578 tsec += atoi(fr.
c_str())*3600;
579 }
else if (u ==
'm') {
580 tsec += atoi(fr.
c_str())*60;
581 }
else if (u ==
's') {
582 tsec += atoi(fr.
c_str());
584 DEBUG(
"unknown unit: "<<u);
591 tsec += atoi(fr.
c_str())*3600;
593 tsec += atoi(fr.
c_str())*60;
595 tsec += atoi(fr.
c_str());
600 ld = ts.
find(
':',ls);
601 ld = (ld == -1) ? ts.
length() - 1 : ld;
633 memset(&flck, 0,
sizeof(flck));
634 flck.l_type = lockmode;
635 flck.l_whence = SEEK_SET;
636 if (
fcntl(fdesk, F_SETLK, &flck) != 0)
652 struct flock flck = {F_UNLCK, SEEK_SET, 0, 0, 0};
653 memset(&flck, 0,
sizeof(flck));
654 flck.l_type = F_UNLCK;
655 flck.l_whence = SEEK_SET;
656 fcntl(fdesk, F_SETLK, &flck);
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)