*/
if (command("STLS") == NOTOK)
- return NOTOK;
+ return NOTOK;
if (netsec_negotiate_tls(nsc, &errstr) != OK) {
snprintf(response, sizeof(response), "%s", errstr);
if (check_mech(server_mechs, sizeof(server_mechs)) != OK)
return NOTOK;
if (netsec_negotiate_sasl(nsc, server_mechs,
- &errstr) != OK) {
+ &errstr) != OK) {
strncpy(response, errstr, sizeof(response));
response[sizeof(response) - 1] = '\0';
free(errstr);
if (line == NULL)
return NOTOK;
- if (len < 2 || (len == 2 && strcmp(line, "+ ") != 0)) {
+
+ /*
+ * If we get an -ERR reply, bubble that back up
+ */
+
+ if (has_prefix(line, "-ERR")) {
+ netsec_err(errstr, "%s", line);
+ return NOTOK;
+ }
+
+ /*
+ * Make sure we get someting back a valid response
+ */
+
+ if (!has_prefix(line, "+ ")) {
netsec_err(errstr, "Invalid format for SASL response");
return NOTOK;
}
*outdata = NULL;
*outdatalen = 0;
} else {
- rc = decodeBase64(line + 2, outdata, &len, 0, NULL);
+ rc = decodeBase64(line + 2, outdata, &len, 0);
*outdatalen = len;
if (rc != OK) {
netsec_err(errstr, "Unable to decode base64 response");