aboutsummaryrefslogtreecommitdiffstats
path: root/rpa.c
diff options
context:
space:
mode:
authorMatthias Andree <matthias.andree@gmx.de>2006-03-14 09:10:20 +0000
committerMatthias Andree <matthias.andree@gmx.de>2006-03-14 09:10:20 +0000
commit9dc0b8bd674f71f8ee422b037dc409f2dd4f9487 (patch)
tree32e04cf0045782e10fc3eecc8fa82101b3fb94ec /rpa.c
parent20a0097f74bfdec16c17dd7d3eb5968f81ec90c1 (diff)
downloadfetchmail-9dc0b8bd674f71f8ee422b037dc409f2dd4f9487.tar.gz
fetchmail-9dc0b8bd674f71f8ee422b037dc409f2dd4f9487.tar.bz2
fetchmail-9dc0b8bd674f71f8ee422b037dc409f2dd4f9487.zip
merge Mirek's fetchmail-signed.patch
svn path=/branches/BRANCH_6-3/; revision=4734
Diffstat (limited to 'rpa.c')
-rw-r--r--rpa.c101
1 files changed, 49 insertions, 52 deletions
diff --git a/rpa.c b/rpa.c
index e52a889e..ccc7d509 100644
--- a/rpa.c
+++ b/rpa.c
@@ -37,20 +37,20 @@ extern int linecount;
#ifndef NO_PROTO
/* prototypes for internal functions */
- static int POP3_rpa_resp(unsigned char* argbuf, int socket );
- static void LenAppend(unsigned char** pptr, int len);
- static int LenSkip(unsigned char** pptr, int rxlen);
- static int DecBase64(unsigned char* bufp);
- static void EncBase64(unsigned char* bufp, int len);
- static void ToUnicode(unsigned char** pptr, unsigned char delim,
- unsigned char* buf, int* plen, int conv);
- static int SetRealmService(unsigned char* bufp);
+ static int POP3_rpa_resp(char* argbuf, int socket );
+ static void LenAppend(char** pptr, int len);
+ static int LenSkip(char** pptr, int rxlen);
+ static int DecBase64(char* bufp);
+ static void EncBase64(char* bufp, int len);
+ static void ToUnicode(char** pptr, char delim, unsigned char* buf, int* plen,
+ int conv);
+ static int SetRealmService(char* bufp);
static void GenChallenge(unsigned char* buf, int len);
- static int DigestPassphrase(unsigned char* passphrase,
+ static int DigestPassphrase(char* passphrase,
unsigned char* rbuf, int unicodeit);
static void CompUserResp();
static int CheckUserAuth();
- static void md5(unsigned char* in, int len, unsigned char* out);
+ static void md5(void* in, int len, unsigned char* out);
#endif
/* RPA protocol definitions */
@@ -108,11 +108,11 @@ unsigned char Kus[Kusl]; /* Session key */
globals: read outlevel.
*********************************************************************/
-int POP3_auth_rpa (unsigned char *userid, unsigned char *passphrase, int socket)
+int POP3_auth_rpa (char *userid, char *passphrase, int socket)
{
int ok,rxlen,verh,verl,i,rll;
- unsigned char buf [POPBUFSIZE];
- unsigned char *bufp;
+ char buf [POPBUFSIZE];
+ char *bufp;
int status,aulin,kuslin;
char* stdec[4] = { N_("Success") ,
N_("Restricted user (something wrong with account)") ,
@@ -179,10 +179,10 @@ int POP3_auth_rpa (unsigned char *userid, unsigned char *passphrase, int socket)
/* Interpret Token 2 */
- verh = *(bufp++); verl = *(bufp++);
+ verh = (unsigned char)*(bufp++); verl = (unsigned char)*(bufp++);
if (outlevel >= O_DEBUG)
report(stdout, GT_("Service chose RPA version %d.%d\n"),verh,verl);
- Csl = *(bufp++);
+ Csl = (unsigned char)*(bufp++);
memcpy(Cs, bufp, Csl);
bufp += Csl;
if (outlevel >= O_DEBUG)
@@ -197,7 +197,7 @@ int POP3_auth_rpa (unsigned char *userid, unsigned char *passphrase, int socket)
bufp += Tsl;
if (outlevel >= O_DEBUG)
report(stdout, GT_("Service timestamp %s\n"),Ts);
- rll = *(bufp++) << 8; rll = rll | *(bufp++);
+ rll = (unsigned char)*(bufp++) << 8; rll = rll | (unsigned char)*(bufp++);
if ((bufp-buf+rll) != rxlen)
{
if (outlevel > O_SILENT)
@@ -254,7 +254,7 @@ int POP3_auth_rpa (unsigned char *userid, unsigned char *passphrase, int socket)
/* Interpret Token 4 */
- aulin = *(bufp++);
+ aulin = (unsigned char)*(bufp++);
if (outlevel >= O_DEBUG)
{
report(stdout, GT_("User authentication (l=%d):\n"),aulin);
@@ -361,7 +361,7 @@ int POP3_auth_rpa (unsigned char *userid, unsigned char *passphrase, int socket)
*********************************************************************/
static int POP3_rpa_resp (argbuf,socket)
-unsigned char *argbuf;
+char *argbuf;
int socket;
{
int ok;
@@ -420,7 +420,7 @@ int socket;
*********************************************************************/
static void LenAppend(pptr,len)
-unsigned char **pptr;
+char **pptr;
int len;
{
if (len < 0x80)
@@ -454,30 +454,30 @@ int len;
*********************************************************************/
int LenSkip(pptr,rxlen)
-unsigned char **pptr;
+char **pptr;
int rxlen;
{
int len;
- unsigned char *save;
+ char *save;
save = *pptr;
- if (**pptr != HDR)
+ if ((unsigned char)**pptr != HDR)
{
if (outlevel > O_SILENT)
report(stderr, GT_("Hdr not 60\n"));
return(0);
}
(*pptr)++;
- if (((**pptr) & 0x80) == 0 )
+ if (((unsigned char)(**pptr) & 0x80) == 0 )
{
- len = **pptr; (*pptr)++;
+ len = (unsigned char)**pptr; (*pptr)++;
}
- else if ((**pptr) == 0x81)
+ else if ((unsigned char)(**pptr) == 0x81)
{
- len = *(*pptr+1); (*pptr) += 2;
+ len = (unsigned char)*(*pptr+1); (*pptr) += 2;
}
- else if ((**pptr) == 0x82)
+ else if ((unsigned char)(**pptr) == 0x82)
{
- len = ((*(*pptr+1)) << 8) | *(*pptr+2);
+ len = ((unsigned char)(*(*pptr+1)) << 8) | (unsigned char)*(*pptr+2);
(*pptr) += 3;
}
else len = 0;
@@ -516,13 +516,13 @@ int rxlen;
*********************************************************************/
static int DecBase64(bufp)
-unsigned char *bufp;
+char *bufp;
{
unsigned int newx, bits=0, cnt=0, i, part=0;
unsigned char ch;
- unsigned char* outp=bufp;
- unsigned char* inp=bufp;
- while((ch=*(inp++)) != 0)
+ char* outp=bufp;
+ char* inp=bufp;
+ while((ch=(unsigned char)*(inp++)) != 0)
{
if ((ch != '=') && (ch != ' ') && (ch != '\n') && (ch != '\r'))
{
@@ -550,7 +550,7 @@ unsigned char *bufp;
report(stdout, GT_("Inbound binary data:\n"));
for (i=0; i<cnt; i++)
{
- report_build(stdout, "%02X ",bufp[i]);
+ report_build(stdout, "%02X ",(unsigned char)bufp[i]);
if (((i % 16)==15) || (i==(cnt-1)))
report_complete(stdout, "\n");
}
@@ -575,10 +575,10 @@ unsigned char *bufp;
*********************************************************************/
static void EncBase64(bufp,len)
-unsigned char *bufp;
+char *bufp;
int len;
{
- unsigned char* outp;
+ char* outp;
unsigned char c1,c2,c3;
char x[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int i;
@@ -588,7 +588,7 @@ int len;
report(stdout, GT_("Outbound data:\n"));
for (i=0; i<len; i++)
{
- report_build(stdout, "%02X ",bufp[i]);
+ report_build(stdout, "%02X ",(unsigned char)bufp[i]);
if (((i % 16)==15) || (i==(len-1)))
report_complete(stdout, "\n");
}
@@ -598,9 +598,9 @@ int len;
/* So we can do the update in place, start at the far end! */
for (i=((len-1)/3)*3; i>=0; i-=3)
{
- c1 = bufp[i];
- if ((i+1) < len) c2 = bufp[i+1]; else c2=0;
- if ((i+2) < len) c3 = bufp[i+2]; else c3=0;
+ c1 = (unsigned char)bufp[i];
+ if ((i+1) < len) c2 = (unsigned char)bufp[i+1]; else c2=0;
+ if ((i+2) < len) c3 = (unsigned char)bufp[i+2]; else c3=0;
*(outp) = x[c1/4];
*(outp+1) = x[((c1 & 3)*16) + (c2/16)];
if ((i+1) < len) *(outp+2) = x[((c2 & 0x0F)*4) + (c3/64)];
@@ -628,8 +628,8 @@ int len;
globals: reads outlevel;
*********************************************************************/
-static void ToUnicode(unsigned char **pptr /* input string*/,
- unsigned char delim, unsigned char *buf /* output buffer */,
+static void ToUnicode(char **pptr /* input string*/,
+ char delim, unsigned char *buf /* output buffer */,
int *plen, int conv)
{
unsigned char *p;
@@ -639,7 +639,7 @@ static void ToUnicode(unsigned char **pptr /* input string*/,
{
*(p++) = 0;
if (conv)
- *(p++) = tolower(**pptr);
+ *(p++) = tolower((unsigned char)**pptr);
else
*(p++) = (**pptr);
(*plen) += 2;
@@ -676,7 +676,7 @@ static void ToUnicode(unsigned char **pptr /* input string*/,
writes Ns Nsl Nr Nrl
*********************************************************************/
-static int SetRealmService(unsigned char *bufp)
+static int SetRealmService(char *bufp)
{
/* For the moment we pick the first available realm. It would */
/* make more sense to verify that the realm which the user */
@@ -753,12 +753,12 @@ static void GenChallenge(unsigned char *buf, int len)
writes Pu.
*********************************************************************/
-static int DigestPassphrase(unsigned char *passphrase,unsigned char *rbuf,
+static int DigestPassphrase(char *passphrase,unsigned char *rbuf,
int unicodeit)
{
int len;
unsigned char workarea[STRMAX];
- unsigned char* ptr;
+ char* ptr;
if (unicodeit) /* Option in spec. Yuck. */
{
@@ -766,14 +766,10 @@ static int DigestPassphrase(unsigned char *passphrase,unsigned char *rbuf,
ToUnicode(&ptr, '\0', workarea, &len, 0); /* No case conv here */
if (len == 0)
return(PS_SYNTAX);
- ptr = workarea;
+ md5(workarea,len,rbuf);
}
else
- {
- ptr = rbuf;
- len = strlen(passphrase);
- }
- md5(ptr,len,rbuf);
+ md5(rbuf,strlen(passphrase),rbuf);
return(0);
}
@@ -873,10 +869,11 @@ static int CheckUserAuth(void)
globals: reads outlevel
*********************************************************************/
-static void md5(unsigned char *in,int len,unsigned char *out)
+static void md5(void *in_,int len,unsigned char *out)
{
int i;
MD5_CTX md5context;
+ unsigned char *in = in_;
if (outlevel >= O_DEBUG)
{