Inheritance: SharpCifs.Util.Transport.Transport
        internal static SmbTransport GetSmbTransport(UniAddress address, int port
            , IPAddress localAddr, int localPort, string hostName)
        {
            lock (typeof(SmbTransport))
            {
                SmbTransport conn;

                lock (SmbConstants.Connections)
                {
                    if (SmbConstants.SsnLimit != 1)
                    {
                        conn =
                            SmbConstants.Connections.FirstOrDefault(
                                c =>
                                    c.Matches(address, port, localAddr, localPort, hostName) &&
                                    (SmbConstants.SsnLimit ==
                                     0 || c.Sessions.Count < SmbConstants.SsnLimit));

                        if (conn != null)
                        {
                            return conn;
                        }

                    }

                    conn = new SmbTransport(address, port, localAddr, localPort);
                    SmbConstants.Connections.Insert(0, conn);
                }
                return conn;
            }
        }
        internal static SmbTransport GetSmbTransport(UniAddress address,
                                                     int port,
                                                     IPAddress localAddr,
                                                     int localPort,
                                                     string hostName)
        {
            lock (typeof(SmbTransport))
            {
                SmbTransport conn;

                lock (SmbConstants.Connections)
                {
                    if (SmbConstants.SsnLimit != 1)
                    {
                        conn = SmbConstants.Connections
                               .FirstOrDefault(c => c.Matches(address,
                                                              port,
                                                              localAddr,
                                                              localPort,
                                                              hostName) &&
                                               (SmbConstants.SsnLimit == 0 ||
                                                c.Sessions.Count < SmbConstants.SsnLimit));

                        if (conn != null)
                        {
                            return(conn);
                        }
                    }

                    conn = new SmbTransport(address, port, localAddr, localPort);
                    SmbConstants.Connections.Insert(0, conn);
                }
                return(conn);
            }
        }
Exemple #3
0
 /// <exception cref="SharpCifs.Smb.SmbAuthException"></exception>
 public virtual DfsReferral GetReferral(SmbTransport trans, string domain, string
                                        root, string path, NtlmPasswordAuthentication auth)
 {
     if (Disabled)
     {
         return(null);
     }
     try
     {
         string p = "\\" + domain + "\\" + root;
         if (path != null)
         {
             p += path;
         }
         DfsReferral dr = trans.GetDfsReferrals(auth, p, 0);
         if (dr != null)
         {
             return(dr);
         }
     }
     catch (IOException ioe)
     {
         if (Log.Level >= 4)
         {
             Runtime.PrintStackTrace(ioe, Log);
         }
         if (StrictView && ioe is SmbAuthException)
         {
             throw (SmbAuthException)ioe;
         }
     }
     return(null);
 }
Exemple #4
0
        /// <exception cref="SharpCifs.Smb.SmbException"></exception>
        /// <exception cref="UnknownHostException"></exception>
        public static byte[] GetChallenge(UniAddress dc, int port)
        {
            SmbTransport trans = SmbTransport.GetSmbTransport(dc, port);

            trans.Connect();
            return(trans.Server.EncryptionKey);
        }
		/// <exception cref="SharpCifs.Smb.SmbException"></exception>
		public SigningDigest(SmbTransport transport, NtlmPasswordAuthentication auth)
		{
			try
			{
				_digest = MessageDigest.GetInstance("MD5");
			}
			catch (NoSuchAlgorithmException ex)
			{
				if (Log.Level > 0)
				{
					Runtime.PrintStackTrace(ex, Log);
				}
				throw new SmbException("MD5", ex);
			}
			try
			{
                switch (SmbConstants.LmCompatibility)
				{
					case 0:
					case 1:
					case 2:
					{
						_macSigningKey = new byte[40];
						auth.GetUserSessionKey(transport.Server.EncryptionKey, _macSigningKey, 0);
						Array.Copy(auth.GetUnicodeHash(transport.Server.EncryptionKey), 0, _macSigningKey
							, 16, 24);
						break;
					}

					case 3:
					case 4:
					case 5:
					{
						_macSigningKey = new byte[16];
						auth.GetUserSessionKey(transport.Server.EncryptionKey, _macSigningKey, 0);
						break;
					}

					default:
					{
						_macSigningKey = new byte[40];
						auth.GetUserSessionKey(transport.Server.EncryptionKey, _macSigningKey, 0);
						Array.Copy(auth.GetUnicodeHash(transport.Server.EncryptionKey), 0, _macSigningKey
							, 16, 24);
					    break;
					}
				}
			}
			catch (Exception ex)
			{
				throw new SmbException(string.Empty, ex);
			}
			if (Log.Level >= 5)
			{
                Log.WriteLine("LM_COMPATIBILITY=" + SmbConstants.LmCompatibility);
				Hexdump.ToHexdump(Log, _macSigningKey, 0, _macSigningKey.Length);
			}
		}
