Hi;

I am trying to debug some file attribute stuff with sftp and curl, so i made 
sure that the attribute stuff works properly with libssh2.

it does. :-)

the following code compiles and run on gentoo amd64 and OSX 10.6.

this was evolved from sftp.c

BEGIN

static void kbd_callback(const char *name, int name_len,
             const char *instruction, int instruction_len, int num_prompts,
             const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts,
             LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses,
             void **abstract)
{
  int i;
  size_t n;
  char buf[1024];
  (void)abstract;
 
  printf("Please type response: ");
  fgets(buf, sizeof(buf), stdin);
  n = strlen(buf);
  while (n > 0 && strchr("\r\n", buf[n - 1]))
    n--;
  buf[n] = 0;
 
  responses[0].text = strdup(buf);
  responses[0].length = n;
}


int
main(int argc, char *argv[])
{
  int i, iRc, iPw=0, iSck = socket(AF_INET, SOCK_STREAM, 0);

  const char *pcFprt;

  LIBSSH2_SESSION     *pLS2Ses  = NULL;
  LIBSSH2_SFTP        *pLS2FtpS = NULL;
  LIBSSH2_SFTP_HANDLE *pLS2FtpH = NULL;

  LIBSSH2_SFTP_ATTRIBUTES LS2Atrs;

  unsigned long ulAdrHst = 1 < argc ? inet_addr(argv[1]) : htonl(0x7f000001);

  struct sockaddr_in sSckIn;

  sSckIn.sin_family      = AF_INET;
  sSckIn.sin_port        = htons(22);
  sSckIn.sin_addr.s_addr = ulAdrHst;

  if((iRc = connect(iSck, (struct sockaddr*)(&sSckIn),
                    sizeof(struct sockaddr_in)))) goto fin;

  if((iRc = libssh2_init(0))) goto fin;

  if(!(pLS2Ses = libssh2_session_init())) goto fin;

  libssh2_session_set_blocking(pLS2Ses, 1);

  if((iRc = libssh2_session_startup(pLS2Ses, iSck))) goto fin;

  if((iRc = libssh2_userauth_keyboard_interactive(pLS2Ses, "YOURLOGIN",
                                                  &kbd_callback))) goto fin;

  if(!(pLS2FtpS = libssh2_sftp_init(pLS2Ses))) goto fin;

  if(!(pLS2FtpH = libssh2_sftp_open(pLS2FtpS, "Compile/libssh2test/main.c", 
LIBSSH2_FXF_READ,
                                   0))) goto fin;

  if((iRc = libssh2_sftp_fstat_ex(pLS2FtpH, &LS2Atrs, 0))) goto fin;

  printf("Stat Data: Perm=%lo\n",  LS2Atrs.permissions);
  printf("Stat Data: Size=%llu\n", LS2Atrs.filesize);
  printf("Stat Data: mtime=%lu\n", LS2Atrs.mtime);
  printf("Stat Data: mtime=%s\n",  asctime(localtime(&LS2Atrs.mtime)));
 
  libssh2_sftp_close(pLS2FtpH);

  libssh2_sftp_shutdown(pLS2FtpS);

 fin:

  if(iRc) printf("libssh2 failed: %x\n", iRc);
  else
  {
    libssh2_session_disconnect(pLS2Ses, "Libssh2 Finished");
    libssh2_session_free(pLS2Ses);
  }
  if(pLS2FtpS && !pLS2FtpH) printf("Unable to open file with SFTP: %ld\n",
                                   libssh2_sftp_last_error(pLS2FtpS));

  close(iSck);

  return iRc;
}
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

Reply via email to