|
@@ -120,7 +120,7 @@ interface ISessionManagerServer: implements IConnectionMonitor
|
|
virtual void addSession(SessionId id) = 0;
|
|
virtual void addSession(SessionId id) = 0;
|
|
virtual SessionId lookupProcessSession(INode *node) = 0;
|
|
virtual SessionId lookupProcessSession(INode *node) = 0;
|
|
virtual INode *getProcessSessionNode(SessionId id) =0;
|
|
virtual INode *getProcessSessionNode(SessionId id) =0;
|
|
- virtual SecAccessFlags getPermissionsLDAP(const char *key,const char *obj,IUserDescriptor *udesc,unsigned flags, const char * reqSignature, CDateTime & reqUTCTimestamp, int *err)=0;
|
|
|
|
|
|
+ virtual SecAccessFlags getPermissionsLDAP(const char *key,const char *obj,IUserDescriptor *udesc,unsigned flags, int *err)=0;
|
|
virtual bool clearPermissionsCache(IUserDescriptor *udesc) = 0;
|
|
virtual bool clearPermissionsCache(IUserDescriptor *udesc) = 0;
|
|
virtual void stopSession(SessionId sessid,bool failed) = 0;
|
|
virtual void stopSession(SessionId sessid,bool failed) = 0;
|
|
virtual void setClientAuth(IDaliClientAuthConnection *authconn) = 0;
|
|
virtual void setClientAuth(IDaliClientAuthConnection *authconn) = 0;
|
|
@@ -666,15 +666,15 @@ public:
|
|
if (mb.length()-mb.getPos()>=sizeof(auditflags))
|
|
if (mb.length()-mb.getPos()>=sizeof(auditflags))
|
|
mb.read(auditflags);
|
|
mb.read(auditflags);
|
|
|
|
|
|
- StringBuffer reqSignature;
|
|
|
|
- CDateTime reqUTCTimestamp;
|
|
|
|
if (mb.remaining() > 0)
|
|
if (mb.remaining() > 0)
|
|
{
|
|
{
|
|
|
|
+ StringBuffer reqSignature; // now ignored
|
|
|
|
+ CDateTime reqUTCTimestamp; // also ignored
|
|
mb.read(reqSignature);
|
|
mb.read(reqSignature);
|
|
reqUTCTimestamp.deserialize(mb);
|
|
reqUTCTimestamp.deserialize(mb);
|
|
}
|
|
}
|
|
int err = 0;
|
|
int err = 0;
|
|
- SecAccessFlags perms = manager.getPermissionsLDAP(key,obj,udesc,auditflags,reqSignature.str(),reqUTCTimestamp,&err);
|
|
|
|
|
|
+ SecAccessFlags perms = manager.getPermissionsLDAP(key,obj,udesc,auditflags,&err);
|
|
mb.clear().append((int)perms);
|
|
mb.clear().append((int)perms);
|
|
if (err)
|
|
if (err)
|
|
mb.append(err);
|
|
mb.append(err);
|
|
@@ -953,7 +953,7 @@ public:
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- SecAccessFlags getPermissionsLDAP(const char *key,const char *obj,IUserDescriptor *udesc,unsigned auditflags,const char * reqSignature, CDateTime & reqUTCTimestamp, int *err)
|
|
|
|
|
|
+ SecAccessFlags getPermissionsLDAP(const char *key,const char *obj,IUserDescriptor *udesc,unsigned auditflags, int *err)
|
|
{
|
|
{
|
|
if (err)
|
|
if (err)
|
|
*err = 0;
|
|
*err = 0;
|
|
@@ -986,21 +986,10 @@ public:
|
|
//Serialize signature. If not provided, compute it
|
|
//Serialize signature. If not provided, compute it
|
|
if (queryDaliServerVersion().compare("3.15") >= 0)
|
|
if (queryDaliServerVersion().compare("3.15") >= 0)
|
|
{
|
|
{
|
|
- if (isEmptyString(reqSignature))
|
|
|
|
- {
|
|
|
|
- CDateTime now;
|
|
|
|
- StringBuffer b64sig;
|
|
|
|
- if (createDaliSignature(obj, udesc, now, b64sig))
|
|
|
|
- {
|
|
|
|
- mb.append(b64sig.str());
|
|
|
|
- now.serialize(mb);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- mb.append(reqSignature);
|
|
|
|
- reqUTCTimestamp.serialize(mb);
|
|
|
|
- }
|
|
|
|
|
|
+ //Backwards compatibility in case another parameter is added later, otherwise could be removed
|
|
|
|
+ CDateTime reqUTCTimestamp;
|
|
|
|
+ mb.append("");
|
|
|
|
+ reqUTCTimestamp.serialize(mb);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -1223,8 +1212,6 @@ class CLdapWorkItem : public Thread
|
|
{
|
|
{
|
|
StringAttr key;
|
|
StringAttr key;
|
|
StringAttr obj;
|
|
StringAttr obj;
|
|
- StringAttr reqSignature;
|
|
|
|
- CDateTime reqUTCTimestamp;
|
|
|
|
Linked<IUserDescriptor> udesc;
|
|
Linked<IUserDescriptor> udesc;
|
|
Linked<IDaliLdapConnection> ldapconn;
|
|
Linked<IDaliLdapConnection> ldapconn;
|
|
unsigned flags;
|
|
unsigned flags;
|
|
@@ -1239,13 +1226,10 @@ public:
|
|
{
|
|
{
|
|
running = false;
|
|
running = false;
|
|
}
|
|
}
|
|
- void start(const char *_key,const char *_obj,IUserDescriptor *_udesc,unsigned _flags,const char * _reqSignature, CDateTime & _reqUTCTimestamp)
|
|
|
|
|
|
+ void start(const char *_key,const char *_obj,IUserDescriptor *_udesc,unsigned _flags)
|
|
{
|
|
{
|
|
key.set(_key);
|
|
key.set(_key);
|
|
obj.set(_obj);
|
|
obj.set(_obj);
|
|
- reqSignature.set(_reqSignature);
|
|
|
|
- if (!_reqUTCTimestamp.isNull())
|
|
|
|
- reqUTCTimestamp.set(_reqUTCTimestamp);
|
|
|
|
|
|
|
|
#ifdef NULL_DALIUSER_STACKTRACE
|
|
#ifdef NULL_DALIUSER_STACKTRACE
|
|
StringBuffer sb;
|
|
StringBuffer sb;
|
|
@@ -1274,7 +1258,7 @@ public:
|
|
if (!running)
|
|
if (!running)
|
|
break;
|
|
break;
|
|
try {
|
|
try {
|
|
- ret = ldapconn->getPermissions(key,obj,udesc,flags,reqSignature.str(),reqUTCTimestamp);
|
|
|
|
|
|
+ ret = ldapconn->getPermissions(key,obj,udesc,flags);
|
|
}
|
|
}
|
|
catch(IException *e) {
|
|
catch(IException *e) {
|
|
LOG(MCoperatorError, unknownJob, e, "CLdapWorkItem");
|
|
LOG(MCoperatorError, unknownJob, e, "CLdapWorkItem");
|
|
@@ -1747,7 +1731,7 @@ public:
|
|
|
|
|
|
//ISessionManagerServer
|
|
//ISessionManagerServer
|
|
//Dali method to handle permission request
|
|
//Dali method to handle permission request
|
|
- virtual SecAccessFlags getPermissionsLDAP(const char *key,const char *obj,IUserDescriptor *udesc,unsigned flags,const char * reqSignature, CDateTime & reqUTCTimestamp, int *err)
|
|
|
|
|
|
+ virtual SecAccessFlags getPermissionsLDAP(const char *key,const char *obj,IUserDescriptor *udesc,unsigned flags, int *err)
|
|
{
|
|
{
|
|
if (err)
|
|
if (err)
|
|
*err = 0;
|
|
*err = 0;
|
|
@@ -1767,7 +1751,7 @@ public:
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
if ((ldapconn->getLDAPflags()&(DLF_SAFE|DLF_ENABLED))!=(DLF_SAFE|DLF_ENABLED))
|
|
if ((ldapconn->getLDAPflags()&(DLF_SAFE|DLF_ENABLED))!=(DLF_SAFE|DLF_ENABLED))
|
|
- return ldapconn->getPermissions(key,obj,udesc,flags,reqSignature,reqUTCTimestamp);
|
|
|
|
|
|
+ return ldapconn->getPermissions(key,obj,udesc,flags);
|
|
atomic_inc(&ldapwaiting);
|
|
atomic_inc(&ldapwaiting);
|
|
unsigned retries = 0;
|
|
unsigned retries = 0;
|
|
while (!stopping) {
|
|
while (!stopping) {
|
|
@@ -1776,7 +1760,7 @@ public:
|
|
if (!ldapworker)
|
|
if (!ldapworker)
|
|
ldapworker.setown(CLdapWorkItem::get(ldapconn,workthreadsem));
|
|
ldapworker.setown(CLdapWorkItem::get(ldapconn,workthreadsem));
|
|
if (ldapworker) {
|
|
if (ldapworker) {
|
|
- ldapworker->start(key,obj,udesc,flags,reqSignature,reqUTCTimestamp);
|
|
|
|
|
|
+ ldapworker->start(key,obj,udesc,flags);
|
|
for (unsigned i=0;i<10;i++) {
|
|
for (unsigned i=0;i<10;i++) {
|
|
if (i)
|
|
if (i)
|
|
OWARNLOG("LDAP stalled(%d) - retrying",i);
|
|
OWARNLOG("LDAP stalled(%d) - retrying",i);
|
|
@@ -1801,7 +1785,7 @@ public:
|
|
ldapworker.clear();
|
|
ldapworker.clear();
|
|
ldapworker.setown(CLdapWorkItem::get(ldapconn,workthreadsem));
|
|
ldapworker.setown(CLdapWorkItem::get(ldapconn,workthreadsem));
|
|
if (ldapworker)
|
|
if (ldapworker)
|
|
- ldapworker->start(key,obj,udesc,flags,reqSignature,reqUTCTimestamp);
|
|
|
|
|
|
+ ldapworker->start(key,obj,udesc,flags);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (ldapworker)
|
|
if (ldapworker)
|
|
@@ -2166,7 +2150,6 @@ ISessionManager &querySessionManager()
|
|
assertex(!isCovenActive()||!queryCoven().inCoven()); // Check not Coven server (if occurs - not initialized correctly;
|
|
assertex(!isCovenActive()||!queryCoven().inCoven()); // Check not Coven server (if occurs - not initialized correctly;
|
|
// If !coven someone is checking for dali so allow
|
|
// If !coven someone is checking for dali so allow
|
|
SessionManager = new CClientSessionManager();
|
|
SessionManager = new CClientSessionManager();
|
|
-
|
|
|
|
}
|
|
}
|
|
return *SessionManager;
|
|
return *SessionManager;
|
|
}
|
|
}
|