/usr/lib/xen-4.4/bin/xencons is in xen-utils-4.4 4.4.0-0ubuntu5.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #! /usr/bin/python
##############################################
# Console client for Xen guest OSes
# Copyright (c) 2004, K A Fraser
##############################################
import errno, os, signal, socket, struct, sys
from termios import *
# Indexes into termios.tcgetattr() list.
IFLAG = 0
OFLAG = 1
CFLAG = 2
LFLAG = 3
ISPEED = 4
OSPEED = 5
CC = 6
def __child_death(signum, frame):
global stop
stop = True
def __recv_from_sock(sock):
global stop
stop = False
while not stop:
try:
data = sock.recv(1024)
except socket.error, error:
if error[0] != errno.EINTR:
raise
else:
try:
os.write(1, data)
except os.error, error:
if error[0] != errno.EINTR:
raise
os.wait()
def __send_to_sock(sock):
while 1:
try:
data = os.read(0,1024)
except os.error, error:
if error[0] != errno.EINTR:
raise
else:
if ord(data[0]) == ord(']')-64:
break
try:
sock.send(data)
except socket.error, error:
if error[0] == errno.EPIPE:
sys.exit(0)
if error[0] != errno.EINTR:
raise
sys.exit(0)
def connect(host,port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
sock.connect((host,port))
oattrs = tcgetattr(0)
nattrs = tcgetattr(0)
nattrs[IFLAG] = nattrs[IFLAG] & ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON)
nattrs[OFLAG] = nattrs[OFLAG] & ~(OPOST)
nattrs[CFLAG] = nattrs[CFLAG] & ~(CSIZE | PARENB)
nattrs[CFLAG] = nattrs[CFLAG] | CS8
nattrs[LFLAG] = nattrs[LFLAG] & ~(ECHO | ICANON | IEXTEN | ISIG)
nattrs[CC][VMIN] = 1
nattrs[CC][VTIME] = 0
if os.fork():
signal.signal(signal.SIGCHLD, __child_death)
print "************ REMOTE CONSOLE: CTRL-] TO QUIT ********"
tcsetattr(0, TCSAFLUSH, nattrs)
try:
__recv_from_sock(sock)
finally:
tcsetattr(0, TCSAFLUSH, oattrs)
print
print "************ REMOTE CONSOLE EXITED *****************"
else:
signal.signal(signal.SIGPIPE, signal.SIG_IGN)
__send_to_sock(sock)
if __name__ == '__main__':
if len(sys.argv) != 3:
print sys.argv[0] + " <host> <port>"
sys.exit(1)
connect(str(sys.argv[1]),int(sys.argv[2]))
|