This file is indexed.

/usr/share/doc/pyro/examples/chatbox-non-ES/client.py is in pyro-examples 1:3.14-1.1.

This file is owned by root:root, with mode 0o644.

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
#!/usr/bin/env python

from server import CHAT_SERVER_NAME
from threading import Thread
import Pyro.core
from Pyro.errors import NamingError, ConnectionClosedError

# Chat client.
# Uses main thread for printing incoming event server messages (the chat messages!)
# and another to read user input and publish this on the chat channel.
class Chatter(Pyro.core.ObjBase):
	def __init__(self):
		Pyro.core.ObjBase.__init__(self)
		self.chatbox = Pyro.core.getProxyForURI('PYRONAME://'+CHAT_SERVER_NAME)
		self.abort=0
	def message(self, nick, msg):
		if nick!=self.nick:
			print '['+nick+'] '+msg
	def chooseChannel(self):
		nicks=self.chatbox.getNicks()
		if nicks:
			print 'The following people are on the server: ',', '.join(nicks)
		channels=self.chatbox.getChannels()
		channels.sort()
		if channels:
			print 'The following channels already exist: ',', '.join(channels)
			print
			self.channel=raw_input('Choose a channel or create a new one: ')
		else:
			print 'The server has no active channels.'
			self.channel=raw_input('Name for new channel: ')
		self.nick=raw_input('Choose a nickname: ')
		people=self.chatbox.join(self.channel,self.nick,self.getProxy())
		print 'Joined channel',self.channel,'as',self.nick
		print 'People on this channel:',', '.join(people)
		self.inputThread=Thread(target=self.handleInput)
		self.inputThread.start()
	def handleInput(self):
		print 'Ready for input! Type /quit to quit'
		# we need to get a new chatbox proxy because we're running in a different thread
		chatbox = Pyro.core.getProxyForURI('PYRONAME://'+CHAT_SERVER_NAME)
		try:
			try:
				while not self.abort:
					line=raw_input('> ')
					if line=='/quit':
						break
					if line:
						chatbox.publish(self.channel,self.nick,line)
			except EOFError:
				pass
		finally:
			chatbox.leave(self.channel, self.nick)
			self.abort=1
			print 'Bye! (from input thread)'


def main():
	Pyro.core.initServer()
	Pyro.core.initClient()
	daemon = Pyro.core.Daemon()
	ns = Pyro.naming.NameServerLocator().getNS()
	daemon.useNameServer(ns)
	
	chatter=Chatter()
	daemon.connect(chatter)
	chatter.chooseChannel()
	try:
		daemon.requestLoop(lambda: not chatter.abort)
	except KeyboardInterrupt:
		print 'Shutting down chatter... (press enter)'
		chatter.abort=1
		chatter.inputThread.join()
	print 'Exiting.'	

	
if __name__=="__main__":
	main()