[BACK]Return to sftp-client.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/sftp-client.c between version 1.39 and 1.40

version 1.39, 2003/01/10 08:19:07 version 1.40, 2003/01/10 08:48:15
Line 1 
Line 1 
 /*  /*
  * Copyright (c) 2001,2002 Damien Miller.  All rights reserved.   * Copyright (c) 2001-2003 Damien Miller.  All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions   * modification, are permitted provided that the following conditions
Line 49 
Line 49 
 /* Minimum amount of data to read at at time */  /* Minimum amount of data to read at at time */
 #define MIN_READ_SIZE   512  #define MIN_READ_SIZE   512
   
   /* Maximum packet size */
   #define MAX_MSG_LENGTH  (256 * 1024)
   
 struct sftp_conn {  struct sftp_conn {
         int fd_in;          int fd_in;
         int fd_out;          int fd_out;
Line 61 
Line 64 
 static void  static void
 send_msg(int fd, Buffer *m)  send_msg(int fd, Buffer *m)
 {  {
         int mlen = buffer_len(m);          u_char mlen[4];
         int len;  
         Buffer oqueue;  
   
         buffer_init(&oqueue);          if (buffer_len(m) > MAX_MSG_LENGTH)
         buffer_put_int(&oqueue, mlen);                  fatal("Outbound message too long %u", buffer_len(m));
         buffer_append(&oqueue, buffer_ptr(m), mlen);  
         buffer_consume(m, mlen);  
   
         len = atomicio(write, fd, buffer_ptr(&oqueue), buffer_len(&oqueue));          /* Send length first */
         if (len <= 0)          PUT_32BIT(mlen, buffer_len(m));
           if (atomicio(write, fd, mlen, sizeof(mlen)) <= 0)
                 fatal("Couldn't send packet: %s", strerror(errno));                  fatal("Couldn't send packet: %s", strerror(errno));
   
         buffer_free(&oqueue);          if (atomicio(write, fd, buffer_ptr(m), buffer_len(m)) <= 0)
                   fatal("Couldn't send packet: %s", strerror(errno));
   
           buffer_clear(m);
 }  }
   
 static void  static void
 get_msg(int fd, Buffer *m)  get_msg(int fd, Buffer *m)
 {  {
         u_int len, msg_len;          ssize_t len;
         unsigned char buf[4096];          u_int msg_len;
   
         len = atomicio(read, fd, buf, 4);          buffer_append_space(m, 4);
           len = atomicio(read, fd, buffer_ptr(m), 4);
         if (len == 0)          if (len == 0)
                 fatal("Connection closed");                  fatal("Connection closed");
         else if (len == -1)          else if (len == -1)
                 fatal("Couldn't read packet: %s", strerror(errno));                  fatal("Couldn't read packet: %s", strerror(errno));
   
         msg_len = GET_32BIT(buf);          msg_len = buffer_get_int(m);
         if (msg_len > 256 * 1024)          if (msg_len > MAX_MSG_LENGTH)
                 fatal("Received message too long %u", msg_len);                  fatal("Received message too long %u", msg_len);
   
         while (msg_len) {          buffer_append_space(m, msg_len);
                 len = atomicio(read, fd, buf, MIN(msg_len, sizeof(buf)));          len = atomicio(read, fd, buffer_ptr(m), msg_len);
                 if (len == 0)          if (len == 0)
                         fatal("Connection closed");                  fatal("Connection closed");
                 else if (len == -1)          else if (len == -1)
                         fatal("Couldn't read packet: %s", strerror(errno));                  fatal("Read packet: %s", strerror(errno));
   
                 msg_len -= len;  
                 buffer_append(m, buf, len);  
         }  
 }  }
   
 static void  static void

Legend:
Removed from v.1.39  
changed lines
  Added in v.1.40