hostclean.tcl 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. set seen_hostnames [list]
  2. proc load_hostnames { handle idx filename } {
  3. global seen_hostnames
  4. set filehandle [open $filename "r"]
  5. set line [gets $filehandle]
  6. set count 0
  7. while {![eof $filehandle]} {
  8. set line [string trim $line]
  9. set line "somenick!$line"
  10. lappend seen_hostnames $line
  11. incr count
  12. set line [gets $filehandle]
  13. }
  14. putidx $idx "hostclean: loaded [llength $seen_hostnames] hostnames from cache"
  15. }
  16. proc hostclean { handle idx user } {
  17. global seen_hostnames
  18. set hostnames [getuser $user HOSTS]
  19. putlog "hostclean: found [llength $hostnames] hosts for $user"
  20. if {[llength $hostnames] > 0} {
  21. foreach host $hostnames {
  22. if [string match "-telnet*" $host] {
  23. set seen 1
  24. continue
  25. }
  26. set regexp_hostname [string map { . \\. * .+ ? . } $host]
  27. regsub {\.\+!([a-zA-Z0-9_])} $regexp_hostname {.+!~?\1} regexp_hostname
  28. regsub {\.\+!\.\+([a-zA-Z0-9_])} $regexp_hostname {.+!.*\1} regexp_hostname
  29. set seen 0
  30. foreach seen_host $seen_hostnames {
  31. if [regexp -nocase $regexp_hostname $seen_host] {
  32. set seen 1
  33. break
  34. }
  35. }
  36. if {!$seen} {
  37. # XXX delete this host
  38. putidx $idx ".-host $user $host"
  39. }
  40. }
  41. }
  42. }
  43. bind dcc n hostload load_hostnames
  44. bind dcc n hostclean hostclean
  45. putlog "HostClean loaded; user .hostload <filename> and .hostclean <handle>"