Exemple #6
0
        /// <exception cref="SharpCifs.Smb.SmbException"></exception>
        public SigningDigest(SmbTransport transport, NtlmPasswordAuthentication auth)
        {
            try
            {
                _digest = MessageDigest.GetInstance("MD5");
            }
            catch (NoSuchAlgorithmException ex)
            {
                if (Log.Level > 0)
                {
                    Runtime.PrintStackTrace(ex, Log);
                }
                throw new SmbException("MD5", ex);
            }
            try
            {
                switch (SmbConstants.LmCompatibility)
                {
                case 0:
                case 1:
                case 2:
                {
                    _macSigningKey = new byte[40];
                    auth.GetUserSessionKey(transport.Server.EncryptionKey, _macSigningKey, 0);
                    Array.Copy(auth.GetUnicodeHash(transport.Server.EncryptionKey), 0, _macSigningKey
                               , 16, 24);
                    break;
                }

                case 3:
                case 4:
                case 5:
                {
                    _macSigningKey = new byte[16];
                    auth.GetUserSessionKey(transport.Server.EncryptionKey, _macSigningKey, 0);
                    break;
                }

                default:
                {
                    _macSigningKey = new byte[40];
                    auth.GetUserSessionKey(transport.Server.EncryptionKey, _macSigningKey, 0);
                    Array.Copy(auth.GetUnicodeHash(transport.Server.EncryptionKey), 0, _macSigningKey
                               , 16, 24);
                    break;
                }
                }
            }
            catch (Exception ex)
            {
                throw new SmbException(string.Empty, ex);
            }
            if (Log.Level >= 5)
            {
                Log.WriteLine("LM_COMPATIBILITY=" + SmbConstants.LmCompatibility);
                Hexdump.ToHexdump(Log, _macSigningKey, 0, _macSigningKey.Length);
            }
        }
Exemple #7
0
 internal SmbTransport Transport()
 {
     lock (this)
     {
         if (transport == null)
         {
             transport = SmbTransport.GetSmbTransport(_address, _port, _localAddr, _localPort, null
                                                      );
         }
         return(transport);
     }
 }
Exemple #8
0
 /// <exception cref="SharpCifs.Smb.SmbAuthException"></exception>
 public virtual Hashtable GetTrustedDomains(NtlmPasswordAuthentication auth)
 {
     if (Disabled || auth.Domain == "?")
     {
         return(null);
     }
     if (Domains != null && Runtime.CurrentTimeMillis() > Domains.Expiration)
     {
         Domains = null;
     }
     if (Domains != null)
     {
         return(Domains.Map);
     }
     try
     {
         UniAddress   addr  = UniAddress.GetByName(auth.Domain, true);
         SmbTransport trans = SmbTransport.GetSmbTransport(addr, 0);
         CacheEntry   entry = new CacheEntry(Ttl * 10L);
         DfsReferral  dr    = trans.GetDfsReferrals(auth, string.Empty, 0);
         if (dr != null)
         {
             DfsReferral start = dr;
             do
             {
                 string domain = dr.Server.ToLower();
                 entry.Map.Put(domain, new Hashtable());
                 dr = dr.Next;
             }while (dr != start);
             Domains = entry;
             return(Domains.Map);
         }
     }
     catch (IOException ioe)
     {
         if (Log.Level >= 3)
         {
             Runtime.PrintStackTrace(ioe, Log);
         }
         if (StrictView && ioe is SmbAuthException)
         {
             throw (SmbAuthException)ioe;
         }
     }
     return(null);
 }
