00001 #ifndef _SECPROTOCOLSSS_
00002 #define _SECPROTOCOLSSS_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "XrdCrypto/XrdCryptoLite.hh"
00034 #include "XrdNet/XrdNetAddrInfo.hh"
00035 #include "XrdSec/XrdSecInterface.hh"
00036 #include "XrdSecsss/XrdSecsssID.hh"
00037 #include "XrdSecsss/XrdSecsssKT.hh"
00038 #include "XrdSecsss/XrdSecsssRR.hh"
00039
00040 class XrdOucErrInfo;
00041
00042 struct XrdSecsssEnt;
00043
00044 class XrdSecProtocolsss : public XrdSecProtocol
00045 {
00046 public:
00047 friend class XrdSecProtocolDummy;
00048
00049
00050 int Authenticate (XrdSecCredentials *cred,
00051 XrdSecParameters **parms,
00052 XrdOucErrInfo *einfo=0);
00053
00054 void Delete();
00055
00056 static int eMsg(const char *epn, int rc, const char *txt1,
00057 const char *txt2=0, const char *txt3=0,
00058 const char *txt4=0);
00059
00060 static int Fatal(XrdOucErrInfo *erP, const char *epn, int rc,
00061 const char *etxt);
00062
00063 XrdSecCredentials *getCredentials(XrdSecParameters *parms=0,
00064 XrdOucErrInfo *einfo=0);
00065
00066 int Init_Client(XrdOucErrInfo *erp, const char *Parms);
00067
00068 int Init_Server(XrdOucErrInfo *erp, const char *Parms);
00069
00070 static char *Load_Client(XrdOucErrInfo *erp, const char *Parms);
00071
00072 static char *Load_Server(XrdOucErrInfo *erp, const char *Parms);
00073
00074 XrdSecProtocolsss(const char *hname, XrdNetAddrInfo &endPoint)
00075 : XrdSecProtocol("sss"),
00076 keyTab(0), Crypto(0), idBuff(0), dataOpts(0),
00077 Sequence(0), v2EndPnt(false)
00078 {urName = strdup(hname); setIP(endPoint);}
00079
00080 struct Crypto {const char *cName; char cType;};
00081
00082 private:
00083 ~XrdSecProtocolsss() {}
00084
00085 int Decode(XrdOucErrInfo *error, XrdSecsssKT::ktEnt &decKey,
00086 char *iBuff, XrdSecsssRR_DataHdr *rrDHdr, int iSize);
00087 XrdSecCredentials *Encode(XrdOucErrInfo *error, XrdSecsssKT::ktEnt &encKey,
00088 XrdSecsssRR_Hdr *rrHdr, XrdSecsssRR_DataHdr *rrDHdr,
00089 int dLen);
00090
00091 int getCred(XrdOucErrInfo *, XrdSecsssRR_DataHdr *&,
00092 const char *, const char *);
00093 int getCred(XrdOucErrInfo *, XrdSecsssRR_DataHdr *&,
00094 const char *, const char *, XrdSecParameters *);
00095
00096 char *getLID(char *buff, int blen);
00097 static
00098 XrdCryptoLite *Load_Crypto(XrdOucErrInfo *erp, const char *eN);
00099 static
00100 XrdCryptoLite *Load_Crypto(XrdOucErrInfo *erp, const char eT);
00101 int myClock();
00102 char *setID(char *id, char **idP);
00103 void setIP(XrdNetAddrInfo &endPoint);
00104
00105 static struct Crypto CryptoTab[];
00106
00107 char *urName;
00108 char urIP[48];
00109 char urIQ[48];
00110 static int deltaTime;
00111 static bool isMutual;
00112 static bool isMapped;
00113 static bool ktFixed;
00114 XrdNetAddrInfo *epAddr;
00115
00116 static XrdSecsssKT *ktObject;
00117 XrdSecsssKT *keyTab;
00118
00119 static XrdCryptoLite *CryptObj;
00120 XrdCryptoLite *Crypto;
00121
00122 static XrdSecsssID *idMap;
00123 static char *aProts;
00124 char *idBuff;
00125 static XrdSecsssEnt *staticID;
00126 int dataOpts;
00127 char Sequence;
00128 bool v2EndPnt;
00129
00130 };
00131 #endif