Revision 03a592b9

b/vncauthproxy/client.py
25 25
except ImportError:
26 26
    import json
27 27

  
28
CTRL_SOCKET = "/var/run/vncauthproxy/ctrl.sock"
28
DEFAULT_CTRL_SOCKET = "/var/run/vncauthproxy/ctrl.sock"
29 29

  
30 30

  
31
def request_forwarding(sport, daddr, dport, password):
32
    assert(len(password) > 0)
31
def parse_arguments(args):
32
    from optparse import OptionParser
33

  
34
    parser = OptionParser()
35
    parser.add_option("-c", "--socket", dest="ctrl_socket",
36
                      default=DEFAULT_CTRL_SOCKET,
37
                      metavar="PATH",
38
                      help=("UNIX socket for connecting to vncauthproxy "
39
                            "(default: %s)" % DEFAULT_CTRL_SOCKET))
40
    parser.add_option('-s', dest="sport",
41
                      default=0, type="int",
42
                      metavar='PORT',
43
                      help=("Use source port PORT for incoming connections "
44
                            "(default: allocate a port automatically)"))
45
    parser.add_option("-d", "--dest",
46
                      default=None, dest="daddr",
47
                      metavar="HOST",
48
                      help="Proxy connection to destination host HOST")
49
    parser.add_option("-p", "--dport", dest="dport",
50
                      default=None, type="int",
51
                      metavar="PORT",
52
                      help="Proxy connection to destination port PORT")
53
    parser.add_option("-P", "--password", dest="password",
54
                      default=None,
55
                      metavar="PASSWORD",
56
                      help=("Use password PASSWD to authenticate incoming "
57
                            "VNC connections"))
58

  
59
    (opts, args) = parser.parse_args(args)
60

  
61
    # Mandatory arguments
62
    if not opts.password:
63
        parser.error("The -P/--password argument is mandatory.")
64
    if not opts.daddr:
65
        parser.error("The -d/--dest argument is mandatory.")
66
    if not opts.dport:
67
        parser.error("The -p/--dport argument is mandatory.")
68

  
69
    return (opts, args)
70

  
71

  
72
def request_forwarding(sport, daddr, dport, password,
73
                       ctrl_socket=DEFAULT_CTRL_SOCKET):
74
    """Connect to vncauthproxy and request a VNC forwarding."""
75
    if not password:
76
        raise ValueError("You must specify a non-empty password")
77

  
33 78
    req = {
34 79
        "source_port": int(sport),
35 80
        "destination_address": daddr,
......
38 83
    }
39 84

  
40 85
    ctrl = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
41
    ctrl.connect(CTRL_SOCKET)
86
    ctrl.connect(ctrl_socket)
42 87
    ctrl.send(json.dumps(req))
43 88

  
44 89
    response = ctrl.recv(1024)
45 90
    res = json.loads(response)
46 91
    return res
47 92

  
93

  
48 94
if __name__ == '__main__':
49
    res = request_forwarding(*sys.argv[1:])
95
    (opts, args) = parse_arguments(sys.argv[1:])
96

  
97
    res = request_forwarding(sport=opts.sport, daddr=opts.daddr,
98
                             dport=opts.dport, password=opts.password,
99
                             ctrl_socket=opts.ctrl_socket)
100

  
101
    sys.stderr.write("Forwaring %s -> %s:%s: %s\n" % (res['source_port'],
102
                                                      opts.daddr, opts.dport,
103
                                                      res['status']))
104

  
50 105
    if res['status'] == "OK":
51 106
        sys.exit(0)
52 107
    else:

Also available in: Unified diff