X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=client.c;h=0380d5678b3aae84d34bdb62838c3f9cd475cf82;hp=dba99a28749850ed3f797b8859cdbc8de008920d;hb=a87d4a87ac7418084eb78f0bcb3accff1388df3a;hpb=124eb239ef47027d6e7431a57339e2dfc5c65ad7 diff --git a/client.c b/client.c index dba99a28..0380d567 100644 --- a/client.c +++ b/client.c @@ -38,6 +38,9 @@ struct private_client_data { char *config_file; char *key_file; char *user; + RC4_KEY rc4_recv_key; + RC4_KEY rc4_send_key; + char *in_buf; size_t *in_loaded; char *out_buf; @@ -116,22 +119,17 @@ out: return ret; } -static RC4_KEY rc4_recv_key; -static RC4_KEY rc4_send_key; -static unsigned char rc4_buf[2 * RC4_KEY_LEN]; - -static void rc4_send(unsigned long len, const unsigned char *indata, unsigned char *outdata) +static void rc4_send(unsigned long len, const unsigned char *indata, + unsigned char *outdata) { - RC4(&rc4_send_key, len, indata, outdata); + RC4(&pcd->rc4_send_key, len, indata, outdata); } -static void rc4_recv(unsigned long len, const unsigned char *indata, unsigned char *outdata) +static void rc4_recv(unsigned long len, const unsigned char *indata, + unsigned char *outdata) { - RC4(&rc4_recv_key, len, indata, outdata); + RC4(&pcd->rc4_recv_key, len, indata, outdata); } -void (*crypt_function_recv)(unsigned long len, const unsigned char *indata, unsigned char *outdata); -void (*crypt_function_send)(unsigned long len, const unsigned char *indata, unsigned char *outdata); - static void append_str(char **data, const char* append) { @@ -174,6 +172,7 @@ int main(int argc, char *argv[]) char buf[8192]; char *auth_str; long unsigned challenge_nr; + unsigned char rc4_buf[2 * RC4_KEY_LEN] = ""; ret = client_parse_config(argc, argv, &pcd); if (ret < 0) @@ -194,8 +193,6 @@ int main(int argc, char *argv[]) /* concat args */ for (i = 0; i < pcd->conf.inputs_num; i++) append_str(&command, pcd->conf.inputs[i]); - crypt_function_recv = NULL; - crypt_function_send = NULL; /* get the host info */ PARA_NOTICE_LOG("getting host info of %s\n", pcd->conf.hostname_arg); @@ -264,12 +261,11 @@ int main(int argc, char *argv[]) numbytes - PROCEED_MSG_LEN - 1); if (ret < 0) goto out; - RC4_set_key(&rc4_send_key, RC4_KEY_LEN, rc4_buf); - RC4_set_key(&rc4_recv_key, RC4_KEY_LEN, rc4_buf + RC4_KEY_LEN); - PARA_INFO_LOG("rc4 encrytion activated: %x:%x:%x:%x\n", + RC4_set_key(&pcd->rc4_send_key, RC4_KEY_LEN, rc4_buf); + RC4_set_key(&pcd->rc4_recv_key, RC4_KEY_LEN, rc4_buf + RC4_KEY_LEN); + PARA_INFO_LOG("rc4 encryption activated: %x:%x:%x:%x\n", rc4_buf[0], rc4_buf[1], rc4_buf[2], rc4_buf[3]); - crypt_function_recv = rc4_recv; - crypt_function_send = rc4_send; + enable_crypt(pcd->fd, rc4_recv, rc4_send); } /* send command */ PARA_INFO_LOG("--> %s\n", command);