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;