/*
- * Copyright (C) 1997-2008 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2009 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
disable_crypt(ct->fd);
close(ct->fd);
}
+ free(ct->buf);
free(ct->user);
free(ct->config_file);
free(ct->key_file);
t->error = client_recv_buffer(ct);
if (t->error < 0)
return;
- if (t->error != 64) {
+ if (t->error < 64) {
t->error = -E_INVALID_CHALLENGE;
PARA_ERROR_LOG("received the following: %s\n", ct->buf);
return;
}
- PARA_INFO_LOG("<-- [challenge]\n");
+ PARA_INFO_LOG("<-- [challenge] (%d bytes)\n", t->error);
/* decrypt challenge number */
t->error = para_decrypt_challenge(ct->key_file, &ct->challenge_nr,
- (unsigned char *) ct->buf, 64);
+ (unsigned char *) ct->buf, t->error);
if (t->error > 0)
ct->status = CL_RECEIVED_CHALLENGE;
return;
* \param argv Usual argument vector.
* \param ct_ptr Points to dynamically allocated and initialized client task
* struct upon successful return.
+ * \param loglevel If not \p NULL, the number of the loglevel is stored here.
*
* Check the command line options given by \a argc and argv, set default values
* for user name and rsa key file, read further option from the config file.
*
* \return Standard.
*/
-int client_open(int argc, char *argv[], struct client_task **ct_ptr)
+int client_open(int argc, char *argv[], struct client_task **ct_ptr,
+ int *loglevel)
{
char *home = para_homedir();
- struct stat statbuf;
int ret;
struct client_task *ct = para_calloc(sizeof(struct client_task));
+ ct->buf = para_malloc(CLIENT_BUFSIZE);
*ct_ptr = ct;
ct->fd = -1;
ret = -E_CLIENT_SYNTAX;
ct->config_file = ct->conf.config_file_given?
para_strdup(ct->conf.config_file_arg) :
make_message("%s/.paraslash/client.conf", home);
- ret = stat(ct->config_file, &statbuf);
- if (ret && ct->conf.config_file_given) {
+ ret = file_exists(ct->config_file);
+ if (!ret && ct->conf.config_file_given) {
ret = -E_NO_CONFIG;
goto out;
}
- if (!ret) {
+ if (ret) {
struct client_cmdline_parser_params params = {
.override = 0,
.initialize = 0,
&ct->conf, ¶ms))
goto out;
}
- ret = 1;
- PARA_INFO_LOG("loglevel: %d\n", ct->conf.loglevel_arg);
+ if (loglevel)
+ *loglevel = get_loglevel_by_name(ct->conf.loglevel_arg);
+ PARA_INFO_LOG("loglevel: %s\n", ct->conf.loglevel_arg);
PARA_INFO_LOG("config_file: %s\n", ct->config_file);
PARA_INFO_LOG("key_file: %s\n", ct->key_file);
PARA_NOTICE_LOG("connecting %s:%d\n", ct->conf.hostname_arg,