Store otr_userstates at the right place and create it the right way.
This fixes the crash when creating a new account, which made Gajim unusable on systems where it never ran before.
This commit is contained in:
parent
04725e830c
commit
4eeb96368b
8 changed files with 42 additions and 39 deletions
|
@ -63,6 +63,10 @@
|
|||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||
*/
|
||||
#undef LT_OBJDIR
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
|
|
|
@ -1208,7 +1208,7 @@ class ChatControl(ChatControlBase):
|
|||
|
||||
def update_otr(self, print_status=False):
|
||||
# retrieve the OTR context from the chat's contact data
|
||||
ctx = gajim.otr_module.otrl_context_find(gajim.otr_userstates[self.account],
|
||||
ctx = gajim.otr_module.otrl_context_find(gajim.connections[self.account].otr_userstates,
|
||||
self.contact.get_full_jid().encode(),
|
||||
gajim.get_jid_from_account(self.account).encode(), gajim.OTR_PROTO, 1,
|
||||
(gajim.otr_add_appdata, self.account))[0]
|
||||
|
@ -1851,7 +1851,7 @@ class ChatControl(ChatControlBase):
|
|||
self._on_smp_otr_menuitem_activate)
|
||||
self.handlers[id] = smp_otr_menuitem
|
||||
|
||||
ctx = gajim.otr_module.otrl_context_find(gajim.otr_userstates[self.account],
|
||||
ctx = gajim.otr_module.otrl_context_find(gajim.connections[self.account].otr_userstates,
|
||||
self.contact.get_full_jid().encode(),
|
||||
gajim.get_jid_from_account(self.account).encode(), gajim.OTR_PROTO, 1,
|
||||
(gajim.otr_add_appdata, self.account))[0]
|
||||
|
@ -2349,7 +2349,7 @@ class ChatControl(ChatControlBase):
|
|||
MessageControl.send_message(self, u"?OTR?", type="chat")
|
||||
def _on_end_otr_menuitem_activate(self, widget):
|
||||
fjid = self.contact.get_full_jid()
|
||||
gajim.otr_module.otrl_message_disconnect(gajim.otr_userstates[self.account],
|
||||
gajim.otr_module.otrl_message_disconnect(gajim.connections[self.account].otr_userstates,
|
||||
(gajim.otr_ui_ops, {'account':self.account,'urgent':True}),
|
||||
gajim.get_jid_from_account(self.account).encode(), gajim.OTR_PROTO,
|
||||
fjid.encode())
|
||||
|
@ -2359,7 +2359,7 @@ class ChatControl(ChatControlBase):
|
|||
def _on_otr_settings_menuitem_activate(self, widget):
|
||||
gajim.otr_windows.ContactOtrWindow(self.contact, self.account, self)
|
||||
def _on_smp_otr_menuitem_activate(self, widget):
|
||||
ctx = gajim.otr_module.otrl_context_find(gajim.otr_userstates[self.account],
|
||||
ctx = gajim.otr_module.otrl_context_find(gajim.connections[self.account].otr_userstates,
|
||||
self.contact.get_full_jid().encode(),
|
||||
gajim.get_jid_from_account(self.account).encode(), gajim.OTR_PROTO, 1,
|
||||
(gajim.otr_add_appdata, self.account))[0]
|
||||
|
|
|
@ -164,6 +164,26 @@ class Connection(ConnectionHandlers):
|
|||
# server {'icq': ['icq.server.com', 'icq2.server.com'], }
|
||||
self.vcard_supported = True
|
||||
self.private_storage_supported = True
|
||||
|
||||
if gajim.otr_module:
|
||||
self.otr_userstates = gajim.otr_module.otrl_userstate_create()
|
||||
|
||||
try:
|
||||
gajim.otr_module.otrl_privkey_read(self.otr_userstates,
|
||||
os.path.join(gajimpaths.root,
|
||||
'%s.key' % self.name).encode())
|
||||
except Exception, e:
|
||||
if hasattr(e, 'os_errno') and e.os_errno == 2:
|
||||
pass
|
||||
|
||||
try:
|
||||
gajim.otr_module.otrl_privkey_read_fingerprints(
|
||||
self.otr_userstates, os.path.join(
|
||||
gajimpaths.root, '%s.fpr' % self.name
|
||||
).encode(), (add_appdata, a))
|
||||
except Exception, e:
|
||||
if hasattr(e, 'os_errno') and e.os_errno == 2:
|
||||
pass
|
||||
# END __init__
|
||||
|
||||
def put_event(self, ev):
|
||||
|
|
|
@ -1680,7 +1680,7 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
|
|||
|
||||
if gajim.otr_module and isinstance(msgtxt, unicode):
|
||||
otr_msg_tuple = gajim.otr_module.otrl_message_receiving(
|
||||
gajim.otr_userstates[self.name],
|
||||
gajim.connections[self.name].otr_userstates,
|
||||
(gajim.otr_ui_ops, {'account':self.name}),
|
||||
gajim.get_jid_from_account(self.name).encode(),
|
||||
gajim.OTR_PROTO, frm.encode(), msgtxt.encode(),
|
||||
|
@ -1699,7 +1699,7 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
|
|||
if ctrl:
|
||||
ctrl.update_ui()
|
||||
|
||||
ctx = gajim.otr_module.otrl_context_find(gajim.otr_userstates[self.name], frm.encode(),
|
||||
ctx = gajim.otr_module.otrl_context_find(gajim.connections[self.name].otr_userstates, frm.encode(),
|
||||
gajim.get_jid_from_account(self.name).encode(), gajim.OTR_PROTO, 1,
|
||||
(gajim.otr_add_appdata, self.name))[0]
|
||||
tlvs = otr_msg_tuple[2]
|
||||
|
|
23
src/gajim.py
23
src/gajim.py
|
@ -319,7 +319,7 @@ class OtrlMessageAppOps:
|
|||
while gtk.events_pending():
|
||||
gtk.main_iteration(block=False)
|
||||
|
||||
otr.otrl_privkey_generate(gajim.otr_userstates[opdata['account']],
|
||||
otr.otrl_privkey_generate(gajim.connections[opdata['account']].otr_userstates,
|
||||
os.path.join(gajimpaths.root, "%s.key"%opdata['account']).encode(),
|
||||
accountname, gajim.OTR_PROTO)
|
||||
permlabel.set_text("Generating a private key for %s...\ndone."%accountname)
|
||||
|
@ -371,7 +371,7 @@ class OtrlMessageAppOps:
|
|||
otr.otrl_privkey_hash_to_human(fingerprint)), opdata['account'], username)
|
||||
|
||||
def write_fingerprints(self, opdata=""):
|
||||
otr.otrl_privkey_write_fingerprints(gajim.otr_userstates[opdata['account']],
|
||||
otr.otrl_privkey_write_fingerprints(gajim.connections[opdata['account']].otr_userstates,
|
||||
os.path.join(gajimpaths.root, "%s.fpr"%opdata['account']).encode())
|
||||
|
||||
def gone_secure(self, opdata="", context=None):
|
||||
|
@ -3326,25 +3326,6 @@ class Interface:
|
|||
gajim.status_before_autoaway[a] = ''
|
||||
gajim.transport_avatar[a] = {}
|
||||
|
||||
if gajim.otr_module:
|
||||
gajim.otr_userstates[a] = otr.otrl_userstate_create()
|
||||
try:
|
||||
otr.otrl_privkey_read(gajim.otr_userstates[a],
|
||||
os.path.join(gajimpaths.root, "%s.key"%a).encode())
|
||||
except Exception, e:
|
||||
if hasattr(e,"os_errno") and e.os_errno == 2:
|
||||
print "didn't find otr keyfile "+ \
|
||||
(os.path.join(gajimpaths.root, "%s.key"%a).encode())
|
||||
pass
|
||||
try:
|
||||
otr.otrl_privkey_read_fingerprints(gajim.otr_userstates[a],
|
||||
os.path.join(gajimpaths.root, "%s.fpr"%a).encode(), (add_appdata, a))
|
||||
except Exception, e:
|
||||
if hasattr(e,"os_errno") and e.os_errno == 2:
|
||||
print "didn't find otr fingerprint file "+ \
|
||||
(os.path.join(gajimpaths.root, "%s.fpr"%a).encode())
|
||||
pass
|
||||
|
||||
if gajim.config.get('remote_control'):
|
||||
try:
|
||||
import remote_control
|
||||
|
|
|
@ -160,19 +160,17 @@ class MessageControl:
|
|||
'original_message':original_message}, 'account':self.account}
|
||||
|
||||
new_msg = gajim.otr_module.otrl_message_sending(
|
||||
gajim.otr_userstates[self.account],
|
||||
gajim.connections[self.account].otr_userstates,
|
||||
(gajim.otr_ui_ops, d),
|
||||
gajim.get_jid_from_account(self.account).encode(), gajim.OTR_PROTO,
|
||||
self.contact.get_full_jid().encode(), message.encode(), None)
|
||||
|
||||
context = gajim.otr_module.otrl_context_find(
|
||||
gajim.otr_userstates[self.account],
|
||||
gajim.connections[self.account].otr_userstates,
|
||||
self.contact.get_full_jid().encode(),
|
||||
gajim.get_jid_from_account(self.account).encode(),
|
||||
gajim.OTR_PROTO, 1)[0]
|
||||
|
||||
print repr(context.accountname), repr(context.username)
|
||||
|
||||
# we send all because inject_message can filter on HTML stuff then
|
||||
gajim.otr_module.otrl_message_fragment_and_send(
|
||||
(gajim.otr_ui_ops, d),
|
||||
|
|
|
@ -49,7 +49,7 @@ class ContactOtrSMPWindow:
|
|||
self.contact.get_full_jid())
|
||||
|
||||
self.ctx = gajim.otr_module.otrl_context_find(
|
||||
gajim.otr_userstates[self.account],
|
||||
gajim.connections[self.account].otr_userstates,
|
||||
self.fjid.encode(), gajim.get_jid_from_account(self.account).encode(),
|
||||
gajim.OTR_PROTO, 1, (gajim.otr_add_appdata, self.account))[0]
|
||||
|
||||
|
@ -79,7 +79,7 @@ class ContactOtrSMPWindow:
|
|||
|
||||
def _abort(self, text=None):
|
||||
self.smp_running = False
|
||||
gajim.otr_module.otrl_message_abort_smp(gajim.otr_userstates[self.account],
|
||||
gajim.otr_module.otrl_message_abort_smp(gajim.connections[self.account].otr_userstates,
|
||||
(gajim.otr_ui_ops, {'account':self.account}), self.ctx)
|
||||
if text:
|
||||
gajim.otr_ui_ops.gajim_log(text, self.account, self.contact.get_full_jid())
|
||||
|
@ -152,10 +152,10 @@ class ContactOtrSMPWindow:
|
|||
return
|
||||
secret = self.gw("secret_entry").get_text()
|
||||
if self.response:
|
||||
gajim.otr_module.otrl_message_respond_smp(gajim.otr_userstates[self.account],
|
||||
gajim.otr_module.otrl_message_respond_smp(gajim.connections[self.account].otr_userstates,
|
||||
(gajim.otr_ui_ops, {'account':self.account}), self.ctx, secret)
|
||||
else:
|
||||
gajim.otr_module.otrl_message_initiate_smp(gajim.otr_userstates[self.account],
|
||||
gajim.otr_module.otrl_message_initiate_smp(gajim.connections[self.account].otr_userstates,
|
||||
(gajim.otr_ui_ops, {'account':self.account}), self.ctx, secret)
|
||||
self.gw("progressbar").set_fraction(0.3)
|
||||
self.smp_running = True
|
||||
|
@ -174,7 +174,7 @@ class ContactOtrWindow:
|
|||
self.ctrl = ctrl
|
||||
|
||||
self.ctx = gajim.otr_module.otrl_context_find(
|
||||
gajim.otr_userstates[self.account],
|
||||
gajim.connections[self.account].otr_userstates,
|
||||
self.contact.get_full_jid().encode(),
|
||||
gajim.get_jid_from_account(self.account).encode(),
|
||||
gajim.OTR_PROTO, 1, (gajim.otr_add_appdata, self.account))[0]
|
||||
|
@ -193,7 +193,7 @@ class ContactOtrWindow:
|
|||
# always set the label containing our fingerprint
|
||||
self.gw("our_fp_label").set_markup(our_fp_text%
|
||||
gajim.otr_module.otrl_privkey_fingerprint(
|
||||
gajim.otr_userstates[self.account],
|
||||
gajim.connections[self.account].otr_userstates,
|
||||
gajim.get_jid_from_account(self.account).encode(),
|
||||
gajim.OTR_PROTO))
|
||||
|
||||
|
|
|
@ -1776,11 +1776,11 @@ class RosterWindow:
|
|||
# disconnect from ENCRYPTED OTR contexts when going
|
||||
# offline/invisible
|
||||
if status == 'offline' or status == 'invisible':
|
||||
ctx = gajim.otr_userstates[account].context_root
|
||||
ctx = gajim.connections[account].otr_userstates.context_root
|
||||
while ctx is not None:
|
||||
if ctx.msgstate == gajim.otr_module.OTRL_MSGSTATE_ENCRYPTED:
|
||||
disconnected = True
|
||||
gajim.otr_module.otrl_message_disconnect(gajim.otr_userstates[account],
|
||||
gajim.otr_module.otrl_message_disconnect(gajim.connections[account].otr_userstates,
|
||||
(gajim.otr_ui_ops,
|
||||
{'account':account,'urgent':True}), ctx.accountname,
|
||||
ctx.protocol, ctx.username)
|
||||
|
|
Loading…
Add table
Reference in a new issue