"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; }
}
%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
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);
| 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; }
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";
/* chroot = */ /*"/var/lib/dgamelaunch/",*/
/* game_path = */ "/bin/nethack",
/* game_name = */ "NetHack",
+ /* chdir = */ NULL,
/* dglroot = *//* "/dgldir/",*/
/* lockfile = */ "/dgl-lock",
/* passwd = */ "/dgl-login",
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/";
(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 ();