Allow setting max nick length in the dgl config file, while still retaining backwards compatibility with old-style, up to 20-char

long nicks.


git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@347 db0b04b0-f4d1-0310-9a6d-de3e77497b0e
This commit is contained in:
Pasi Kallinen 2007-03-31 11:10:07 +00:00
parent 687239516b
commit 731caa2fcf
6 changed files with 27 additions and 10 deletions

View File

@ -56,6 +56,7 @@ COMMENT ^#.*
"shed_uid" { return TYPE_SUID; } "shed_uid" { return TYPE_SUID; }
"shed_gid" { return TYPE_SGID; } "shed_gid" { return TYPE_SGID; }
"maxusers" { return TYPE_MAX; } "maxusers" { return TYPE_MAX; }
"maxnicklen" { return TYPE_MAXNICKLEN; }
"game_num" { return TYPE_GAMENUM; } "game_num" { return TYPE_GAMENUM; }

View File

@ -30,7 +30,7 @@ static const char* lookup_token (int t);
unsigned long i; unsigned long i;
} }
%token TYPE_SUSER TYPE_SGROUP TYPE_SGID TYPE_SUID TYPE_MAX %token TYPE_SUSER TYPE_SGROUP TYPE_SGID TYPE_SUID TYPE_MAX TYPE_MAXNICKLEN
%token TYPE_PATH_GAME TYPE_NAME_GAME TYPE_PATH_DGLDIR TYPE_PATH_SPOOL %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_BANNER TYPE_PATH_CANNED TYPE_PATH_CHROOT TYPE_GAMENUM
%token TYPE_PATH_PASSWD TYPE_PATH_LOCKFILE TYPE_PATH_SAVEFILEFMT %token TYPE_PATH_PASSWD TYPE_PATH_LOCKFILE TYPE_PATH_SAVEFILEFMT
@ -270,6 +270,10 @@ KeyPair: KeyType '=' TYPE_VALUE {
globalconfig.max = $3; globalconfig.max = $3;
break; break;
case TYPE_MAXNICKLEN:
globalconfig.max_newnick_len = $3;
break;
default: default:
fprintf(stderr, "%s:%d: token %s does not take a number, bailing out\n", fprintf(stderr, "%s:%d: token %s does not take a number, bailing out\n",
config, line, lookup_token($1)); config, line, lookup_token($1));
@ -282,6 +286,7 @@ KeyType : TYPE_SUSER { $$ = TYPE_SUSER; }
| TYPE_SUID { $$ = TYPE_SUID; } | TYPE_SUID { $$ = TYPE_SUID; }
| TYPE_SGID { $$ = TYPE_SGID; } | TYPE_SGID { $$ = TYPE_SGID; }
| TYPE_MAX { $$ = TYPE_MAX; } | TYPE_MAX { $$ = TYPE_MAX; }
| TYPE_MAXNICKLEN { $$ = TYPE_MAXNICKLEN; }
| TYPE_GAMENUM { $$ = TYPE_GAMENUM; } | TYPE_GAMENUM { $$ = TYPE_GAMENUM; }
| TYPE_PATH_CHROOT { $$ = TYPE_PATH_CHROOT; } | TYPE_PATH_CHROOT { $$ = TYPE_PATH_CHROOT; }
| TYPE_PATH_GAME { $$ = TYPE_PATH_GAME; } | TYPE_PATH_GAME { $$ = TYPE_PATH_GAME; }
@ -309,6 +314,7 @@ const char* lookup_token (int t)
case TYPE_SUID: return "shed_uid"; case TYPE_SUID: return "shed_uid";
case TYPE_SGID: return "shed_gid"; case TYPE_SGID: return "shed_gid";
case TYPE_MAX: return "maxusers"; case TYPE_MAX: return "maxusers";
case TYPE_MAXNICKLEN: return "maxnicklen";
case TYPE_GAMENUM: return "game_num"; case TYPE_GAMENUM: return "game_num";
case TYPE_PATH_CHROOT: return "chroot_path"; case TYPE_PATH_CHROOT: return "chroot_path";
case TYPE_PATH_GAME: return "game_path"; case TYPE_PATH_GAME: return "game_path";

View File

@ -837,7 +837,7 @@ void
autologin (char* user, char *pass) autologin (char* user, char *pass)
{ {
int me_index = -1; int me_index = -1;
if ((me_index = userexist(user)) != -1) if ((me_index = userexist(user, 0)) != -1)
{ {
me = users[me_index]; me = users[me_index];
if (passwordgood(pass)) if (passwordgood(pass))
@ -877,6 +877,7 @@ loginprompt (int from_ttyplay)
refresh (); refresh ();
/* keep this at 20 chars for hysterical raisins */
mygetnstr (user_buf, 20, 1); mygetnstr (user_buf, 20, 1);
if (user_buf && *user_buf == '\0') if (user_buf && *user_buf == '\0')
@ -884,7 +885,7 @@ loginprompt (int from_ttyplay)
error = 1; error = 1;
if ((me_index = userexist (user_buf)) != -1) if ((me_index = userexist (user_buf, 0)) != -1)
{ {
me = users[me_index]; me = users[me_index];
error = 0; error = 0;
@ -953,12 +954,14 @@ newuser ()
{ {
clear (); clear ();
sprintf(buf, "%i character max.", globalconfig.max_newnick_len);
drawbanner (1, 1); drawbanner (1, 1);
mvaddstr (5, 1, "Welcome new user. Please enter a username."); mvaddstr (5, 1, "Welcome new user. Please enter a username.");
mvaddstr (6, 1, mvaddstr (6, 1,
"Only characters and numbers are allowed, with no spaces."); "Only characters and numbers are allowed, with no spaces.");
mvaddstr (7, 1, "20 character max."); mvaddstr (7, 1, buf);
mvaddstr (9, 1, "=> "); mvaddstr (9, 1, "=> ");
if (error == 1) if (error == 1)
@ -969,8 +972,8 @@ newuser ()
refresh (); refresh ();
mygetnstr (buf, 20, 1); mygetnstr (buf, globalconfig.max_newnick_len, 1);
if (userexist (buf) == -1) if (userexist (buf, 1) == -1)
error = 0; error = 0;
else else
error = 1; error = 1;
@ -1189,13 +1192,13 @@ readfile (int nolock)
/* ************************************************************* */ /* ************************************************************* */
int int
userexist (char *cname) userexist (char *cname, int isnew)
{ {
int i; int i;
for (i = 0; i < f_num; i++) for (i = 0; i < f_num; i++)
{ {
if (!strncasecmp (cname, users[i]->username, 20)) if (!strncasecmp (cname, users[i]->username, (isnew ? globalconfig.max_newnick_len : 20)))
return i; return i;
} }
@ -1714,7 +1717,7 @@ authenticate ()
return 1; return 1;
} }
if ((me_index = userexist (user_buf)) != -1) if ((me_index = userexist (user_buf, 0)) != -1)
{ {
me = users[me_index]; me = users[me_index];
if (passwordgood (pw_buf)) if (passwordgood (pw_buf))

View File

@ -62,6 +62,7 @@ struct dg_globalconfig
char* dglroot; char* dglroot;
char* banner; char* banner;
unsigned long max; unsigned long max;
int max_newnick_len; /* maximum length of new registered names. must be less than 20 chars. */
char* shed_user; char* shed_user;
char* shed_group; char* shed_group;
uid_t shed_uid; uid_t shed_uid;
@ -102,7 +103,7 @@ extern void newuser(void);
extern void autologin(char *user, char *pass); extern void autologin(char *user, char *pass);
extern int passwordgood(char *cpw); extern int passwordgood(char *cpw);
extern int readfile(int nolock); extern int readfile(int nolock);
extern int userexist(char *cname); extern int userexist(char *cname, int isnew);
extern void write_canned_rcfile(int game, char *target); extern void write_canned_rcfile(int game, char *target);
extern void editoptions(int game); extern void editoptions(int game);
extern void writefile(int requirenew); extern void writefile(int requirenew);

View File

@ -338,6 +338,7 @@ create_config ()
if (!globalconfig.chroot) globalconfig.chroot = "/var/lib/dgamelaunch/"; if (!globalconfig.chroot) globalconfig.chroot = "/var/lib/dgamelaunch/";
if (globalconfig.max == 0) globalconfig.max = 64000; if (globalconfig.max == 0) globalconfig.max = 64000;
if (globalconfig.max_newnick_len == 0) globalconfig.max_newnick_len = 20;
if (!globalconfig.dglroot) globalconfig.dglroot = "/dgldir/"; if (!globalconfig.dglroot) globalconfig.dglroot = "/dgldir/";
if (!globalconfig.banner) globalconfig.banner = "/dgl-banner"; if (!globalconfig.banner) globalconfig.banner = "/dgl-banner";

View File

@ -10,6 +10,11 @@
# Max amount of registered users to allow. # Max amount of registered users to allow.
maxusers = 64000 maxusers = 64000
# Max length for newly registered nicks. Must be less than 20.
# By default, NetHack only stores the first 10 chars of a name into
# the record/logfile.
maxnicklen = 10
# Path to a prepared chroot jail. # Path to a prepared chroot jail.
chroot_path = "/var/lib/dgamelaunch/" chroot_path = "/var/lib/dgamelaunch/"