#include <ctype.h>
#include <sys/param.h>
#include <sys/file.h>
+#include <des.h>
+#include <krb.h>
#include <moira.h>
#include "update.h"
extern int code, errno, uid;
extern int have_authorization, have_file, done;
+extern C_Block session;
int get_block();
*/
int
-get_file(pathname, file_size, checksum, mode)
+get_file(pathname, file_size, checksum, mode, encrypt)
char *pathname;
int file_size;
int checksum;
int mode;
+ int encrypt;
{
int fd, n_written;
int found_checksum;
lose("sending okay for file transfer (get_file)");
n_written = 0;
while (n_written < file_size && code == 0) {
- int n_got = get_block(fd, file_size - n_written);
+ int n_got = get_block(fd, file_size - n_written, encrypt);
if (n_got == -1) {
/* get_block has already printed a message */
unlink(pathname);
}
static int
-get_block(fd, max_size)
+get_block(fd, max_size, encrypt)
int fd;
int max_size;
+ int encrypt;
{
STRING data;
int n_read, n;
lose("receiving data file (get_file)");
}
n_read = MIN(MAX_STRING_SIZE(data), max_size);
+ if (encrypt) {
+ des_key_schedule sched;
+ des_cblock ivec;
+ STRING newdata;
+
+ des_key_sched(session, sched);
+ bzero(ivec, sizeof(ivec));
+ STRING_DATA(newdata) = (char *) malloc(n_read+9);
+ des_pcbc_encrypt(STRING_DATA(data), STRING_DATA(newdata),
+ n_read, sched, &ivec, 1);
+ string_free(&data);
+ data.ptr = newdata.ptr;
+ }
+
n = 0;
while (n < n_read) {
register int n_wrote;