Allow classes from other modules to be specified at startup. For example,
using the postfixproxy module from Spambayes you might start smtpd up like
smtpd.py -c spambayes.postfixproxy.SpambayesProxy :8025 :8026
diff --git a/Lib/smtpd.py b/Lib/smtpd.py
index 2d52f0f..6f46c97 100755
--- a/Lib/smtpd.py
+++ b/Lib/smtpd.py
@@ -533,8 +533,15 @@
print >> sys.stderr, \
'Cannot setuid "nobody"; try running with -n option.'
sys.exit(1)
- import __main__
- class_ = getattr(__main__, options.classname)
+ classname = options.classname
+ if "." in classname:
+ lastdot = classname.rfind(".")
+ mod = __import__(classname[:lastdot], globals(), locals(), [""])
+ classname = classname[lastdot+1:]
+ else:
+ import __main__ as mod
+ print mod.__name__, dir(mod)
+ class_ = getattr(mod, classname)
proxy = class_((options.localhost, options.localport),
(options.remotehost, options.remoteport))
try: