diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-03-21 09:29:31 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-03-21 09:29:31 +0000 |
commit | 9249006e64470337422f4fd9e176ea2cb7d603e1 (patch) | |
tree | 1bf17b3ec94067a513e8e8827b95ce49d5d39cb3 | |
parent | c9818a994804f4b6ea30a22b7a42aef701db98d8 (diff) | |
download | libssh-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.h | 23 | ||||
-rw-r--r-- | include/libssh/priv.h | 4 | ||||
-rw-r--r-- | libssh/client.c | 6 | ||||
-rw-r--r-- | libssh/misc.c | 47 | ||||
-rw-r--r-- | sample.c | 4 |
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; +} + +/** @} */ + @@ -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); } |