annotate lib/sshv2.c @ 529:c36a475ecf5a

2004-8-9 Brian Masney <masneyb@gftp.org> * lib/sshv2.c - fixes so that file permissions are preserved properly on file upload. Fixes so that the Utime and Chmod commands are shown in the log window
author masneyb
date Tue, 10 Aug 2004 02:55:35 +0000
parents d32b05e07284
children 65cd664cbf32
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1 /*****************************************************************************/
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2 /* sshv2.c - functions that will use the sshv2 protocol */
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
3 /* Copyright (C) 1998-2003 Brian Masney <masneyb@gftp.org> */
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
4 /* */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
5 /* This program is free software; you can redistribute it and/or modify */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
6 /* it under the terms of the GNU General Public License as published by */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
7 /* the Free Software Foundation; either version 2 of the License, or */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
8 /* (at your option) any later version. */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
9 /* */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
10 /* This program is distributed in the hope that it will be useful, */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
11 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
12 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
13 /* GNU General Public License for more details. */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
14 /* */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
15 /* You should have received a copy of the GNU General Public License */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
16 /* along with this program; if not, write to the Free Software */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
17 /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
18 /*****************************************************************************/
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
19
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
20 #include "gftp.h"
33
c8ec7877432e 2002-10-06 Brian Masney <masneyb@gftp.org>
masneyb
parents: 14
diff changeset
21 static const char cvsid[] = "$Id$";
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
22
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
23 #define SSH_MAX_HANDLE_SIZE 256
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
24 #define SSH_MAX_STRING_SIZE 34000
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
25
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
26 static gftp_config_vars config_vars[] =
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
27 {
227
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 219
diff changeset
28 {"", N_("SSH"), gftp_option_type_notebook, NULL, NULL,
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 219
diff changeset
29 GFTP_CVARS_FLAGS_SHOW_BOOKMARK, NULL, GFTP_PORT_GTK, NULL},
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
30
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
31 {"ssh_prog_name", N_("SSH Prog Name:"),
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
32 gftp_option_type_text, "ssh", NULL, 0,
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
33 N_("The path to the SSH executable"), GFTP_PORT_ALL, NULL},
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
34 {"ssh_extra_params", N_("SSH Extra Params:"),
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
35 gftp_option_type_text, NULL, NULL, 0,
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
36 N_("Extra parameters to pass to the SSH program"), GFTP_PORT_ALL, NULL},
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
37
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
38 {"ssh_need_userpass", N_("Need SSH User/Pass"),
227
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 219
diff changeset
39 gftp_option_type_checkbox, GINT_TO_POINTER(1), NULL,
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 219
diff changeset
40 GFTP_CVARS_FLAGS_SHOW_BOOKMARK,
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
41 N_("Require a username/password for SSH connections"), GFTP_PORT_ALL, NULL},
227
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 219
diff changeset
42
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
43 {NULL, NULL, 0, NULL, NULL, 0, NULL, 0, NULL}
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
44 };
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
45
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
46
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
47 typedef struct sshv2_message_tag
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
48 {
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
49 guint32 length;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
50 char command;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
51 char *buffer,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
52 *pos,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
53 *end;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
54 } sshv2_message;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
55
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
56 typedef struct sshv2_params_tag
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
57 {
296
51725086634d 2003-10-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 284
diff changeset
58 char handle[SSH_MAX_HANDLE_SIZE + 4], /* We'll encode the ID in here too */
51725086634d 2003-10-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 284
diff changeset
59 *read_buffer;
51725086634d 2003-10-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 284
diff changeset
60
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
61 guint32 id,
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
62 count;
518
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
63 size_t handle_len;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
64 sshv2_message message;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
65
296
51725086634d 2003-10-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 284
diff changeset
66 unsigned int initialized : 1,
51725086634d 2003-10-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 284
diff changeset
67 dont_log_status : 1; /* For uploading files */
51725086634d 2003-10-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 284
diff changeset
68
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
69 #ifdef G_HAVE_GINT64
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
70 guint64 offset;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
71 #else
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
72 guint32 offset;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
73 #endif
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
74 } sshv2_params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
75
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
76
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
77 #define SSH_MY_VERSION 3
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
78
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
79 #define SSH_FXP_INIT 1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
80 #define SSH_FXP_VERSION 2
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
81 #define SSH_FXP_OPEN 3
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
82 #define SSH_FXP_CLOSE 4
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
83 #define SSH_FXP_READ 5
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
84 #define SSH_FXP_WRITE 6
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
85 #define SSH_FXP_LSTAT 7
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
86 #define SSH_FXP_FSTAT 8
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
87 #define SSH_FXP_SETSTAT 9
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
88 #define SSH_FXP_FSETSTAT 10
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
89 #define SSH_FXP_OPENDIR 11
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
90 #define SSH_FXP_READDIR 12
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
91 #define SSH_FXP_REMOVE 13
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
92 #define SSH_FXP_MKDIR 14
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
93 #define SSH_FXP_RMDIR 15
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
94 #define SSH_FXP_REALPATH 16
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
95 #define SSH_FXP_STAT 17
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
96 #define SSH_FXP_RENAME 18
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
97 #define SSH_FXP_READLINK 19
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
98 #define SSH_FXP_SYMLINK 20
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
99
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
100 #define SSH_FXP_STATUS 101
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
101 #define SSH_FXP_HANDLE 102
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
102 #define SSH_FXP_DATA 103
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
103 #define SSH_FXP_NAME 104
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
104 #define SSH_FXP_ATTRS 105
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
105 #define SSH_FXP_EXTENDED 200
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
106 #define SSH_FXP_EXTENDED_REPLY 201
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
107
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
108 #define SSH_FILEXFER_ATTR_SIZE 0x00000001
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
109 #define SSH_FILEXFER_ATTR_UIDGID 0x00000002
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
110 #define SSH_FILEXFER_ATTR_PERMISSIONS 0x00000004
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
111 #define SSH_FILEXFER_ATTR_ACMODTIME 0x00000008
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
112 #define SSH_FILEXFER_ATTR_EXTENDED 0x80000000
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
113
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
114 #define SSH_FILEXFER_TYPE_REGULAR 1
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
115 #define SSH_FILEXFER_TYPE_DIRECTORY 2
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
116 #define SSH_FILEXFER_TYPE_SYMLINK 3
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
117 #define SSH_FILEXFER_TYPE_SPECIAL 4
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
118 #define SSH_FILEXFER_TYPE_UNKNOWN 5
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
119
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
120 #define SSH_FXF_READ 0x00000001
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
121 #define SSH_FXF_WRITE 0x00000002
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
122 #define SSH_FXF_APPEND 0x00000004
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
123 #define SSH_FXF_CREAT 0x00000008
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
124 #define SSH_FXF_TRUNC 0x00000010
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
125 #define SSH_FXF_EXCL 0x00000020
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
126
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
127 #define SSH_FX_OK 0
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
128 #define SSH_FX_EOF 1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
129 #define SSH_FX_NO_SUCH_FILE 2
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
130 #define SSH_FX_PERMISSION_DENIED 3
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
131 #define SSH_FX_FAILURE 4
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
132 #define SSH_FX_BAD_MESSAGE 5
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
133 #define SSH_FX_NO_CONNECTION 6
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
134 #define SSH_FX_CONNECTION_LOST 7
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
135 #define SSH_FX_OP_UNSUPPORTED 8
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
136
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
137 #define SSH_LOGIN_BUFSIZE 200
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
138 #define SSH_ERROR_BADPASS -1
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
139 #define SSH_ERROR_QUESTION -2
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
140
493
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
141
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
142 static char *
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
143 sshv2_initialize_string (gftp_request * request, size_t len)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
144 {
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
145 sshv2_params * params;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
146 guint32 num;
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
147 char *ret;
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
148
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
149 params = request->protocol_data;
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
150 ret = g_malloc0 (len + 1);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
151
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
152 num = htonl (params->id++);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
153 memcpy (ret, &num, 4);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
154
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
155 return (ret);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
156 }
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
157
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
158
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
159 static void
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
160 sshv2_add_string_to_buf (char *buf, const char *str)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
161 {
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
162 guint32 num;
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
163
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
164 num = htonl (strlen (str));
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
165 memcpy (buf, &num, 4);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
166 strcpy (buf + 4, str);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
167 }
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
168
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
169
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
170 static char *
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
171 sshv2_initialize_string_with_path (gftp_request * request, const char *path,
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
172 size_t *len, char **endpos)
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
173 {
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
174 char *ret, *tempstr;
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
175 size_t pathlen;
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
176
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
177 if (*path == '/')
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
178 {
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
179 pathlen = strlen (path);
493
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
180 *len += pathlen + 8;
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
181 ret = sshv2_initialize_string (request, *len);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
182 sshv2_add_string_to_buf (ret + 4, path);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
183 }
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
184 else
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
185 {
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
186 tempstr = gftp_build_path (request->directory, path, NULL);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
187 pathlen = strlen (tempstr);
493
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
188 *len += pathlen + 8;
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
189 ret = sshv2_initialize_string (request, *len);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
190 sshv2_add_string_to_buf (ret + 4, tempstr);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
191 g_free (tempstr);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
192 }
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
193
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
194 if (endpos != NULL)
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
195 *endpos = ret + 8 + pathlen;
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
196
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
197 return (ret);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
198 }
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
199
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
200
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
201 static void
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
202 sshv2_add_exec_args (char **logstr, size_t *logstr_len, char ***args,
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
203 size_t *args_len, size_t *args_max, char *first, ...)
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
204 {
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
205 char tempstr[2048], *curpos, *endpos, save_char;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
206 va_list argp;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
207 int at_end;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
208
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
209 va_start (argp, first);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
210 g_vsnprintf (tempstr, sizeof (tempstr), first, argp);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
211 va_end (argp);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
212
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
213 *logstr_len += strlen (tempstr);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
214 *logstr = g_realloc (*logstr, *logstr_len + 1);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
215 strcat (*logstr, tempstr);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
216
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
217 curpos = tempstr;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
218 while (*curpos == ' ')
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
219 curpos++;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
220
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
221 save_char = ' ';
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
222 at_end = 0;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
223 while (!at_end)
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
224 {
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
225 if (*curpos == '"')
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
226 {
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
227 curpos++;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
228 endpos = strchr (curpos + 1, '"');
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
229 }
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
230 else
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
231 endpos = strchr (curpos, ' ');
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
232
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
233 if (endpos == NULL)
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
234 at_end = 1;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
235 else
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
236 {
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
237 save_char = *endpos;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
238 *endpos = '\0';
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
239 }
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
240
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
241 if (*args_max == *args_len + 1)
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
242 {
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
243 *args_max += 10;
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
244 *args = g_realloc (*args, sizeof (char *) * *args_max);
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
245 }
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
246
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
247 (*args)[(*args_len)++] = g_strdup (curpos);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
248 (*args)[*args_len] = NULL;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
249
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
250 if (!at_end)
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
251 {
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
252 *endpos = save_char;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
253 curpos = endpos + 1;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
254 while (*curpos == ' ')
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
255 curpos++;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
256 }
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
257 }
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
258 }
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
259
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
260
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
261 static char **
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
262 sshv2_gen_exec_args (gftp_request * request)
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
263 {
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
264 size_t logstr_len, args_len, args_cur;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
265 char **args, *tempstr, *logstr;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
266
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
267 gftp_lookup_request_option (request, "ssh_prog_name", &tempstr);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
268 if (tempstr == NULL || *tempstr == '\0')
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
269 tempstr = "ssh";
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
270
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
271 args_len = 1;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
272 args_cur = 15;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
273 args = g_malloc (sizeof (char *) * args_cur);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
274 args[0] = g_strdup (tempstr);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
275
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
276 logstr = g_strdup (args[0]);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
277 logstr_len = strlen (logstr);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
278
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
279 gftp_lookup_request_option (request, "ssh_extra_params", &tempstr);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
280 if (tempstr != NULL && *tempstr != '\0')
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
281 sshv2_add_exec_args (&logstr, &logstr_len, &args, &args_len, &args_cur,
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
282 "%s", tempstr);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
283
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
284 sshv2_add_exec_args (&logstr, &logstr_len, &args, &args_len, &args_cur,
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
285 " -e none");
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
286
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
287 if (request->username && *request->username != '\0')
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
288 sshv2_add_exec_args (&logstr, &logstr_len, &args, &args_len, &args_cur,
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
289 " -l %s", request->username);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
290
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
291 sshv2_add_exec_args (&logstr, &logstr_len, &args, &args_len, &args_cur,
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
292 " -p %d", request->port);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
293
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
294 sshv2_add_exec_args (&logstr, &logstr_len, &args, &args_len, &args_cur,
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
295 " %s -s sftp", request->hostname);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
296
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
297 request->logging_function (gftp_logging_misc, request,
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
298 _("Running program %s\n"), logstr);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
299 g_free (logstr);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
300 return (args);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
301 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
302
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
303
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
304 static int
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
305 sshv2_start_login_sequence (gftp_request * request, int fdm, int ptymfd)
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
306 {
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
307 char *tempstr, *temp1str, *pwstr, *yesstr = "yes\n", *securid_pass;
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
308 int wrotepw, ok, maxfd, ret, clear_tempstr;
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
309 size_t rem, len, diff;
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
310 fd_set rset, eset;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
311 ssize_t rd;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
312
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
313 rem = len = SSH_LOGIN_BUFSIZE;
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
314 diff = 0;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
315 tempstr = g_malloc0 (len + 1);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
316 wrotepw = 0;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
317 ok = 1;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
318
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
319 if (gftp_fd_set_sockblocking (request, fdm, 1) == -1)
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
320 return (GFTP_ERETRYABLE);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
321
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
322 if (gftp_fd_set_sockblocking (request, ptymfd, 1) == -1)
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
323 return (GFTP_ERETRYABLE);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
324
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
325 if (request->password == NULL)
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
326 pwstr = g_strdup ("\n");
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
327 else
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
328 pwstr = g_strconcat (request->password, "\n", NULL);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
329
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
330 FD_ZERO (&rset);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
331 FD_ZERO (&eset);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
332 maxfd = fdm > ptymfd ? fdm : ptymfd;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
333
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
334 errno = 0;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
335 while (1)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
336 {
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
337 FD_SET (fdm, &rset);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
338 FD_SET (ptymfd, &rset);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
339
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
340 FD_SET (fdm, &eset);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
341 FD_SET (ptymfd, &eset);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
342
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
343 ret = select (maxfd + 1, &rset, NULL, &eset, NULL);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
344 if (ret < 0 && errno == EINTR)
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
345 continue;
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
346
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
347 if (ret < 0)
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
348 {
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
349 request->logging_function (gftp_logging_error, request,
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
350 _("Connection to %s timed out\n"),
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
351 request->hostname);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
352 gftp_disconnect (request);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
353 return (GFTP_ERETRYABLE);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
354 }
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
355
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
356 if (FD_ISSET (fdm, &eset) || FD_ISSET (ptymfd, &eset))
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
357 {
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
358 request->logging_function (gftp_logging_error, request,
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
359 _("Error: Could not read from socket: %s\n"),
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
360 g_strerror (errno));
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
361 gftp_disconnect (request);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
362 return (GFTP_ERETRYABLE);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
363 }
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
364
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
365 if (FD_ISSET (fdm, &rset))
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
366 {
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
367 ok = 1;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
368 break;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
369 }
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
370 else if (!FD_ISSET (ptymfd, &rset))
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
371 continue;
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
372
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
373 rd = gftp_fd_read (request, tempstr + diff, rem - 1, ptymfd);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
374 if (rd < 0)
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
375 return (rd);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
376 else if (rd == 0)
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
377 continue;
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
378
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
379 tempstr[diff + rd] = '\0';
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
380 request->logging_function (gftp_logging_recv, request, "%s", tempstr + diff);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
381 rem -= rd;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
382 diff += rd;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
383
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
384 if (strcmp (tempstr, "Password:") == 0 ||
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
385 (diff >= 10 && strcmp (tempstr + diff - 9, "assword: ") == 0) ||
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
386 strstr (tempstr, "Enter passphrase for RSA key") != NULL ||
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
387 strstr (tempstr, "Enter passphrase for key '") != NULL)
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
388 {
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
389 clear_tempstr = 1;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
390 if (wrotepw)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
391 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
392 ok = SSH_ERROR_BADPASS;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
393 break;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
394 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
395
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
396 wrotepw = 1;
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
397 if (gftp_fd_write (request, pwstr, strlen (pwstr), ptymfd) < 0)
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
398 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
399 ok = 0;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
400 break;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
401 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
402 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
403 else if (diff > 10 && strcmp (tempstr + diff - 10, "(yes/no)? ") == 0)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
404 {
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
405 clear_tempstr = 1;
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
406 if (!gftpui_protocol_ask_yes_no (request, request->hostname, tempstr))
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
407 {
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
408 ok = SSH_ERROR_QUESTION;
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
409 break;
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
410 }
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
411 else
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
412 {
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
413 if (gftp_fd_write (request, yesstr, strlen (yesstr), ptymfd) < 0)
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
414 {
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
415 ok = 0;
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
416 break;
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
417 }
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
418 }
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
419 }
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
420 else if (strstr (tempstr, "Enter PASSCODE:") != NULL)
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
421 {
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
422 clear_tempstr = 1;
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
423 securid_pass = gftpui_protocol_ask_user_input (request,
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
424 _("Enter Password"),
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
425 _("Enter SecurID Password:"), 0);
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
426
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
427 if (securid_pass == NULL || *securid_pass == '\0')
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
428 {
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
429 ok = SSH_ERROR_BADPASS;
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
430 break;
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
431 }
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
432
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
433 temp1str = g_strconcat (securid_pass, "\n", NULL);
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
434
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
435 ret = gftp_fd_write (request, temp1str, strlen (temp1str), ptymfd);
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
436
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
437 memset (temp1str, 0, strlen (temp1str));
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
438 g_free (temp1str);
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
439 memset (securid_pass, 0, strlen (securid_pass));
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
440 g_free (securid_pass);
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
441
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
442 if (ret <= 0)
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
443 {
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
444 ok = 0;
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
445 break;
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
446 }
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
447 }
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
448 else if (rem <= 1)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
449 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
450 len += SSH_LOGIN_BUFSIZE;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
451 rem += SSH_LOGIN_BUFSIZE;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
452 tempstr = g_realloc (tempstr, len);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
453 continue;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
454 }
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
455 else
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
456 clear_tempstr = 0;
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
457
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
458 if (clear_tempstr)
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
459 {
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
460 *tempstr = '\0';
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
461 rem = SSH_LOGIN_BUFSIZE;
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
462 diff = 0;
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
463 }
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
464 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
465
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
466 g_free (pwstr);
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
467 g_free (tempstr);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
468
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
469 if (ok <= 0)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
470 {
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
471 request->logging_function (gftp_logging_error, request, "\n");
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
472
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
473 if (ok == SSH_ERROR_BADPASS)
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
474 request->logging_function (gftp_logging_error, request,
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
475 _("Error: An incorrect password was entered\n"));
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
476
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 458
diff changeset
477 gftp_disconnect (request);
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
478 return (GFTP_EFATAL);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
479 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
480
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
481 return (0);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
482 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
483
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
484
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
485 static void
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
486 sshv2_log_command (gftp_request * request, gftp_logging_level level,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
487 char type, char *message, size_t length)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
488 {
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
489 guint32 id, num, attr, stattype;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
490 char *descr, *pos, oldchar;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
491 sshv2_params * params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
492
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
493 params = request->protocol_data;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
494 memcpy (&id, message, 4);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
495 id = ntohl (id);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
496 switch (type)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
497 {
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
498 case SSH_FXP_DATA:
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
499 case SSH_FXP_READ:
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
500 case SSH_FXP_WRITE:
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
501 break;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
502 case SSH_FXP_INIT:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
503 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
504 _("%d: Protocol Initialization\n"), id);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
505 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
506 case SSH_FXP_VERSION:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
507 request->logging_function (level, request,
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
508 _("%d: Protocol version %d\n"), id, id);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
509 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
510 case SSH_FXP_OPEN:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
511 memcpy (&num, message + 4, 4);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
512 num = ntohl (num);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
513 pos = message + 12 + num - 1;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
514 oldchar = *pos;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
515 *pos = '\0';
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
516 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
517 _("%d: Open %s\n"), id, message + 8);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
518 *pos = oldchar;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
519 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
520 case SSH_FXP_CLOSE:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
521 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
522 _("%d: Close\n"), id);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
523 case SSH_FXP_OPENDIR:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
524 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
525 _("%d: Open Directory %s\n"), id,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
526 message + 8);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
527 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
528 case SSH_FXP_READDIR:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
529 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
530 _("%d: Read Directory\n"), id);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
531 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
532 case SSH_FXP_REMOVE:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
533 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
534 _("%d: Remove file %s\n"), id,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
535 message + 8);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
536 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
537 case SSH_FXP_MKDIR:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
538 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
539 _("%d: Make directory %s\n"), id,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
540 message + 8);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
541 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
542 case SSH_FXP_RMDIR:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
543 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
544 _("%d: Remove directory %s\n"), id,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
545 message + 8);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
546 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
547 case SSH_FXP_REALPATH:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
548 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
549 _("%d: Realpath %s\n"), id,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
550 message + 8);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
551 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
552 case SSH_FXP_ATTRS:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
553 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
554 _("%d: File attributes\n"), id);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
555 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
556 case SSH_FXP_STAT:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
557 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
558 _("%d: Stat %s\n"), id,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
559 message + 8);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
560 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
561 case SSH_FXP_SETSTAT:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
562 memcpy (&num, message + 4, 4);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
563 num = ntohl (num);
529
c36a475ecf5a 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 528
diff changeset
564
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
565 memcpy (&stattype, message + 8 + num, 4);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
566 stattype = ntohl (stattype);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
567 memcpy (&attr, message + 12 + num, 4);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
568 attr = ntohl (attr);
529
c36a475ecf5a 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 528
diff changeset
569
c36a475ecf5a 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 528
diff changeset
570 pos = message + 8 + num;
c36a475ecf5a 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 528
diff changeset
571 oldchar = *pos;
c36a475ecf5a 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 528
diff changeset
572 *pos = '\0';
c36a475ecf5a 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 528
diff changeset
573
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
574 switch (stattype)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
575 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
576 case SSH_FILEXFER_ATTR_PERMISSIONS:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
577 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
578 _("%d: Chmod %s %o\n"), id,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
579 message + 8, attr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
580 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
581 case SSH_FILEXFER_ATTR_ACMODTIME:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
582 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
583 _("%d: Utime %s %d\n"), id,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
584 message + 8, attr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
585 }
529
c36a475ecf5a 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 528
diff changeset
586
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
587 *pos = oldchar;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
588 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
589 case SSH_FXP_STATUS:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
590 if (params->dont_log_status)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
591 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
592 memcpy (&num, message + 4, 4);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
593 num = ntohl (num);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
594 switch (num)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
595 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
596 case SSH_FX_OK:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
597 descr = _("OK");
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
598 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
599 case SSH_FX_EOF:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
600 descr = _("EOF");
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
601 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
602 case SSH_FX_NO_SUCH_FILE:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
603 descr = _("No such file or directory");
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
604 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
605 case SSH_FX_PERMISSION_DENIED:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
606 descr = _("Permission denied");
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
607 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
608 case SSH_FX_FAILURE:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
609 descr = _("Failure");
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
610 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
611 case SSH_FX_BAD_MESSAGE:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
612 descr = _("Bad message");
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
613 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
614 case SSH_FX_NO_CONNECTION:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
615 descr = _("No connection");
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
616 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
617 case SSH_FX_CONNECTION_LOST:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
618 descr = _("Connection lost");
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
619 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
620 case SSH_FX_OP_UNSUPPORTED:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
621 descr = _("Operation unsupported");
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
622 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
623 default:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
624 descr = _("Unknown message returned from server");
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
625 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
626 }
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
627 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
628 "%d: %s\n", id, descr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
629 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
630 case SSH_FXP_HANDLE:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
631 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
632 "%d: File handle\n", id);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
633 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
634 case SSH_FXP_NAME:
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
635 memcpy (&num, message + 4, 4);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
636 num = ntohl (num);
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
637 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
638 "%d: Filenames (%d entries)\n", id,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
639 num);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
640 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
641 default:
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
642 request->logging_function (level, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
643 "Command: %x\n", type);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
644 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
645 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
646
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
647
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
648 static int
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
649 sshv2_send_command (gftp_request * request, char type, char *command,
321
3e6d0c26e37b 2003-11-30 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
650 size_t len)
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
651 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
652 char buf[34000];
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
653 guint32 clen;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
654 int ret;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
655
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
656 if (len > 33995)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
657 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
658 request->logging_function (gftp_logging_error, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
659 _("Error: Message size %d too big\n"), len);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
660 gftp_disconnect (request);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
661 return (GFTP_EFATAL);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
662 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
663
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
664 clen = htonl (len + 1);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
665 memcpy (buf, &clen, 4);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
666 buf[4] = type;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
667 memcpy (&buf[5], command, len);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
668 buf[len + 5] = '\0';
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
669
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
670 #ifdef DEBUG
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
671 printf ("\rSending to FD %d: ", request->datafd);
61
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
672 for (clen=0; clen<len + 5; clen++)
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
673 printf ("%x ", buf[clen] & 0xff);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
674 printf ("\n");
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
675 #endif
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
676
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
677 sshv2_log_command (request, gftp_logging_send, type, buf + 5, len);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
678
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
679 if ((ret = gftp_fd_write (request, buf, len + 5, request->datafd)) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
680 return (ret);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
681
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
682 return (0);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
683 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
684
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
685
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
686 static int
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
687 sshv2_read_response (gftp_request * request, sshv2_message * message,
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
688 int fd)
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
689 {
219
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
690 char buf[6], error_buffer[255], *pos;
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
691 sshv2_params * params;
518
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
692 ssize_t numread;
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
693 size_t rem;
219
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
694
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
695 params = request->protocol_data;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
696
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
697 if (fd <= 0)
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
698 fd = request->datafd;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
699
61
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
700 pos = buf;
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
701 rem = 5;
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
702 while (rem > 0)
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
703 {
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 146
diff changeset
704 if ((numread = gftp_fd_read (request, pos, rem, fd)) < 0)
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
705 return (numread);
61
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
706 rem -= numread;
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
707 pos += numread;
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
708 }
219
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
709 buf[5] = '\0';
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
710
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
711 memcpy (&message->length, buf, 4);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
712 message->length = ntohl (message->length);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
713 if (message->length > 34000)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
714 {
219
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
715 if (params->initialized)
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
716 {
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
717 request->logging_function (gftp_logging_error, request,
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
718 _("Error: Message size %d too big from server\n"),
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
719 message->length);
219
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
720 }
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
721 else
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
722 {
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
723 request->logging_function (gftp_logging_error, request,
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
724 _("There was an error initializing a SSH connection with the remote server. The error message from the remote server follows:\n"), buf);
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
725
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
726 request->logging_function (gftp_logging_error, request, "%s", buf);
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
727
243
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 232
diff changeset
728 if (gftp_fd_set_sockblocking (request, fd, 0) == -1)
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 232
diff changeset
729 return (GFTP_EFATAL);
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 232
diff changeset
730
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 232
diff changeset
731 if ((numread = gftp_fd_read (NULL, error_buffer,
219
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
732 sizeof (error_buffer) - 1,
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
733 fd)) > 0)
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
734 {
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
735 error_buffer[numread] = '\0';
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
736 request->logging_function (gftp_logging_error, request,
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
737 "%s", error_buffer);
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
738 }
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
739 }
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
740
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
741 memset (message, 0, sizeof (*message));
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
742 gftp_disconnect (request);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
743 return (GFTP_EFATAL);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
744 }
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
745
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
746 message->command = buf[4];
61
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
747 message->buffer = g_malloc (message->length + 1);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
748
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
749 message->pos = message->buffer;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
750 message->end = message->buffer + message->length - 1;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
751
61
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
752 pos = message->buffer;
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
753 rem = message->length - 1;
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
754 while (rem > 0)
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
755 {
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 146
diff changeset
756 if ((numread = gftp_fd_read (request, pos, rem, fd)) < 0)
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
757 return (numread);
61
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
758 rem -= numread;
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
759 pos += numread;
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
760 }
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
761
61
42df9e4be8e0 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
762 message->buffer[message->length] = '\0';
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
763
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
764 sshv2_log_command (request, gftp_logging_recv, message->command,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
765 message->buffer, message->length);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
766
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
767 return (message->command);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
768 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
769
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
770
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
771 static void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
772 sshv2_destroy (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
773 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
774 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
775 g_return_if_fail (request->protonum == GFTP_SSHV2_NUM);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
776
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
777 g_free (request->protocol_data);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
778 request->protocol_data = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
779 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
780
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
781
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
782 static void
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
783 sshv2_message_free (sshv2_message * message)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
784 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
785 if (message->buffer)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
786 g_free (message->buffer);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
787 memset (message, 0, sizeof (*message));
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
788 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
789
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
790
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
791 static int
493
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
792 sshv2_wrong_response (gftp_request * request, sshv2_message * message)
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
793 {
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
794 request->logging_function (gftp_logging_error, request,
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
795 _("Received wrong response from server, disconnecting\n"));
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
796 gftp_disconnect (request);
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
797
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
798 if (message != NULL)
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
799 sshv2_message_free (message);
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
800
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
801 return (GFTP_EFATAL);
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
802 }
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
803
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
804
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
805 static int
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
806 sshv2_read_status_response (gftp_request * request, sshv2_message * message,
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
807 int fd, int fxp_is_retryable, int fxp_is_wrong)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
808 {
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
809 int ret;
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
810
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
811 memset (message, 0, sizeof (*message));
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
812 ret = sshv2_read_response (request, message, -1);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
813 if (ret < 0)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
814 return (ret);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
815 else if (fxp_is_retryable > 0 && ret == fxp_is_retryable)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
816 {
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
817 sshv2_message_free (message);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
818 return (GFTP_ERETRYABLE);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
819 }
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
820 else if (fxp_is_wrong > 0 && ret != fxp_is_wrong)
493
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
821 return (sshv2_wrong_response (request, message));
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
822
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
823 return (ret);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
824 }
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
825
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
826
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
827 static int
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
828 sshv2_buffer_get_int32 (gftp_request * request, sshv2_message * message,
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
829 int expected_response, guint32 * num)
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
830 {
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
831 guint32 snum;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
832
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
833 if (message->end - message->pos < 4)
493
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
834 return (sshv2_wrong_response (request, message));
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
835
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
836 memcpy (&snum, message->pos, 4);
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
837 snum = ntohl (snum);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
838 message->pos += 4;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
839
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
840 if (expected_response >= 0 && snum != expected_response)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
841 {
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
842 switch (snum)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
843 {
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
844 case SSH_FX_OK:
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
845 case SSH_FX_EOF:
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
846 case SSH_FX_NO_SUCH_FILE:
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
847 case SSH_FX_PERMISSION_DENIED:
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
848 case SSH_FX_FAILURE:
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
849 case SSH_FX_OP_UNSUPPORTED:
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
850 return (GFTP_ERETRYABLE);
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
851 default:
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
852 return (sshv2_wrong_response (request, message));
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
853 }
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
854 }
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
855
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
856 if (num != NULL)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
857 *num = snum;
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
858
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
859 return (0);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
860 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
861
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
862
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
863 static char *
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
864 sshv2_buffer_get_string (gftp_request * request, sshv2_message * message)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
865 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
866 char *string;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
867 guint32 len;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
868
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
869 if (sshv2_buffer_get_int32 (request, message, -1, &len) < 0)
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
870 return (NULL);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
871
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
872 if (len > SSH_MAX_STRING_SIZE || (message->end - message->pos < len))
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
873 {
493
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
874 sshv2_wrong_response (request, message);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
875 return (NULL);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
876 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
877
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
878 string = g_malloc (len + 1);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
879 memcpy (string, message->pos, len);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
880 string[len] = '\0';
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
881 message->pos += len;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
882 return (string);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
883 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
884
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
885
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
886 static int
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
887 sshv2_getcwd (gftp_request * request)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
888 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
889 sshv2_message message;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
890 char *tempstr, *dir;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
891 size_t len;
64
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
892 int ret;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
893
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
894 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
895 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
896
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
897 if (request->directory == NULL || *request->directory == '\0')
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
898 dir = ".";
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
899 else
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
900 dir = request->directory;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
901
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
902 len = strlen (dir) + 8;
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
903 tempstr = sshv2_initialize_string (request, len);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
904 sshv2_add_string_to_buf (tempstr + 4, dir);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
905
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
906 ret = sshv2_send_command (request, SSH_FXP_REALPATH, tempstr, len);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
907
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
908 g_free (tempstr);
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
909 if (ret < 0)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
910 return (ret);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
911
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
912 if (request->directory)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
913 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
914 g_free (request->directory);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
915 request->directory = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
916 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
917
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
918 ret = sshv2_read_status_response (request, &message, -1, SSH_FXP_STATUS,
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
919 SSH_FXP_NAME);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
920 if (ret < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
921 return (ret);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
922
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
923 message.pos += 4;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
924 if ((ret = sshv2_buffer_get_int32 (request, &message, 1, NULL)) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
925 return (ret);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
926
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
927 if ((request->directory = sshv2_buffer_get_string (request, &message)) == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
928 return (GFTP_EFATAL);
64
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
929
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
930 sshv2_message_free (&message);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
931 return (0);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
932 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
933
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
934
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
935 static void
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
936 sshv2_free_args (char **args)
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
937 {
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
938 int i;
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
939
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
940 for (i=0; args[i] != NULL; i++)
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
941 g_free (args[i]);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
942 g_free (args);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
943 }
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
944
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
945
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
946 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
947 sshv2_connect (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
948 {
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
949 struct servent serv_struct;
219
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
950 sshv2_params * params;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
951 sshv2_message message;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
952 int ret, fdm, ptymfd;
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
953 guint32 version;
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
954 char **args;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
955 pid_t child;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
956
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
957 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
958 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
959 g_return_val_if_fail (request->hostname != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
960
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
961 if (request->datafd > 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
962 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
963
219
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
964 params = request->protocol_data;
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
965
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
966 request->logging_function (gftp_logging_misc, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
967 _("Opening SSH connection to %s\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
968 request->hostname);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
969
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
970 if (request->port == 0)
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
971 {
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
972 if (!r_getservbyname ("ssh", "tcp", &serv_struct, NULL))
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
973 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
974 request->logging_function (gftp_logging_error, request,
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
975 _("Cannot look up service name %s/tcp. Please check your services file\n"),
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
976 "ssh");
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
977 }
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
978 else
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
979 request->port = ntohs (serv_struct.s_port);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
980 }
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
981
484
632036c6e4a4 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
982 args = sshv2_gen_exec_args (request);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
983
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
984 child = gftp_exec (request, &fdm, &ptymfd, args);
210
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
985
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
986 if (child == 0)
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
987 exit (0);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
988
210
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
989 sshv2_free_args (args);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
990
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
991 if (child < 0)
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
992 return (GFTP_ERETRYABLE);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
993
210
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
994 request->datafd = fdm;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
995
210
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
996 version = htonl (SSH_MY_VERSION);
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
997 if ((ret = sshv2_send_command (request, SSH_FXP_INIT, (char *)
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
998 &version, 4)) < 0)
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
999 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1000
458
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
1001 ret = sshv2_start_login_sequence (request, fdm, ptymfd);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
1002 if (ret < 0)
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
1003 return (ret);
656a0b3d1403 2004-4-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 399
diff changeset
1004
210
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
1005 memset (&message, 0, sizeof (message));
219
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1006 ret = sshv2_read_response (request, &message, -1);
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1007 if (ret < 0)
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1008 {
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1009 sshv2_message_free (&message);
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1010 return (ret);
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1011 }
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1012 else if (ret != SSH_FXP_VERSION)
493
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
1013 return (sshv2_wrong_response (request, &message));
219
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1014
210
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
1015 sshv2_message_free (&message);
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
1016
219
b9584a877daf 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1017 params->initialized = 1;
210
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
1018 request->logging_function (gftp_logging_misc, request,
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
1019 _("Successfully logged into SSH server %s\n"),
82ebd1b05345 2003-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
1020 request->hostname);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1021
64
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1022 if (sshv2_getcwd (request) < 0)
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1023 {
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1024 if (request->directory)
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1025 g_free (request->directory);
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1026
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1027 request->directory = g_strdup (".");
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1028 if ((ret = sshv2_getcwd (request)) < 0)
64
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1029 {
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1030 gftp_disconnect (request);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1031 return (ret);
64
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1032 }
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1033 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1034
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1035 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1036 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1037
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1038
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1039 static void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1040 sshv2_disconnect (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1041 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1042 sshv2_params * params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1043
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1044 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1045 g_return_if_fail (request->protonum == GFTP_SSHV2_NUM);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1046
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1047 params = request->protocol_data;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1048
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
1049 if (request->datafd > 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1050 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
1051 request->logging_function (gftp_logging_misc, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1052 _("Disconnecting from site %s\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1053 request->hostname);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1054
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
1055 if (close (request->datafd) < 0)
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
1056 request->logging_function (gftp_logging_error, request,
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1057 _("Error closing file descriptor: %s\n"),
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1058 g_strerror (errno));
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1059
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
1060 request->datafd = -1;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1061 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1062
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1063 if (params->message.buffer != NULL)
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1064 {
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1065 sshv2_message_free (&params->message);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1066 params->message.buffer = NULL;
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1067 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1068 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1069
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1070
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1071 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1072 sshv2_end_transfer (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1073 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1074 sshv2_params * params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1075 sshv2_message message;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1076 guint32 len;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1077 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1078
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1079 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1080 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1081
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1082 params = request->protocol_data;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1083 if (params->message.buffer != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1084 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1085 sshv2_message_free (&params->message);
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1086 params->message.buffer = NULL;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1087 params->count = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1088 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1089
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1090 if (params->handle_len > 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1091 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1092 len = htonl (params->id++);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1093 memcpy (params->handle, &len, 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1094
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1095 if ((ret = sshv2_send_command (request, SSH_FXP_CLOSE, params->handle,
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1096 params->handle_len)) < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1097 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1098
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1099 ret = sshv2_read_status_response (request, &message, -1, 0,
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1100 SSH_FXP_STATUS);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1101 if (ret < 0)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1102 return (ret);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1103
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1104 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1105 params->handle_len = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1106 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1107
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1108 if (params->read_buffer != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1109 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1110 g_free (params->read_buffer);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1111 params->read_buffer = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1112 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1113
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1114 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1115 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1116
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1117
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1118 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1119 sshv2_list_files (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1120 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1121 sshv2_params * params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1122 sshv2_message message;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1123 char *tempstr;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1124 size_t len;
64
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1125 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1126
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1127 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1128 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
1129 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1130
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1131 params = request->protocol_data;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1132
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
1133 request->logging_function (gftp_logging_misc, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1134 _("Retrieving directory listing...\n"));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1135
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1136 len = strlen (request->directory) + 8;
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1137 tempstr = sshv2_initialize_string (request, len);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1138 sshv2_add_string_to_buf (tempstr + 4, request->directory);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1139
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1140 ret = sshv2_send_command (request, SSH_FXP_OPENDIR, tempstr, len);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1141
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1142 g_free (tempstr);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1143 if (ret < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1144 return (ret);
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1145
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1146 ret = sshv2_read_status_response (request, &message, -1, SSH_FXP_STATUS,
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1147 SSH_FXP_HANDLE);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1148 if (ret < 0)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1149 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1150
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1151 if (message.length - 4 > SSH_MAX_HANDLE_SIZE)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1152 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
1153 request->logging_function (gftp_logging_error, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1154 _("Error: Message size %d too big from server\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1155 message.length - 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1156 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1157 gftp_disconnect (request);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1158 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1159 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1160
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1161 memset (params->handle, 0, 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1162 memcpy (params->handle + 4, message.buffer + 4, message.length - 5);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1163 params->handle_len = message.length - 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1164 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1165 params->count = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1166 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1167 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1168
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1169
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1170 static int
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1171 sshv2_decode_file_attributes (gftp_request * request, sshv2_message * message,
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1172 gftp_file * fle)
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1173 {
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1174 guint32 attrs, hinum, num, count, i;
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1175 int ret;
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1176
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1177 if ((ret = sshv2_buffer_get_int32 (request, message, -1, &attrs)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1178 return (ret);
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1179
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1180 if (attrs & SSH_FILEXFER_ATTR_SIZE)
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1181 {
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1182 if ((ret = sshv2_buffer_get_int32 (request, message, -1, &hinum)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1183 return (ret);
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1184
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1185 if ((ret = sshv2_buffer_get_int32 (request, message, -1, &num)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1186 return (ret);
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1187
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1188 #if G_HAVE_GINT64
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1189 fle->size = (gint64) num | ((gint64) hinum >> 32);
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1190 #else
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1191 fle->size = num;
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1192 #endif
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1193 }
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1194
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1195 if (attrs & SSH_FILEXFER_ATTR_UIDGID)
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1196 {
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1197 if ((ret = sshv2_buffer_get_int32 (request, message, -1, NULL)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1198 return (ret);
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1199
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1200 if ((ret = sshv2_buffer_get_int32 (request, message, -1, NULL)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1201 return (ret);
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1202 }
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1203
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1204 if (attrs & SSH_FILEXFER_ATTR_PERMISSIONS)
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1205 {
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1206 if ((ret = sshv2_buffer_get_int32 (request, message, -1, &num)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1207 return (ret);
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1208
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1209 fle->st_mode = num;
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1210 }
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1211
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1212 if (attrs & SSH_FILEXFER_ATTR_ACMODTIME)
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1213 {
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1214 if ((ret = sshv2_buffer_get_int32 (request, message, -1, NULL)) < 0)
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1215 return (num);
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1216
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1217 if ((ret = sshv2_buffer_get_int32 (request, message, -1, &num)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1218 return (ret);
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1219
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1220 fle->datetime = num;
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1221 }
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1222
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1223 if (attrs & SSH_FILEXFER_ATTR_EXTENDED)
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1224 {
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1225 if ((ret = sshv2_buffer_get_int32 (request, message, -1, &count)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1226 return (ret);
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1227
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1228 for (i=0; i<count; i++)
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1229 {
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1230 if ((ret = sshv2_buffer_get_int32 (request, message, -1, &num)) < 0 ||
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1231 message->pos + num + 4 > message->end)
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1232 return (GFTP_EFATAL);
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1233
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1234 message->pos += num + 4;
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1235
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1236 if ((ret = sshv2_buffer_get_int32 (request, message, -1, &num)) < 0 ||
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1237 message->pos + num + 4 > message->end)
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1238 return (GFTP_EFATAL);
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1239
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1240 message->pos += num + 4;
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1241 }
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1242 }
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1243
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1244 return (0);
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1245 }
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1246
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1247
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1248 static int
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1249 sshv2_get_next_file (gftp_request * request, gftp_file * fle, int fd)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1250 {
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1251 guint32 len, longnamelen;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1252 int ret, retsize, iret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1253 sshv2_params *params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1254 char *longname;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1255
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1256 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1257 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1258 g_return_val_if_fail (fle != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1259
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1260 params = request->protocol_data;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1261
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1262 if (request->last_dir_entry)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1263 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1264 g_free (request->last_dir_entry);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1265 request->last_dir_entry = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1266 request->last_dir_entry_len = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1267 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1268 retsize = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1269
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1270 if (params->count > 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1271 ret = SSH_FXP_NAME;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1272 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1273 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1274 if (!request->cached)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1275 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1276 if (params->message.buffer != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1277 sshv2_message_free (&params->message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1278
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1279 len = htonl (params->id++);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1280 memcpy (params->handle, &len, 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1281
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1282 if ((ret = sshv2_send_command (request, SSH_FXP_READDIR,
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1283 params->handle,
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1284 params->handle_len)) < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1285 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1286 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1287
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1288 if ((ret = sshv2_read_response (request, &params->message, fd)) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1289 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1290
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1291 if (!request->cached)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1292 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1293 request->last_dir_entry = g_malloc (params->message.length + 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1294 len = htonl (params->message.length);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1295 memcpy (request->last_dir_entry, &len, 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1296 request->last_dir_entry[4] = params->message.command;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1297 memcpy (request->last_dir_entry + 5, params->message.buffer,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1298 params->message.length - 1);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1299 request->last_dir_entry_len = params->message.length + 4;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1300 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1301
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1302 if (ret == SSH_FXP_NAME)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1303 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1304 params->message.pos = params->message.buffer + 4;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1305 if ((iret = sshv2_buffer_get_int32 (request,
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1306 &params->message, -1,
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1307 &params->count)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1308 return (iret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1309 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1310 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1311
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1312 if (ret == SSH_FXP_NAME)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1313 {
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1314 if (sshv2_buffer_get_int32 (request, &params->message, -1, &len) < 0 ||
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1315 params->message.pos + len > params->message.end)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1316 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1317
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1318 params->message.pos += len;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1319
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1320 if (sshv2_buffer_get_int32 (request, &params->message, -1,
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1321 &longnamelen) < 0 ||
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1322 params->message.pos + longnamelen > params->message.end)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1323 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1324
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1325 longname = params->message.pos;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1326 longname[longnamelen] = '\0';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1327
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1328 /* The commercial SSH2 puts a / and * after some entries */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1329 if (longname[longnamelen - 1] == '*')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1330 longname[--longnamelen] = '\0';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1331 if (longname[longnamelen - 1] == '/')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1332 longname[--longnamelen] = '\0';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1333
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1334 params->message.pos += longnamelen;
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1335
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 484
diff changeset
1336 if ((ret = gftp_parse_ls (request, longname, fle, 0)) < 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1337 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1338 gftp_file_destroy (fle);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1339 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1340 }
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1341
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1342 if ((ret = sshv2_decode_file_attributes (request, &params->message,
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1343 fle)) < 0)
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1344 {
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1345 gftp_file_destroy (fle);
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1346 return (ret);
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1347 }
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1348
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1349 retsize = strlen (longname);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1350 params->count--;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1351 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1352 else if (ret == SSH_FXP_STATUS)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1353 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1354 sshv2_message_free (&params->message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1355 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1356 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1357 else
493
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
1358 return (sshv2_wrong_response (request, &params->message));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1359
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1360 return (retsize);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1361 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1362
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1363
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1364 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1365 sshv2_chdir (gftp_request * request, const char *directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1366 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1367 sshv2_message message;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1368 char *tempstr, *dir;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1369 size_t len;
64
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1370 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1371
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1372 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1373 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1374
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1375 if (request->directory != directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1376 {
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1377 len = 0;
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1378 tempstr = sshv2_initialize_string_with_path (request, directory,
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1379 &len, NULL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1380
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1381 ret = sshv2_send_command (request, SSH_FXP_REALPATH, tempstr, len);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1382
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1383 g_free (tempstr);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1384 if (ret < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1385 return (ret);
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1386
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1387 ret = sshv2_read_status_response (request, &message, -1, SSH_FXP_STATUS,
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1388 SSH_FXP_NAME);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1389 if (ret < 0)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1390 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1391
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1392 message.pos += 4;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1393 if ((ret = sshv2_buffer_get_int32 (request, &message, 1, NULL)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1394 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1395
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1396 if ((dir = sshv2_buffer_get_string (request, &message)) == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1397 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1398
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1399 if (request->directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1400 g_free (request->directory);
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1401
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1402 request->directory = dir;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1403 sshv2_message_free (&message);
64
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1404 return (0);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1405 }
284
9f121f62284b 2003-10-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 245
diff changeset
1406
9f121f62284b 2003-10-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 245
diff changeset
1407 return (0);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1408 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1409
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1410
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1411 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1412 sshv2_rmdir (gftp_request * request, const char *directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1413 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1414 sshv2_message message;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1415 char *tempstr;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1416 size_t len;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1417 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1418
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1419 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1420 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1421 g_return_val_if_fail (directory != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1422
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1423 len = 0;
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1424 tempstr = sshv2_initialize_string_with_path (request, directory, &len, NULL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1425
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1426 ret = sshv2_send_command (request, SSH_FXP_RMDIR, tempstr, len);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1427
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1428 g_free (tempstr);
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1429 if (ret < 0)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1430 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1431
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1432 memset (&message, 0, sizeof (message));
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1433 if ((ret = sshv2_read_response (request, &message, -1)) < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1434 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1435
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1436 message.pos += 4;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1437 if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1438 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1439
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1440 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1441
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1442 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1443 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1444
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1445
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1446 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1447 sshv2_rmfile (gftp_request * request, const char *file)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1448 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1449 sshv2_message message;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1450 char *tempstr;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1451 size_t len;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1452 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1453
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1454 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1455 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1456 g_return_val_if_fail (file != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1457
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1458 len = 0;
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1459 tempstr = sshv2_initialize_string_with_path (request, file, &len, NULL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1460
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1461 ret = sshv2_send_command (request, SSH_FXP_REMOVE, tempstr, len);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1462
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1463 g_free (tempstr);
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1464 if (ret < 0)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1465 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1466
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1467 memset (&message, 0, sizeof (message));
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1468 if ((ret = sshv2_read_response (request, &message, -1)) < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1469 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1470
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1471 message.pos += 4;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1472 if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1473 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1474
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1475 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1476
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1477 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1478 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1479
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1480
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1481 static int
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1482 sshv2_chmod (gftp_request * request, const char *file, mode_t mode)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1483 {
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1484 char *tempstr, *endpos, buf[10];
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1485 sshv2_message message;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1486 guint32 num;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1487 size_t len;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1488 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1489
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1490 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1491 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1492 g_return_val_if_fail (file != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1493
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1494 len = 8; /* For attributes */
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1495 tempstr = sshv2_initialize_string_with_path (request, file, &len, &endpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1496
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1497 num = htonl (SSH_FILEXFER_ATTR_PERMISSIONS);
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1498 memcpy (endpos, &num, 4);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1499
529
c36a475ecf5a 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 528
diff changeset
1500 g_snprintf (buf, sizeof (buf), "%o", mode);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1501 num = htonl (strtol (buf, NULL, 8));
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1502 memcpy (endpos + 4, &num, 4);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1503
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1504 ret = sshv2_send_command (request, SSH_FXP_SETSTAT, tempstr, len);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1505
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1506 g_free (tempstr);
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1507 if (ret < 0)
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1508 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1509
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1510 memset (&message, 0, sizeof (message));
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1511 if ((ret = sshv2_read_response (request, &message, -1)) < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1512 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1513
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1514 message.pos += 4;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1515 if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1516 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1517
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1518 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1519
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1520 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1521 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1522
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1523
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1524 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1525 sshv2_mkdir (gftp_request * request, const char *newdir)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1526 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1527 sshv2_message message;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1528 char *tempstr;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1529 size_t len;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1530 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1531
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1532 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1533 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1534 g_return_val_if_fail (newdir != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1535
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1536 len = 4; /* For attributes */
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1537 tempstr = sshv2_initialize_string_with_path (request, newdir, &len, NULL);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1538
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1539 /* No need to set attributes since all characters of the tempstr buffer is
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1540 initialized to 0 */
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1541
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1542 ret = sshv2_send_command (request, SSH_FXP_MKDIR, tempstr, len);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1543
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1544 g_free (tempstr);
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1545 if (ret < 0)
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1546 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1547
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1548 memset (&message, 0, sizeof (message));
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1549 if ((ret = sshv2_read_response (request, &message, -1)) < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1550 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1551
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1552 message.pos += 4;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1553 if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1554 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1555
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1556 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1557
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1558 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1559 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1560
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1561
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1562 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1563 sshv2_rename (gftp_request * request, const char *oldname, const char *newname)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1564 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1565 char *tempstr, *oldstr, *newstr;
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1566 size_t oldlen, newlen, len;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1567 sshv2_message message;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1568 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1569
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1570 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1571 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1572 g_return_val_if_fail (oldname != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1573 g_return_val_if_fail (newname != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1574
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1575 if (*oldname == '/')
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1576 oldstr = g_strdup (oldname);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1577 else
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1578 oldstr = gftp_build_path (request->directory, oldname, NULL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1579
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1580 if (*newname == '/')
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1581 newstr = g_strdup (newname);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1582 else
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1583 newstr = gftp_build_path (request->directory, newname, NULL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1584
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1585 oldlen = strlen (oldstr);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1586 newlen = strlen (newname);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1587
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1588 len = oldlen + newlen + 12;
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1589 tempstr = sshv2_initialize_string (request, len);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1590 sshv2_add_string_to_buf (tempstr + 4, oldstr);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1591 sshv2_add_string_to_buf (tempstr + 8 + oldlen, newstr);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1592
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1593 g_free (oldstr);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1594 g_free (newstr);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1595
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1596 ret = sshv2_send_command (request, SSH_FXP_RENAME, tempstr, len);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1597
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1598 g_free (tempstr);
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1599 if (ret < 0)
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1600 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1601
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1602 memset (&message, 0, sizeof (message));
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1603 if ((ret = sshv2_read_response (request, &message, -1)) < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1604 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1605
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1606 message.pos += 4;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1607 if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1608 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1609
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1610 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1611
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1612 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1613 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1614
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1615
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1616 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1617 sshv2_set_file_time (gftp_request * request, const char *file, time_t datetime)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1618 {
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1619 char *tempstr, *endpos;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1620 sshv2_message message;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1621 guint32 num;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1622 size_t len;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1623 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1624
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1625 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1626 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1627 g_return_val_if_fail (file != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1628
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1629 len = 12; /* For date/time */
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1630 tempstr = sshv2_initialize_string_with_path (request, file, &len, &endpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1631
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1632 num = htonl (SSH_FILEXFER_ATTR_ACMODTIME);
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1633 memcpy (endpos, &num, 4);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1634
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1635 num = htonl (datetime);
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1636 memcpy (endpos + 4, &num, 4);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1637 memcpy (endpos + 8, &num, 4);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1638
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1639 ret = sshv2_send_command (request, SSH_FXP_SETSTAT, tempstr, len);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1640
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1641 g_free (tempstr);
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1642 if (ret < 0)
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1643 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1644
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1645 memset (&message, 0, sizeof (message));
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1646 if ((ret = sshv2_read_response (request, &message, -1)) < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1647 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1648
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1649 message.pos += 4;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1650 if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1651 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1652
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1653 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1654
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1655 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1656 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1657
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1658
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1659 static int
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1660 sshv2_send_stat_command (gftp_request * request, const char *filename,
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1661 gftp_file * fle)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1662 {
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1663 sshv2_message message;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1664 char *tempstr;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1665 size_t len;
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1666 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1667
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1668 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1669 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1670 g_return_val_if_fail (filename != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1671
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1672 len = 0;
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1673 tempstr = sshv2_initialize_string_with_path (request, filename, &len, NULL);
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1674
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1675 ret = sshv2_send_command (request, SSH_FXP_STAT, tempstr, len);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1676
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1677 g_free (tempstr);
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1678 if (ret < 0)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1679 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1680
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1681 ret = sshv2_read_status_response (request, &message, -1, SSH_FXP_STATUS,
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1682 SSH_FXP_ATTRS);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1683 if (ret < 0)
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1684 return (ret);
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1685
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1686 if (message.length < 5)
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1687 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1688
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1689 message.pos += 4;
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1690 if ((ret = sshv2_decode_file_attributes (request, &message, fle)) < 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1691 {
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1692 gftp_file_destroy (fle);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1693 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1694 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1695
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1696 sshv2_message_free (&message);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1697
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1698 return (0);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1699 }
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1700
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1701
520
e67a52327b24 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 519
diff changeset
1702 static int
e67a52327b24 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 519
diff changeset
1703 sshv2_stat_filename (gftp_request * request, const char *filename,
e67a52327b24 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 519
diff changeset
1704 mode_t * mode)
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1705 {
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1706 gftp_file fle;
526
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
1707 int ret;
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1708
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1709 memset (&fle, 0, sizeof (fle));
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1710 ret = sshv2_send_stat_command (request, filename, &fle);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1711 if (ret < 0)
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1712 return (ret);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1713
520
e67a52327b24 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 519
diff changeset
1714 *mode = fle.st_mode;
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1715 gftp_file_destroy (&fle);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1716
520
e67a52327b24 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 519
diff changeset
1717 return (0);
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1718 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1719
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1720
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1721 static off_t
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1722 sshv2_get_file_size (gftp_request * request, const char *file)
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1723 {
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1724 gftp_file fle;
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1725 off_t size;
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1726 int ret;
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1727
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1728 memset (&fle, 0, sizeof (fle));
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1729 ret = sshv2_send_stat_command (request, file, &fle);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1730 if (ret < 0)
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1731 return (ret);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1732
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1733 size = fle.size;
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1734 gftp_file_destroy (&fle);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1735
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1736 return (size);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1737 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1738
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1739
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1740 static off_t
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1741 sshv2_get_file (gftp_request * request, const char *file, int fd,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1742 off_t startsize)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1743 {
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1744 char *tempstr, *endpos;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1745 sshv2_params * params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1746 sshv2_message message;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1747 guint32 num;
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1748 size_t len;
64
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1749 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1750
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1751 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1752 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
1753 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1754 /* fd ignored for this protocol */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1755
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1756 params = request->protocol_data;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1757 params->offset = startsize;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1758
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1759 len = 8;
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1760 tempstr = sshv2_initialize_string_with_path (request, file, &len, &endpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1761
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1762 num = htonl (SSH_FXF_READ);
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1763 memcpy (endpos, &num, 4);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1764
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1765 ret = sshv2_send_command (request, SSH_FXP_OPEN, tempstr, len);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1766
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1767 g_free (tempstr);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1768 if (ret < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1769 return (ret);
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1770
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1771 ret = sshv2_read_status_response (request, &message, -1, SSH_FXP_STATUS,
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1772 SSH_FXP_HANDLE);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1773 if (ret < 0)
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1774 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1775
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1776 if (message.length - 4 > SSH_MAX_HANDLE_SIZE)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1777 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
1778 request->logging_function (gftp_logging_error, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1779 _("Error: Message size %d too big from server\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1780 message.length - 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1781 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1782 gftp_disconnect (request);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1783 return (GFTP_ERETRYABLE);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1784
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1785 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1786
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1787 memset (params->handle, 0, 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1788 memcpy (params->handle + 4, message.buffer+ 4, message.length - 5);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1789 params->handle_len = message.length - 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1790 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1791
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1792 return (sshv2_get_file_size (request, file));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1793 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1794
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1795
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1796 static int
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1797 sshv2_put_file (gftp_request * request, const char *file, int fd,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1798 off_t startsize, off_t totalsize)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1799 {
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1800 char *tempstr, *endpos;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1801 sshv2_params * params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1802 sshv2_message message;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1803 size_t len, num;
64
29128554eb86 2002-11-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 63
diff changeset
1804 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1805
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1806 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1807 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
1808 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1809 /* fd ignored for this protocol */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1810
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1811 params = request->protocol_data;
399
e97f1fb92539 2004-2-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 380
diff changeset
1812 params->offset = startsize;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1813
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1814 len = 8;
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1815 tempstr = sshv2_initialize_string_with_path (request, file, &len, &endpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1816
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1817 if (startsize > 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1818 num = htonl (SSH_FXF_WRITE | SSH_FXF_CREAT | SSH_FXF_APPEND);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1819 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1820 num = htonl (SSH_FXF_WRITE | SSH_FXF_CREAT | SSH_FXF_TRUNC);
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1821 memcpy (endpos, &num, 4);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1822
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1823 ret = sshv2_send_command (request, SSH_FXP_OPEN, tempstr, len);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1824
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1825 g_free (tempstr);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1826 if (ret < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1827 return (ret);
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1828
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1829 ret = sshv2_read_status_response (request, &message, -1, SSH_FXP_STATUS,
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1830 SSH_FXP_HANDLE);
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1831 if (ret < 0)
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1832 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1833
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1834 if (message.length - 4 > SSH_MAX_HANDLE_SIZE)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1835 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
1836 request->logging_function (gftp_logging_error, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1837 _("Error: Message size %d too big from server\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1838 message.length - 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1839 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1840 gftp_disconnect (request);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1841 return (GFTP_ERETRYABLE);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1842
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1843 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1844
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1845 memset (params->handle, 0, 4);
321
3e6d0c26e37b 2003-11-30 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
1846 memcpy (params->handle + 4, message.buffer + 4, message.length - 5);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1847 params->handle_len = message.length - 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1848 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1849
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1850 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1851 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1852
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1853
518
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1854 #ifdef G_HAVE_GINT64
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1855
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1856 static gint64
519
c3edcd3e9db9 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
1857 sshv2_hton64 (gint64 val)
518
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1858 {
519
c3edcd3e9db9 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
1859 #if G_BYTE_ORDER != G_BIG_ENDIAN
c3edcd3e9db9 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
1860 return (GINT64_TO_BE (val));
c3edcd3e9db9 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
1861 #else
c3edcd3e9db9 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
1862 return (val);
c3edcd3e9db9 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
1863 #endif
518
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1864 }
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1865
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1866 #endif
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1867
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1868
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1869 static void
528
d32b05e07284 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 526
diff changeset
1870 sshv2_setup_file_offset (sshv2_params * params, char *buf)
518
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1871 {
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1872 guint32 hinum, lownum;
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1873 #ifdef G_HAVE_GINT64
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1874 gint64 offset;
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1875
519
c3edcd3e9db9 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
1876 offset = sshv2_hton64 (params->offset);
c3edcd3e9db9 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
1877 lownum = offset >> 32;
c3edcd3e9db9 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
1878 hinum = (guint32) offset;
518
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1879 #else
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1880 hinum = 0;
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1881 lownum = htonl (params->offset);
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1882 #endif
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1883
528
d32b05e07284 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 526
diff changeset
1884 memcpy (buf + params->handle_len, &hinum, 4);
d32b05e07284 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 526
diff changeset
1885 memcpy (buf + params->handle_len + 4, &lownum, 4);
518
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1886 }
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1887
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1888
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1889 static ssize_t
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1890 sshv2_get_next_file_chunk (gftp_request * request, char *buf, size_t size)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1891 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1892 sshv2_params * params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1893 sshv2_message message;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1894 guint32 num;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1895 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1896
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1897 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1898 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
1899 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1900 g_return_val_if_fail (buf != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1901
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1902 params = request->protocol_data;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1903
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1904 if (params->read_buffer == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1905 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1906 params->read_buffer = g_malloc (params->handle_len + 12);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1907 num = htonl (params->handle_len);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1908 memcpy (params->read_buffer, params->handle, params->handle_len);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1909 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1910
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1911 num = htonl (params->id++);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1912 memcpy (params->read_buffer, &num, 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1913
528
d32b05e07284 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 526
diff changeset
1914 sshv2_setup_file_offset (params, params->read_buffer);
518
c6a6e908dbaf 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 517
diff changeset
1915
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1916 num = htonl (size);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1917 memcpy (params->read_buffer + params->handle_len + 8, &num, 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1918
489
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1919 if (sshv2_send_command (request, SSH_FXP_READ, params->read_buffer,
913ea2819842 2004-6-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 487
diff changeset
1920 params->handle_len + 12) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1921 return (GFTP_ERETRYABLE);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1922
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1923 memset (&message, 0, sizeof (message));
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1924 if ((ret = sshv2_read_response (request, &message, -1)) != SSH_FXP_DATA)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1925 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1926 if (ret < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1927 return (ret);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1928
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1929 message.pos += 4;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1930 if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_EOF,
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1931 NULL)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1932 return (ret);
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 493
diff changeset
1933
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
1934 sshv2_message_free (&message);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1935 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1936 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1937
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1938 memcpy (&num, message.buffer + 4, 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1939 num = ntohl (num);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1940 if (num > size)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1941 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
1942 request->logging_function (gftp_logging_error, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1943 _("Error: Message size %d too big from server\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1944 num);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1945 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1946 gftp_disconnect (request);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1947 return (GFTP_ERETRYABLE);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1948
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1949 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1950
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1951 memcpy (buf, message.buffer + 8, num);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1952 sshv2_message_free (&message);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1953 params->offset += num;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1954 return (num);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1955 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1956
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1957
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1958 static ssize_t
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1959 sshv2_put_next_file_chunk (gftp_request * request, char *buf, size_t size)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1960 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1961 sshv2_params * params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1962 sshv2_message message;
380
05ee37a5558b 2003-1-28 Brian Masney <masneyb@gftp.org>
masneyb
parents: 341
diff changeset
1963 char tempstr[32768];
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1964 guint32 num;
321
3e6d0c26e37b 2003-11-30 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
1965 size_t len;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1966 int ret;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1967
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1968 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1969 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
1970 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1971 g_return_val_if_fail (buf != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1972 g_return_val_if_fail (size <= 32500, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1973
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1974 params = request->protocol_data;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1975
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1976 memcpy (tempstr, params->handle, params->handle_len);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1977
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1978 num = htonl (params->id++);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1979 memcpy (tempstr, &num, 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1980
528
d32b05e07284 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 526
diff changeset
1981 sshv2_setup_file_offset (params, tempstr);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1982
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1983 num = htonl (size);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1984 memcpy (tempstr + params->handle_len + 8, &num, 4);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1985 memcpy (tempstr + params->handle_len + 12, buf, size);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1986
321
3e6d0c26e37b 2003-11-30 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
1987 len = params->handle_len + size + 12;
3e6d0c26e37b 2003-11-30 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
1988 if (sshv2_send_command (request, SSH_FXP_WRITE, tempstr, len) < 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1989 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1990 g_free (tempstr);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1991 return (GFTP_ERETRYABLE);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1992 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1993
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1994 memset (&message, 0, sizeof (message));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1995 params->dont_log_status = 1;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1996 ret = sshv2_read_response (request, &message, -1);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1997 if (ret < 0)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1998 return (ret);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 64
diff changeset
1999
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2000 params->dont_log_status = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2001 if (ret != SSH_FXP_STATUS)
493
527d5b926928 2004-7-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 489
diff changeset
2002 return (sshv2_wrong_response (request, &message));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2003
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2004 message.pos += 4;
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
2005 if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, &num)) < 0)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
2006 {
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
2007 if (num == SSH_FX_EOF)
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
2008 return (0);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2009
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
2010 return (ret);
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
2011 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2012
525
7262851e3ae8 2004-8-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 521
diff changeset
2013 sshv2_message_free (&message);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2014 params->offset += size;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2015 return (size);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2016 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2017
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2018
177
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
2019 static int
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2020 sshv2_set_config_options (gftp_request * request)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2021 {
325
0fcc6468a0af 2003-12-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 321
diff changeset
2022 intptr_t ssh_need_userpass;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2023
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
2024 gftp_lookup_request_option (request, "ssh_need_userpass", &ssh_need_userpass);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2025 request->need_userpass = ssh_need_userpass;
177
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
2026 return (0);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2027 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2028
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2029
63
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2030 static void
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2031 sshv2_swap_socks (gftp_request * dest, gftp_request * source)
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2032 {
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2033 sshv2_params * sparams, * dparams;
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2034
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2035 sparams = source->protocol_data;
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2036 dparams = dest->protocol_data;
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2037 dparams->id = sparams->id;
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2038 }
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2039
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2040
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
2041 void
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
2042 sshv2_register_module (void)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
2043 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
2044 gftp_register_config_vars (config_vars);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
2045 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
2046
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
2047
526
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2048 static void
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2049 sshv2_copy_message (sshv2_message * src_message, sshv2_message * dest_message)
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2050 {
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2051 dest_message->length = src_message->length;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2052 dest_message->command = src_message->command;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2053 dest_message->buffer = g_strdup (src_message->buffer);
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2054 dest_message->pos = dest_message->buffer + (src_message->pos - src_message->buffer);
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2055 dest_message->end = dest_message->buffer + (src_message->end - src_message->buffer);
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2056 }
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2057
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2058
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2059 static void
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2060 sshv2_copy_param_options (gftp_request * dest_request,
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2061 gftp_request * src_request)
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2062 {
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2063 sshv2_params * dparms, * sparms;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2064
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2065 dparms = dest_request->protocol_data;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2066 sparms = src_request->protocol_data;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2067
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2068 memcpy (dparms->handle, sparms->handle, sizeof (*dparms->handle));
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2069 if (sparms->read_buffer)
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2070 dparms->read_buffer = g_strdup (sparms->read_buffer);
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2071 else
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2072 dparms->read_buffer = NULL;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2073
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2074 sshv2_copy_message (&sparms->message, &dparms->message);
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2075
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2076 dparms->id = sparms->id;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2077 dparms->count = sparms->count;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2078 dparms->handle_len = sparms->handle_len;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2079 dparms->initialized = sparms->initialized;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2080 dparms->dont_log_status = sparms->dont_log_status;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2081 dparms->offset = sparms->offset;
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2082 }
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2083
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2084
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
2085 int
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2086 sshv2_init (gftp_request * request)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2087 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2088 sshv2_params * params;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2089
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
2090 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2091
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2092 request->protonum = GFTP_SSHV2_NUM;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2093 request->init = sshv2_init;
526
990088b18285 2004-8-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 525
diff changeset
2094 request->copy_param_options = sshv2_copy_param_options;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2095 request->destroy = sshv2_destroy;
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 146
diff changeset
2096 request->read_function = gftp_fd_read;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 146
diff changeset
2097 request->write_function = gftp_fd_write;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2098 request->connect = sshv2_connect;
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 146
diff changeset
2099 request->post_connect = NULL;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2100 request->disconnect = sshv2_disconnect;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2101 request->get_file = sshv2_get_file;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2102 request->put_file = sshv2_put_file;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2103 request->transfer_file = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2104 request->get_next_file_chunk = sshv2_get_next_file_chunk;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2105 request->put_next_file_chunk = sshv2_put_next_file_chunk;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2106 request->end_transfer = sshv2_end_transfer;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2107 request->abort_transfer = sshv2_end_transfer; /* NOTE: uses sshv2_end_transfer */
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
2108 request->stat_filename = sshv2_stat_filename;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2109 request->list_files = sshv2_list_files;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2110 request->get_next_file = sshv2_get_next_file;
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 484
diff changeset
2111 request->get_next_dirlist_line = NULL;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2112 request->get_file_size = sshv2_get_file_size;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2113 request->chdir = sshv2_chdir;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2114 request->rmdir = sshv2_rmdir;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2115 request->rmfile = sshv2_rmfile;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2116 request->mkdir = sshv2_mkdir;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2117 request->rename = sshv2_rename;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2118 request->chmod = sshv2_chmod;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2119 request->set_file_time = sshv2_set_file_time;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2120 request->site = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2121 request->parse_url = NULL;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2122 request->set_config_options = sshv2_set_config_options;
63
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 61
diff changeset
2123 request->swap_socks = sshv2_swap_socks;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2124 request->url_prefix = "ssh2";
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2125 request->need_hostport = 1;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
2126 request->need_userpass = 1;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2127 request->use_cache = 1;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2128 request->always_connected = 0;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2129 request->protocol_data = g_malloc0 (sizeof (sshv2_params));
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
2130 request->server_type = GFTP_DIRTYPE_UNIX;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2131
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2132 params = request->protocol_data;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2133 params->id = 1;
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
2134
177
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
2135 return (gftp_set_config_options (request));
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
2136 }
487
dd22103b9552 2004-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
2137