89 |
|
|
90 |
|
private StringWriter writer = new StringWriter(); |
91 |
|
private SortedDictionary<string, List<Login>> logins = new SortedDictionary<string, List<Login>>(); |
92 |
+ |
private bool forward = false; |
93 |
|
private List<string> nots = new List<string>(); |
94 |
|
|
95 |
|
private void Full() |
96 |
|
{ |
97 |
+ |
if (forward) |
98 |
+ |
writer.Write("finger: forwarding service denied\r\n"); |
99 |
+ |
|
100 |
|
foreach (string not in nots) |
101 |
|
writer.Write("finger: {0}: no such user\r\n", not); |
102 |
|
|
212 |
|
Sessions(logins_); |
213 |
|
|
214 |
|
foreach (string name in names) |
215 |
< |
{ |
216 |
< |
bool not = true; |
215 |
> |
if (name.Contains("@")) |
216 |
> |
forward = true; |
217 |
> |
else |
218 |
> |
{ |
219 |
> |
bool not = true; |
220 |
|
|
221 |
< |
for (uint index = 0; index != count; ++index) |
222 |
< |
if (users[index].usri1_name.IndexOf(name, StringComparison.OrdinalIgnoreCase) != -1 || users[index].usri1_full_name.IndexOf(name, StringComparison.OrdinalIgnoreCase) != -1 && !logins.ContainsKey(users[index].usri1_name)) |
223 |
< |
{ |
224 |
< |
logins.Add(users[index].usri1_name, new List<Login>()); |
221 |
> |
for (uint index = 0; index != count; ++index) |
222 |
> |
if (users[index].usri1_name.IndexOf(name, StringComparison.OrdinalIgnoreCase) != -1 || users[index].usri1_full_name.IndexOf(name, StringComparison.OrdinalIgnoreCase) != -1 && !logins.ContainsKey(users[index].usri1_name)) |
223 |
> |
{ |
224 |
> |
logins.Add(users[index].usri1_name, new List<Login>()); |
225 |
|
|
226 |
< |
logins[users[index].usri1_name].Add(new Login(users[index].usri1_name)); |
226 |
> |
logins[users[index].usri1_name].Add(new Login(users[index].usri1_name)); |
227 |
|
|
228 |
< |
if (logins_.ContainsKey(users[index].usri1_name)) |
229 |
< |
logins[users[index].usri1_name].AddRange(logins_[users[index].usri1_name]); |
228 |
> |
if (logins_.ContainsKey(users[index].usri1_name)) |
229 |
> |
logins[users[index].usri1_name].AddRange(logins_[users[index].usri1_name]); |
230 |
|
|
231 |
< |
not = false; |
232 |
< |
} |
231 |
> |
not = false; |
232 |
> |
} |
233 |
|
|
234 |
< |
if (not) |
235 |
< |
nots.Add(name); |
236 |
< |
} |
234 |
> |
if (not) |
235 |
> |
nots.Add(name); |
236 |
> |
} |
237 |
|
|
238 |
|
Full(); |
239 |
|
} |
257 |
|
while (true) |
258 |
|
{ |
259 |
|
TcpClient client = listener.AcceptTcpClient(); |
260 |
+ |
|
261 |
+ |
Console.WriteLine(client.Client.RemoteEndPoint); |
262 |
+ |
|
263 |
+ |
client.SendTimeout = 6000; |
264 |
+ |
client.LingerState = new LingerOption(true, 60); |
265 |
+ |
|
266 |
|
Thread thread = new Thread(new ParameterizedThreadStart(Do)); |
267 |
|
|
268 |
|
thread.Start(client); |
287 |
|
while (size != buffer.Length && (byte_ = stream.ReadByte()) != '\r' && byte_ != '\n' && byte_ != -1) |
288 |
|
buffer[size++] = (byte)byte_; |
289 |
|
|
290 |
< |
string line = Encoding.ASCII.GetString(buffer, 0, size)/*Console.ReadLine()*/; |
290 |
> |
string line = Encoding.ASCII.GetString(buffer, 0, size); |
291 |
|
List<string> names = new List<string>(); |
292 |
|
bool full = false; |
293 |
|
|
301 |
|
|
302 |
|
StreamWriter writer = new StreamWriter(stream, new UTF8Encoding(false)); |
303 |
|
|
304 |
< |
writer/*Console*/.Write(names.Count > 0 ? new Finger(names) : new Finger(full)); |
304 |
> |
writer.Write(names.Count > 0 ? new Finger(names) : new Finger(full)); |
305 |
|
writer.Close(); |
306 |
< |
//stream.Close(); |
294 |
< |
//((TcpClient)client).Close(); |
306 |
> |
((TcpClient)client).Close(); |
307 |
|
} |
308 |
|
|
309 |
|
public static int Main(string[] args) |
310 |
|
{ |
311 |
< |
Do(/*null*/); |
311 |
> |
Do(); |
312 |
|
|
313 |
|
return 0; |
314 |
|
} |