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