proxy_agentforward.c 2.04 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* proxy_agentforward.c
 *
 * $Id$ */

/* lsh, an implementation of the ssh protocol
 *
 * Copyright (C) 1999 Balázs Scheidler
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include "proxy_agentforward.h"
Niels Möller's avatar
Niels Möller committed
25

26
27
#include "channel_commands.h"
#include "format.h"
Niels Möller's avatar
Niels Möller committed
28
29
30
31
#include "gateway_channel.h"
#include "ssh.h"
#include "werror.h"
#include "xalloc.h"
32
33
34
35
36
37
38

#define WINDOW_SIZE 10000

static void
do_proxy_open_auth_agent(struct channel_open *s UNUSED,
			 struct ssh_connection *connection,
			 UINT32 type,
Niels Möller's avatar
Niels Möller committed
39
			 UINT32 send_window_size,
40
41
42
43
44
45
46
47
			 UINT32 send_max_packet,
			 struct simple_buffer *args,
			 struct command_continuation *c,
			 struct exception_handler *e)
{

  if (parse_eod(args))
    {
Niels Möller's avatar
Niels Möller committed
48
49
50
51
52
      struct gateway_channel *server
	= make_gateway_channel(NULL);

      /* NOTE: The origin's rec_window_size and rec_max_packet becomes the target's
       * send_window_size and send_max_packet. */
53
      struct command *o
Niels Möller's avatar
Niels Möller committed
54
55
56
57
	= make_gateway_channel_open_command(type, 
					    send_window_size, send_max_packet,
					    ssh_format(""),
					    NULL);
58
59
60
61

      werror("auth-agent open request\n");
      COMMAND_CALL(o,
		   connection->chain,
Niels Möller's avatar
Niels Möller committed
62
		   make_gateway_channel_open_continuation(c, server),
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
		   e);

    }
  else
    {
      PROTOCOL_ERROR(e, "Trailing garbage in open message");
    }
}

struct channel_open *
make_proxy_open_auth_agent(void)
{
  NEW(channel_open, self);

  self->handler = do_proxy_open_auth_agent;
  return self;
}