[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Check system known_hosts file
[Thread Prev] | [Thread Next]
- Subject: Re: [PATCH] Check system known_hosts file
- From: Andreas Schneider <asn@xxxxxxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Fri, 12 Jul 2013 14:24:27 +0200
- To: libssh@xxxxxxxxxx
On Friday 12 July 2013 12:10:50 Tomas Trnka wrote: > Hello, Hi Tomáš, > this short patch makes libssh check the /etc/ssh/known_hosts file > before the per-user ~/.ssh/known_hosts file, making libssh behave > the same as OpenSSH client. thanks for the patch. I would like to have this backed up with a unit test. > Tested only on Linux, but it shouldn't influence Windows at all, as > the fopen("/etc/ssh/known_hosts") will always fail and per-user > configuration will be checked right away. If the superfluous fopen is > a concern, the system known_hosts check can be easily disabled: > > #ifndef WIN32 > const char *current_knownhosts = "/etc/ssh/ssh_known_hosts"; > #else > const char *current_knownhosts = session->knownhosts; > #endif const char *ssh_get_system_known_hosts(void) { #ifdef _WIN32 return NULL; #endif return SSH_SYSTEM_KNOWN_HOSTS; } > Signed-off-by: Tomáš Trnka <tomastrnka@xxxxxxx> > -- > diff '--exclude=*~' -u -r libssh-0.5.4/src/known_hosts.c > libssh-0.5.4-system-known_hosts/src/known_hosts.c --- > libssh-0.5.4/src/known_hosts.c 2013-01-22 11:38:30.000000000 +0100 +++ > libssh-0.5.4-system-known_hosts/src/known_hosts.c 2013-03-11 > 14:20:42.593563301 +0100 @@ -419,6 +419,7 @@ > const char *type; > int match; > int ret = SSH_SERVER_NOT_KNOWN; > + const char *current_knownhosts = "/etc/ssh/ssh_known_hosts"; I would like to see it like this: const char *knownhosts = session->knownhosts; We need to check the user hosts file first! > > enter_function(); > > @@ -456,11 +457,22 @@ > > do { > tokens = ssh_get_knownhost_line(session, &file, > - session->knownhosts, &type); > + current_knownhosts, &type); > > - /* End of file, return the current state */ > + /* End of file */ > if (tokens == NULL) { > - break; > + /* Checking system known_hosts file done, check user known_hosts now > */ + if (current_knownhosts != session->knownhosts) { > + current_knownhosts = session->knownhosts; knownhosts = ssh_get_system_known_hosts(); if (knownhosts == NULL) { break; } > + if (file != NULL) { > + fclose(file); > + } > + file = NULL; > + continue; > + } else { > + /* Both files checked, return current state */ > + break; > + } > } > match = match_hashed_host(session, host, tokens[0]); > if (match == 0){ Then extend the torture test and create a mock object __wrap_ssh_get_system_known_hosts() so we can hand in a file we created. -- andreas -- Andreas Schneider GPG-ID: F33E3FC6 www.cryptomilk.org asn@xxxxxxxxxxxxxx
[PATCH] Check system known_hosts file | "Tomas Trnka" <tomastrnka@xxxxxxx> |