static int smtp_checkp(const char *fmt, const char *param, int code) { char *answer; char *msg = send_mail_command(fmt, param); // read stdin // if the string has a form NNN- -- read next string. E.g. EHLO response // parse first bytes to a number // if code = -1 then just return this number // if code != -1 then checks whether the number equals the code // if not equal -> die saying msg while ((answer = xmalloc_fgetline(stdin)) != NULL) { if (verbose) bb_error_msg("recv:'%.*s'", (int)(strchrnul(answer, '\r') - answer), answer); if (strlen(answer) <= 3 || '-' != answer[3]) break; free(answer); } if (answer) { int n = atoi(answer); if (timeout) alarm(0); free(answer); if (-1 == code || n == code) { free(msg); return n; } } bb_error_msg_and_die("%s failed", msg); }
static void pop3_checkr(const char *fmt, const char *param, char **ret) { char *msg = send_mail_command(fmt, param); char *answer = xmalloc_fgetline(stdin); if (answer && '+' == answer[0]) { free(msg); if (timeout) alarm(0); if (ret) { // skip "+OK " memmove(answer, answer + 4, strlen(answer) - 4); *ret = answer; } else free(answer); return; } bb_error_msg_and_die("%s failed, reply was: %s", msg, answer); }