Mercurial > gftp.yaz
comparison lib/sshv2.c @ 219:b9584a877daf
2003-7-9 Brian Masney <masneyb@gftp.org>
* lib/sshv2.c - if we are logging in to the server, and the message
size is too big from the server, assume that an error message follows
and log the ASCII text to the log window
* src/gtk/options_dialog.c - make sure the value is set properly for
the textcomboedt option types (the FTP proxy server type uses this)
* lib/rfc2068.c - HTTP proxy bug fixes. Also, moved rfc2068_connect()
call to rfc2068_send_command() and removed it from the now unneeded
places. Also, fix in call to HEAD command
* src/text/gftp-text.c - fixed NULL pointer deference in changing
directory
* docs/sample.gftp/gftprc - enable require SSH user/pass by default
author | masneyb |
---|---|
date | Wed, 09 Jul 2003 23:25:57 +0000 |
parents | de6a2e8e51cb |
children | a85a097bbb02 |
comparison
equal
deleted
inserted
replaced
218:de6a2e8e51cb | 219:b9584a877daf |
---|---|
80 dont_log_status : 1; /* For uploading files */ | 80 dont_log_status : 1; /* For uploading files */ |
81 sshv2_message message; | 81 sshv2_message message; |
82 | 82 |
83 gint32 id, | 83 gint32 id, |
84 count; | 84 count; |
85 unsigned int initialized : 1; | |
85 #ifdef G_HAVE_GINT64 | 86 #ifdef G_HAVE_GINT64 |
86 gint64 offset; | 87 gint64 offset; |
87 #else | 88 #else |
88 gint32 offset; | 89 gint32 offset; |
89 #endif | 90 #endif |
594 | 595 |
595 static int | 596 static int |
596 sshv2_read_response (gftp_request * request, sshv2_message * message, | 597 sshv2_read_response (gftp_request * request, sshv2_message * message, |
597 int fd) | 598 int fd) |
598 { | 599 { |
600 char buf[6], error_buffer[255], *pos; | |
601 sshv2_params * params; | |
599 ssize_t numread, rem; | 602 ssize_t numread, rem; |
600 char buf[5], *pos; | 603 |
604 params = request->protocol_data; | |
601 | 605 |
602 if (fd <= 0) | 606 if (fd <= 0) |
603 fd = request->datafd; | 607 fd = request->datafd; |
604 | 608 |
605 pos = buf; | 609 pos = buf; |
609 if ((numread = gftp_fd_read (request, pos, rem, fd)) < 0) | 613 if ((numread = gftp_fd_read (request, pos, rem, fd)) < 0) |
610 return ((int) numread); | 614 return ((int) numread); |
611 rem -= numread; | 615 rem -= numread; |
612 pos += numread; | 616 pos += numread; |
613 } | 617 } |
618 buf[5] = '\0'; | |
614 | 619 |
615 memcpy (&message->length, buf, 4); | 620 memcpy (&message->length, buf, 4); |
616 message->length = ntohl (message->length); | 621 message->length = ntohl (message->length); |
617 if (message->length > 34000) | 622 if (message->length > 34000) |
618 { | 623 { |
619 request->logging_function (gftp_logging_error, request, | 624 if (params->initialized) |
625 { | |
626 request->logging_function (gftp_logging_error, request, | |
620 _("Error: Message size %d too big from server\n"), | 627 _("Error: Message size %d too big from server\n"), |
621 message->length); | 628 message->length); |
629 } | |
630 else | |
631 { | |
632 request->logging_function (gftp_logging_error, request, | |
633 _("There was an error initializing a SSH connection with the remote server. The error message from the remote server follows:\n"), buf); | |
634 | |
635 request->logging_function (gftp_logging_error, request, "%s", buf); | |
636 | |
637 while ((numread = gftp_fd_read (request, error_buffer, | |
638 sizeof (error_buffer) - 1, | |
639 fd)) > 0) | |
640 { | |
641 error_buffer[numread] = '\0'; | |
642 request->logging_function (gftp_logging_error, request, | |
643 "%s", error_buffer); | |
644 } | |
645 } | |
646 | |
622 memset (message, 0, sizeof (*message)); | 647 memset (message, 0, sizeof (*message)); |
623 gftp_disconnect (request); | 648 gftp_disconnect (request); |
624 return (GFTP_EFATAL); | 649 return (GFTP_EFATAL); |
625 } | 650 } |
626 | 651 |
814 sshv2_connect (gftp_request * request) | 839 sshv2_connect (gftp_request * request) |
815 { | 840 { |
816 int version, ret, ssh_use_askpass, sshv2_use_sftp_subsys, fdm; | 841 int version, ret, ssh_use_askpass, sshv2_use_sftp_subsys, fdm; |
817 char **args, *tempstr, *p1, p2, *exepath, *ssh2_sftp_path; | 842 char **args, *tempstr, *p1, p2, *exepath, *ssh2_sftp_path; |
818 struct servent serv_struct; | 843 struct servent serv_struct; |
844 sshv2_params * params; | |
819 sshv2_message message; | 845 sshv2_message message; |
820 pid_t child; | 846 pid_t child; |
821 | 847 |
822 g_return_val_if_fail (request != NULL, GFTP_EFATAL); | 848 g_return_val_if_fail (request != NULL, GFTP_EFATAL); |
823 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); | 849 g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); |
824 g_return_val_if_fail (request->hostname != NULL, GFTP_EFATAL); | 850 g_return_val_if_fail (request->hostname != NULL, GFTP_EFATAL); |
825 | 851 |
826 if (request->datafd > 0) | 852 if (request->datafd > 0) |
827 return (0); | 853 return (0); |
828 | 854 |
855 params = request->protocol_data; | |
856 | |
829 request->logging_function (gftp_logging_misc, request, | 857 request->logging_function (gftp_logging_misc, request, |
830 _("Opening SSH connection to %s\n"), | 858 _("Opening SSH connection to %s\n"), |
831 request->hostname); | 859 request->hostname); |
832 | 860 |
833 /* Ugh!! We don't get a login banner from sftp-server, and if we are | 861 /* Ugh!! We don't get a login banner from sftp-server, and if we are |
898 if ((ret = sshv2_send_command (request, SSH_FXP_INIT, (char *) | 926 if ((ret = sshv2_send_command (request, SSH_FXP_INIT, (char *) |
899 &version, 4)) < 0) | 927 &version, 4)) < 0) |
900 return (ret); | 928 return (ret); |
901 | 929 |
902 memset (&message, 0, sizeof (message)); | 930 memset (&message, 0, sizeof (message)); |
903 if ((ret = sshv2_read_response (request, &message, -1)) != SSH_FXP_VERSION) | 931 ret = sshv2_read_response (request, &message, -1); |
932 if (ret < 0) | |
933 { | |
934 sshv2_message_free (&message); | |
935 return (ret); | |
936 } | |
937 else if (ret != SSH_FXP_VERSION) | |
904 { | 938 { |
905 request->logging_function (gftp_logging_error, request, | 939 request->logging_function (gftp_logging_error, request, |
906 _("Received wrong response from server, disconnecting\n")); | 940 _("Received wrong response from server, disconnecting\n")); |
907 sshv2_message_free (&message); | 941 sshv2_message_free (&message); |
908 gftp_disconnect (request); | 942 gftp_disconnect (request); |
909 | 943 |
910 if (ret < 0) | 944 return (GFTP_EFATAL); |
911 return (ret); | 945 } |
912 else | 946 |
913 return (GFTP_ERETRYABLE); | |
914 } | |
915 sshv2_message_free (&message); | 947 sshv2_message_free (&message); |
916 | 948 |
949 params->initialized = 1; | |
917 request->logging_function (gftp_logging_misc, request, | 950 request->logging_function (gftp_logging_misc, request, |
918 _("Successfully logged into SSH server %s\n"), | 951 _("Successfully logged into SSH server %s\n"), |
919 request->hostname); | 952 request->hostname); |
920 | 953 |
921 if (sshv2_getcwd (request) < 0) | 954 if (sshv2_getcwd (request) < 0) |
1075 _("Error: Message size %d too big from server\n"), | 1108 _("Error: Message size %d too big from server\n"), |
1076 message.length - 4); | 1109 message.length - 4); |
1077 sshv2_message_free (&message); | 1110 sshv2_message_free (&message); |
1078 gftp_disconnect (request); | 1111 gftp_disconnect (request); |
1079 return (GFTP_EFATAL); | 1112 return (GFTP_EFATAL); |
1080 | |
1081 } | 1113 } |
1082 | 1114 |
1083 memset (params->handle, 0, 4); | 1115 memset (params->handle, 0, 4); |
1084 memcpy (params->handle + 4, message.buffer + 4, message.length - 5); | 1116 memcpy (params->handle + 4, message.buffer + 4, message.length - 5); |
1085 params->handle_len = message.length - 1; | 1117 params->handle_len = message.length - 1; |