#include <regex.h>
#include <sys/types.h>
-#include <dirent.h>
#include "para.h"
#include "error.h"
#include "string.h"
#include "client.cmdline.h"
#include "client.h"
-#include "hash.h"
#include "buffer_tree.h"
+#include "version.h"
/** The size of the receiving buffer. */
#define CLIENT_BUFSIZE 4000
free(ct->user);
free(ct->config_file);
free(ct->key_file);
+ btr_free_node(ct->btrn);
client_cmdline_parser_free(&ct->conf);
free(ct);
}
/* decrypted challenge/session key buffer */
unsigned char crypt_buf[1024];
/* the SHA1 of the decrypted challenge */
- unsigned char challenge_sha1[HASH_SIZE];
+ unsigned char challenge_hash[HASH_SIZE];
ret = client_recv_buffer(ct, &s->rfds, buf, sizeof(buf), &n);
if (ret < 0 || n == 0)
(unsigned char *)buf, n);
if (ret < 0)
goto out;
- sha1_hash((char *)crypt_buf, CHALLENGE_SIZE, challenge_sha1);
+ hash_function((char *)crypt_buf, CHALLENGE_SIZE, challenge_hash);
ct->scc.send = sc_new(crypt_buf + CHALLENGE_SIZE, SESSION_KEY_LEN);
ct->scc.recv = sc_new(crypt_buf + CHALLENGE_SIZE + SESSION_KEY_LEN,
SESSION_KEY_LEN);
- hash_to_asc(challenge_sha1, buf);
+ hash_to_asc(challenge_hash, buf);
PARA_INFO_LOG("--> %s\n", buf);
- ret = send_bin_buffer(ct->scc.fd, (char *)challenge_sha1,
+ ret = send_bin_buffer(ct->scc.fd, (char *)challenge_hash,
HASH_SIZE);
if (ret < 0)
goto out;
ct->user = ct->conf.user_given?
para_strdup(ct->conf.user_arg) : para_logname();
- ct->key_file = ct->conf.key_file_given?
- para_strdup(ct->conf.key_file_arg) :
- make_message("%s/.paraslash/key.%s", home, ct->user);
+ if (ct->conf.key_file_given)
+ ct->key_file = para_strdup(ct->conf.key_file_arg);
+ else {
+ ct->key_file = make_message("%s/.paraslash/key.%s",
+ home, ct->user);
+ if (!file_exists(ct->key_file)) {
+ free(ct->key_file);
+ ct->key_file = make_message("%s/.ssh/id_rsa", home);
+ }
+ }
if (loglevel)
*loglevel = get_loglevel_by_name(ct->conf.loglevel_arg);
if (ret < 0) {
PARA_ERROR_LOG("%s\n", para_strerror(-ret));
btr_remove_node(ct->btrn);
- btr_free_node(ct->btrn);
client_close(ct);
*ct_ptr = NULL;
}