This file is indexed.

/usr/bin/phenny is in phenny 2~hg28-2.

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
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#!/usr/bin/env python
"""
phenny - An IRC Bot
Copyright 2008, Sean B. Palmer, inamidst.com
Licensed under the Eiffel Forum License 2.

http://inamidst.com/phenny/

Note: DO NOT EDIT THIS FILE.
Run ./phenny, then edit ~/.phenny/default.py
Then run ./phenny again
"""

import sys, os, imp, optparse
from os import path
from textwrap import dedent as trim

dotdir = os.path.expanduser('~/.phenny')

def check_python_version(): 
   if sys.version_info < (2, 4): 
      error = 'Error: Requires Python 2.4 or later, from www.python.org'
      print >> sys.stderr, error
      sys.exit(1)

def create_default_config(fn): 
   f = open(fn, 'w')
   print >> f, trim("""\
   nick = "phenny"
   host = "irc.example.net"
   # password = "password"
   channels = ["#example", "#test"]
   owner = "your-nick"

   # people allowed to use admin.py functions
   admins = [owner, "other-nick"]

   # for available modules see /usr/share/python-support/phenny/phenny/modules

   # exclude modules
   exclude = ["admin"]

   # enable specific modules, trumps exclude
   # enable = []

   # extra modules to load by filename
   # extra = ["~/.phenny/example-a.py", "~/.phenny/example-b.py"]

   # limit modules in specific channels
   # limit = {"#channel": ["module-a", "module-b"]}
   """)
   f.close()

def create_dotdir(dotdir): 
   print 'Creating a config directory at ~/.phenny...'
   try: os.mkdir(dotdir)
   except Exception, e: 
      print >> sys.stderr, 'There was a problem creating %s:' % dotdir
      print >> sys.stderr, e.__class__, str(e)
      print >> sys.stderr, 'Please fix this and then run phenny again.'
      sys.exit(1)

   print 'Creating a default config file at ~/.phenny/default.py...'
   default = os.path.join(dotdir, 'default.py')
   create_default_config(default)

   print 'Done; now you can edit default.py, and run phenny! Enjoy.'
   sys.exit(0)

def check_dotdir(): 
   if not os.path.isdir(dotdir): 
      create_dotdir(dotdir)

def config_names(config): 
   config = config or 'default'

   def files(d): 
      names = os.listdir(d)
      return list(os.path.join(d, fn) for fn in names if fn.endswith('.py'))

   here = os.path.join('.', config)
   if os.path.isfile(here): 
      return [here]
   if os.path.isfile(here + '.py'): 
      return [here + '.py']
   if os.path.isdir(here): 
      return files(here)

   there = os.path.join(dotdir, config)
   if os.path.isfile(there): 
      return [there]
   if os.path.isfile(there + '.py'): 
      return [there + '.py']
   if os.path.isdir(there): 
      return files(there)

   print >> sys.stderr, "Error: Couldn't find a config file!"
   print >> sys.stderr, 'What happened to ~/.phenny/default.py?'
   sys.exit(1)

def main(argv=None): 
   # Step One: Check Dependencies

   check_python_version() # require python2.4 or later

   # Step Two: Parse The Command Line

   def display_error(message):
      print >> sys.stderr, message
      print >> sys.stderr
      print >> sys.stderr, "Try `phenny -h' for more information."
      sys.exit(1)

   verbose = False
   config = None
   for key, arg in enumerate(sys.argv[1:]):
       if arg == "-h" or arg == "--help":
           print """Usage: phenny [OPTION]...

Options:

  -h, --help           display a short help message and exit
  -V, --version        display version information and exit
  -v, --verbose        display extended startup information
  -c, --config CONFIG  use CONFIG as the configuration file or directory

Examples:

To start using Phenny run the phenny command:

  phenny

Edit the default files created in your home directory:

  sensible-editor ~/.phenny/default.py

You can now start Phenny and try out your configuration:

  phenny

If you want to start Phenny as a background process you might run:

  nohup phenny 2> ~/.phenny/log.txt &

Report bugs using the `reportbug phenny' command."""
           sys.exit(0)
       elif arg == "-V" or arg == "--version":
           print """phenny - Phenny

Copyright 2008, Sean B. Palmer <http://inamidst.com/sbp/>

Licensed under the Eiffel Forum License 2.

Written by Sean B. Palmer <http://inamidst.com/sbp/>."""
           sys.exit(0)
       elif arg == "-v" or arg == "--verbose":
          verbose = True
       elif arg == "-c" or arg == "--config":
          config = sys.argv[key + 2]
          if not path.exists(config):
             display_error("The file or directory does not exist: %s" % config)
       elif arg.startswith("-"):
          display_error("Unknown option: %s" % arg)
       else:
          display_error("Unknown argument: %s" % arg)

   check_dotdir() # require ~/.phenny, or make it and exit

   # Step Three: Load The Configurations

   config_modules = []
   for config_name in config_names(config): 
      name = os.path.basename(config_name).split('.')[0] + '_config'
      module = imp.load_source(name, config_name)
      module.filename = config_name

      if not hasattr(module, 'prefix'): 
         module.prefix = r'\.'

      if not hasattr(module, 'name'): 
         module.name = 'Phenny Palmersbot, http://inamidst.com/phenny/'

      if not hasattr(module, 'port'): 
         module.port = 6667

      if module.host == 'irc.example.net': 
         error = ('Error: you must edit the config file first!\n' + 
                  "You're currently using %s" % module.filename)
         print >> sys.stderr, error
         sys.exit(1)

      config_modules.append(module)

   # Step Four: Load Phenny

   try: from __init__ import run
   except ImportError: 
      try: from phenny import run
      except ImportError: 
         print >> sys.stderr, "Error: Couldn't find phenny to import"
         sys.exit(1)

   # Step Five: Initialise And Run The Phennies

   # @@ ignore SIGHUP
   for config_module in config_modules: 
      run(config_module, verbose) # @@ thread this

if __name__ == '__main__': 
   main()