From 8aea555551a2f6a43aa2d24a5b45b09612f0cbb8 Mon Sep 17 00:00:00 2001 From: Ken Hornstein Date: Tue, 24 Oct 2017 23:56:16 -0400 Subject: [PATCH] Rework snoop support slightly for the new world order. Make sure we do base64 snoop decoding at flush time. Still need to fix SMTP support. --- uip/popsbr.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/uip/popsbr.c b/uip/popsbr.c index a9e442ba..ac1117be 100644 --- a/uip/popsbr.c +++ b/uip/popsbr.c @@ -339,25 +339,27 @@ pop_sasl_callback(enum sasl_message_type mtype, unsigned const char *indata, "for initial challenge response"); return NOTOK; } - netsec_set_snoop_callback(nsc, netsec_b64_snoop_decoder, NULL); rc = netsec_printf(nsc, errstr, "%s\r\n", b64data); - netsec_set_snoop_callback(nsc, NULL, NULL); free(b64data); if (rc != OK) return NOTOK; - if (netsec_flush(nsc, errstr) != OK) + netsec_set_snoop_callback(nsc, netsec_b64_snoop_decoder, NULL); + rc = netsec_flush(nsc, errstr); + netsec_set_snoop_callback(nsc, NULL, NULL); + if (rc != OK) return NOTOK; } else { - netsec_set_snoop_callback(nsc, netsec_b64_snoop_decoder, - &snoopoffset); - snoopoffset = 6 + strlen(mech); rc = netsec_printf(nsc, errstr, "AUTH %s %s\r\n", mech, b64data); free(b64data); - netsec_set_snoop_callback(nsc, NULL, NULL); if (rc != OK) return NOTOK; - if (netsec_flush(nsc, errstr) != OK) + netsec_set_snoop_callback(nsc, netsec_b64_snoop_decoder, + &snoopoffset); + snoopoffset = 6 + strlen(mech); + rc = netsec_flush(nsc, errstr); + netsec_set_snoop_callback(nsc, NULL, NULL); + if (rc != OK) return NOTOK; } } else { @@ -410,16 +412,18 @@ pop_sasl_callback(enum sasl_message_type mtype, unsigned const char *indata, unsigned char *b64data; b64data = mh_xmalloc(BASE64SIZE(indatalen)); writeBase64raw(indata, indatalen, b64data); - netsec_set_snoop_callback(nsc, netsec_b64_snoop_decoder, NULL); rc = netsec_printf(nsc, errstr, "%s\r\n", b64data); - netsec_set_snoop_callback(nsc, NULL, NULL); free(b64data); } if (rc != OK) return NOTOK; - if (netsec_flush(nsc, errstr) != OK) + if (indatalen > 0) + netsec_set_snoop_callback(nsc, netsec_b64_snoop_decoder, NULL); + rc = netsec_flush(nsc, errstr); + netsec_set_snoop_callback(nsc, NULL, NULL); + if (rc != OK) return NOTOK; break; -- 2.56.0