aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cynapses.org>2010-07-07 12:40:49 +0200
committerAndreas Schneider <asn@cynapses.org>2010-07-07 12:43:50 +0200
commit82beeea61927ad789ac9a728b09c32bb8d9a9a42 (patch)
tree10ab22bb5a68ad4e9c794030ea95f9fc6ab61ef2
parenta18a3813fbf5454b9d52af05dd8118a054baf021 (diff)
downloadlibssh-82beeea61927ad789ac9a728b09c32bb8d9a9a42.tar.gz
libssh-82beeea61927ad789ac9a728b09c32bb8d9a9a42.tar.xz
libssh-82beeea61927ad789ac9a728b09c32bb8d9a9a42.zip
options: Added option to bind a client to an ip address.
Thanks to Donatello Boccaforno <donatello.boccaforno@gmail.com>.
-rw-r--r--include/libssh/libssh.h3
-rw-r--r--include/libssh/session.h2
-rw-r--r--libssh/options.c15
3 files changed, 18 insertions, 2 deletions
diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h
index ed64eca..11cd7ee 100644
--- a/include/libssh/libssh.h
+++ b/include/libssh/libssh.h
@@ -289,7 +289,8 @@ enum ssh_options_e {
SSH_OPTIONS_COMPRESSION_C_S,
SSH_OPTIONS_COMPRESSION_S_C,
SSH_OPTIONS_HOSTKEYCHECK,
- SSH_OPTIONS_PROXYCOMMAND
+ SSH_OPTIONS_PROXYCOMMAND,
+ SSH_OPTIONS_BINDADDR
};
enum {
diff --git a/include/libssh/session.h b/include/libssh/session.h
index f4810e2..4de71b1 100644
--- a/include/libssh/session.h
+++ b/include/libssh/session.h
@@ -129,7 +129,7 @@ struct ssh_session_struct {
#endif
char *username;
char *host;
- char *bindaddr; /* TODO: check if needed */
+ char *bindaddr; /* bind the client to an ip addr */
char *xbanner; /* TODO: looks like it is not needed */
struct ssh_list *identity;
char *sshdir;
diff --git a/libssh/options.c b/libssh/options.c
index b7eeb27..13986d5 100644
--- a/libssh/options.c
+++ b/libssh/options.c
@@ -192,6 +192,9 @@ int ssh_options_set_algo(ssh_session session, int algo,
* set the hostname as the hostname is used as a key in
* the known_host mechanism.
*
+ * - SSH_OPTIONS_BINDADDR:
+ * The address to bind the client to (string).
+ *
* - SSH_OPTIONS_USER:
* The username for authentication (string).\n
* \n
@@ -405,6 +408,18 @@ int ssh_options_set(ssh_session session, enum ssh_options_e type,
session->fd = *x & 0xffff;
}
break;
+ case SSH_OPTIONS_BINDADDR:
+ if (value == NULL) {
+ ssh_set_error_invalid(session, __FUNCTION__);
+ return -1;
+ }
+ q = strdup(value);
+ if (q == NULL) {
+ return -1;
+ }
+ SAFE_FREE(session->bindaddr);
+ session->bindaddr = q;
+ break;
case SSH_OPTIONS_USER:
SAFE_FREE(session->username);
if (value == NULL) { /* set default username */