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 class XrdSecProtocolsss : public XrdSecProtocol
00043 {
00044 public:
00045 friend class XrdSecProtocolDummy;
00046
00047
00048 int Authenticate (XrdSecCredentials *cred,
00049 XrdSecParameters **parms,
00050 XrdOucErrInfo *einfo=0);
00051
00052 void Delete();
00053
00054 static int eMsg(const char *epn, int rc, const char *txt1,
00055 const char *txt2=0, const char *txt3=0,
00056 const char *txt4=0);
00057
00058 static int Fatal(XrdOucErrInfo *erP, const char *epn, int rc,
00059 const char *etxt);
00060
00061 XrdSecCredentials *getCredentials(XrdSecParameters *parms=0,
00062 XrdOucErrInfo *einfo=0);
00063
00064 int Init_Client(XrdOucErrInfo *erp, const char *Parms);
00065
00066 int Init_Server(XrdOucErrInfo *erp, const char *Parms);
00067
00068 static char *Load_Client(XrdOucErrInfo *erp, const char *Parms);
00069
00070 static char *Load_Server(XrdOucErrInfo *erp, const char *Parms);
00071
00072 static void setOpts(int opts) {options = opts;}
00073
00074 XrdSecProtocolsss(const char *hname, XrdNetAddrInfo &endPoint)
00075 : XrdSecProtocol("sss"),
00076 keyTab(0), Crypto(0), idBuff(0), Sequence(0)
00077 {urName = strdup(hname); setIP(endPoint);}
00078
00079 struct Crypto {const char *cName; char cType;};
00080
00081 private:
00082 ~XrdSecProtocolsss() {}
00083
00084 int Decode(XrdOucErrInfo *error, XrdSecsssKT::ktEnt &decKey,
00085 char *iBuff, XrdSecsssRR_Data *rrData, int iSize);
00086 XrdSecCredentials *Encode(XrdOucErrInfo *error, XrdSecsssKT::ktEnt &encKey,
00087 XrdSecsssRR_Hdr *rrHdr, XrdSecsssRR_Data *rrData,
00088 int dLen);
00089 int getCred(XrdOucErrInfo *, XrdSecsssRR_Data &);
00090 int getCred(XrdOucErrInfo *, XrdSecsssRR_Data &, XrdSecParameters *);
00091 char *getLID(char *buff, int blen);
00092 static
00093 XrdCryptoLite *Load_Crypto(XrdOucErrInfo *erp, const char *eN);
00094 static
00095 XrdCryptoLite *Load_Crypto(XrdOucErrInfo *erp, const char eT);
00096 int myClock();
00097 char *setID(char *id, char **idP);
00098 void setIP(XrdNetAddrInfo &endPoint);
00099
00100 static struct Crypto CryptoTab[];
00101
00102 static const char *myName;
00103 static int myNLen;
00104 char *urName;
00105 char urIP[48];
00106 char urIQ[48];
00107 static int options;
00108 static int isMutual;
00109 static int deltaTime;
00110 static int ktFixed;
00111 XrdNetAddrInfo epAddr;
00112
00113 static XrdSecsssKT *ktObject;
00114 XrdSecsssKT *keyTab;
00115
00116 static XrdCryptoLite *CryptObj;
00117 XrdCryptoLite *Crypto;
00118
00119 static XrdSecsssID *idMap;
00120 char *idBuff;
00121 static char *staticID;
00122 static int staticIDsz;
00123 int Sequence;
00124 };
00125 #endif