1 /*
2  * decode_nntp.c
3  *
4  * Network News Transport Protocol.
5  *
6  * Copyright (c) 2000 Felix von Leitner <felix@convergence.de>
7  * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
8  *
9  * $Id: decode_nntp.c,v 1.5 2001/03/15 08:33:01 dugsong Exp $
10  */
11 
12 #include "config.h"
13 
14 #include <sys/types.h>
15 
16 #include <stdio.h>
17 #include <string.h>
18 
19 #include "base64.h"
20 #include "decode.h"
21 
22 int
decode_nntp(u_char * buf,int len,u_char * obuf,int olen)23 decode_nntp(u_char *buf, int len, u_char *obuf, int olen)
24 {
25 	char *p;
26 	int i, simple, dpa;
27 
28 	obuf[0] = '\0';
29 	simple = dpa = 0;
30 
31 	for (p = strtok(buf, "\r\n"); p != NULL; p = strtok(NULL, "\r\n")) {
32 		if (simple == 1) {
33 			strlcat(obuf, p, olen);
34 			strlcat(obuf, "\n", olen);
35 			simple = 0;
36 		}
37 		else if (strncasecmp(p, "AUTHINFO ", 9) == 0) {
38 			strlcat(obuf, p, olen);
39 
40 			if (strncasecmp(p + 9, "SIMPLE", 6) == 0) {
41 				simple = 1;
42 			}
43 			else if (strncasecmp(p + 9, "GENERIC ", 8) == 0) {
44 				if (strncasecmp(p + 17, "DPA", 3) == 0) {
45 					dpa = 1;
46 				}
47 				else if (dpa == 1) {
48 					p += 17;
49 					i = base64_pton(p, p, strlen(p));
50 					p[i] = '\0';
51 					i = strlen(obuf);
52 					snprintf(obuf + i, olen - i,
53 						 " [%s]", p);
54 				}
55 			}
56 			strlcat(obuf, "\n", olen);
57 		}
58 	}
59 	return (strlen(obuf));
60 }
61 
62