#include <h/mh.h>
#include <h/utils.h>
-extern int client(char *args, char *protocol, char *service, int rproto,
- char *response, int len_response);
-
#if defined(NNTP) && !defined(PSHSBR)
# undef NNTP
#endif
#define POP_SASL_CB_N_PASS 1
{ SASL_CB_LOG, NULL, NULL },
{ SASL_CB_LIST_END, NULL, NULL },
+
+#define SASL_BUFFER_SIZE 262144
};
#else /* CYRUS_SASL */
# define sasl_fgetc fgetc
static int sasl_fgetc(FILE *);
#endif /* CYRUS_SASL */
-static int traverse (int (*)(), const char *, ...);
+static int traverse (int (*)(char *), const char *, ...);
static int vcommand(const char *, va_list);
-static int getline (char *, int, FILE *);
+static int sasl_getline (char *, int, FILE *);
static int putline (char *, FILE *);
*/
memset(&secprops, 0, sizeof(secprops));
- secprops.maxbufsize = BUFSIZ;
+ secprops.maxbufsize = SASL_BUFFER_SIZE;
secprops.max_ssf = UINT_MAX;
result = sasl_setprop(conn, SASL_SEC_PROPS, &secprops);
}
/*
- * Limit this to what we can deal with.
+ * Limit this to what we can deal with. Shouldn't matter much because
+ * this is only outgoing data (which should be small)
*/
if (maxoutbuf == 0 || maxoutbuf > BUFSIZ)
char *c;
/* skip any initial space */
- for (pro = proxy; isspace(*pro); pro++)
+ for (pro = (unsigned char *) proxy; isspace(*pro); pro++)
continue;
/* calculate required size for argument array */
return NOTOK;
# endif /* KPOP */
} else {
- if ((fd1 = client (host, "tcp", POPSERVICE, rpop, response, sizeof(response))) == NOTOK) {
+ if ((fd1 = client (host, POPSERVICE, response, sizeof(response), snoop)) == NOTOK) {
return NOTOK;
}
}
#else /* NNTP */
- if ((fd1 = client (host, "tcp", "nntp", rpop, response, sizeof(response))) == NOTOK)
+ if ((fd1 = client (host, "nntp", response, sizeof(response), snoop)) == NOTOK)
return NOTOK;
#endif
SIGNAL (SIGPIPE, SIG_IGN);
- switch (getline (response, sizeof response, input)) {
+ switch (sasl_getline (response, sizeof response, input)) {
case OK:
if (poprint)
fprintf (stderr, "<--- %s\n", response);
int
-pop_retr (int msgno, int (*action)())
+pop_retr (int msgno, int (*action)(char *))
{
#ifndef NNTP
return traverse (action, "RETR %d", (targ_t) msgno);
static int
-traverse (int (*action)(), const char *fmt, ...)
+traverse (int (*action)(char *), const char *fmt, ...)
{
int result;
va_list ap;
int
-pop_top (int msgno, int lines, int (*action)())
+pop_top (int msgno, int lines, int (*action)(char *))
{
#ifndef NNTP
return traverse (action, "TOP %d %d", (targ_t) msgno, (targ_t) lines);
fprintf(stderr, "(decrypted) ");
#endif /* CYRUS_SASL */
- switch (getline (response, sizeof response, input)) {
+ switch (sasl_getline (response, sizeof response, input)) {
case OK:
if (poprint)
fprintf (stderr, "<--- %s\n", response);
{
char buffer[BUFSIZ + TRMLEN];
- if (getline (buffer, sizeof buffer, input) != OK)
+ if (sasl_getline (buffer, sizeof buffer, input) != OK)
return NOTOK;
#ifdef DEBUG
if (poprint) {
*/
static int
-getline (char *s, int n, FILE *iop)
+sasl_getline (char *s, int n, FILE *iop)
{
- int c;
+ int c = -2;
char *p;
p = s;
static int cnt = 0;
unsigned int retbufsize = 0;
int cc, result;
- char *retbuf, tmpbuf[BUFSIZ];
+ char *retbuf, tmpbuf[SASL_BUFFER_SIZE];
/*
* If we have some leftover data, return that