mirror of
https://github.com/TakeV-Lambda/dino.git
synced 2024-11-22 15:04:37 +00:00
Fix segfault on accept_certificate signal (fixup 81a5505
)
This commit is contained in:
parent
c7b242a72e
commit
2c22c0428c
6 changed files with 16 additions and 16 deletions
|
@ -197,7 +197,7 @@ public class ConnectionManager : Object {
|
|||
|
||||
change_connection_state(account, ConnectionState.CONNECTING);
|
||||
stream_result = yield Xmpp.establish_stream(account.bare_jid, module_manager.get_modules(account, resource), log_options,
|
||||
(_, peer_cert, errors) => { return on_invalid_certificate(account.domainpart, peer_cert, errors); }
|
||||
(peer_cert, errors) => { return on_invalid_certificate(account.domainpart, peer_cert, errors); }
|
||||
);
|
||||
connections[account].stream = stream_result.stream;
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ public class Register : StreamInteractionModule, Object{
|
|||
list.add(new Sasl.Module(account.bare_jid.to_string(), account.password));
|
||||
|
||||
XmppStreamResult stream_result = yield Xmpp.establish_stream(account.bare_jid.domain_jid, list, Application.print_xmpp,
|
||||
(_, peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(account.domainpart, peer_cert, errors); }
|
||||
(peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(account.domainpart, peer_cert, errors); }
|
||||
);
|
||||
|
||||
if (stream_result.stream == null) {
|
||||
|
@ -83,7 +83,7 @@ public class Register : StreamInteractionModule, Object{
|
|||
list.add(new Iq.Module());
|
||||
|
||||
XmppStreamResult stream_result = yield Xmpp.establish_stream(jid.domain_jid, list, Application.print_xmpp,
|
||||
(_, peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(jid.domainpart, peer_cert, errors); }
|
||||
(peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(jid.domainpart, peer_cert, errors); }
|
||||
);
|
||||
|
||||
if (stream_result.stream == null) {
|
||||
|
@ -137,7 +137,7 @@ public class Register : StreamInteractionModule, Object{
|
|||
list.add(new Xep.InBandRegistration.Module());
|
||||
|
||||
XmppStreamResult stream_result = yield Xmpp.establish_stream(jid.domain_jid, list, Application.print_xmpp,
|
||||
(_, peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(jid.domainpart, peer_cert, errors); }
|
||||
(peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(jid.domainpart, peer_cert, errors); }
|
||||
);
|
||||
|
||||
if (stream_result.stream == null) {
|
||||
|
@ -188,7 +188,7 @@ public class Register : StreamInteractionModule, Object{
|
|||
list.add(new Xep.InBandRegistration.Module());
|
||||
|
||||
XmppStreamResult stream_result = yield Xmpp.establish_stream(jid.domain_jid, list, Application.print_xmpp,
|
||||
(_, peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(jid.domainpart, peer_cert, errors); }
|
||||
(peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(jid.domainpart, peer_cert, errors); }
|
||||
);
|
||||
|
||||
if (stream_result.stream == null) {
|
||||
|
|
|
@ -4,11 +4,11 @@ public class Xmpp.DirectTlsXmppStream : TlsXmppStream {
|
|||
uint16 port;
|
||||
TlsXmppStream.OnInvalidCert on_invalid_cert_outer;
|
||||
|
||||
public DirectTlsXmppStream(Jid remote_name, string host, uint16 port, TlsXmppStream.OnInvalidCert on_invalid_cert) {
|
||||
public DirectTlsXmppStream(Jid remote_name, string host, uint16 port, owned TlsXmppStream.OnInvalidCert on_invalid_cert) {
|
||||
base(remote_name);
|
||||
this.host = host;
|
||||
this.port = port;
|
||||
this.on_invalid_cert_outer = on_invalid_cert;
|
||||
this.on_invalid_cert_outer = (owned)on_invalid_cert;
|
||||
}
|
||||
|
||||
public override async void connect() throws IOStreamError {
|
||||
|
@ -21,7 +21,7 @@ public class Xmpp.DirectTlsXmppStream : TlsXmppStream {
|
|||
tls_connection.set_advertised_protocols(new string[]{"xmpp-client"});
|
||||
#endif
|
||||
tls_connection.accept_certificate.connect(on_invalid_certificate);
|
||||
tls_connection.accept_certificate.connect(on_invalid_cert_outer);
|
||||
tls_connection.accept_certificate.connect((cert, flags) => on_invalid_cert_outer(cert, flags));
|
||||
reset_stream(tls_connection);
|
||||
|
||||
yield setup();
|
||||
|
|
|
@ -6,11 +6,11 @@ public class Xmpp.StartTlsXmppStream : TlsXmppStream {
|
|||
uint16 port;
|
||||
TlsXmppStream.OnInvalidCert on_invalid_cert_outer;
|
||||
|
||||
public StartTlsXmppStream(Jid remote, string host, uint16 port, TlsXmppStream.OnInvalidCert on_invalid_cert) {
|
||||
public StartTlsXmppStream(Jid remote, string host, uint16 port, owned TlsXmppStream.OnInvalidCert on_invalid_cert) {
|
||||
base(remote);
|
||||
this.host = host;
|
||||
this.port = port;
|
||||
this.on_invalid_cert_outer = on_invalid_cert;
|
||||
this.on_invalid_cert_outer = (owned)on_invalid_cert;
|
||||
}
|
||||
|
||||
public override async void connect() throws IOStreamError {
|
||||
|
@ -42,7 +42,7 @@ public class Xmpp.StartTlsXmppStream : TlsXmppStream {
|
|||
reset_stream(conn);
|
||||
|
||||
conn.accept_certificate.connect(on_invalid_certificate);
|
||||
conn.accept_certificate.connect(on_invalid_cert_outer);
|
||||
conn.accept_certificate.connect((cert, flags) => on_invalid_cert_outer(cert, flags));
|
||||
} catch (Error e) {
|
||||
stderr.printf("Failed to start TLS: %s\n", e.message);
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace Xmpp {
|
|||
public IOStreamError? io_error { get; set; }
|
||||
}
|
||||
|
||||
public async XmppStreamResult establish_stream(Jid bare_jid, Gee.List<XmppStreamModule> modules, string? log_options, TlsXmppStream.OnInvalidCert on_invalid_cert) {
|
||||
public async XmppStreamResult establish_stream(Jid bare_jid, Gee.List<XmppStreamModule> modules, string? log_options, owned TlsXmppStream.OnInvalidCert on_invalid_cert) {
|
||||
Jid remote = bare_jid.domain_jid;
|
||||
|
||||
//Lookup xmpp-client and xmpps-client SRV records
|
||||
|
@ -58,9 +58,9 @@ namespace Xmpp {
|
|||
foreach (SrvTargetInfo target in targets) {
|
||||
try {
|
||||
if (target.service == "xmpp-client") {
|
||||
stream = new StartTlsXmppStream(remote, target.host, target.port, on_invalid_cert);
|
||||
stream = new StartTlsXmppStream(remote, target.host, target.port, (owned)on_invalid_cert);
|
||||
} else {
|
||||
stream = new DirectTlsXmppStream(remote, target.host, target.port, on_invalid_cert);
|
||||
stream = new DirectTlsXmppStream(remote, target.host, target.port, (owned)on_invalid_cert);
|
||||
}
|
||||
stream.log = new XmppLog(bare_jid.to_string(), log_options);
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ public abstract class Xmpp.TlsXmppStream : IoXmppStream {
|
|||
|
||||
public TlsCertificateFlags? errors;
|
||||
|
||||
public delegate bool OnInvalidCert(GLib.TlsConnection conn, GLib.TlsCertificate peer_cert, GLib.TlsCertificateFlags errors);
|
||||
public delegate bool OnInvalidCert(GLib.TlsCertificate peer_cert, GLib.TlsCertificateFlags errors);
|
||||
|
||||
protected TlsXmppStream(Jid remote_name) {
|
||||
base(remote_name);
|
||||
|
@ -19,7 +19,7 @@ public abstract class Xmpp.TlsXmppStream : IoXmppStream {
|
|||
error_str += @"$(f), ";
|
||||
}
|
||||
}
|
||||
warning(@"[%p, %s] Tls Certificate Errors: %s", this, this.remote_name, error_str);
|
||||
warning(@"[%p, %s] Tls Certificate Errors: %s", this, this.remote_name.to_string(), error_str);
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue