*/
#include <h/mh.h>
-
-extern int client(char *args, char *protocol, char *service, int rproto,
- char *response, int len_response);
+#include <h/utils.h>
#if defined(NNTP) && !defined(PSHSBR)
# undef NNTP
#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)
len = strlen(pass);
- *psecret = (sasl_secret_t *) malloc(sizeof(sasl_secret_t) + len);
-
- if (! *psecret)
- return SASL_NOMEM;
+ *psecret = (sasl_secret_t *) mh_xmalloc(sizeof(sasl_secret_t) + len);
(*psecret)->len = len;
strcpy((char *) (*psecret)->data, pass);
int pargc = 2;
int hlen = strlen(host);
int plen = 1;
- char *cur, *pro;
+ unsigned char *cur, *pro;
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 */
}
/* put together list of arguments */
- p = pargv = malloc(pargc * sizeof(char *));
- c = *pargv = malloc(plen * sizeof(char));
+ p = pargv = mh_xmalloc(pargc * sizeof(char *));
+ c = *pargv = mh_xmalloc(plen * sizeof(char));
for (cur = pro; *cur; cur++) {
if (isspace(*cur) && cur[1] && !isspace(cur[1])) {
*c++ = '\0';
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);
snprintf (buffer, sizeof(buffer), fmt, a, b, c, d);
ap = brkstring (buffer, " ", "\n"); /* a hack, i know... */
- if (!strcasecmp(ap[0], "x-bboards")) { /* XTND "X-BBOARDS group */
+ if (!mh_strcasecmp(ap[0], "x-bboards")) { /* XTND "X-BBOARDS group */
/* most of these parameters are meaningless under NNTP.
* bbc.c was modified to set AKA and LEADERS as appropriate,
* the rest are left blank.
*/
return OK;
}
- if (!strcasecmp (ap[0], "archive") && ap[1]) {
+ if (!mh_strcasecmp (ap[0], "archive") && ap[1]) {
snprintf (xtnd_name, sizeof(xtnd_name), "%s", ap[1]); /* save the name */
xtnd_last = 0;
xtnd_first = 1; /* setup to fail in pop_stat */
return OK;
}
- if (!strcasecmp (ap[0], "bboards")) {
+ if (!mh_strcasecmp (ap[0], "bboards")) {
if (ap[1]) { /* XTND "BBOARDS group" */
snprintf (xtnd_name, sizeof(xtnd_name), "%s", ap[1]); /* save the name */
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
}
if (retbufsize > size) {
- buffer = realloc(buffer, retbufsize);
- if (!buffer) {
- snprintf(response, sizeof(response), "Error during realloc in "
- "read routine: %s", strerror(errno));
- return -2;
- }
+ buffer = mh_xrealloc(buffer, retbufsize);
size = retbufsize;
}