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