XRootD
XrdPss.hh
Go to the documentation of this file.
1 #ifndef _XRDPSS_API_H
2 #define _XRDPSS_API_H
3 /******************************************************************************/
4 /* */
5 /* X r d P s s . h h */
6 /* */
7 /* (c) 2010 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* All Rights Reserved */
9 /* Produced by Andrew Hanushevsky for Stanford University under contract */
10 /* DE-AC02-76-SFO0515 with the Department of Energy */
11 /* */
12 /* This file is part of the XRootD software suite. */
13 /* */
14 /* XRootD is free software: you can redistribute it and/or modify it under */
15 /* the terms of the GNU Lesser General Public License as published by the */
16 /* Free Software Foundation, either version 3 of the License, or (at your */
17 /* option) any later version. */
18 /* */
19 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
20 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
21 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
22 /* License for more details. */
23 /* */
24 /* You should have received a copy of the GNU Lesser General Public License */
25 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
26 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
27 /* */
28 /* The copyright holder's institutional names and contributor's names may not */
29 /* be used to endorse or promote products derived from this software without */
30 /* specific prior written permission of the institution or contributor. */
31 /******************************************************************************/
32 
33 #include <cerrno>
34 #include <unistd.h>
35 #include <sys/types.h>
36 #include <string>
37 #include <vector>
38 #include "XrdSys/XrdSysHeaders.hh"
39 #include "XrdOuc/XrdOucCache.hh"
40 #include "XrdOuc/XrdOucECMsg.hh"
41 #include "XrdOuc/XrdOucExport.hh"
43 #include "XrdOuc/XrdOucPList.hh"
44 #include "XrdOuc/XrdOucSid.hh"
45 #include "XrdOss/XrdOss.hh"
46 
47 /******************************************************************************/
48 /* X r d P s s D i r */
49 /******************************************************************************/
50 
51 class XrdPssDir : public XrdOssDF
52 {
53 public:
54 int Close(long long *retsz=0) override;
55 bool getErrMsg(std::string& eText) override;
56 int Opendir(const char *, XrdOucEnv &) override;
57 int Readdir(char *buff, int blen) override;
58 
59 // Store the `buf` pointer in the directory object. Future calls to `Readdir`
60 // will, as a side-effect, fill in the corresponding `stat` information in
61 // the memory referred to from the pointer.
62 //
63 // Returns -errno on failure; otherwise, returns 0 and stashes away the pointer.
64 int StatRet(struct stat *buf) override;
65 
66  // Constructor and destructor
67  XrdPssDir(const char *tid)
69  myDir(0), lastEtrc(0) {}
70 
71  ~XrdPssDir() {if (myDir) Close();}
72 private:
73  DIR *myDir;
74  std::string lastEtext;
75  int lastEtrc;
76 };
77 
78 /******************************************************************************/
79 /* X r d P s s F i l e */
80 /******************************************************************************/
81 
82 struct XrdOucIOVec;
83 class XrdSecEntity;
84 class XrdSfsAio;
85 
86 class XrdPssFile : public XrdOssDF
87 {
88 public:
89 
90 // The following two are virtual functions to allow for upcasting derivations
91 // of this implementation
92 //
93 virtual int Close(long long *retsz=0) override;
94 virtual int Open(const char *, int, mode_t, XrdOucEnv &) override;
95 
96 int Fchmod(mode_t mode) override {return XrdOssOK;}
97 int Fctl(int cmd, int alen, const char *args, char **resp=0) override;
98 int Fstat(struct stat *) override;
99 int Fsync() override;
100 int Fsync(XrdSfsAio *aiop) override;
101 int Ftruncate(unsigned long long) override;
102 bool getErrMsg(std::string& eText) override;
103 ssize_t pgRead (void* buffer, off_t offset, size_t rdlen,
104  uint32_t* csvec, uint64_t opts) override;
105 int pgRead (XrdSfsAio* aioparm, uint64_t opts) override;
106 ssize_t pgWrite(void* buffer, off_t offset, size_t wrlen,
107  uint32_t* csvec, uint64_t opts) override;
108 int pgWrite(XrdSfsAio* aioparm, uint64_t opts) override;
109 ssize_t Read( off_t, size_t) override;
110 ssize_t Read( void *, off_t, size_t) override;
111 int Read(XrdSfsAio *aiop) override;
112 ssize_t ReadV(XrdOucIOVec *readV, int n) override;
113 ssize_t ReadRaw( void *, off_t, size_t) override;
114 ssize_t Write(const void *, off_t, size_t) override;
115 int Write(XrdSfsAio *aiop) override;
116 
117  // Constructor and destructor
118  XrdPssFile(const char *tid)
120  rpInfo(0), tpcPath(0), entity(0), lastEtrc(0) {}
121 
122 virtual ~XrdPssFile() {if (fd >= 0) Close();
123  if (rpInfo) delete(rpInfo);
124  if (tpcPath) free(tpcPath);
125  }
126 
127 private:
128 
129 struct tprInfo
130  {char *tprPath;
131  char *dstURL;
132  size_t fSize;
133 
134  tprInfo(const char *fn) : tprPath(strdup(fn)),dstURL(0),fSize(0)
135  {}
136  ~tprInfo() {if (tprPath) free(tprPath);
137  if (dstURL) free(dstURL);
138  }
139  } *rpInfo;
140 
141  char *tpcPath;
142 const XrdSecEntity *entity;
143 std::string lastEtext;
144 int lastEtrc;
145 };
146 
147 /******************************************************************************/
148 /* X r d P s s S y s */
149 /******************************************************************************/
150 
151 class XrdNetSecurity;
152 class XrdOucEnv;
153 class XrdOucStream;
154 class XrdOucTList;
155 class XrdPssUrlInfo;
156 class XrdSecsssID;
157 class XrdSysError;
158 
159 struct XrdVersionInfo;
160 
161 class XrdPssSys : public XrdOss
162 {
163 public:
164 virtual XrdOssDF *newDir(const char *tident) override
165  {return (XrdOssDF *)new XrdPssDir(tident);}
166 virtual XrdOssDF *newFile(const char *tident) override
167  {return (XrdOssDF *)new XrdPssFile(tident);}
168 
169 virtual void Connect(XrdOucEnv &) override;
170 
171 virtual void Disc(XrdOucEnv &) override;
172 
173 int Chmod(const char *, mode_t mode, XrdOucEnv *eP=0) override;
174 bool ConfigMapID();
175 virtual
176 int Create(const char *, const char *, mode_t, XrdOucEnv &, int opts=0) override;
177 void EnvInfo(XrdOucEnv *envP) override;
178 uint64_t Features() override {return myFeatures;}
179 int FSctl(int cmd, int alen, const char *args, char **resp=0) override;
180 bool getErrMsg(std::string& eText) override;
181 int Init(XrdSysLogger *, const char *) override {return -ENOTSUP;}
182 int Init(XrdSysLogger *, const char *, XrdOucEnv *envP) override;
183 int Lfn2Pfn(const char *Path, char *buff, int blen) override;
184 const
185 char *Lfn2Pfn(const char *Path, char *buff, int blen, int &rc) override;
186 int Mkdir(const char *, mode_t mode, int mkpath=0, XrdOucEnv *eP=0) override;
187 int Remdir(const char *, int Opts=0, XrdOucEnv *eP=0) override;
188 int Rename(const char *, const char *,
189  XrdOucEnv *eP1=0, XrdOucEnv *eP2=0) override;
190 int Stat(const char *, struct stat *, int opts=0, XrdOucEnv *eP=0) override;
191 int Stats(char *bp, int bl) override;
192 int Truncate(const char *, unsigned long long, XrdOucEnv *eP=0) override;
193 int Unlink(const char *, int Opts=0, XrdOucEnv *eP=0) override;
194 
195 static const int PolNum = 2;
196 enum PolAct {PolPath = 0, PolObj = 1};
197 
198 static int Info(int rc);
199 static int P2DST(int &retc, char *hBuff, int hBlen, PolAct pType,
200  const char *path);
201 static int P2OUT(char *pbuff, int pblen, XrdPssUrlInfo &uInfo);
202 static int P2URL(char *pbuff, int pblen, XrdPssUrlInfo &uInfo,
203  bool doN2N=true);
204 
205 static const char *ConfigFN; // -> Pointer to the config file name
206 static const char *myHost;
207 static const char *myName;
208 static
209 XrdOucPListAnchor XPList; // Exported path list
210 
213 static char *fileOrgn;
214 static const char *protName;
215 static const char *hdrData;
216 static int hdrLen;
217 static int Streams;
218 static int Workers;
219 static int Trace;
220 static int dcaCTime;
221 
222 static bool xLfn2Pfn;
223 static bool dcaCheck;
224 static bool dcaWorld;
225 static bool deferID; // Defer ID mapping until needed
226 static bool reProxy; // TPC requires reproxing
227 
228  XrdPssSys();
229 virtual ~XrdPssSys() {}
230 
231 private:
232 
233 char *HostArena;// -> path qualification for remote origins
234 char *LocalRoot;// -> pss Local n2n root, if any
235 XrdOucName2Name *theN2N; // -> File mapper object
236 unsigned long long DirFlags; // Defaults for exports
237 XrdVersionInfo *myVersion;// -> Compilation version
238 XrdSecsssID *idMapper; // -> Auth ID mapper
239 uint64_t myFeatures;// Our feature set
240 
241 int Configure(const char *, XrdOucEnv *);
242 int ConfigProc(const char *ConfigFN);
243 int ConfigXeq(char*, XrdOucStream&);
244 int xconf(XrdSysError *Eroute, XrdOucStream &Config);
245 int xdef( XrdSysError *Eroute, XrdOucStream &Config);
246 int xdca( XrdSysError *errp, XrdOucStream &Config);
247 int xexp( XrdSysError *Eroute, XrdOucStream &Config);
248 int xperm(XrdSysError *errp, XrdOucStream &Config);
249 int xpers(XrdSysError *errp, XrdOucStream &Config);
250 int xorig(XrdSysError *errp, XrdOucStream &Config);
251 };
252 #endif
#define tident
#define XrdOssOK
Definition: XrdOss.hh:54
#define stat(a, b)
Definition: XrdPosix.hh:105
XrdOucString Path
struct myOpts opts
static const uint16_t DF_isFile
Object is for a file.
Definition: XrdOss.hh:433
int fd
Definition: XrdOss.hh:515
static const uint16_t DF_isDir
Object is for a directory.
Definition: XrdOss.hh:432
static const uint16_t DF_isProxy
Object is a proxy object.
Definition: XrdOss.hh:434
int Readdir(char *buff, int blen) override
Definition: XrdPss.cc:780
~XrdPssDir()
Definition: XrdPss.hh:71
int Close(long long *retsz=0) override
Definition: XrdPss.cc:824
int Opendir(const char *, XrdOucEnv &) override
Definition: XrdPss.cc:719
XrdPssDir(const char *tid)
Definition: XrdPss.hh:67
int StatRet(struct stat *buf) override
Definition: XrdPss.cc:804
bool getErrMsg(std::string &eText) override
Definition: XrdPss.cc:850
ssize_t Read(off_t, size_t) override
Definition: XrdPss.cc:1202
virtual int Open(const char *, int, mode_t, XrdOucEnv &) override
Definition: XrdPss.cc:878
ssize_t pgWrite(void *buffer, off_t offset, size_t wrlen, uint32_t *csvec, uint64_t opts) override
Definition: XrdPss.cc:1137
virtual ~XrdPssFile()
Definition: XrdPss.hh:122
ssize_t Write(const void *, off_t, size_t) override
Definition: XrdPss.cc:1307
virtual int Close(long long *retsz=0) override
Definition: XrdPss.cc:1022
int Fstat(struct stat *) override
Definition: XrdPss.cc:1380
ssize_t ReadV(XrdOucIOVec *readV, int n) override
Definition: XrdPss.cc:1244
int Ftruncate(unsigned long long) override
Definition: XrdPss.cc:1503
int Fchmod(mode_t mode) override
Definition: XrdPss.hh:96
bool getErrMsg(std::string &eText) override
Definition: XrdPss.cc:1052
XrdPssFile(const char *tid)
Definition: XrdPss.hh:118
int Fsync() override
Definition: XrdPss.cc:1471
ssize_t pgRead(void *buffer, off_t offset, size_t rdlen, uint32_t *csvec, uint64_t opts) override
Definition: XrdPss.cc:1081
ssize_t ReadRaw(void *, off_t, size_t) override
Definition: XrdPss.cc:1287
int Fctl(int cmd, int alen, const char *args, char **resp=0) override
Definition: XrdPss.cc:1325
virtual ~XrdPssSys()
Definition: XrdPss.hh:229
static const int PolNum
Definition: XrdPss.hh:195
virtual XrdOssDF * newFile(const char *tident) override
Definition: XrdPss.hh:166
int Mkdir(const char *, mode_t mode, int mkpath=0, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:419
static int P2OUT(char *pbuff, int pblen, XrdPssUrlInfo &uInfo)
Definition: XrdPss.cc:1557
uint64_t Features() override
Definition: XrdPss.hh:178
static int dcaCTime
Definition: XrdPss.hh:220
int Unlink(const char *, int Opts=0, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:669
static int Streams
Definition: XrdPss.hh:217
XrdPssSys()
Definition: XrdPss.cc:166
virtual void Connect(XrdOucEnv &) override
Definition: XrdPss.cc:236
int Truncate(const char *, unsigned long long, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:628
int Stats(char *bp, int bl) override
Definition: XrdPss.cc:610
static int Info(int rc)
Definition: XrdPss.cc:1517
static bool deferID
Definition: XrdPss.hh:225
static const char * ConfigFN
Definition: XrdPss.hh:205
static int hdrLen
Definition: XrdPss.hh:216
static const char * hdrData
Definition: XrdPss.hh:215
int Stat(const char *, struct stat *, int opts=0, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:559
int Init(XrdSysLogger *, const char *) override
Definition: XrdPss.hh:181
static XrdOucTList * ManList
Definition: XrdPss.hh:212
static char * fileOrgn
Definition: XrdPss.hh:213
static int P2DST(int &retc, char *hBuff, int hBlen, PolAct pType, const char *path)
Definition: XrdPss.cc:1530
static bool dcaCheck
Definition: XrdPss.hh:223
static bool reProxy
Definition: XrdPss.hh:226
int Chmod(const char *, mode_t mode, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:225
static int Workers
Definition: XrdPss.hh:218
@ PolObj
Definition: XrdPss.hh:196
@ PolPath
Definition: XrdPss.hh:196
void EnvInfo(XrdOucEnv *envP) override
Definition: XrdPss.cc:305
static XrdNetSecurity * Police[PolNum]
Definition: XrdPss.hh:211
static const char * myName
Definition: XrdPss.hh:207
static int Trace
Definition: XrdPss.hh:219
bool ConfigMapID()
static XrdOucPListAnchor XPList
Definition: XrdPss.hh:209
static int P2URL(char *pbuff, int pblen, XrdPssUrlInfo &uInfo, bool doN2N=true)
Definition: XrdPss.cc:1621
virtual XrdOssDF * newDir(const char *tident) override
Definition: XrdPss.hh:164
static const char * myHost
Definition: XrdPss.hh:206
int Remdir(const char *, int Opts=0, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:458
int Lfn2Pfn(const char *Path, char *buff, int blen) override
Definition: XrdPss.cc:387
static bool xLfn2Pfn
Definition: XrdPss.hh:222
int FSctl(int cmd, int alen, const char *args, char **resp=0) override
Definition: XrdPss.cc:320
virtual int Create(const char *, const char *, mode_t, XrdOucEnv &, int opts=0) override
Definition: XrdPss.cc:274
virtual void Disc(XrdOucEnv &) override
Definition: XrdPss.cc:285
int Rename(const char *, const char *, XrdOucEnv *eP1=0, XrdOucEnv *eP2=0) override
Definition: XrdPss.cc:506
static bool dcaWorld
Definition: XrdPss.hh:224
static const char * protName
Definition: XrdPss.hh:214
bool getErrMsg(std::string &eText) override
Definition: XrdPss.cc:374
XrdCmsConfig Config
int Opts
Definition: XrdMpxStats.cc:58
XrdOucEnv * envP
Definition: XrdPss.cc:110