示例#1
0
        public bool GetEntry(ADSessionInfo info, out ADSession session)
        {
            DebugLogger.LogInfo(ADSessionCache._debugCategory, "GetEntry: Entering");
            string str = this.GenerateKey(info);
            int    num = 0;

            if (ADSessionCache._sessionMap.ContainsKey(str))
            {
                ADSessionCache.CacheEntry cacheEntry = this.FindEntryInServerList(str, info, out num);
                if (cacheEntry != null)
                {
                    session = cacheEntry.Session;
                    return(true);
                }
            }
            session = null;
            return(false);
        }
示例#2
0
        public void AddEntry(ADSessionInfo info, ADSession session)
        {
            PSCredential credential;
            string       str = this.GenerateKey(info);

            DebugLogger.LogInfo(ADSessionCache._debugCategory, string.Concat("AddEntry: Adding Entry , Key: ", str));
            ADSessionCache.CacheEntry cacheEntry = new ADSessionCache.CacheEntry();
            cacheEntry.Session = session;
            ADSessionCache.CacheEntry cacheEntry1 = cacheEntry;
            if (info == null)
            {
                credential = null;
            }
            else
            {
                credential = info.Credential;
            }
            cacheEntry1.Credential = credential;
            if (!this.AreCredentialsExplicit(info))
            {
                WindowsIdentity current = WindowsIdentity.GetCurrent(true);
                if (current != null)
                {
                    cacheEntry.ImpersonatedOwnerSid = current.Owner;
                }
            }
            if (!ADSessionCache._sessionMap.ContainsKey(str))
            {
                ADSessionCache._sessionMap.Add(str, new List <ADSessionCache.CacheEntry>(1));
                ADSessionCache._sessionMap[str].Add(cacheEntry);
                return;
            }
            else
            {
                ADSessionCache._sessionMap[str].Add(cacheEntry);
                return;
            }
        }
示例#3
0
		public void AddEntry(ADSessionInfo info, ADSession session)
		{
			PSCredential credential;
			string str = this.GenerateKey(info);
			DebugLogger.LogInfo(ADSessionCache._debugCategory, string.Concat("AddEntry: Adding Entry , Key: ", str));
			ADSessionCache.CacheEntry cacheEntry = new ADSessionCache.CacheEntry();
			cacheEntry.Session = session;
			ADSessionCache.CacheEntry cacheEntry1 = cacheEntry;
			if (info == null)
			{
				credential = null;
			}
			else
			{
				credential = info.Credential;
			}
			cacheEntry1.Credential = credential;
			if (!this.AreCredentialsExplicit(info))
			{
				WindowsIdentity current = WindowsIdentity.GetCurrent(true);
				if (current != null)
				{
					cacheEntry.ImpersonatedOwnerSid = current.Owner;
				}
			}
			if (!ADSessionCache._sessionMap.ContainsKey(str))
			{
				ADSessionCache._sessionMap.Add(str, new List<ADSessionCache.CacheEntry>(1));
				ADSessionCache._sessionMap[str].Add(cacheEntry);
				return;
			}
			else
			{
				ADSessionCache._sessionMap[str].Add(cacheEntry);
				return;
			}
		}
示例#4
0
        private ADSessionCache.CacheEntry FindEntryInServerList(string key, ADSessionInfo info, out int index)
        {
            List <ADSessionCache.CacheEntry> cacheEntries = null;

            ADSessionCache.CacheEntry item = null;
            int num;

            index = -1;
            if (ADSessionCache._sessionMap.TryGetValue(key, out cacheEntries))
            {
                if (DebugLogger.Level >= DebugLogLevel.Info)
                {
                    object[] count = new object[4];
                    count[0] = "FindEntryInServerList: Found ";
                    count[1] = cacheEntries.Count;
                    count[2] = " session(s) in cache with key: ";
                    count[3] = key;
                    DebugLogger.LogInfo(ADSessionCache._debugCategory, string.Concat(count));
                }
                bool            flag    = this.AreCredentialsExplicit(info);
                WindowsIdentity current = null;
                if (!flag)
                {
                    current = WindowsIdentity.GetCurrent(true);
                }
                int  i     = 0;
                bool flag1 = false;
                for (i = 0; i < cacheEntries.Count; i++)
                {
                    item = cacheEntries[i];
                    if (item.Session.MatchConnectionOptions(info))
                    {
                        bool flag2 = ADPasswordUtils.AreCredentialsExplicit(item.Credential);
                        if (!flag || !flag2)
                        {
                            if (!flag && !flag2)
                            {
                                if (current != null || !(null == item.ImpersonatedOwnerSid))
                                {
                                    if (current.Owner == item.ImpersonatedOwnerSid)
                                    {
                                        flag1 = true;
                                        break;
                                    }
                                }
                                else
                                {
                                    flag1 = true;
                                    break;
                                }
                            }
                        }
                        else
                        {
                            if (ADPasswordUtils.MatchCredentials(item.Credential, info.Credential))
                            {
                                flag1 = true;
                                break;
                            }
                        }
                    }
                    else
                    {
                        if (DebugLogger.Level >= DebugLogLevel.Info)
                        {
                            DebugLogger.LogInfo(ADSessionCache._debugCategory, string.Concat("FindEntryInServerList: Connection options did NOT match with session ", item.Session.SessionInfo.Server));
                        }
                    }
                }
                if (!flag1)
                {
                    if (DebugLogger.Level >= DebugLogLevel.Info)
                    {
                        DebugLogger.LogInfo(ADSessionCache._debugCategory, "FindEntryInServerList. Could NOT find a matching cached session entry");
                    }
                }
                else
                {
                    if (DebugLogger.Level >= DebugLogLevel.Info)
                    {
                        DebugLogger.LogInfo(ADSessionCache._debugCategory, string.Concat("FindEntryInServerList. Found a cached session entry: ", item.Session.SessionInfo.Server));
                    }
                }
                int numPointer = index;
                if (flag1)
                {
                    num = i;
                }
                else
                {
                    num = -1;
                }
                numPointer = num;
                if (flag1)
                {
                    return(item);
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                if (DebugLogger.Level >= DebugLogLevel.Info)
                {
                    DebugLogger.LogInfo(ADSessionCache._debugCategory, string.Concat("FindEntryInServerList: Could NOT find a session in cache with key: ", key));
                }
                return(null);
            }
        }