-#define ASSERT(condition,stat,amsg) \
- if (!(condition)) { com_err(whoami, stat, amsg); return(stat); }
-#define ASSERT2(condition,stat,amsg,arg1) \
- if (!(condition)) { com_err(whoami, stat, amsg, arg1); return(stat); }
-#define NONNULL(str) \
- (((str) != (char *)NULL) && (strlen(str) != 0))
-
- char *service_address, *service_updated, *pathname;
- int on;
-
- /* some sanity checking of arguments while we build data */
- ASSERT(NONNULL(machine), MR_INTERNAL, " null host name");
- ASSERT(NONNULL(service), MR_INTERNAL, " null service name");
- ASSERT((strlen(machine) + strlen(service) + 2 < BUFSIZ), MR_ARG_TOO_LONG,
- " machine and service names");
- sprintf(buf, "%s:%s", machine, service);
- service_updated = strsave(buf);
- ASSERT(NONNULL(service_updated), MR_NO_MEM, " for service name");
- ASSERT((strlen(machine)+strlen(SERVICE_NAME)+2 < BUFSIZ), MR_ARG_TOO_LONG,
- " machine and update service name");
- sprintf(buf, "%s:%s", machine, SERVICE_NAME);
- service_address = strsave(buf);
- ASSERT(NONNULL(service_address), MR_NO_MEM, " for service address");
- ASSERT(NONNULL(target_path), MR_INTERNAL, " null target pathname");
- ASSERT((strlen(target_path) < MAXPATHLEN), MR_ARG_TOO_LONG,
- " target pathname");
- ASSERT2(target_path[0] == '/', MR_NOT_UNIQUE,
- " non-absolute pathname supplied \"%s\"", target_path);
- sprintf(buf, "%s/%s.out", DCM_DIR, service);
- pathname = strsave(buf);
- ASSERT(NONNULL(pathname), MR_NO_MEM, " for pathname");
- ASSERT(NONNULL(instructions), MR_NO_MEM, " for instructions");
- ASSERT((strlen(instructions) < MAXPATHLEN), MR_ARG_TOO_LONG,
- " instruction pathname");
-
- initialize();
- com_err(whoami, 0, "starting update for %s", service_updated);
-
- /* open connection */
- conn = start_server_connection(service_address, "");
- if (!conn || (connection_status(conn) == CON_STOPPED)) {
- com_err(whoami, connection_errno(conn),
- " can't connect to update %s", service_address);
- return(MR_CANT_CONNECT);
+ KTEXT_ST ticket_st;
+ KTEXT ticket = &ticket_st;
+ 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_002";
+ 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)
+ {
+ 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;