Как включить scp в curl для C? - PullRequest
       16

Как включить scp в curl для C?

2 голосов
/ 24 февраля 2012

Я создаю локон со следующей конфигурацией:

./configure  --with-ssl --with-libssh2 --prefix=/home/yuvi/development/curlssh

После настройки я вижу, что SCP включен.

  curl version:    7.24.0
  Host setup:      x86_64-unknown-linux-gnu
  Install prefix:  /home/yuvi/development/curlssh
  Compiler:        gcc
  SSL support:     enabled (OpenSSL)
  SSH support:     enabled (libSSH2)
  zlib support:    enabled
  krb4 support:    no      (--with-krb4*)
  GSSAPI support:  no      (--with-gssapi)
  SPNEGO support:  no      (--with-spnego)
  TLS-SRP support: no      (--enable-tls-srp)
  resolver:        default (--enable-ares / --enable-threaded-resolver)
  ipv6 support:    enabled
  IDN support:     no      (--with-libidn)
  Build libcurl:   Shared=yes, Static=yes
  Built-in manual: enabled
  Verbose errors:  enabled (--disable-verbose)
  SSPI support:    no      (--enable-sspi)
  ca cert bundle:  /etc/ssl/certs/ca-certificates.crt
  ca cert path:    no
  LDAP support:    no      (--enable-ldap / --with-ldap-lib / --with-lber-lib)
  LDAPS support:   no      (--enable-ldaps)
  RTSP support:    enabled
  RTMP support:    no      (--with-librtmp)
  Protocols:       DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS POP3 POP3S RTSP SCP SFTP SMTP SMTPS TELNET TFTP

Но когда я запускаю пример программы, я получаю следующую ошибку:

* Protocol scp not supported or disabled in libcurl
* Unsupported protocol

Мой URL:

curl_easy_setopt(curl, CURLOPT_URL,"scp://192.168.10.1/mnt/dev.zip");

Я могу получить файл с помощью командной строки через SCP, это означает, что удаленный сервер поддерживает SCP. Тогда где я делаю не так ...?

Спасибо, Yuvi

1 Ответ

0 голосов
/ 24 февраля 2012

Я бы попробовал LD_PRELOAD, чтобы убедиться, что программа использует правильные libcurl.so. Что-то вроде:

LD_PRELOAD=/home/user/curl-7.24.0/lib/.libs/libcurl.so ldd ./sample-program
LD_PRELOAD=/home/user/curl-7.24.0/lib/.libs/libcurl.so ./sample-program

В случае связывания со статической библиотекой libcurl.a программа содержит несколько символов с подстрокой scp:

$ nm sample-program | grep scp
08092be0 R Curl_handler_scp
         U libssh2_scp_recv
         U libssh2_scp_send64
080789e0 t scp_disconnect
08078bd0 t scp_doing
08078b00 t scp_done
08074a80 t scp_recv
080749f0 t scp_send

Это предполагает, что curl был скомпилирован с включенной отладкой (-g) и что символы отладки не были удалены из sample-program. Если вывод nm sample-program | grep scp пуст, то:

  • программа использует libcurl.a, который был скомпилирован без поддержки протокола SCP, или
  • программа использует динамическую библиотеку libcurl.so (не статическую библиотеку libcurl.a)
...