Index: dgamelaunch.c
===================================================================
RCS file: /var/cvs/dgamelaunch/dgamelaunch.c,v
retrieving revision 1.73
diff -u -r1.73 dgamelaunch.c
--- dgamelaunch.c	23 Jan 2004 18:33:35 -0000	1.73
+++ dgamelaunch.c	25 Jan 2004 22:22:41 -0000
@@ -1,7 +1,7 @@
 /* dgamelaunch.c
  *
- * (c)2001-3 M. Drew Streib <dtype@dtype.org>
- * also parts (c) 2003 Joshua Kwan <joshk@triplehelix.org>,
+ * (c)2001-4 M. Drew Streib <dtype@dtype.org>
+ * also parts (c) 2004 Joshua Kwan <joshk@triplehelix.org>,
  * Brett Carrington <brettcar@segvio.org>,
  * Jilles Tjoelker <jilles@stack.nl>
  *
@@ -26,12 +26,6 @@
  * This is a little wrapper for nethack (and soon other programs) that
  * will allow them to be run from a telnetd session, chroot, shed privs,
  * make a simple login, then play the game.
- *
- * By default, this thing is also statically compiled, and can thus be
- * run inside of a chroot jail itself if necessary.
- *
- * Yes, I know it is all global variables. Deal with it. The program
- * is very small.
  */
 
 #define _GNU_SOURCE
@@ -51,9 +45,10 @@
 #include <stdlib.h>
 #include <curses.h>
 #include <sys/types.h>
-#include <sys/file.h>           /* for flock() */
 #include <sys/time.h>
 #include <sys/wait.h>
+#include <sys/ioctl.h>          /* ttyrec */
+#include <sys/stat.h>
 
 #ifndef __FreeBSD__
 # include <crypt.h>
@@ -73,12 +68,9 @@
 #include <pwd.h>
 #include <grp.h>
 #include <time.h>
-#include <sys/resource.h>
-#include <sys/ioctl.h>          /* ttyrec */
 #include <errno.h>
 #include <dirent.h>
 #include <string.h>
-#include <sys/stat.h>
 #include <signal.h>
 #include <assert.h>
 #include <ctype.h>
@@ -89,11 +81,12 @@
 extern FILE* yyin;
 extern int yyparse ();
 
+extern pid_t child; /* nethack process */
+
 extern int ee_main (int argc, char **argv);
 extern int ttyplay_main (char *ttyfile, int mode, int rstripgfx);
-extern int ttyrec_main (char *);
-extern int master;
-extern int slave;
+extern int ttyrec_main (char *username, char* ttyrec_filename);
+extern int master, slave;
 extern struct termios tt;
 extern struct winsize win;
 
@@ -103,23 +96,21 @@
 char* config = NULL;
 
 struct dg_config defconfig = {
-  "/var/lib/dgamelaunch/",
-  "/bin/nethack",
-  "/dgldir/",
-  "/dgl-lock",
-  "/dgl-login",
-  "/dgl-banner",
-  "/dgl-default-rcfile",
-  "/var/mail/",
-  "games", "games",
-  5, 60, /* games:games in Debian */
-  64000 
+  .chroot = "/var/lib/dgamelaunch/",
+  .nethack = "/bin/nethack",
+  .dglroot = "/dgldir/",
+  .lockfile = "/dgl-lock",
+  .passwd = "/dgl-login",
+  .banner = "/dgl-banner",
+  .rcfile = "/dgl-default-rcfile",
+  .spool = "/var/mail/",
+  .shed_user = "games", .shed_group = "games",
+  .shed_uid = 5, .shed_gid = 60, /* games:games in Debian */
+  .max = 64000 
 };
 
-int pid_game = 0;
 int loggedin = 0;
 char rcfilename[80];
-char ttyrec_filename[100];
 char *chosen_name;
 
 int f_num = 0;
@@ -225,11 +216,12 @@
 
 /* ************************************************************* */
 
