"short_name" { return TYPE_GAME_SHORT_NAME; }
"game_path" { return TYPE_PATH_GAME; }
"chdir" { return TYPE_PATH_CHDIR; }
+"mkdir" { return TYPE_PATH_MKDIR; }
"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 TYPE_GAME_SHORT_NAME
+%token TYPE_PATH_CHDIR TYPE_PATH_MKDIR TYPE_GAME_SHORT_NAME
%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]->chdir = strdup ($3);
break;
+ case TYPE_PATH_MKDIR:
+ if (myconfig[ncnf]->mkdir) free(myconfig[ncnf]->mkdir);
+ myconfig[ncnf]->mkdir = strdup ($3);
+ break;
+
case TYPE_PATH_DGLDIR:
if (globalconfig.dglroot) free(globalconfig.dglroot);
globalconfig.dglroot = strdup($3);
| TYPE_NAME_GAME { $$ = TYPE_NAME_GAME; }
| TYPE_GAME_SHORT_NAME { $$ = TYPE_GAME_SHORT_NAME; }
| TYPE_PATH_CHDIR { $$ = TYPE_PATH_CHDIR; }
+ | TYPE_PATH_MKDIR { $$ = TYPE_PATH_MKDIR; }
| TYPE_PATH_DGLDIR { $$ = TYPE_PATH_DGLDIR; }
| TYPE_PATH_SPOOL { $$ = TYPE_PATH_SPOOL; }
| TYPE_PATH_BANNER { $$ = TYPE_PATH_BANNER; }
case TYPE_GAMENUM: return "game_num";
case TYPE_PATH_CHROOT: return "chroot_path";
case TYPE_PATH_CHDIR: return "chdir";
+ case TYPE_PATH_MKDIR: return "mkdir";
case TYPE_PATH_GAME: return "game_path";
case TYPE_NAME_GAME: return "game_name";
case TYPE_GAME_SHORT_NAME: return "short_name";
int c, i;
int nhext = 0, nhauth = 0;
int userchoice;
+ char *tmp;
#ifndef HAVE_SETPROCTITLE
/* save argc, argv */
/* fix the variables in the arguments */
for (i = 0; i < myconfig[userchoice]->num_args; i++) {
- char *tmp = strdup(dgl_format_str(userchoice, me, myconfig[userchoice]->bin_args[i]));
+ tmp = strdup(dgl_format_str(userchoice, me, myconfig[userchoice]->bin_args[i]));
free(myconfig[userchoice]->bin_args[i]);
myconfig[userchoice]->bin_args[i] = tmp;
}
+ tmp = strdup(dgl_format_str(userchoice, me, myconfig[userchoice]->mkdir));
+ free(myconfig[userchoice]->mkdir);
+ myconfig[userchoice]->mkdir = tmp;
+
+ tmp = strdup(dgl_format_str(userchoice, me, myconfig[userchoice]->chdir));
+ free(myconfig[userchoice]->chdir);
+ myconfig[userchoice]->chdir = tmp;
+
/* launch program */
ttyrec_main (userchoice, me->username, gen_ttyrec_filename());
/* max # of different games playable from within this dgl */
-#define DIFF_GAMES 3
+#define DIFF_GAMES 4
struct dg_user
{
char* game_name;
char* shortname;
char* chdir;
+ char* mkdir;
char* rcfile;
char* spool;
char* savefilefmt;
/* game_name = */ "NetHack",
/* shortname = */ "NH",
/* chdir = */ NULL,
+ /* mkdir = */ NULL,
/* dglroot = *//* "/dgldir/",*/
/* lockfile = */ /*"/dgl-lock",*/
/* passwd = */ /*"/dgl-login",*/
(void) dup2 (slave, 2);
(void) close (slave);
+ if (myconfig[game]->mkdir)
+ (void) mkdir(myconfig[game]->mkdir, 0755);
+
if (myconfig[game]->chdir)
(void) chdir(myconfig[game]->chdir);