+
+
+/* trigger_dcm is also used as a followup routine to the
+ * set_server_host_override query, hence the two dummy arguments.
+ */
+
+struct query pseudo_query = {
+ "trigger_dcm",
+ "tdcm",
+};
+
+trigger_dcm(dummy0, dummy1, cl)
+ int dummy0, dummy1;
+ client *cl;
+{
+ register int pid;
+ char prog[128];
+
+ cl->reply.mr_argc = 0;
+
+ if (cl->reply.mr_status = check_query_access(&pseudo_query, 0, cl) )
+ return(cl->reply.mr_status);
+
+ sprintf(prog, "%s/startdcm", BIN_DIR);
+ pid = vfork();
+ switch (pid) {
+ case 0:
+ for (dummy0 = getdtablesize() - 1; dummy0 > 2; dummy0--)
+ close(dummy0);
+ execl(prog, "startdcm", 0);
+ exit(1);
+
+ case -1:
+ cl->reply.mr_status = errno;
+ return(0);
+
+ default:
+ return(0);
+ }
+}
+
+
+get_motd(cl)
+client *cl;
+{
+ int motd, len;
+ char buffer[1024];
+ char *arg[1];
+
+ arg[0] = buffer;
+ cl->reply.mr_status = 0;
+ motd = open(MOIRA_MOTD_FILE, 0, O_RDONLY);
+ if (motd < 0) return;
+ len = read(motd, buffer, sizeof(buffer) - 1);
+ close(motd);
+ buffer[len] = 0;
+ row_count = 0;
+ retr_callback(1, arg, cl);
+ cl->reply.mr_status = 0;
+}