aboutsummaryrefslogtreecommitdiffstats
path: root/authenticate.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2006-03-06 18:22:20 +0000
committerWayne Davison <wayned@samba.org>2006-03-06 18:22:20 +0000
commit293def601d3267a361120cf85bfd902e7b2c3736 (patch)
tree5d7b0afb324ff556c83d6355b25fcb546bc647b3 /authenticate.c
parent651dc65efc6f6af3685558dd79a8e5a310b7d8a6 (diff)
downloadandroid_external_rsync-293def601d3267a361120cf85bfd902e7b2c3736.tar.gz
android_external_rsync-293def601d3267a361120cf85bfd902e7b2c3736.tar.bz2
android_external_rsync-293def601d3267a361120cf85bfd902e7b2c3736.zip
The base4_encode() function now takes a "pad" arg which indicates
if the caller wants to pad the value with trailing '=' chars.
Diffstat (limited to 'authenticate.c')
-rw-r--r--authenticate.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/authenticate.c b/authenticate.c
index ff7eef2c..7b5ecc2a 100644
--- a/authenticate.c
+++ b/authenticate.c
@@ -26,15 +26,13 @@ extern char *password_file;
encode a buffer using base64 - simple and slow algorithm. null terminates
the result.
***************************************************************************/
-void base64_encode(char *buf, int len, char *out)
+void base64_encode(char *buf, int len, char *out, int pad)
{
char *b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int bit_offset, byte_offset, idx, i;
unsigned char *d = (unsigned char *)buf;
int bytes = (len*8 + 5)/6;
- memset(out, 0, bytes+1);
-
for (i = 0; i < bytes; i++) {
byte_offset = (i*6)/8;
bit_offset = (i*6)%8;
@@ -48,6 +46,11 @@ void base64_encode(char *buf, int len, char *out)
}
out[i] = b64[idx];
}
+
+ while (pad && (i % 4))
+ out[i++] = '=';
+
+ out[i] = '\0';
}
/* Generate a challenge buffer and return it base64-encoded. */
@@ -69,7 +72,7 @@ static void gen_challenge(char *addr, char *challenge)
sum_update(input, sizeof input);
sum_end(md4_out);
- base64_encode(md4_out, MD4_SUM_LENGTH, challenge);
+ base64_encode(md4_out, MD4_SUM_LENGTH, challenge, 0);
}
@@ -208,7 +211,7 @@ static void generate_hash(char *in, char *challenge, char *out)
sum_update(challenge, strlen(challenge));
sum_end(buf);
- base64_encode(buf, MD4_SUM_LENGTH, out);
+ base64_encode(buf, MD4_SUM_LENGTH, out, 0);
}
/* Possibly negotiate authentication with the client. Use "leader" to