fix build of otr flavor; from maintainer Tom Doherty
This commit is contained in:
parent
994fd5e8bc
commit
324faf2eef
211
net/bitlbee/patches/patch-otr_c
Normal file
211
net/bitlbee/patches/patch-otr_c
Normal file
@ -0,0 +1,211 @@
|
||||
$OpenBSD: patch-otr_c,v 1.3 2014/01/04 16:42:46 naddy Exp $
|
||||
http://bugs.bitlbee.org/bitlbee/ticket/1004
|
||||
--- otr.c.orig Wed Nov 27 22:54:54 2013
|
||||
+++ otr.c Sat Jan 4 12:40:49 2014
|
||||
@@ -7,8 +7,8 @@
|
||||
/*
|
||||
OTR support (cf. http://www.cypherpunks.ca/otr/)
|
||||
|
||||
- (c) 2008-2011 Sven Moritz Hallberg <pesco@khjk.org>
|
||||
- (c) 2008 funded by stonedcoder.org
|
||||
+ (c) 2008-2011,2013 Sven Moritz Hallberg <pesco@khjk.org>
|
||||
+ funded by stonedcoder.org
|
||||
|
||||
files used to store OTR data:
|
||||
<configdir>/<nick>.otr_keys
|
||||
@@ -207,21 +207,30 @@ void init_plugin(void)
|
||||
otr_ops.create_privkey = &op_create_privkey;
|
||||
otr_ops.is_logged_in = &op_is_logged_in;
|
||||
otr_ops.inject_message = &op_inject_message;
|
||||
- otr_ops.notify = NULL;
|
||||
- otr_ops.display_otr_message = &op_display_otr_message;
|
||||
+ //XXX otr_ops.display_otr_message = &op_display_otr_message;
|
||||
otr_ops.update_context_list = NULL;
|
||||
- otr_ops.protocol_name = NULL;
|
||||
- otr_ops.protocol_name_free = NULL;
|
||||
otr_ops.new_fingerprint = &op_new_fingerprint;
|
||||
otr_ops.write_fingerprints = &op_write_fingerprints;
|
||||
otr_ops.gone_secure = &op_gone_secure;
|
||||
otr_ops.gone_insecure = &op_gone_insecure;
|
||||
otr_ops.still_secure = &op_still_secure;
|
||||
- otr_ops.log_message = &op_log_message;
|
||||
+ //XXX otr_ops.log_message = &op_log_message;
|
||||
otr_ops.max_message_size = &op_max_message_size;
|
||||
otr_ops.account_name = &op_account_name;
|
||||
otr_ops.account_name_free = NULL;
|
||||
-
|
||||
+
|
||||
+ /* stuff added with libotr 4.0.0 */
|
||||
+ otr_ops.received_symkey = NULL; /* we don't use the extra key */
|
||||
+ otr_ops.otr_error_message = NULL; // TODO?
|
||||
+ otr_ops.otr_error_message_free = NULL;
|
||||
+ otr_ops.resent_msg_prefix = NULL; // XXX don't need?
|
||||
+ otr_ops.resent_msg_prefix_free = NULL;
|
||||
+ otr_ops.handle_smp_event = NULL; // XXX replace smp state machine w/this
|
||||
+ otr_ops.handle_msg_event = NULL; // XXX
|
||||
+ otr_ops.create_instag = NULL; // XXX
|
||||
+ otr_ops.convert_msg = NULL; // XXX other plugins? de/htmlize?
|
||||
+ otr_ops.timer_control = NULL; // XXX call otrl_message_poll reg'ly
|
||||
+
|
||||
root_command_add( "otr", 1, cmd_otr, 0 );
|
||||
register_irc_plugin( &otr_plugin );
|
||||
}
|
||||
@@ -385,7 +394,7 @@ char *otr_filter_msg_in(irc_user_t *iu, char *msg, int
|
||||
|
||||
ignore_msg = otrl_message_receiving(irc->otr->us, &otr_ops, ic,
|
||||
ic->acc->user, ic->acc->prpl->name, iu->bu->handle, msg, &newmsg,
|
||||
- &tlvs, NULL, NULL);
|
||||
+ &tlvs, NULL, NULL, NULL);
|
||||
|
||||
otr_handle_smp(ic, iu->bu->handle, tlvs);
|
||||
|
||||
@@ -396,9 +405,11 @@ char *otr_filter_msg_in(irc_user_t *iu, char *msg, int
|
||||
/* this was a non-OTR message */
|
||||
return msg;
|
||||
} else {
|
||||
+ /* XXX move this to convert callback */
|
||||
+
|
||||
/* OTR has processed this message */
|
||||
ConnContext *context = otrl_context_find(irc->otr->us, iu->bu->handle,
|
||||
- ic->acc->user, ic->acc->prpl->name, 0, NULL, NULL, NULL);
|
||||
+ ic->acc->user, ic->acc->prpl->name, OTRL_INSTAG_MASTER, 0, NULL, NULL, NULL);
|
||||
|
||||
/* we're done with the original msg, which will be caller-freed. */
|
||||
/* NB: must not change the newmsg pointer, since we free it. */
|
||||
@@ -458,6 +469,7 @@ char *otr_filter_msg_out(irc_user_t *iu, char *msg, in
|
||||
ConnContext *ctx = NULL;
|
||||
irc_t *irc = iu->irc;
|
||||
struct im_connection *ic = iu->bu->ic;
|
||||
+ otrl_instag_t instag = OTRL_INSTAG_MASTER; // XXX?
|
||||
|
||||
/* don't do OTR on certain (not classic IM) protocols, e.g. twitter */
|
||||
if(ic->acc->prpl->options & OPT_NOOTR) {
|
||||
@@ -466,7 +478,7 @@ char *otr_filter_msg_out(irc_user_t *iu, char *msg, in
|
||||
|
||||
ctx = otrl_context_find(irc->otr->us,
|
||||
iu->bu->handle, ic->acc->user, ic->acc->prpl->name,
|
||||
- 1, NULL, NULL, NULL);
|
||||
+ instag, 1, NULL, NULL, NULL);
|
||||
|
||||
/* HTML encoding */
|
||||
/* consider OTR plaintext to be HTML if otr_does_html is set */
|
||||
@@ -477,8 +489,8 @@ char *otr_filter_msg_out(irc_user_t *iu, char *msg, in
|
||||
}
|
||||
|
||||
st = otrl_message_sending(irc->otr->us, &otr_ops, ic,
|
||||
- ic->acc->user, ic->acc->prpl->name, iu->bu->handle,
|
||||
- emsg, NULL, &otrmsg, NULL, NULL);
|
||||
+ ic->acc->user, ic->acc->prpl->name, iu->bu->handle, instag,
|
||||
+ emsg, NULL, &otrmsg, OTRL_FRAGMENT_SEND_SKIP, NULL, NULL, NULL);
|
||||
if(emsg != msg) {
|
||||
g_free(emsg); /* we're done with this one */
|
||||
}
|
||||
@@ -491,8 +503,8 @@ char *otr_filter_msg_out(irc_user_t *iu, char *msg, in
|
||||
otrl_message_free(otrmsg);
|
||||
return NULL;
|
||||
}
|
||||
- st = otrl_message_fragment_and_send(&otr_ops, ic, ctx,
|
||||
- otrmsg, OTRL_FRAGMENT_SEND_ALL, NULL);
|
||||
+ otr_ops.inject_message(ic, ctx->accountname,
|
||||
+ ctx->protocol, ctx->username, otrmsg);
|
||||
otrl_message_free(otrmsg);
|
||||
} else {
|
||||
/* note: otrl_message_sending handles policy, so that if REQUIRE_ENCRYPTION is set,
|
||||
@@ -773,19 +785,24 @@ void cmd_otr_disconnect(irc_t *irc, char **args)
|
||||
return;
|
||||
}
|
||||
|
||||
- otrl_message_disconnect(irc->otr->us, &otr_ops,
|
||||
+ /* XXX we disconnect all instances; is that what we want? */
|
||||
+ otrl_message_disconnect_all_instances(irc->otr->us, &otr_ops,
|
||||
u->bu->ic, u->bu->ic->acc->user, u->bu->ic->acc->prpl->name, u->bu->handle);
|
||||
|
||||
- /* for some reason, libotr (3.1.0) doesn't do this itself: */
|
||||
- if(u->flags & IRC_USER_OTR_ENCRYPTED) {
|
||||
- ConnContext *ctx;
|
||||
- ctx = otrl_context_find(irc->otr->us, u->bu->handle, u->bu->ic->acc->user,
|
||||
- u->bu->ic->acc->prpl->name, 0, NULL, NULL, NULL);
|
||||
- if(ctx)
|
||||
- op_gone_insecure(u->bu->ic, ctx);
|
||||
- else /* huh? */
|
||||
- u->flags &= ( IRC_USER_OTR_ENCRYPTED | IRC_USER_OTR_TRUSTED );
|
||||
+ /* for some reason, libotr (4.0.0) doesn't do this itself: */
|
||||
+ if(!(u->flags & IRC_USER_OTR_ENCRYPTED))
|
||||
+ return;
|
||||
+
|
||||
+ ConnContext *ctx, *p;
|
||||
+ ctx = otrl_context_find(irc->otr->us, u->bu->handle, u->bu->ic->acc->user,
|
||||
+ u->bu->ic->acc->prpl->name, OTRL_INSTAG_MASTER, 0, NULL, NULL, NULL);
|
||||
+ if(!ctx) { /* huh? */
|
||||
+ u->flags &= ( IRC_USER_OTR_ENCRYPTED | IRC_USER_OTR_TRUSTED );
|
||||
+ return;
|
||||
}
|
||||
+
|
||||
+ for(p=ctx; p && p->m_context == ctx->m_context; p=p->next)
|
||||
+ op_gone_insecure(u->bu->ic, p);
|
||||
}
|
||||
|
||||
void cmd_otr_connect(irc_t *irc, char **args)
|
||||
@@ -830,7 +847,7 @@ void cmd_otr_trust(irc_t *irc, char **args)
|
||||
}
|
||||
|
||||
ctx = otrl_context_find(irc->otr->us, u->bu->handle,
|
||||
- u->bu->ic->acc->user, u->bu->ic->acc->prpl->name, 0, NULL, NULL, NULL);
|
||||
+ u->bu->ic->acc->user, u->bu->ic->acc->prpl->name, OTRL_INSTAG_MASTER, 0, NULL, NULL, NULL); // XXX
|
||||
if(!ctx) {
|
||||
irc_rootmsg(irc, "%s: no otr context with user", args[1]);
|
||||
return;
|
||||
@@ -894,7 +911,7 @@ void cmd_otr_info(irc_t *irc, char **args)
|
||||
if(protocol && myhandle) {
|
||||
*(myhandle++) = '\0';
|
||||
handle = arg;
|
||||
- ctx = otrl_context_find(irc->otr->us, handle, myhandle, protocol, 0, NULL, NULL, NULL);
|
||||
+ ctx = otrl_context_find(irc->otr->us, handle, myhandle, protocol, 0, OTRL_INSTAG_MASTER, NULL, NULL, NULL); // XXX
|
||||
if(!ctx) {
|
||||
irc_rootmsg(irc, "no such context");
|
||||
g_free(arg);
|
||||
@@ -908,7 +925,7 @@ void cmd_otr_info(irc_t *irc, char **args)
|
||||
return;
|
||||
}
|
||||
ctx = otrl_context_find(irc->otr->us, u->bu->handle, u->bu->ic->acc->user,
|
||||
- u->bu->ic->acc->prpl->name, 0, NULL, NULL, NULL);
|
||||
+ u->bu->ic->acc->prpl->name, OTRL_INSTAG_MASTER, 0, NULL, NULL, NULL); // XXX
|
||||
if(!ctx) {
|
||||
irc_rootmsg(irc, "no otr context with %s", args[1]);
|
||||
g_free(arg);
|
||||
@@ -1027,7 +1044,7 @@ void cmd_otr_forget(irc_t *irc, char **args)
|
||||
}
|
||||
|
||||
ctx = otrl_context_find(irc->otr->us, u->bu->handle, u->bu->ic->acc->user,
|
||||
- u->bu->ic->acc->prpl->name, 0, NULL, NULL, NULL);
|
||||
+ u->bu->ic->acc->prpl->name, OTRL_INSTAG_MASTER, 0, NULL, NULL, NULL); // XXX
|
||||
if(!ctx) {
|
||||
irc_rootmsg(irc, "no otr context with %s", args[2]);
|
||||
return;
|
||||
@@ -1070,7 +1087,7 @@ void cmd_otr_forget(irc_t *irc, char **args)
|
||||
}
|
||||
|
||||
ctx = otrl_context_find(irc->otr->us, u->bu->handle, u->bu->ic->acc->user,
|
||||
- u->bu->ic->acc->prpl->name, 0, NULL, NULL, NULL);
|
||||
+ u->bu->ic->acc->prpl->name, OTRL_INSTAG_MASTER, 0, NULL, NULL, NULL); // XXX
|
||||
if(!ctx) {
|
||||
irc_rootmsg(irc, "no otr context with %s", args[2]);
|
||||
return;
|
||||
@@ -1133,7 +1150,7 @@ void otr_handle_smp(struct im_connection *ic, const ch
|
||||
bu = bee_user_by_handle(ic->bee, ic, handle);
|
||||
if(!bu || !(u = bu->ui_data)) return;
|
||||
context = otrl_context_find(us, handle,
|
||||
- ic->acc->user, ic->acc->prpl->name, 1, NULL, NULL, NULL);
|
||||
+ ic->acc->user, ic->acc->prpl->name, OTRL_INSTAG_MASTER, 1, NULL, NULL, NULL);
|
||||
if(!context) {
|
||||
/* huh? out of memory or what? */
|
||||
irc_rootmsg(irc, "smp: failed to get otr context for %s", u->nick);
|
||||
@@ -1265,7 +1282,7 @@ void otr_smp_or_smpq(irc_t *irc, const char *nick, con
|
||||
}
|
||||
|
||||
ctx = otrl_context_find(irc->otr->us, u->bu->handle,
|
||||
- u->bu->ic->acc->user, u->bu->ic->acc->prpl->name, 0, NULL, NULL, NULL);
|
||||
+ u->bu->ic->acc->user, u->bu->ic->acc->prpl->name, OTRL_INSTAG_MASTER, 0, NULL, NULL, NULL);
|
||||
if(!ctx || ctx->msgstate != OTRL_MSGSTATE_ENCRYPTED) {
|
||||
irc_rootmsg(irc, "smp: otr inactive with %s, try \x02otr connect"
|
||||
" %s\x02", nick, nick);
|
Loading…
Reference in New Issue
Block a user