private GetDfsReferrals ( |
||
auth | ||
path | string | |
rn | int | |
return |
internal virtual DfsReferral GetDfsReferrals(NtlmPasswordAuthentication auth, string
path, int rn)
{
SmbTree ipc = GetSmbSession(auth).GetSmbTree("IPC$", null);
Trans2GetDfsReferralResponse resp = new Trans2GetDfsReferralResponse();
ipc.Send(new Trans2GetDfsReferral(path), resp);
if (resp.NumReferrals == 0)
{
return null;
}
if (rn == 0 || resp.NumReferrals < rn)
{
rn = resp.NumReferrals;
}
DfsReferral dr = new DfsReferral();
string[] arr = new string[4];
long expiration = Runtime.CurrentTimeMillis() + Dfs.Ttl * 1000;
int di = 0;
for (; ; )
{
dr.ResolveHashes = auth.HashesExternal;
dr.Ttl = resp.Referrals[di].Ttl;
dr.Expiration = expiration;
if (path.Equals(string.Empty))
{
dr.Server = Runtime.Substring(resp.Referrals[di].Path, 1).ToLower();
}
else
{
DfsPathSplit(resp.Referrals[di].Node, arr);
dr.Server = arr[1];
dr.Share = arr[2];
dr.Path = arr[3];
}
dr.PathConsumed = resp.PathConsumed;
di++;
if (di == rn)
{
break;
}
dr.Append(new DfsReferral());
dr = dr.Next;
}
return dr.Next;
}
/// <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); }