Exemple #9
0
        /// <exception cref="SharpCifs.Smb.SmbException"></exception>
        public static void Logon(UniAddress dc, int port, NtlmPasswordAuthentication auth
                                 )
        {
            SmbTree tree = SmbTransport.GetSmbTransport(dc, port).GetSmbSession(auth).GetSmbTree
                               (LogonShare, null);

            if (LogonShare == null)
            {
                tree.TreeConnect(null, null);
            }
            else
            {
                Trans2FindFirst2         req  = new Trans2FindFirst2("\\", "*", SmbFile.AttrDirectory);
                Trans2FindFirst2Response resp = new Trans2FindFirst2Response();
                tree.Send(req, resp);
            }
        }
Exemple #10
0
 /// <exception cref="SharpCifs.Smb.SmbAuthException"></exception>
 public virtual SmbTransport GetDc(string domain, NtlmPasswordAuthentication auth)
 {
     if (Disabled)
     {
         return(null);
     }
     try
     {
         UniAddress   addr  = UniAddress.GetByName(domain, true);
         SmbTransport trans = SmbTransport.GetSmbTransport(addr, 0);
         DfsReferral  dr    = trans.GetDfsReferrals(auth, "\\" + domain, 1);
         if (dr != null)
         {
             DfsReferral start = dr;
             IOException e     = null;
             do
             {
                 try
                 {
                     addr = UniAddress.GetByName(dr.Server);
                     return(SmbTransport.GetSmbTransport(addr, 0));
                 }
                 catch (IOException ioe)
                 {
                     e = ioe;
                 }
                 dr = dr.Next;
             }while (dr != start);
             throw e;
         }
     }
     catch (IOException ioe)
     {
         if (Log.Level >= 3)
         {
             Runtime.PrintStackTrace(ioe, Log);
         }
         if (StrictView && ioe is SmbAuthException)
         {
             throw (SmbAuthException)ioe;
         }
     }
     return(null);
 }
Exemple #11
0
        /// <exception cref="SharpCifs.Smb.SmbException"></exception>
        private static NtlmChallenge Interrogate(NbtAddress addr)
        {
            UniAddress   dc    = new UniAddress(addr);
            SmbTransport trans = SmbTransport.GetSmbTransport(dc, 0);

            if (Username == null)
            {
                trans.Connect();
                if (SmbTransport.LogStatic.Level >= 3)
                {
                    SmbTransport.LogStatic.WriteLine("Default credentials (jcifs.smb.client.username/password)"
                                                     + " not specified. SMB signing may not work propertly." + "  Skipping DC interrogation."
                                                     );
                }
            }
            else
            {
                SmbSession ssn = trans.GetSmbSession(NtlmPasswordAuthentication.Default
                                                     );
                ssn.GetSmbTree(LogonShare, null).TreeConnect(null, null);
            }
            return(new NtlmChallenge(trans.Server.EncryptionKey, dc));
        }
 internal ServerData(SmbTransport enclosing)
 {
     this._enclosing = enclosing;
 }
