#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
+#ifdef HAVE_KRB4
#include <des.h>
+#endif
RCSID("$Header$");
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif /* MIN */
+#ifdef HAVE_KRB4
static des_key_schedule sched;
static des_cblock ivec;
extern des_cblock session;
+#endif
static int get_block(int conn, int fd, int max_size, int encrypt);
int found_checksum;
char buf[BUFSIZ];
+ memset(buf, '\0', sizeof(buf));
+
if (!have_authorization)
{
send_int(conn, MR_PERM);
code = errno;
com_err(whoami, errno, "creating file %s (get_file)", pathname);
send_int(conn, code);
- if (setuid(0) < 0)
- {
- com_err(whoami, errno, "Unable to setuid back to %d\n", 0);
- exit(1);
- }
return 1;
}
unlink(pathname);
ftruncate(fd, 0);
close(fd);
-
- if (setuid(0) < 0)
- {
- com_err(whoami, errno, "Unable to setuid back to %d\n", 0);
- exit(1);
- }
return 1;
}
n_written += n_wrote;
if (encrypt)
{
+#ifdef HAVE_KRB4
des_key_sched(session, sched);
memcpy(ivec, session, sizeof(ivec));
+#else
+ /* The session key only gets stored if auth happens in krb4 to
+ begin with. If you don't have krb4, you can't possibly be
+ coming up with a valid session key. */
+ return MR_NO_KRB4;
+#endif
}
n_written = 0;
{
/* get_block has already printed a message */
unlink(pathname);
- if (setuid(0) < 0)
- {
- com_err(whoami, errno, "Unable to setuid back to %d\n", 0);
- exit(1);
- }
return 1;
}
n_written += n_got;
fsync(fd);
close(fd);
- if (setuid(0) < 0)
- {
- com_err(whoami, errno, "Unable to setuid back to %d\n", 0);
- exit(1);
- }
-
/* validate checksum */
found_checksum = checksum_file(pathname);
if (checksum != found_checksum)
if (encrypt)
{
+#ifdef HAVE_KRB4
char *unenc = malloc(len);
if (!unenc)
ivec[i] = data[len - 8 + i] ^ unenc[len - 8 + i];
free(data);
data = unenc;
+#endif
}
n_read = MIN(len, max_size);