]> skyeroc.xyz Git - dgamelaunch/commitdiff
Add 'chdir' per-game config variable, which defines the dir where dgl will chdir...
authorPasi Kallinen <paxed@alt.org>
Sat, 31 Mar 2007 21:05:12 +0000 (21:05 +0000)
committerPasi Kallinen <paxed@alt.org>
Sat, 31 Mar 2007 21:05:12 +0000 (21:05 +0000)
git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@350 db0b04b0-f4d1-0310-9a6d-de3e77497b0e

config.l
config.y
dgamelaunch.h
dgl-common.c
ttyrec.c

index 15c96fdd82cc16f0a8f71a9871d3e6c262dd478d..6d4f92454be337da7e866020f228ed80dc1933f7 100644 (file)
--- a/config.l
+++ b/config.l
@@ -63,6 +63,7 @@ COMMENT               ^#.*
 "chroot_path"  { return TYPE_PATH_CHROOT; }
 "game_name"     { return TYPE_NAME_GAME; }
 "game_path"    { return TYPE_PATH_GAME; }
+"chdir"                { return TYPE_PATH_CHDIR; }
 "dglroot"      { return TYPE_PATH_DGLDIR; }
 "spooldir"     { return TYPE_PATH_SPOOL; }
 "banner"       { return TYPE_PATH_BANNER; }
index 0c09caac17ce1163fca8b015fa22c5c26a41770e..694745992901e26fb4c4053caf3026c8b0f048f8 100644 (file)
--- a/config.y
+++ b/config.y
@@ -31,6 +31,7 @@ static const char* lookup_token (int t);
 }
 
 %token TYPE_SUSER TYPE_SGROUP TYPE_SGID TYPE_SUID TYPE_MAX TYPE_MAXNICKLEN
+%token TYPE_PATH_CHDIR
 %token TYPE_PATH_GAME TYPE_NAME_GAME TYPE_PATH_DGLDIR TYPE_PATH_SPOOL
 %token TYPE_PATH_BANNER TYPE_PATH_CANNED TYPE_PATH_CHROOT TYPE_GAMENUM
 %token TYPE_PATH_PASSWD TYPE_PATH_LOCKFILE TYPE_PATH_SAVEFILEFMT
@@ -138,6 +139,11 @@ KeyPair: KeyType '=' TYPE_VALUE {
       myconfig[ncnf]->game_name = strdup($3);
       break;
 
+    case TYPE_PATH_CHDIR:
+      if (myconfig[ncnf]->chdir) free(myconfig[ncnf]->chdir);
+      myconfig[ncnf]->chdir = strdup ($3);
+      break;
+
     case TYPE_PATH_DGLDIR:
       if (globalconfig.dglroot) free(globalconfig.dglroot);
       globalconfig.dglroot = strdup($3);
@@ -291,6 +297,7 @@ KeyType : TYPE_SUSER        { $$ = TYPE_SUSER; }
        | TYPE_PATH_CHROOT      { $$ = TYPE_PATH_CHROOT; }
        | TYPE_PATH_GAME        { $$ = TYPE_PATH_GAME; }
         | TYPE_NAME_GAME        { $$ = TYPE_NAME_GAME; }
+       | TYPE_PATH_CHDIR       { $$ = TYPE_PATH_CHDIR; }
        | TYPE_PATH_DGLDIR      { $$ = TYPE_PATH_DGLDIR; }
        | TYPE_PATH_SPOOL       { $$ = TYPE_PATH_SPOOL; }
        | TYPE_PATH_BANNER      { $$ = TYPE_PATH_BANNER; }
@@ -317,6 +324,7 @@ const char* lookup_token (int t)
     case TYPE_MAXNICKLEN: return "maxnicklen";
     case TYPE_GAMENUM: return "game_num";
     case TYPE_PATH_CHROOT: return "chroot_path";
+    case TYPE_PATH_CHDIR: return "chdir";
     case TYPE_PATH_GAME: return "game_path";
     case TYPE_NAME_GAME: return "game_name";
     case TYPE_PATH_DGLDIR: return "dglroot";
index 7965fbc8f8536b1fe81d38f84e0c0aa69b4b3007..c82169dc448ba2e436b5420e885f00ad26dfe821 100644 (file)
@@ -45,6 +45,7 @@ struct dg_config
 {
   char* game_path;
   char* game_name;
+  char* chdir;
   char* lockfile;
   char* passwd;
   char* rcfile;
index 2f244a8bedae04bc961d973576a362f6d909cc8c..f3f8e752c61e827cea7e9860afbc94dbaa67833d 100644 (file)
@@ -21,6 +21,7 @@ struct dg_config defconfig = {
     /* chroot = */ /*"/var/lib/dgamelaunch/",*/
   /* game_path = */ "/bin/nethack",
   /* game_name = */ "NetHack",
+  /* chdir = */ NULL,
   /* dglroot = *//*  "/dgldir/",*/
   /* lockfile = */ "/dgl-lock",
   /* passwd = */ "/dgl-login",
@@ -332,7 +333,6 @@ create_config ()
       if (!myconfig[tmp]->savefilefmt) myconfig[tmp]->savefilefmt = defconfig.savefilefmt;
       if (!myconfig[tmp]->inprogressdir) myconfig[tmp]->inprogressdir = defconfig.inprogressdir;
 
-
   }
 
   if (!globalconfig.chroot) globalconfig.chroot = "/var/lib/dgamelaunch/";
index 274d8d0930177646cd6ef22291cd9108bab16f15..f0f925bf5be2e6ee7472e705e4613623bc47018d 100644 (file)
--- a/ttyrec.c
+++ b/ttyrec.c
@@ -271,6 +271,9 @@ doshell (int game, char *username)
   (void) dup2 (slave, 2);
   (void) close (slave);
 
+  if (myconfig[game]->chdir)
+      (void) chdir(myconfig[game]->chdir);
+
   execvp (myconfig[game]->game_path, myconfig[game]->bin_args);
 
   fail ();