libssh  0.10.6
The SSH library
Loading...
Searching...
No Matches
Macros | Functions
The SSH helper functions
Collaboration diagram for The SSH helper functions:

Macros

#define NSS_BUFLEN_PASSWD   4096
 
#define CLOCK   CLOCK_REALTIME
 

Functions

int ssh_getpass (const char *prompt, char *buf, size_t len, int echo, int verify)
 Get a password from the console.
 
int ssh_get_random (void *where, int len, int strong)
 Get random bytes.
 
char * ssh_get_user_home_dir (void)
 
int ssh_file_readaccess_ok (const char *file)
 
int ssh_dir_writeable (const char *path)
 Check if the given path is an existing directory and that is accessible for writing.
 
char * ssh_get_local_username (void)
 
int ssh_is_ipaddr_v4 (const char *str)
 
int ssh_is_ipaddr (const char *str)
 
char * ssh_lowercase (const char *str)
 
char * ssh_hostport (const char *host, int port)
 
char * ssh_get_hexa (const unsigned char *what, size_t len)
 Convert a buffer into a colon separated hex string. The caller has to free the memory.
 
void ssh_print_hexa (const char *descr, const unsigned char *what, size_t len)
 
void ssh_log_hexdump (const char *descr, const unsigned char *what, size_t len)
 Log the content of a buffer in hexadecimal format, similar to the output of 'hexdump -C' command.
 
const char * ssh_version (int req_version)
 Check if libssh is the required version or get the version string.
 
struct ssh_listssh_list_new (void)
 
void ssh_list_free (struct ssh_list *list)
 
struct ssh_iteratorssh_list_get_iterator (const struct ssh_list *list)
 
struct ssh_iteratorssh_list_find (const struct ssh_list *list, void *value)
 
size_t ssh_list_count (const struct ssh_list *list)
 Get the number of elements in the list.
 
int ssh_list_append (struct ssh_list *list, const void *data)
 
int ssh_list_prepend (struct ssh_list *list, const void *data)
 
void ssh_list_remove (struct ssh_list *list, struct ssh_iterator *iterator)
 
const void * _ssh_list_pop_head (struct ssh_list *list)
 
char * ssh_dirname (const char *path)
 Parse directory component.
 
char * ssh_basename (const char *path)
 basename - parse filename component.
 
int ssh_mkdir (const char *pathname, mode_t mode)
 Attempts to create a directory with the given pathname.
 
int ssh_mkdirs (const char *pathname, mode_t mode)
 Attempts to create a directory with the given pathname. The missing directories in the given pathname are created recursively.
 
char * ssh_path_expand_tilde (const char *d)
 Expand a directory starting with a tilde '~'.
 
char * ssh_path_expand_escape (ssh_session session, const char *s)
 
int ssh_analyze_banner (ssh_session session, int server)
 
void ssh_timestamp_init (struct ssh_timestamp *ts)
 
int ssh_make_milliseconds (unsigned long sec, unsigned long usec)
 
int ssh_timeout_elapsed (struct ssh_timestamp *ts, int timeout)
 
int ssh_timeout_update (struct ssh_timestamp *ts, int timeout)
 updates a timeout value so it reflects the remaining time
 
int ssh_match_group (const char *group, const char *object)
 
void explicit_bzero (void *s, size_t n)
 
char * strndup (const char *s, size_t n)
 
void uint64_inc (unsigned char *counter)
 
int ssh_quote_file_name (const char *file_name, char *buf, size_t buf_len)
 
int ssh_newline_vis (const char *string, char *buf, size_t buf_len)
 
int ssh_tmpname (char *name)
 
char * ssh_strreplace (const char *src, const char *pattern, const char *replace)
 
char * ssh_strerror (int err_num, char *buf, size_t buflen)
 
int ssh_check_hostname_syntax (const char *hostname)
 Checks syntax of a domain name.
 

Detailed Description

Different helper functions used in the SSH Library.

Function Documentation

◆ ssh_basename()

char * ssh_basename ( const char * path)

basename - parse filename component.

basename breaks a null-terminated pathname string into a filename component. ssh_basename() returns the component following the final '/'. Trailing '/' characters are not counted as part of the pathname.

Parameters
[in]pathThe path to parse.
Returns
The filename of path or NULL if we can't allocate memory. If path is the string "/", basename returns the string "/". If path is NULL or an empty string, "." is returned. The caller needs to free this memory ssh_string_free_char().
See also
ssh_string_free_char()

◆ ssh_check_hostname_syntax()

int ssh_check_hostname_syntax ( const char * hostname)

Checks syntax of a domain name.

The check is made based on the RFC1035 section 2.3.1 Allowed characters are: hyphen, period, digits (0-9) and letters (a-zA-Z)

The label should be no longer than 63 characters The label should start with a letter and end with a letter or number The label in this implementation can start with a number to allow virtual URLs to pass. Note that this will make IPv4 addresses to pass this check too.

Parameters
hostnameThe domain name to be checked, has to be null terminated
Returns
SSH_OK if the hostname passes syntax check SSH_ERROR otherwise or if hostname is NULL or empty string

◆ ssh_dir_writeable()

int ssh_dir_writeable ( const char * path)

Check if the given path is an existing directory and that is accessible for writing.

Parameters
[in]pathPath to the directory to be checked
Returns
Return 1 if the directory exists and is accessible; 0 otherwise

◆ ssh_dirname()

char * ssh_dirname ( const char * path)

Parse directory component.

