mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-07-29 13:01:13 +03:00
doc: Fix some doxygen latex warnings.
This commit is contained in:
@ -118,7 +118,9 @@ int direct_forwarding(ssh_session session)
|
|||||||
}
|
}
|
||||||
|
|
||||||
nbytes = strlen(http_get);
|
nbytes = strlen(http_get);
|
||||||
nwritten = channel_write(forwarding_channel, http_get, nbytes);
|
nwritten = channel_write(forwarding_channel,
|
||||||
|
http_get,
|
||||||
|
nbytes);
|
||||||
if (nbytes != nwritten)
|
if (nbytes != nwritten)
|
||||||
{
|
{
|
||||||
ssh_channel_free(forwarding_channel);
|
ssh_channel_free(forwarding_channel);
|
||||||
@ -177,14 +179,16 @@ int web_server(ssh_session session)
|
|||||||
rc = ssh_channel_forward_listen(session, NULL, 8080, NULL);
|
rc = ssh_channel_forward_listen(session, NULL, 8080, NULL);
|
||||||
if (rc != SSH_OK)
|
if (rc != SSH_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error opening remote port: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error opening remote port: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
channel = ssh_channel_forward_accept(session, 60000);
|
channel = ssh_channel_forward_accept(session, 60000);
|
||||||
if (channel == NULL)
|
if (channel == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error waiting for incoming connection: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error waiting for incoming connection: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,7 +197,8 @@ int web_server(ssh_session session)
|
|||||||
nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
|
nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
|
||||||
if (nbytes < 0)
|
if (nbytes < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error reading incoming data: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error reading incoming data: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
ssh_channel_send_eof(channel);
|
ssh_channel_send_eof(channel);
|
||||||
ssh_channel_free(channel);
|
ssh_channel_free(channel);
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
@ -204,7 +209,8 @@ int web_server(ssh_session session)
|
|||||||
nwritten = ssh_channel_write(channel, helloworld, nbytes);
|
nwritten = ssh_channel_write(channel, helloworld, nbytes);
|
||||||
if (nwritten != nbytes)
|
if (nwritten != nbytes)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error sending answer: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error sending answer: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
ssh_channel_send_eof(channel);
|
ssh_channel_send_eof(channel);
|
||||||
ssh_channel_free(channel);
|
ssh_channel_free(channel);
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
|
@ -14,9 +14,8 @@ libssh is a Free Software / Open Source project. The libssh library
|
|||||||
is distributed under LGPL license. The libssh project has nothing to do with
|
is distributed under LGPL license. The libssh project has nothing to do with
|
||||||
"libssh2", which is a completly different and independant project.
|
"libssh2", which is a completly different and independant project.
|
||||||
|
|
||||||
libssh can run on top of either libgcrypt (http://directory.fsf.org/project/libgcrypt/)
|
libssh can run on top of either libgcrypt or libcrypto,
|
||||||
or libcrypto (http://www.openssl.org/docs/crypto/crypto.html), two general-purpose
|
two general-purpose cryptographic libraries.
|
||||||
cryptographic libraries.
|
|
||||||
|
|
||||||
This tutorial concentrates for its main part on the "client" side of libssh.
|
This tutorial concentrates for its main part on the "client" side of libssh.
|
||||||
To learn how to accept incoming SSH connexions (how to write a SSH server),
|
To learn how to accept incoming SSH connexions (how to write a SSH server),
|
||||||
|
33
doc/scp.dox
33
doc/scp.dox
@ -39,14 +39,16 @@ int scp_write(ssh_session session)
|
|||||||
(session, SSH_SCP_WRITE | SSH_SCP_RECURSIVE, ".");
|
(session, SSH_SCP_WRITE | SSH_SCP_RECURSIVE, ".");
|
||||||
if (scp == NULL)
|
if (scp == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error allocating scp session: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error allocating scp session: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ssh_scp_init(scp);
|
rc = ssh_scp_init(scp);
|
||||||
if (rc != SSH_OK)
|
if (rc != SSH_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error initializing scp session: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error initializing scp session: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
ssh_scp_free(scp);
|
ssh_scp_free(scp);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -71,14 +73,16 @@ int scp_read(ssh_session session)
|
|||||||
(session, SSH_SCP_READ, "helloworld/helloworld.txt");
|
(session, SSH_SCP_READ, "helloworld/helloworld.txt");
|
||||||
if (scp == NULL)
|
if (scp == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error allocating scp session: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error allocating scp session: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ssh_scp_init(scp);
|
rc = ssh_scp_init(scp);
|
||||||
if (rc != SSH_OK)
|
if (rc != SSH_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error initializing scp session: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error initializing scp session: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
ssh_scp_free(scp);
|
ssh_scp_free(scp);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -119,7 +123,8 @@ int scp_helloworld(ssh_session session, ssh_scp scp)
|
|||||||
rc = ssh_scp_push_directory(scp, "helloworld", S_IRWXU);
|
rc = ssh_scp_push_directory(scp, "helloworld", S_IRWXU);
|
||||||
if (rc != SSH_OK)
|
if (rc != SSH_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't create remote directory: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't create remote directory: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,14 +132,16 @@ int scp_helloworld(ssh_session session, ssh_scp scp)
|
|||||||
(scp, "helloworld.txt", length, S_IRUSR | S_IWUSR);
|
(scp, "helloworld.txt", length, S_IRUSR | S_IWUSR);
|
||||||
if (rc != SSH_OK)
|
if (rc != SSH_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't open remote file: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't open remote file: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ssh_scp_write(scp, helloworld, length);
|
rc = ssh_scp_write(scp, helloworld, length);
|
||||||
if (rc != SSH_OK)
|
if (rc != SSH_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't write to remote file: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't write to remote file: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,14 +202,16 @@ int scp_receive(ssh_session session, ssh_scp scp)
|
|||||||
rc = ssh_scp_pull_request(scp);
|
rc = ssh_scp_pull_request(scp);
|
||||||
if (rc != SSH_SCP_REQUEST_NEWFILE)
|
if (rc != SSH_SCP_REQUEST_NEWFILE)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error receiving information about file: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error receiving information about file: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
size = ssh_scp_request_get_size(scp);
|
size = ssh_scp_request_get_size(scp);
|
||||||
filename = strdup(ssh_scp_request_get_filename(scp));
|
filename = strdup(ssh_scp_request_get_filename(scp));
|
||||||
mode = ssh_scp_request_get_permissions(scp);
|
mode = ssh_scp_request_get_permissions(scp);
|
||||||
printf("Receiving file %s, size %d, permisssions 0%o\n", filename, size, mode);
|
printf("Receiving file %s, size %d, permisssions 0%o\n",
|
||||||
|
filename, size, mode);
|
||||||
free(filename);
|
free(filename);
|
||||||
|
|
||||||
buffer = malloc(size);
|
buffer = malloc(size);
|
||||||
@ -216,7 +225,8 @@ int scp_receive(ssh_session session, ssh_scp scp)
|
|||||||
rc = ssh_scp_read(scp, buffer, size);
|
rc = ssh_scp_read(scp, buffer, size);
|
||||||
if (rc == SSH_ERROR)
|
if (rc == SSH_ERROR)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error receiving file data: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error receiving file data: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -228,7 +238,8 @@ int scp_receive(ssh_session session, ssh_scp scp)
|
|||||||
rc = ssh_scp_pull_request(scp);
|
rc = ssh_scp_pull_request(scp);
|
||||||
if (rc != SSH_SCP_REQUEST_EOF)
|
if (rc != SSH_SCP_REQUEST_EOF)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Unexpected request: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Unexpected request: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
64
doc/sftp.dox
64
doc/sftp.dox
@ -53,14 +53,16 @@ int sftp_helloworld(ssh_session session)
|
|||||||
sftp = sftp_new(session);
|
sftp = sftp_new(session);
|
||||||
if (sftp == NULL)
|
if (sftp == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error allocating SFTP session: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error allocating SFTP session: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = sftp_init(sftp);
|
rc = sftp_init(sftp);
|
||||||
if (rc != SSH_OK)
|
if (rc != SSH_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error initializing SFTP session: %s.\n", sftp_get_error(sftp));
|
fprintf(stderr, "Error initializing SFTP session: %s.\n",
|
||||||
|
sftp_get_error(sftp));
|
||||||
sftp_free(sftp);
|
sftp_free(sftp);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -121,7 +123,8 @@ int sftp_helloworld(ssh_session session, sftp_session sftp)
|
|||||||
{
|
{
|
||||||
if (sftp_get_error(sftp) != SSH_FX_FILE_ALREADY_EXISTS)
|
if (sftp_get_error(sftp) != SSH_FX_FILE_ALREADY_EXISTS)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't create directory: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't create directory: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -167,17 +170,20 @@ int sftp_helloworld(ssh_session session, sftp_session sftp)
|
|||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
file = sftp_open(sftp, "helloworld/helloworld.txt", access_type, S_IRWXU);
|
file = sftp_open(sftp, "helloworld/helloworld.txt",
|
||||||
|
access_type, S_IRWXU);
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't open file for writing: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't open file for writing: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
nwritten = sftp_write(file, helloworld, length);
|
nwritten = sftp_write(file, helloworld, length);
|
||||||
if (nwritten != length)
|
if (nwritten != length)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't write data to file: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't write data to file: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
sftp_close(file);
|
sftp_close(file);
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
@ -185,7 +191,8 @@ int sftp_helloworld(ssh_session session, sftp_session sftp)
|
|||||||
rc = sftp_close(file);
|
rc = sftp_close(file);
|
||||||
if (rc != SSH_OK)
|
if (rc != SSH_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't close the written file: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't close the written file: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,10 +222,12 @@ int sftp_read_sync(ssh_session session, sftp_session sftp)
|
|||||||
int nbytes, rc;
|
int nbytes, rc;
|
||||||
|
|
||||||
access_type = O_RDONLY;
|
access_type = O_RDONLY;
|
||||||
file = sftp_open(sftp, "/etc/profile", access_type, 0);
|
file = sftp_open(sftp, "/etc/profile",
|
||||||
|
access_type, 0);
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't open file for reading: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't open file for reading: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,7 +244,8 @@ int sftp_read_sync(ssh_session session, sftp_session sftp)
|
|||||||
|
|
||||||
if (nbytes < 0)
|
if (nbytes < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error while reading file: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error while reading file: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
sftp_close(file);
|
sftp_close(file);
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
@ -243,7 +253,8 @@ int sftp_read_sync(ssh_session session, sftp_session sftp)
|
|||||||
rc = sftp_close(file);
|
rc = sftp_close(file);
|
||||||
if (rc != SSH_OK)
|
if (rc != SSH_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't close the read file: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't close the read file: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,10 +285,12 @@ int sftp_read_async(ssh_session session, sftp_session sftp)
|
|||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
access_type = O_RDONLY;
|
access_type = O_RDONLY;
|
||||||
file = sftp_open(sftp, "some_very_big_file", access_type, 0);
|
file = sftp_open(sftp, "some_very_big_file",
|
||||||
|
access_type, 0);
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't open file for reading: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't open file for reading: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
sftp_file_set_nonblocking(file);
|
sftp_file_set_nonblocking(file);
|
||||||
@ -286,7 +299,8 @@ int sftp_read_async(ssh_session session, sftp_session sftp)
|
|||||||
counter = 0L;
|
counter = 0L;
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
if (async_request >= 0)
|
if (async_request >= 0)
|
||||||
nbytes = sftp_async_read(file, buffer, sizeof(buffer), async_request);
|
nbytes = sftp_async_read(file, buffer, sizeof(buffer),
|
||||||
|
async_request);
|
||||||
else nbytes = -1;
|
else nbytes = -1;
|
||||||
while (nbytes > 0 || nbytes == SSH_AGAIN)
|
while (nbytes > 0 || nbytes == SSH_AGAIN)
|
||||||
{
|
{
|
||||||
@ -298,13 +312,15 @@ int sftp_read_async(ssh_session session, sftp_session sftp)
|
|||||||
else counter++;
|
else counter++;
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
if (async_request >= 0)
|
if (async_request >= 0)
|
||||||
nbytes = sftp_async_read(file, buffer, sizeof(buffer), async_request);
|
nbytes = sftp_async_read(file, buffer, sizeof(buffer),
|
||||||
|
async_request);
|
||||||
else nbytes = -1;
|
else nbytes = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nbytes < 0)
|
if (nbytes < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error while reading file: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Error while reading file: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
sftp_close(file);
|
sftp_close(file);
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
@ -314,7 +330,8 @@ int sftp_read_async(ssh_session session, sftp_session sftp)
|
|||||||
rc = sftp_close(file);
|
rc = sftp_close(file);
|
||||||
if (rc != SSH_OK)
|
if (rc != SSH_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't close the read file: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't close the read file: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,15 +373,16 @@ int sftp_list_dir(ssh_session session, sftp_session sftp)
|
|||||||
dir = sftp_opendir(sftp, "/var/log");
|
dir = sftp_opendir(sftp, "/var/log");
|
||||||
if (!dir)
|
if (!dir)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Directory not opened: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Directory not opened: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Name Size Perms Owner\tGroup\n");
|
printf("Name Size Perms Owner\tGroup\n");
|
||||||
|
|
||||||
while ((attributes = sftp_readdir(sftp, dir)) != NULL)
|
while ((attributes = sftp_readdir(sftp, dir)) != NULL)
|
||||||
{
|
{
|
||||||
printf("%-22s %10llu %.8o %s(%d)\t%s(%d)\n",
|
printf("%-20s %10llu %.8o %s(%d)\t%s(%d)\n",
|
||||||
attributes->name,
|
attributes->name,
|
||||||
(long long unsigned int) attributes->size,
|
(long long unsigned int) attributes->size,
|
||||||
attributes->permissions,
|
attributes->permissions,
|
||||||
@ -378,7 +396,8 @@ int sftp_list_dir(ssh_session session, sftp_session sftp)
|
|||||||
|
|
||||||
if (!sftp_dir_eof(dir))
|
if (!sftp_dir_eof(dir))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't list directory: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't list directory: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
sftp_closedir(dir);
|
sftp_closedir(dir);
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
@ -386,7 +405,8 @@ int sftp_list_dir(ssh_session session, sftp_session sftp)
|
|||||||
rc = sftp_closedir(dir);
|
rc = sftp_closedir(dir);
|
||||||
if (rc != SSH_OK)
|
if (rc != SSH_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't close directory: %s\n", ssh_get_error(session));
|
fprintf(stderr, "Can't close directory: %s\n",
|
||||||
|
ssh_get_error(session));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user