Forum Discussion

Michael_Mangret's avatar
Michael_Mangret
Icon for Nimbostratus rankNimbostratus
Aug 13, 2007

Irule Error message

Can anyone tell me what might be wrong with my Irule? It seems to be working. I get the message Forbidden when I send a call with the header x-moz set, but I still get this error message in my log.

 

 

 

Error Message:

 

 

Aug 13 12:59:27 tmm tmm[715]: 01220001:3: TCL error: Rule xmoz_irule - can't read "host_pool": no such variable while executing "if { $host_pool ne "" } { pool $host_pool }"

 

 

 

Irule:

 

 

when HTTP_REQUEST {

 

if {[string tolower [HTTP::header x-moz:] ] contains "prefetch" } {

 

HTTP::respond 403 content "Forbidden"}

 

else {set host_pool [findclass [HTTP::host] $::DSHostPoolMap " "] }

 

if { $host_pool ne "" } {

 

pool $host_pool }

 

}

2 Replies

  • You're getting the TCL error because $host_pool isn't being set for every request--but is being referenced in every request.

    This is your original rule, formatted for easier reading:

    
    when HTTP_REQUEST {
       if {[string tolower [HTTP::header x-moz:] ] contains "prefetch" } {
          HTTP::respond 403 content "Forbidden"
       } else {
          set host_pool [findclass [HTTP::host] $::DSHostPoolMap " "]
       }
       if { $host_pool ne "" } {
          pool $host_pool
       }
    }

    Note that on every request, the $host_pool condition is being checked. It's only being set if the x-moz header check is false.

    You might want to move the $host_pool check into the else. Or you could check to see that the $host_pool variable is set and not blank using [info exists host_pool].

    You should also consider specifying what you want to happen if the [HTTP::host] value is not found in the datagroup.

    Here's an example:

    
    when HTTP_REQUEST {
       if {[string tolower [HTTP::header x-moz]] eq "prefetch" } {
          HTTP::respond 403 content "Forbidden"
       } else {
          set host_pool [findclass [string tolower [HTTP::host]] $::DSHostPoolMap " "]
          if { $host_pool ne "" } {
             pool $host_pool
          } else {
             pool default_pool
          } 
       }
    }

    Aaron