1 /*
2  * decode_rlogin.c
3  *
4  * Berkeley remote login/shell/exec.
5  *
6  * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
7  *
8  * $Id: decode_rlogin.c,v 1.6 2001/03/15 08:33:02 dugsong Exp $
9  */
10 
11 #include "config.h"
12 
13 #include <sys/types.h>
14 
15 #include <stdio.h>
16 #include <string.h>
17 
18 #include "options.h"
19 #include "decode.h"
20 
21 int
decode_rlogin(u_char * buf,int len,u_char * obuf,int olen)22 decode_rlogin(u_char *buf, int len, u_char *obuf, int olen)
23 {
24 	u_char *p, *q;
25 
26 	/* Skip first NULL, or rexec stderr port */
27 	for (p = buf; p - buf < len && *p == '\0'; p++)
28 		;	/* VOID */
29 
30 	strlcpy(obuf, "[", olen);
31 	strlcat(obuf, p, olen);		/* Local username */
32 	strlcat(obuf, ":", olen);
33 	p += strlen(p) + 1;
34 
35 	strlcat(obuf, p, olen);		/* Remote username */
36 	strlcat(obuf, "]\n", olen);
37 	p += strlen(p) + 1;
38 
39 	p += strlen(p) + 1;			/* Skip term info */
40 
41 	if ((q = strstr(p, "\xff\xffss")) != NULL)	/* Skip window size */
42 		p += 12;
43 
44 	for (p = strtok(p, "\r\n"); p != NULL; p = strtok(NULL, "\r\n")) {
45 		strlcat(obuf, p, olen);
46 		strlcat(obuf, "\n", olen);
47 	}
48 	if (!strip_lines(obuf, Opt_lines))
49 		return (0);
50 
51 	return (strlen(obuf));
52 }
53 
54