docker – Rev 54

Subversion Repositories:
Rev:
#!/usr/bin/expect -f
###########################################################################
##  Copyright (C) Wizardry and Steamworks 2024 - License: MIT            ##
###########################################################################
# This is an "expect" script that checks whether tor has established a    #
# circuit and sets the return status depending on whether it has or not.  #
#                                                                         #
# In other words, iff. the script returns 0, then tor has an established  #
# circuit; otherwise no circuit has been established.                     #
#                                                                         #
# Requirements:                                                           #
#   * expect (TCL program)                                                #
#   * tor must expose a control port and must have a control password     #
#                                                                         #
# In order to generate a control password, issue: tor --hash-password PWD #
# where PWD is the desired control port password. After that, amend the   #
# tor configuration file to set the control port address, port and pass:  #
#                                                                         #
# ControlPort 0.0.0.0:8050                                                #
# HashedControlPassword 16:A482ADEAAWF43EE...                             #
#                                                                         #
# Running: ./this-script ADDRESS PORT PASSWORD                            #
# where:                                                                  #
#   * ADDRESS is the tor listening control address,                       #
#   * PORT is the tor listening control port,                             #
#   * PASSWORD is the plaintext control password                          #
#                                                                         #
# after which the return status can be checked on the shell with:         #
# echo $?                                                                 #
###########################################################################
log_user 0

set address [lindex $argv 0];
set port [lindex $argv 1];
set password [lindex $argv 2];

set timeout 1
spawn telnet $address $port

send "AUTHENTICATE \"$password\"\n"
expect {
    -ex "250 OK\r\n" {}
    -ex "515 Authentication failed: Password did not match HashedControlPassword value from configuration\r\n" {
        log_user 1
        puts "0"
        exit 1
    }
    timeout {
        log_user 1
        puts "0"
        exit 1
    }
}
send "GETINFO status/circuit-established\n"
expect {
    timeout {
        log_user 1
        puts "0"
        exit 1
    }
    -ex "250-status/circuit-established=1\r\n250 OK\r\n"
}
log_user 1
puts "100"