@@ -273,17 +273,30 @@ int
273273sshauth_hostkey_check (const char * hostname , ssh_session session , void * UNUSED (priv ))
274274{
275275 char * hexa = NULL ;
276+ #if (LIBSSH_VERSION_INT >= SSH_VERSION_INT (0 , 9 , 0 ))
277+ int c , ret ;
278+ enum ssh_known_hosts_e state ;
279+ #else
276280 int c , state , ret ;
281+ #endif
277282 ssh_key srv_pubkey ;
278283 unsigned char * hash_sha1 = NULL ;
279284 size_t hlen ;
280285 enum ssh_keytypes_e srv_pubkey_type ;
281286 char answer [5 ];
282287 FILE * out = NULL , * in = NULL ;
283288
289+ #if (LIBSSH_VERSION_INT >= SSH_VERSION_INT (0 , 9 , 0 ))
290+ state = ssh_session_is_known_server (session );
291+ #else
284292 state = ssh_is_server_known (session );
293+ #endif
285294
295+ #if (LIBSSH_VERSION_INT >= SSH_VERSION_INT (0 , 8 , 0 ))
296+ ret = ssh_get_server_publickey (session , & srv_pubkey );
297+ #else
286298 ret = ssh_get_publickey (session , & srv_pubkey );
299+ #endif
287300 if (ret < 0 ) {
288301 ERR ("Unable to get server public key." );
289302 return -1 ;
@@ -300,22 +313,42 @@ sshauth_hostkey_check(const char *hostname, ssh_session session, void *UNUSED(pr
300313 hexa = ssh_get_hexa (hash_sha1 , hlen );
301314
302315 switch (state ) {
316+ #if (LIBSSH_VERSION_INT >= SSH_VERSION_INT (0 , 9 , 0 ))
317+ case SSH_KNOWN_HOSTS_OK :
318+ #else
303319 case SSH_SERVER_KNOWN_OK :
320+ #endif
304321 break ; /* ok */
305322
323+ #if (LIBSSH_VERSION_INT >= SSH_VERSION_INT (0 , 9 , 0 ))
324+ case SSH_KNOWN_HOSTS_CHANGED :
325+ #else
306326 case SSH_SERVER_KNOWN_CHANGED :
327+ #endif
307328 ERR ("Remote host key changed, the connection will be terminated!" );
308329 goto error ;
309330
331+ #if (LIBSSH_VERSION_INT >= SSH_VERSION_INT (0 , 9 , 0 ))
332+ case SSH_KNOWN_HOSTS_OTHER :
333+ #else
310334 case SSH_SERVER_FOUND_OTHER :
335+ #endif
311336 WRN ("Remote host key is not known, but a key of another type for this host is known. Continue with caution." );
312337 goto hostkey_not_known ;
313338
339+ #if (LIBSSH_VERSION_INT >= SSH_VERSION_INT (0 , 9 , 0 ))
340+ case SSH_KNOWN_HOSTS_NOT_FOUND :
341+ #else
314342 case SSH_SERVER_FILE_NOT_FOUND :
343+ #endif
315344 WRN ("Could not find the known hosts file." );
316345 goto hostkey_not_known ;
317346
347+ #if (LIBSSH_VERSION_INT >= SSH_VERSION_INT (0 , 9 , 0 ))
348+ case SSH_KNOWN_HOSTS_UNKNOWN :
349+ #else
318350 case SSH_SERVER_NOT_KNOWN :
351+ #endif
319352hostkey_not_known :
320353#ifdef ENABLE_DNSSEC
321354 if ((srv_pubkey_type != SSH_KEYTYPE_UNKNOWN ) || (srv_pubkey_type != SSH_KEYTYPE_RSA1 )) {
@@ -330,7 +363,11 @@ sshauth_hostkey_check(const char *hostname, ssh_session session, void *UNUSED(pr
330363 /* DNSSEC SSHFP check successful, that's enough */
331364 if (!ret ) {
332365 VRB ("DNSSEC SSHFP check successful." );
366+ #if (LIBSSH_VERSION_INT >= SSH_VERSION_INT (0 , 9 , 0 ))
367+ ssh_session_update_known_hosts (session );
368+ #else
333369 ssh_write_knownhost (session );
370+ #endif
334371 ssh_clean_pubkey_hash (& hash_sha1 );
335372 ssh_string_free_char (hexa );
336373 return 0 ;
@@ -385,7 +422,11 @@ sshauth_hostkey_check(const char *hostname, ssh_session session, void *UNUSED(pr
385422 fflush (in );
386423 if (!strcmp ("yes" , answer )) {
387424 /* store the key into the host file */
425+ #if (LIBSSH_VERSION_INT >= SSH_VERSION_INT (0 , 9 , 0 ))
426+ ret = ssh_session_update_known_hosts (session );
427+ #else
388428 ret = ssh_write_knownhost (session );
429+ #endif
389430 if (ret != SSH_OK ) {
390431 WRN ("Adding the known host \"%s\" failed (%s)." , hostname , ssh_get_error (session ));
391432 }
@@ -401,7 +442,11 @@ sshauth_hostkey_check(const char *hostname, ssh_session session, void *UNUSED(pr
401442
402443 break ;
403444
445+ #if (LIBSSH_VERSION_INT >= SSH_VERSION_INT (0 , 9 , 0 ))
446+ case SSH_KNOWN_HOSTS_ERROR :
447+ #else
404448 case SSH_SERVER_ERROR :
449+ #endif
405450 ERR ("SSH error: %s" , ssh_get_error (session ));
406451 goto error ;
407452 }
0 commit comments