Send data files (but not instruction files) encrypted by default.
When authenticating, try the AUTH_002 protocol first, and fall back to
AUTH_001 if the server doesn't understand AUTH_002.
# Imakefile for update.
#
-SRCS= auth_001.c checksum.c client.c exec_002.c get_file.c \
- hostname.c inst_001.c log.c send_file.c ticket.c \
- update_server.c xfer_002.c xfer_003.c config.c update_test.c
+SRCS= auth_002.c checksum.c client.c config.c exec_002.c \
+ get_file.c hostname.c log.c send_file.c ticket.c \
+ update_server.c update_test.c xfer_002.c xfer_003.c
SRCDIR=${SRCTOP}/update
CODE=${SRCS} Imakefile
-SOBJS= update_server.o auth_001.o inst_001.o xfer_002.o exec_002.o \
- xfer_003.o log.o get_file.o checksum.o config.o
-COBJS= ticket.o send_file.o checksum.o
+SOBJS = auth_002.o checksum.o config.o exec_002.o get_file.o \
+ log.o update_server.o xfer_002.o xfer_003.o
+COBJS= checksum.o client.o send_file.o ticket.o
#ifdef HAS_VSPRINTF
DEFINES= -DHAS_VSPRINTF
#endif
-#ifdef SVRBUILD
-all:: update_server moira_update.o update_test
-#else
all:: update_server update_test
+#ifdef SVRBUILD
+all:: moira_update.o
#endif
#ifdef SVRBUILD
-moira_update.o: ${COBJS} client.o
- ${LD} -r -o moira_update.o ${COBJS} client.o
+moira_update.o: ${COBJS}
+ ${LD} -r -o moira_update.o ${COBJS}
#endif
program(update_server, ${SOBJS},${MR_LIBDEP} ${GDB_LIBDEP}, ${CLIBS},${ETCDIR})
-test_program(update_test, ${COBJS}, ${CLIBS})
+program(update_test, update_test.c ${COBJS}, ${MR_LIBDEP} ${GDB_LIBDEP}, ${CLIBS},${BINDIR})
#include <krb.h>
extern int errno, dbg;
+extern C_Block session;
static char buf[BUFSIZ];
static int code;
goto update_failed;
}
- code = send_file(pathname, target_path, 0);
+ code = send_file(pathname, target_path, 1);
if (code)
goto update_failed;
#undef ASSERT
}
-
-static
send_auth(host_name)
char *host_name;
{
STRING data;
register int code;
int response;
+ int auth_version = 2;
code = get_mr_update_ticket(host_name, ticket);
if (code) {
return(code);
}
- STRING_DATA(data) = "AUTH_001";
+ STRING_DATA(data) = "AUTH_002";
MAX_STRING_SIZE(data) = 9;
code = send_object(conn, (char *)&data, STRING_T);
if (code) {
return(connection_errno(conn));
}
if (response) {
- return(response);
+ STRING_DATA(data) = "AUTH_001";
+ MAX_STRING_SIZE(data) = 9;
+ code = send_object(conn, (char *)&data, STRING_T);
+ if (code) {
+ return(connection_errno(conn));
+ }
+ code = receive_object(conn, (char *)&response, INTEGER_T);
+ if (code) {
+ return(connection_errno(conn));
+ }
+ if (response) {
+ return(response);
+ }
+ auth_version = 1;
}
STRING_DATA(data) = (char *)ticket->dat;
MAX_STRING_SIZE(data) = ticket->length;
if (response) {
return(response);
}
+
+ if (auth_version == 2) {
+ des_key_schedule sched;
+ C_Block enonce;
+
+ code = receive_object(conn, (char *)&data, STRING_T);
+ if (code) {
+ return(connection_errno(conn));
+ }
+ des_key_sched(&session, &sched);
+ des_ecb_encrypt(STRING_DATA(data), enonce, sched, 1);
+ STRING_DATA(data) = enonce;
+ code = send_object(conn, (char *)&data, STRING_T);
+ if (code) {
+ return(connection_errno(conn));
+ }
+ code = receive_object(conn, (char *)&response, INTEGER_T);
+ if (code) {
+ return(connection_errno(conn));
+ }
+ if (response) {
+ return(response);
+ }
+ }
+
return(MR_SUCCESS);
}
-static
execute(path)
char *path;
{
code = receive_object(conn, (char *)&response, INTEGER_T);
if (code)
return(connection_errno(conn));
- if (dbg & DBG_TRACE)
- com_err(whoami, response, "execute returned %d", response);
if (response)
return(response);
return(MR_SUCCESS);
fprintf(stderr, "\t-X file\t\texecutes file\n");
exit(1);
}
-
-send_auth(host_name)
-char *host_name;
-{
- KTEXT_ST ticket_st;
- KTEXT ticket = &ticket_st;
- STRING data;
- register int code;
- int response;
-
- code = get_mr_update_ticket(host_name, ticket);
- if (code) {
- return(code);
- }
- STRING_DATA(data) = "AUTH_001";
- MAX_STRING_SIZE(data) = 9;
- code = send_object(conn, (char *)&data, STRING_T);
- if (code) {
- return(connection_errno(conn));
- }
- code = receive_object(conn, (char *)&response, INTEGER_T);
- if (code) {
- return(connection_errno(conn));
- }
- if (response) {
- return(response);
- }
- STRING_DATA(data) = (char *)ticket->dat;
- MAX_STRING_SIZE(data) = ticket->length;
- code = send_object(conn, (char *)&data, STRING_T);
- if (code) {
- return(connection_errno(conn));
- }
- code = receive_object(conn, (char *)&response, INTEGER_T);
- if (code) {
- return(connection_errno(conn));
- }
- if (response) {
- com_err(whoami, response, "Permission to connect denied");
- return(response);
- }
- return(MR_SUCCESS);
-}
-
-execute(path)
- char *path;
-{
- int response;
- STRING data;
- register int code;
-
- string_alloc(&data, BUFSIZ);
- sprintf(STRING_DATA(data), "EXEC_002 %s", path);
- code = send_object(conn, (char *)&data, STRING_T);
- if (code)
- return(connection_errno(conn));
- code = receive_object(conn, (char *)&response, INTEGER_T);
- if (code)
- return(connection_errno(conn));
- if (response)
- return(response);
- return(MR_SUCCESS);
-}
-
-send_quit()
-{
- STRING str;
- if (!conn)
- return;
- string_alloc(&str, 5);
- (void) strcpy(STRING_DATA(str), "quit");
- (void) send_object(conn, (char *)&str, STRING_T);
- string_free(&str);
-}