If you’re working on a multi-platform project which does network communication you will end up thinking about replacing select(2) with poll(2) sooner or later. The problem with select are well known. poll(2) removes the limitations of select(2) and improves speed and features. The problem is that poll(2) isn’t available on all platforms. This means you need a poll(2)-emulation or create wrappers around other similar poll() functions.
In libssh we use a poll(2)-emulation based on select for platforms which don’t provide a poll(2) function like some Windows versions or UNIX systems.
Windows Vista or newer version provide a poll(2) like function called WSAPoll(). To be able to support this call which is faster the the poll(2)-emulation and allows to use more file descriptors we implemented a runtime detection for WSAPoll(). This means during initialization of the socket, we check if the functions can be found in the relevant library. If Windows doesn’t provide it, we fallback to the poll(2)-emulation.
I took several month to get this working correctly on UNIX and Windows. This feature starts to work correctly with libssh 0.4.6 released today.
openSUSE has backported the new kio_sftp implementation based on libssh to their KDE 4.3 packages. This increased the users and helped to find some bugs in kio_sftp and KDE. The current implementation is working fairly well.
As soon as libssh 0.4 will be released (hopefully soon) I will add more features. Users asked for ~/.ssh/config support and I’ve added openssh’s statvfs extension to libssh. This means I can check if there is enough space on the server before I copy a file.
I’ve commited my kio_sftp rewrite to KDE trunk today. The patch for KDE 4.3 if you want to test it is available here. You need libssh 0.3.2 to get it working but I suggest to use the libssh v0-3 git branch which has fixes found by kio_sftp testers. Thanks to all of them!
The openSUSE Hackweek is over and I have a working kio_sftp implementation using libssh. There is still work which needs to be done. I have to cleanup the code and test all the features (resume of files, recursive deletion). Today I’ve copied successfully the first files to my webserver!
I’ve uploaded the two files to my webspace, here. Remeber that it’s not finished yet! You need libssh’s v0-3 git branch to get it working. I’ve found serveral bugs during the week. I will release libssh 0.3.2 next week.
Thanks to Dirk Müller who answered all my question and helped me with the KDE stuff.
Benchmarks will follow soon too.
I’ve got the fingerprint verification and authentication with public key and keyboard interactive working. There is still a dialog missing for special interactive questions, but the normal user stuff works just fine.
I wanted to reimplement kio_sftp with libssh since some month. This week is another openSUSE Hack Week. I’m in the SUSE office in Nürnberg with some KDE developers. Dirk Müller helps me with the implementation. I’m normally not a C++ developer so it is a good oppurtunity to get help and things done. More on Wednesday. The weather will be good tommorow so I plan to go climbing.
After several month of hard work, rewriting nearly all libssh functions, I’ve released version 0.3.0 today. Read more about the release here. A new version of csync with full sftp support will be released soon.
As you might know I develop csync which is a file synchronizer. To support sftp I’m using libssh. libssh is designed to be used by programmers needing a working SSH implementation by the mean of a library. I think it is nearly feature complete. I’ve cleaned up the sftp interface last year. The only thing missing was ssh-agent support. This is implemented now in the subversion trunk and will be released as libssh 0.3. I hope we can do a release soon.
I’ve released a new version of csync and pam_csync. csync is a bidirectional file synchronizer for Linux and allows to keep two copies of files and directories in sync. It uses uses widly adopted protocols like smb or sftp so that there is no need for a server component of csync. It is a user-level program which means there is no need to be a superuser. With pam_csync it is possible to create roaming home directories.
This version fixes several bugs to increase the stability of the file synchronizer. It provides a new plugin to synchronize two replicas with the sftp protocol. To get the csync sftp plugin working you need libssh 0.2 with the following two patches:
Map permission fields
The libssh package in the network:synchronization:files project in the build service has these two patches. The csync version of the BS project provides a csync-plugin-sftp package.
Packages for Fedora 9, openSUSE and SUSE Linux Enterprise 10 can be downloaded here.
More information at http://www.csync.org/.