aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-03-21 09:29:31 +0000
committerAndreas Schneider <mail@cynapses.org>2009-03-21 09:29:31 +0000
commit9249006e64470337422f4fd9e176ea2cb7d603e1 (patch)
tree1bf17b3ec94067a513e8e8827b95ce49d5d39cb3
parentc9818a994804f4b6ea30a22b7a42aef701db98d8 (diff)
downloadlibssh-9249006e64470337422f4fd9e176ea2cb7d603e1.tar.gz
libssh-9249006e64470337422f4fd9e176ea2cb7d603e1.tar.xz
libssh-9249006e64470337422f4fd9e176ea2cb7d603e1.zip
Add a ssh_version function.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@283 7dcaeef0-15fb-0310-b436-a5af3365683c
-rw-r--r--include/libssh/libssh.h23
-rw-r--r--include/libssh/priv.h4
-rw-r--r--libssh/client.c6
-rw-r--r--libssh/misc.c47
-rw-r--r--sample.c4
5 files changed, 77 insertions, 7 deletions
diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h
index 4fb6a306..89d8a917 100644
--- a/include/libssh/libssh.h
+++ b/include/libssh/libssh.h
@@ -39,7 +39,25 @@ typedef unsigned long long uint64_t;
#include <netdb.h>
#endif /* _WIN32 */
-#define LIBSSH_VERSION "libssh-0.3-svn"
+#define SSH_STRINGIFY(s) SSH_TOSTRING(s)
+#define SSH_TOSTRING(s) #s
+
+/* libssh version macros */
+#define SSH_VERSION_INT(a, b, c) (a << 16 | b << 8 | c)
+#define SSH_VERSION_DOT(a, b, c) a ##.## b ##.## c
+#define SSH_VERSION(a, b, c) SSH_VERSION_DOT(a, b, c)
+
+/* libssh version */
+#define LIBSSH_VERSION_MAJOR 0
+#define LIBSSH_VERSION_MINOR 3
+#define LIBSSH_VERSION_MICRO 0
+
+#define LIBSSH_VERSION_INT SSH_VERSION_INT(LIBSSH_VERSION_MAJOR, \
+ LIBSSH_VERSION_MINOR, \
+ LIBSSH_VERSION_MICRO)
+#define LIBSSH_VERSION SSH_VERSION(LIBSSH_VERSION_MAJOR, \
+ LIBSSH_VERSION_MINOR, \
+ LIBSSH_VERSION_MICRO)
/* GCC have printf type attribute check. */
#ifdef __GNUC__
@@ -133,6 +151,9 @@ typedef int socket_t;
char *ssh_get_error(void *error);
int ssh_get_error_code(void *error);
+/* version checks */
+const char *ssh_version(int req_version);
+
/** \addtogroup ssh_log
* @{
*/
diff --git a/include/libssh/priv.h b/include/libssh/priv.h
index e2767356..84b4320d 100644
--- a/include/libssh/priv.h
+++ b/include/libssh/priv.h
@@ -37,8 +37,8 @@ MA 02111-1307, USA. */
/* some constants */
#define MAX_PACKET_LEN 262144
#define ERROR_BUFFERLEN 1024
-#define CLIENTBANNER1 "SSH-1.5-" LIBSSH_VERSION
-#define CLIENTBANNER2 "SSH-2.0-" LIBSSH_VERSION
+#define CLIENTBANNER1 "SSH-1.5-libssh-" SSH_STRINGIFY(LIBSSH_VERSION)
+#define CLIENTBANNER2 "SSH-2.0-libssh-" SSH_STRINGIFY(LIBSSH_VERSION)
#define KBDINT_MAX_PROMPT 256 /* more than openssh's :) */
/* some types for public keys */
#define TYPE_DSS 1
diff --git a/libssh/client.c b/libssh/client.c
index 06750a4a..2a47b763 100644
--- a/libssh/client.c
+++ b/libssh/client.c
@@ -389,9 +389,9 @@ void ssh_disconnect(SSH_SESSION *session){
}
const char *ssh_copyright(void) {
- return LIBSSH_VERSION " (c) 2003-2008 Aris Adamantiadis (aris@0xbadc0de.be)"
- " Distributed under the LGPL, please refer to COPYING file for informations"
- " about your rights" ;
+ return SSH_STRINGIFY(LIBSSH_VERSION) " (c) 2003-2008 Aris Adamantiadis "
+ "(aris@0xbadc0de.be) Distributed under the LGPL, please refer to COPYING"
+ "file for informations about your rights";
}
/** @} */
diff --git a/libssh/misc.c b/libssh/misc.c
index cd3f1cbb..a6d85413 100644
--- a/libssh/misc.c
+++ b/libssh/misc.c
@@ -3,6 +3,7 @@
/*
Copyright 2003 Aris Adamantiadis
+Copyright 2009 Andreas Schneider <mail@cynapses.org>
This file is part of the SSH Library
@@ -38,6 +39,12 @@ MA 02111-1307, USA. */
#include "libssh/priv.h"
+/** \defgroup ssh_misc SSH Misc
+ * \brief Misc functions
+ */
+/** \addtogroup ssh_misc
+ * @{ */
+
#ifndef _WIN32
char *ssh_get_user_home_dir(void) {
static char szPath[PATH_MAX] = {0};
@@ -83,3 +90,43 @@ u64 ntohll(u64 a){
return (( ((u64)low) << 32) | ( high));
#endif
}
+
+/**
+ * @brief Check if libssh is the required version or get the version
+ * string.
+ *
+ * @param req_version The version required.
+ *
+ * @return If the version of libssh is newer than the version
+ * required it will return a version string.
+ * NULL if the version is older.
+ *
+ * Example:
+ *
+ * @code
+ * 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));
+ * }
+ * @endcode
+ */
+const char *ssh_version(int req_version) {
+ if (req_version <= LIBSSH_VERSION_INT) {
+#ifdef HAVE_LIBGCRYPT
+ return SSH_STRINGIFY(LIBSSH_VERSION) "/gnutls/zlib";
+#elif defined HAVE_LIBCRYPTO
+ return SSH_STRINGIFY(LIBSSH_VERSION) "/openssl/zlib";
+#else
+ return SSH_STRINGIFY(LIBSSH_VERSION);
+#endif
+ }
+
+ return NULL;
+}
+
+/** @} */
+
diff --git a/sample.c b/sample.c
index 6676ffd7..fdff41dd 100644
--- a/sample.c
+++ b/sample.c
@@ -50,11 +50,13 @@ static void add_cmd(char *cmd){
static void usage(){
fprintf(stderr,"Usage : ssh [options] [login@]hostname\n"
+ "sample client - libssh-%s\n"
"Options :\n"
" -l user : log in as user\n"
" -p port : connect to port\n"
" -d : use DSS to verify host public key\n"
- " -r : use RSA to verify host public key\n");
+ " -r : use RSA to verify host public key\n",
+ ssh_version(0));
exit(0);
}