-void
+char*
 gen_ttyrec_filename ()
 {
   time_t rawtime;
   struct tm *ptm;
+  char *ttyrec_filename = calloc(100, sizeof(char));
 
   /* append time to filename */
   time (&rawtime);
@@ -237,12 +229,13 @@
   snprintf (ttyrec_filename, 100, "%04i-%02i-%02i.%02i:%02i:%02i.ttyrec",
             ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday,
             ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
+  return ttyrec_filename;
 }
 
 /* ************************************************************* */
 
 void
-gen_inprogress_lock (pid_t pid)
+gen_inprogress_lock (pid_t pid, char* ttyrec_filename)
 {
   char lockfile[130], pidbuf[16];
   int fd;
@@ -270,10 +263,10 @@
 void
 catch_sighup (int signum)
 {
-  if (pid_game)
+  if (child)
     {
       sleep (10);
-      kill (pid_game, SIGHUP);
+      kill (child, SIGHUP);
       sleep (5);
     }
   graceful_exit (2);
@@ -1520,11 +1513,8 @@
 
   free (spool);
 
-  /* lock */
-  gen_ttyrec_filename ();
-
   /* launch program */
-  ttyrec_main (me->username);
+  ttyrec_main (me->username, gen_ttyrec_filename());
 
   /* NOW we can safely kill this */
   freefile ();
Index: dgamelaunch.h
===================================================================
RCS file: /var/cvs/dgamelaunch/dgamelaunch.h,v
retrieving revision 1.26
diff -u -r1.26 dgamelaunch.h
--- dgamelaunch.h	21 Jan 2004 01:57:44 -0000	1.26
+++ dgamelaunch.h	25 Jan 2004 22:22:41 -0000
@@ -56,13 +56,12 @@
 
 extern char* config; /* file path */
 extern struct dg_config *myconfig;
-extern struct dg_config defconfig;
 
 /* dgamelaunch.c function prototypes */
 extern void create_config (void);
 extern void ttyrec_getmaster (void);
-extern void gen_ttyrec_filename (void);
-extern void gen_inprogress_lock (pid_t pid);
+extern char* gen_ttyrec_filename (void);
+extern void gen_inprogress_lock (pid_t pid, char* ttyrec_filename);
 extern void catch_sighup (int signum);
 extern void loadbanner (struct dg_banner *ban);
 extern void drawbanner (unsigned int start_line, unsigned int howmany);
Index: ttyrec.c
===================================================================
RCS file: /var/cvs/dgamelaunch/ttyrec.c,v
retrieving revision 1.14
diff -u -r1.14 ttyrec.c
--- ttyrec.c	16 Jan 2004 16:36:33 -0000	1.14
+++ ttyrec.c	25 Jan 2004 22:22:41 -0000
@@ -45,10 +45,11 @@
 #include "dgamelaunch.h"
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <termios.h>
 #include <sys/ioctl.h>
-#include <time.h>
 #include <sys/file.h>
+#include <sys/wait.h>
+#include <termios.h>
+#include <time.h>
 #include <signal.h>
 #include <stdio.h>
 #include <unistd.h>
@@ -67,19 +68,6 @@
 # define XCASE 0
 #endif
 
-#define HAVE_inet_aton
-#define HAVE_scsi_h
-#define HAVE_kd_h
-
-#define _(FOO) FOO
-
-#ifdef HAVE_openpty
-#include <libutil.h>
-#endif
-
-extern char ttyrec_filename[100];
-extern int pid_game;
-
 void done (void);
 void fail (void);
 void fixtty (void);
@@ -91,8 +79,7 @@
 FILE *fscript;
 int master;
 int slave;
-int child;
-int subchild;
+pid_t child, subchild;
 
 struct termios tt;
 struct winsize win;
@@ -102,7 +89,7 @@
 int uflg;
 
 int
-ttyrec_main (char *username)
+ttyrec_main (char *username, char* ttyrec_filename)
 {
   void finish ();
   char dirname[100];
@@ -142,8 +129,7 @@
       if (child)
         {
           close (slave);
-          pid_game = child;
-          gen_inprogress_lock (pid_game);
+          gen_inprogress_lock (child, ttyrec_filename);
           dooutput ();
         }
       else
@@ -166,8 +152,6 @@
   done ();
 }
 
-#include <sys/wait.h>
-
 void
 finish ()
 {
