/* ************************************************************* */
-char*
-gen_nhext_filename ()
-{
- time_t rawtime;
- struct tm *ptm;
- char *nhext_filename = calloc(100, sizeof(char));
-
- /* append time to filename */
- time (&rawtime);
- ptm = gmtime (&rawtime);
- snprintf (nhext_filename, 100, "%04i-%02i-%02i.%02i:%02i:%02i.nhext",
- ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday,
- ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
- return nhext_filename;
-}
-
-/* ************************************************************* */
-
char*
gen_inprogress_lock (int game, pid_t pid, char* ttyrec_filename)
{
static dg_sortmode sortmode = NUM_SORTMODES;
struct dg_game **games = NULL;
char ttyrecname[130], gametype[10], idletime[10];
- int *is_nhext;
sigset_t oldmask, toblock;
int idx = -1;
int shm_idx = -1;
sortmode = globalconfig.sortmode;
abs_max_height = strlen(selectorchars);
- is_nhext = (int *)calloc(abs_max_height+1, sizeof(int));
-
- if (!is_nhext) {
- debug_write("could not calloc is_nhext");
- graceful_exit(70);
- }
shm_init(&shm_dg_data, &shm_dg_game);
term_resize_check();
max_height = dgl_local_LINES - (top_banner_hei + btm_banner_hei) - 1;
if (max_height < 2) {
- free(is_nhext);
free_populated_games(games, len);
return;
}
if (i + offset == selected) attron(selected_attr);
- is_nhext[i] = !strcmp (games[i + offset]->ttyrec_fn + strlen (games[i + offset]->ttyrec_fn) - 6, ".nhext");
-
- if (is_nhext[i])
- strcpy (gametype, " NhExt");
- else
- snprintf (gametype, sizeof gametype, "%3dx%3d",
+ snprintf (gametype, sizeof gametype, "%3dx%3d",
games[i + offset]->ws_col, games[i + offset]->ws_row);
{
if (nmatches > 1)
match = firstmatch;
if (match > -1) {
- if (!strcmp(games[match]->ttyrec_fn + strlen (games[match]->ttyrec_fn) - 6, ".nhext")) break;
idx = match;
selected = idx;
goto watchgame;
case ERR:
case 'q': case 'Q':
- if (is_nhext) free(is_nhext);
free_populated_games(games, len);
#ifdef USE_SHMEM
shmdt(shm_dg_data);
break;
}
- if (is_nhext[sidx]) /* Cannot watch NhExt game */
- break;
-
idx = sidx + offset;
if (require_enter) {
if (selected == idx) selected = -1;
selectedgame = NULL;
}
}
- if (is_nhext) free(is_nhext);
free_populated_games(games, len);
#ifdef USE_SHMEM
shmdt(shm_dg_data);
}
}
-
-int
-authenticate ()
-{
- int i, len, me_index;
- char user_buf[DGL_PLAYERNAMELEN+1], pw_buf[DGL_PASSWDLEN+1];
- struct dg_game **games = NULL;
-
- /* We use simple password authentication, rather than challenge/response. */
- printf ("\n");
- fflush(stdout);
-
- fgets (user_buf, sizeof(user_buf), stdin);
- len = strlen (user_buf);
- if (user_buf[len - 1] == '\n')
- user_buf[--len] = '\0';
- else
- {
- fprintf (stderr, "Username too long (max %i chars).\n", DGL_PLAYERNAMELEN);
- return 1;
- }
-
- fgets (pw_buf, sizeof(pw_buf), stdin);
- len = strlen (pw_buf);
- if (pw_buf[len - 1] == '\n')
- pw_buf[--len] = '\0';
- else
- {
- fprintf (stderr, "Password too long (max %i chars).\n", DGL_PASSWDLEN);
- return 1;
- }
-
- {
- struct dg_user *tmpme;
- if ((tmpme = userexist(user_buf, 0))) {
- me = cpy_me(tmpme);
- if (passwordgood (pw_buf))
- {
- games = populate_games (-1, &len, me);
- for (i = 0; i < len; i++)
- if (!strcmp (games[i]->name, user_buf))
- {
- fprintf (stderr, "Game already in progress.\n");
- free_populated_games(games, len);
- return 1;
- }
- win.ws_row = win.ws_col = 0;
- gen_inprogress_lock (0, getppid (), gen_nhext_filename ());
- free_populated_games(games, len);
- return 0;
- }
- }
- }
-
- sleep (2);
- fprintf (stderr, "Login failed.\n");
- free_populated_games(games, len);
- return 1;
-}
-
int
main (int argc, char** argv)
{
char atrcfilename[81], *p, *auth = NULL;
unsigned int len;
int c, i;
- int nhext = 0, nhauth = 0;
int userchoice;
char *tmp;
char *wall_email_str = NULL;
case 'q':
silent = 1; break;
- case 'a':
- nhauth = 1; break;
-
- case 'e':
- nhext = 1; break;
-
case 'f':
if (config)
{
}
/* get master tty just before chroot (lives in /dev) */
- if (!nhext && !nhauth)
- ttyrec_getpty ();
+ ttyrec_getpty ();
#ifdef USE_RLIMIT
#ifdef USE_RLIMIT_CORE
dgl_exec_cmdqueue(globalconfig.cmdqueue[DGLTIME_DGLSTART], 0, NULL);
- if (nhext)
- {
- char *myargv[3];
-
- myargv[0] = myconfig[0]->game_path;
- myargv[1] = "--proxy";
- myargv[2] = 0;
-
- execvp (myconfig[0]->game_path, myargv);
- perror (myconfig[0]->game_path);
- graceful_exit (1);
- }
-
/* simple login routine, uses ncurses */
if (readfile (0)) {
debug_write("log in fail");
graceful_exit (110);
}
- if (nhauth) {
- debug_write("nhauth");
- graceful_exit (authenticate ());
- }
-
if (auth)
{
char *user, *pass, *p;
struct dg_game **
populate_games (int xgame, int *l, struct dg_user *me)
{
- int fd, len, n, is_nhext, pid;
+ int fd, len, n, pid;
DIR *pdir;
struct dirent *pdirent;
struct stat pstat;
if (!strcmp (pdirent->d_name, ".") || !strcmp (pdirent->d_name, ".."))
continue;
- is_nhext = !strcmp (pdirent->d_name + strlen (pdirent->d_name) - 6, ".nhext");
-
inprog = dgl_format_str(game, me, myconfig[game]->inprogressdir, NULL);
if (!inprog) continue;
/* O_RDWR here should be O_RDONLY, but we need to test for
* an exclusive lock */
fd = open (fullname, O_RDWR);
- if (fd >= 0 && (is_nhext || fcntl (fd, F_SETLK, &fl) == -1))
+ if (fd >= 0 && (fcntl (fd, F_SETLK, &fl) == -1))
{
-
- /* stat to check idle status */
- if (!is_nhext)
- {
char *ttrecdir = NULL;
strncpy(playername, pdirent->d_name, DGL_PLAYERNAMELEN);
playername[DGL_PLAYERNAMELEN] = '\0';
ttrecdir = dgl_format_str(game, me, myconfig[game]->ttyrecdir, playername);
if (!ttrecdir) continue;
snprintf (ttyrecname, 130, "%s%s", ttrecdir, replacestr);
- }
- if (is_nhext || !stat (ttyrecname, &pstat))
+
+ if (!stat (ttyrecname, &pstat))
{
/* now it's a valid game for sure */
games = realloc (games, sizeof (struct dg_game) * (len + 1));
if (*p != '\0')
p++;
games[len]->ws_col = atoi(p);
- if (is_nhext)
- {
- if (kill (pid, 0) != 0)
- {
- /* Dead game */
- free (games[len]->ttyrec_fn);
- free (games[len]->name);
- free (games[len]->date);
- free (games[len]->time);
- free (games[len]);
- unlink (fullname);
- }
- else
- len++;
- }
- else
- {
- if (games[len]->ws_row < 4 || games[len]->ws_col < 4)
- {
- games[len]->ws_row = 24;
- games[len]->ws_col = 80;
- }
- len++;
- }
+
+ if (games[len]->ws_row < 4 || games[len]->ws_col < 4) {
+ games[len]->ws_row = 24;
+ games[len]->ws_col = 80;
+ }
+ len++;
}
}
else