dirname breaks a null-terminated pathname string into a directory component. In the usual case, ssh_dirname() returns the string up to, but not including, the final '/'. Trailing '/' characters are not counted as part of the pathname. The caller must free the memory using ssh_string_free_char().

Parameters
[in]pathThe path to parse.
Returns
The dirname of path or NULL if we can't allocate memory. If path does not contain a slash, c_dirname() returns the string ".". If path is a string "/", it returns the string "/". If path is NULL or an empty string, "." is returned. The memory needs to be freed using ssh_string_free_char().
See also
ssh_string_free_char()

◆ ssh_get_hexa()

char * ssh_get_hexa ( const unsigned char * what,
size_t len )

Convert a buffer into a colon separated hex string. The caller has to free the memory.

Parameters
[in]whatWhat should be converted to a hex string.
[in]lenLength of the buffer to convert.
Returns
The hex string or NULL on error. The memory needs to be freed using ssh_string_free_char().
See also
ssh_string_free_char()

◆ ssh_get_random()

int ssh_get_random ( void * where,
int len,
int strong )

Get random bytes.

Make sure to always check the return code of this function!

Parameters
[in]whereThe buffer to fill with random bytes
[in]lenThe size of the buffer to fill.
[in]strongUse a strong or private RNG source.
Returns
1 on success, 0 on error.

◆ ssh_getpass()

int ssh_getpass ( const char * prompt,
char * buf,
size_t len,
int echo,
int verify )

Get a password from the console.

You should make sure that the buffer is an empty string!

You can also use this function to ask for a username. Then you can fill the buffer with the username and it is shows to the users. If the users just presses enter the buffer will be untouched.

char username[128];
snprintf(username, sizeof(username), "john");
ssh_getpass("Username:", username, sizeof(username), 1, 0);
LIBSSH_API int ssh_getpass(const char *prompt, char *buf, size_t len, int echo, int verify)
Get a password from the console.
Definition getpass.c:214

The prompt will look like this:

Username: [john]

If you press enter then john is used as the username, or you can type it in to change it.

Parameters
[in]promptThe prompt to show to ask for the password.
[out]bufThe buffer the password should be stored. It NEEDS to be empty or filled out.
[in]lenThe length of the buffer.
[in]echoShould we echo what you type.
[in]verifyShould we ask for the password twice.
Returns
0 on success, -1 on error.

◆ ssh_list_count()

size_t ssh_list_count ( const struct ssh_list * list)

Get the number of elements in the list.

Parameters
[in]listThe list to count.
Returns
The number of elements in the list.

◆ ssh_log_hexdump()

void ssh_log_hexdump ( const char * descr,
const unsigned char * what,
size_t len )

Log the content of a buffer in hexadecimal format, similar to the output of 'hexdump -C' command.

The first logged line is the given description followed by the length. Then the content of the buffer is logged 16 bytes per line in the following format:

(offset) (first 8 bytes) (last 8 bytes) (the 16 bytes as ASCII char values)

The output for a 16 bytes array containing values from 0x00 to 0x0f would be:

"Example (16 bytes):" " 00000000 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ................"

The value for each byte as corresponding ASCII character is printed at the end if the value is printable. Otherwise, it is replaced with '.'.

Parameters
[in]descrA description for the content to be logged
[in]whatThe buffer to be logged
[in]lenThe length of the buffer given in what
Note
If a too long description is provided (which would result in a first line longer than 80 bytes), the function will fail.

◆ ssh_mkdir()

int ssh_mkdir ( const char * pathname,
mode_t mode )

Attempts to create a directory with the given pathname.

This is the portable version of mkdir, mode is ignored on Windows systems.

Parameters
[in]pathnameThe path name to create the directory.
[in]modeThe permissions to use.
Returns
0 on success, < 0 on error with errno set.

◆ ssh_mkdirs()

int ssh_mkdirs ( const char * pathname,
mode_t mode )

Attempts to create a directory with the given pathname. The missing directories in the given pathname are created recursively.

Parameters
[in]pathnameThe path name to create the directory.
[in]modeThe permissions to use.
Returns
0 on success, < 0 on error with errno set.
Note
mode is ignored on Windows systems.

◆ ssh_path_expand_tilde()

char * ssh_path_expand_tilde ( const char * d)

Expand a directory starting with a tilde '~'.

Parameters
[in]dThe directory to expand.
Returns
The expanded directory, NULL on error. The caller needs to free the memory using ssh_string_free_char().
See also
ssh_string_free_char()

◆ ssh_print_hexa()

void ssh_print_hexa ( const char * descr,
const unsigned char * what,
size_t len )
Deprecated
Please use ssh_print_hash() instead

◆ ssh_timeout_update()

int ssh_timeout_update ( struct ssh_timestamp * ts,
int timeout )

updates a timeout value so it reflects the remaining time

Parameters
[in]tspointer to an existing timestamp
[in]timeouttimeout in milliseconds. Negative values mean infinite timeout
Returns
remaining time in milliseconds, 0 if elapsed, -1 if never.

◆ ssh_version()

const char * ssh_version ( int req_version)

Check if libssh is the required version or get the version string.

Parameters
[in]req_versionThe version required.
Returns
If the version of libssh is newer than the version required it will return a version string. NULL if the version is older.

Example:

if (ssh_version(SSH_VERSION_INT(0,2,1)) == NULL) {
fprintf(stderr, "libssh version is too old!\n");
exit(1);
}
if (debug) {
printf("libssh %s\n", ssh_version(0));
}
LIBSSH_API const char * ssh_version(int req_version)
Check if libssh is the required version or get the version string.
Definition misc.c:698