[Twisted-Python] Newbie: using cred strcred.AuthOptionMixin
Schneider
f.schneider at de-bleek.demon.nl
Tue Jul 6 05:31:13 MDT 2010
Hi,
I need a perspective broker with authentification and followed the Twisted
documentation on
http://twistedmatrix.com/documents/current/core/howto/tap.html#auto4 to get
the twistd plugin to work. Now I want to make it work with the /etc/shadow,
but don't know how to get it to work.
The plugin looks like:
-----------------------------------------------------------------------
from zope.interface import implements
from twisted.python import usage
from twisted.plugin import IPlugin
from twisted.application.service import IServiceMaker from
twisted.application import internet from twisted.cred import credentials,
portal, strcred from twisted.spread import pb
from qxmt.QXMTServer import QXMTUser
class Options(usage.Options, strcred.AuthOptionMixin):
# This part is optional; it tells AuthOptionMixin what
# kinds of credential interfaces the user can give us.
supportedInterfaces = (credentials.IUsernamePassword,)
optParameters = [["port", "p", 8789, "Server port number"]]
class QXMTRealm:
implements(portal.IRealm)
def requestAvatar(self, avatarId, mind, *interfaces):
if pb.IPerspective not in interfaces:
raise NotImplementedError
return pb.IPerspective, QXMTUser(avatarId), lambda: None
class QXMTServiceMaker(object):
implements(IServiceMaker, IPlugin)
tapname = "qxmt"
description = "The QXtend remote error processing tool."
options = Options
def makeService(self, options):
"""
Construct a TCPServer from a factory defined in qxmt.
"""
p = portal.Portal(QXMTRealm(), options["credCheckers"])
#c = checkers.InMemoryUsernamePasswordDatabaseDontUse(user1="pass1",
#p.registerChecker(c)
return internet.TCPServer(int(options['port']),
pb.PBServerFactory(p))
serviceMaker = QXMTServiceMaker()
-----------------------------------------------------------------------
Running twistd qxmt --help-auth gives
Usage: --auth AuthType[:ArgString]
For detailed help: --help-auth-type AuthType
AuthType ArgString format
======== ================
memory A colon-separated list (name:password:...)
file Location of a FilePasswordDB-formatted file.
unix No argstring required.
And twistd qxmt --help-auth-type unix gives
Usage: --auth unix[:ArgString]
ArgString format: No argstring required.
This checker will attempt to use every resource available to
authenticate against the list of users on the local UNIX system.
(This does not support Windows servers for very obvious reasons.)
Right now, this includes support for:
* Python's pwd module (which checks /etc/passwd)
* Python's spwd module (which checks /etc/shadow)
Future versions may include support for PAM authentication.
So, I guess the server now should be able to use the system's shadow
passwords for authentification.
As a client I used with the InMemoryUsernamePasswordDatabaseDontUse checker
the following code.
-----------------------------------------------------------------------
#!/usr/bin/env python
# Copyright (c) 2009 Twisted Matrix Laboratories.
# See LICENSE for details.
from twisted.spread import pb
from twisted.internet import reactor
from twisted.cred import credentials
def main():
factory = pb.PBClientFactory()
reactor.connectTCP("localhost", 8789, factory)
def1 = factory.login(credentials.UsernamePassword("user1", "pass1"))
def1.addCallback(connected)
reactor.run()
def connected(perspective):
print "got perspective1 ref:", perspective
print "asking it to foo(13)"
perspective.callRemote("foo", 13)
main()
-----------------------------------------------------------------------
How to rewrite the client to make it work with --auth=unix ?
Thanks,
Frans
More information about the Twisted-Python
mailing list