Reputation: 681
I have searched about how to create Openfire account in Python and found the following answer.
I tried given by Joe Hildebrand
and run the code at the machine running Openfire 3.8.1 with
python register.py foo@localhost bar
to create an account.
However, I get "Error!" message.
Is there anything I missed?
Edit
After deleting the , debug[]
and trying again, I got the following message:
Invalid debugflag given: always
Invalid debugflag given: nodebuilder
DEBUG:
DEBUG: Debug created for /usr/local/lib/python2.7/dist-packages/xmpppy-0.5.0rc1-py2.7.egg/xmpp/client.py
DEBUG: flags defined: always,nodebuilder
DEBUG: socket start Plugging <xmpp.transports.TCPsocket instance at 0x19991b8> into <xmpp.client.Client instance at 0x1988fc8>
DEBUG: socket warn An error occurred while looking up _xmpp-client._tcp.localhost
DEBUG: socket start Successfully connected to remote host ('localhost', 5222)
DEBUG: dispatcher start Plugging <xmpp.dispatcher.Dispatcher instance at 0x199b2d8> into <xmpp.client.Client instance at 0x1988fc8>
DEBUG: dispatcher info Registering namespace "unknown"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(unknown)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(unknown)
DEBUG: dispatcher info Registering namespace "http://etherx.jabber.org/streams"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: dispatcher info Registering namespace "jabber:client"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(jabber:client)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(jabber:client)
DEBUG: dispatcher info Registering protocol "iq" as <class 'xmpp.protocol.Iq'>(jabber:client)
DEBUG: dispatcher info Registering protocol "presence" as <class 'xmpp.protocol.Presence'>(jabber:client)
DEBUG: dispatcher info Registering protocol "message" as <class 'xmpp.protocol.Message'>(jabber:client)
DEBUG: dispatcher info Registering handler <bound method Dispatcher.streamErrorHandler of <xmpp.dispatcher.Dispatcher instance at 0x199b2d8>> for "error" type-> ns->(http://etherx.jabber.org/streams)
DEBUG: dispatcher warn Registering protocol "error" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: socket sent <?xml version='1.0'?>
<stream:stream xmlns="jabber:client" to="localhost" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" >
DEBUG: socket got <?xml version='1.0' encoding='UTF-8'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="mymachine" id="1724a327" xml:lang="en" version="1.0">
DEBUG: socket got <stream:features>
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls">
</starttls>
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth"/>
<register xmlns="http://jabber.org/features/iq-register"/>
</stream:features>
DEBUG: dispatcher warn Unknown stanza: features
DEBUG: dispatcher ok Dispatching unknown stanza with type-> props->[u'urn:ietf:params:xml:ns:xmpp-tls', u'urn:ietf:params:xml:ns:xmpp-sasl', u'http://jabber.org/features/compress', u'http://jabber.org/features/iq-auth', u'http://jabber.org/features/iq-register'] id->None
DEBUG: tls start Plugging <xmpp.transports.TLS instance at 0x199b908> into <xmpp.client.Client instance at 0x1988fc8>
DEBUG: tls ok TLS supported by remote server. Requesting TLS start.
DEBUG: dispatcher info Registering handler <bound method TLS.StartTLSHandler of <xmpp.transports.TLS instance at 0x199b908>> for "proceed" type-> ns->(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: dispatcher warn Registering namespace "urn:ietf:params:xml:ns:xmpp-tls"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: dispatcher warn Registering protocol "proceed" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: dispatcher info Registering handler <bound method TLS.StartTLSHandler of <xmpp.transports.TLS instance at 0x199b908>> for "failure" type-> ns->(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: dispatcher warn Registering protocol "failure" as <class 'xmpp.protocol.Protocol'>(urn:ietf:params:xml:ns:xmpp-tls)
DEBUG: socket sent <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
DEBUG: socket got <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
DEBUG: dispatcher ok Got urn:ietf:params:xml:ns:xmpp-tls/proceed stanza
DEBUG: dispatcher ok Dispatching proceed stanza with type-> props->[] id->None
DEBUG: tls ok Got starttls proceed response. Switching to TLS/SSL...
DEBUG: dispatcher stop Plugging <xmpp.dispatcher.Dispatcher instance at 0x199b2d8> out of <xmpp.client.Client instance at 0x1988fc8>.
DEBUG: dispatcher start Plugging <xmpp.dispatcher.Dispatcher instance at 0x19a4560> into <xmpp.client.Client instance at 0x1988fc8>
DEBUG: dispatcher info Registering namespace "unknown"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(unknown)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(unknown)
DEBUG: dispatcher info Registering namespace "http://etherx.jabber.org/streams"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: dispatcher info Registering namespace "jabber:client"
DEBUG: dispatcher info Registering protocol "unknown" as <class 'xmpp.protocol.Protocol'>(jabber:client)
DEBUG: dispatcher info Registering protocol "default" as <class 'xmpp.protocol.Protocol'>(jabber:client)
DEBUG: dispatcher info Registering protocol "iq" as <class 'xmpp.protocol.Iq'>(jabber:client)
DEBUG: dispatcher info Registering protocol "presence" as <class 'xmpp.protocol.Presence'>(jabber:client)
DEBUG: dispatcher info Registering protocol "message" as <class 'xmpp.protocol.Message'>(jabber:client)
DEBUG: dispatcher info Registering handler <bound method Dispatcher.streamErrorHandler of <xmpp.dispatcher.Dispatcher instance at 0x19a4560>> for "error" type-> ns->(http://etherx.jabber.org/streams)
DEBUG: dispatcher warn Registering protocol "error" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: socket sent <?xml version='1.0'?>
<stream:stream xmlns="jabber:client" to="localhost" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" >
DEBUG: socket sent <iq to="localhost" type="get" id="1">
<query xmlns="jabber:iq:register" />
</iq>
DEBUG: dispatcher wait Waiting for ID:1 with timeout 25...
DEBUG: socket got <?xml version='1.0' encoding='UTF-8'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="mymachine" id="1724a327" xml:lang="en" version="1.0">
<stream:features>
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth"/>
<register xmlns="http://jabber.org/features/iq-register"/>
</stream:features>
DEBUG: dispatcher warn Unknown stanza: features
DEBUG: dispatcher ok Dispatching unknown stanza with type-> props->[u'urn:ietf:params:xml:ns:xmpp-sasl', u'http://jabber.org/features/compress', u'http://jabber.org/features/iq-auth', u'http://jabber.org/features/iq-register'] id->None
DEBUG: socket got <iq type="error" id="1" from="localhost" to="mymachine/1724a327">
<query xmlns="jabber:iq:register"/>
<error code="400" type="modify">
<bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
DEBUG: dispatcher ok Got jabber:client/iq stanza
DEBUG: dispatcher ok Dispatching iq stanza with type->error props->[u'jabber:iq:register', u'jabber:client'] id->1
DEBUG: dispatcher ok Expected stanza arrived!
DEBUG: socket sent <iq to="localhost" type="set" id="2">
<query xmlns="jabber:iq:register">
<username>foo</username>
<password>bar</password>
</query>
</iq>
DEBUG: dispatcher wait Waiting for ID:2 with timeout 25...
DEBUG: socket got <iq type="error" id="2" from="localhost" to="mymachine/1724a327">
<query xmlns="jabber:iq:register">
<username>foo</username>
<password>bar</password>
</query>
<error code="400" type="modify">
<bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
DEBUG: dispatcher ok Got jabber:client/iq stanza
DEBUG: dispatcher ok Dispatching iq stanza with type->error props->[u'jabber:iq:register', u'jabber:client'] id->2
DEBUG: dispatcher ok Expected stanza arrived!
Error!
Upvotes: 0
Views: 1312
Reputation: 10414
The most common errors, assuming you're getting connected, is that the user already exists, or that the server doesn't support registration.
However, your error trace above show you getting an error 400
, not a 403
or 409
. 403
would mean that registration was turned off, and 409
would mean that the user already exists.
I was able to replicate your problem with OpenFire 3.8.1 by sending to an invalid JID. When you configured OpenFire, you specify a domain. That domain MUST be in the JID you specify on the command line to the Python script. For example, I specified "localhost
" when configuring. When I used "foo@mymachine
" instead of "foo@localhost
", I got the 400 error. If you need the domain to be different from the machine name (quite common), then either use a DNS SRV record (see RFC 6120, section 3.2), or change the Python code so that this line:
cli=xmpp.Client(jid.getDomain())
Looks like this:
cli=xmpp.Client("hostname")
The latter is a quick hack, but should get you up and running.
Upvotes: 1