Exemple #13
0
 /// <exception cref="SharpCifs.Smb.SmbAuthException"></exception>
 public virtual DfsReferral Resolve(string domain,
                                    string root,
                                    string path,
                                    NtlmPasswordAuthentication auth)
 {
     lock (this)
     {
         DfsReferral dr  = null;
         long        now = Runtime.CurrentTimeMillis();
         if (Disabled || root.Equals("IPC$"))
         {
             return(null);
         }
         Hashtable domains = GetTrustedDomains(auth);
         if (domains != null)
         {
             domain = domain.ToLower();
             Hashtable roots = (Hashtable)domains.Get(domain);
             if (roots != null)
             {
                 SmbTransport trans = null;
                 root = root.ToLower();
                 CacheEntry links = (CacheEntry)roots.Get(root);
                 if (links != null && now > links.Expiration)
                 {
                     //Sharpen.Collections.Remove(roots, root);
                     roots.Remove(root);
                     links = null;
                 }
                 if (links == null)
                 {
                     if ((trans = GetDc(domain, auth)) == null)
                     {
                         return(null);
                     }
                     dr = GetReferral(trans, domain, root, path, auth);
                     if (dr != null)
                     {
                         int len = 1 + domain.Length + 1 + root.Length;
                         links = new CacheEntry(0L);
                         DfsReferral tmp = dr;
                         do
                         {
                             if (path == null)
                             {
                                 // TODO: fix this
                                 //tmp.map = links.map;
                                 tmp.Key = "\\";
                             }
                             tmp.PathConsumed -= len;
                             tmp = tmp.Next;
                         }while (tmp != dr);
                         if (dr.Key != null)
                         {
                             links.Map.Put(dr.Key, dr);
                         }
                         roots.Put(root, links);
                     }
                     else
                     {
                         if (path == null)
                         {
                             roots.Put(root, FalseEntry);
                         }
                     }
                 }
                 else
                 {
                     if (links == FalseEntry)
                     {
                         links = null;
                     }
                 }
                 if (links != null)
                 {
                     string link = "\\";
                     dr = (DfsReferral)links.Map.Get(link);
                     if (dr != null && now > dr.Expiration)
                     {
                         //Sharpen.Collections.Remove(links.map, link);
                         links.Map.Remove(link);
                         dr = null;
                     }
                     if (dr == null)
                     {
                         if (trans == null)
                         {
                             if ((trans = GetDc(domain, auth)) == null)
                             {
                                 return(null);
                             }
                         }
                         dr = GetReferral(trans, domain, root, path, auth);
                         if (dr != null)
                         {
                             dr.PathConsumed -= 1 + domain.Length + 1 + root.Length;
                             dr.Link          = link;
                             links.Map.Put(link, dr);
                         }
                     }
                 }
             }
         }
         if (dr == null && path != null)
         {
             if (Referrals != null && now > Referrals.Expiration)
             {
                 Referrals = null;
             }
             if (Referrals == null)
             {
                 Referrals = new CacheEntry(0);
             }
             string key = "\\" + domain + "\\" + root;
             if (path.Equals("\\") == false)
             {
                 key += path;
             }
             key = key.ToLower();
             //ListIterator<object> iter = new ListIterator<object>(referrals.map.Keys.GetEnumerator(), 0);
             foreach (var current in Referrals.Map.Keys)
             {
                 string _key  = (string)current;
                 int    klen  = _key.Length;
                 bool   match = false;
                 if (klen == key.Length)
                 {
                     match = _key.Equals(key);
                 }
                 else
                 {
                     if (klen < key.Length)
                     {
                         match = _key.RegionMatches(false, 0, key, 0, klen) && key[klen] == '\\';
                     }
                 }
                 if (match)
                 {
                     dr = (DfsReferral)Referrals.Map.Get(_key);
                 }
             }
         }
         return(dr);
     }
 }
		internal SmbComNegotiateResponse(SmbTransport.ServerData server)
		{
			this.Server = server;
		}
Exemple #15
0
 internal ServerData(SmbTransport enclosing)
 {
     this._enclosing = enclosing;
 }
Exemple #16
0
 internal SmbTransport Transport()
 {
     lock (this)
     {
         if (transport == null)
         {
             transport = SmbTransport.GetSmbTransport(_address, _port, _localAddr, _localPort, null
                 );
         }
         return transport;
     }
 }
Exemple #17
0
		/// <exception cref="SharpCifs.Smb.SmbAuthException"></exception>
		public virtual DfsReferral GetReferral(SmbTransport trans, string domain, string 
			root, string path, NtlmPasswordAuthentication auth)
		{
			if (Disabled)
			{
				return null;
			}
			try
			{
				string p = "\\" + domain + "\\" + root;
				if (path != null)
				{
					p += path;
				}
				DfsReferral dr = trans.GetDfsReferrals(auth, p, 0);
				if (dr != null)
				{
					return dr;
				}
			}
			catch (IOException ioe)
			{
				if (Log.Level >= 4)
				{
					Runtime.PrintStackTrace(ioe, Log);
				}
				if (StrictView && ioe is SmbAuthException)
				{
					throw (SmbAuthException)ioe;
				}
			}
			return null;
		}
Exemple #18
0
 /// <summary>
 /// Clear All Cached Transport-Connections
 /// </summary>
 /// <remarks>
 /// Alias of SmbTransport.ClearCachedConnections
 /// </remarks>
 public static void ClearCachedConnections()
 {
     SmbTransport.ClearCachedConnections();
 }