]> skyeroc.xyz Git - dgamelaunch/commitdiff
Allow setting max nick length in the dgl config file, while still retaining backwards...
authorPasi Kallinen <paxed@alt.org>
Sat, 31 Mar 2007 11:10:07 +0000 (11:10 +0000)
committerPasi Kallinen <paxed@alt.org>
Sat, 31 Mar 2007 11:10:07 +0000 (11:10 +0000)
long nicks.

git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@347 db0b04b0-f4d1-0310-9a6d-de3e77497b0e

config.l
config.y
dgamelaunch.c
dgamelaunch.h
dgl-common.c
examples/dgamelaunch.conf

index 4f6176f5009331d66ba0d42afb3938d4be224c12..15c96fdd82cc16f0a8f71a9871d3e6c262dd478d 100644 (file)
--- a/config.l
+++ b/config.l
@@ -56,6 +56,7 @@ COMMENT               ^#.*
 "shed_uid"     { return TYPE_SUID; }
 "shed_gid"     { return TYPE_SGID; }
 "maxusers"     { return TYPE_MAX; }
+"maxnicklen"   { return TYPE_MAXNICKLEN; }
 
 "game_num"     { return TYPE_GAMENUM; }
 
index 154baf4cb345584304df302ffa6c0653e31a7865..0c09caac17ce1163fca8b015fa22c5c26a41770e 100644 (file)
--- a/config.y
+++ b/config.y
@@ -30,7 +30,7 @@ static const char* lookup_token (int t);
        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_BANNER TYPE_PATH_CANNED TYPE_PATH_CHROOT TYPE_GAMENUM
 %token TYPE_PATH_PASSWD TYPE_PATH_LOCKFILE TYPE_PATH_SAVEFILEFMT
@@ -270,6 +270,10 @@ KeyPair: KeyType '=' TYPE_VALUE {
       globalconfig.max = $3;
       break;
 
+  case TYPE_MAXNICKLEN:
+      globalconfig.max_newnick_len = $3;
+      break;
+
     default:
       fprintf(stderr, "%s:%d: token %s does not take a number, bailing out\n",
         config, line, lookup_token($1)); 
@@ -282,6 +286,7 @@ KeyType : TYPE_SUSER        { $$ = TYPE_SUSER; }
        | TYPE_SUID     { $$ = TYPE_SUID; }
        | TYPE_SGID     { $$ = TYPE_SGID; }
        | TYPE_MAX      { $$ = TYPE_MAX; }
+       | TYPE_MAXNICKLEN       { $$ = TYPE_MAXNICKLEN; }
        | TYPE_GAMENUM  { $$ = TYPE_GAMENUM; }
        | TYPE_PATH_CHROOT      { $$ = TYPE_PATH_CHROOT; }
        | TYPE_PATH_GAME        { $$ = TYPE_PATH_GAME; }
@@ -309,6 +314,7 @@ const char* lookup_token (int t)
     case TYPE_SUID: return "shed_uid";
     case TYPE_SGID: return "shed_gid";
     case TYPE_MAX: return "maxusers";
+    case TYPE_MAXNICKLEN: return "maxnicklen";
     case TYPE_GAMENUM: return "game_num";
     case TYPE_PATH_CHROOT: return "chroot_path";
     case TYPE_PATH_GAME: return "game_path";
index 19f23b9a93ae9b200354b2c65c10fe96a34f8290..30f69aebcec16d9022220ff6552d24a2fcc15474 100644 (file)
@@ -837,7 +837,7 @@ void
 autologin (char* user, char *pass)
 {
   int me_index = -1;
-  if ((me_index = userexist(user)) != -1)
+  if ((me_index = userexist(user, 0)) != -1)
   {
     me = users[me_index];
     if (passwordgood(pass))
@@ -877,6 +877,7 @@ loginprompt (int from_ttyplay)
 
       refresh ();
 
+      /* keep this at 20 chars for hysterical raisins */
       mygetnstr (user_buf, 20, 1);
 
       if (user_buf && *user_buf == '\0')
@@ -884,7 +885,7 @@ loginprompt (int from_ttyplay)
 
       error = 1;
 
-      if ((me_index = userexist (user_buf)) != -1)
+      if ((me_index = userexist (user_buf, 0)) != -1)
         {
           me = users[me_index];
           error = 0;
@@ -953,12 +954,14 @@ newuser ()
     {
       clear ();
 
+      sprintf(buf, "%i character max.", globalconfig.max_newnick_len);
+
       drawbanner (1, 1);
 
       mvaddstr (5, 1, "Welcome new user. Please enter a username.");
       mvaddstr (6, 1,
                 "Only characters and numbers are allowed, with no spaces.");
-      mvaddstr (7, 1, "20 character max.");
+      mvaddstr (7, 1, buf);
       mvaddstr (9, 1, "=> ");
 
       if (error == 1)
@@ -969,8 +972,8 @@ newuser ()
 
       refresh ();
 
-      mygetnstr (buf, 20, 1);
-      if (userexist (buf) == -1)
+      mygetnstr (buf, globalconfig.max_newnick_len, 1);
+      if (userexist (buf, 1) == -1)
         error = 0;
       else
         error = 1;
@@ -1189,13 +1192,13 @@ readfile (int nolock)
 /* ************************************************************* */
 
 int
-userexist (char *cname)
+userexist (char *cname, int isnew)
 {
   int 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;
     }
 
@@ -1714,7 +1717,7 @@ authenticate ()
       return 1;
     }
 
-  if ((me_index = userexist (user_buf)) != -1)
+  if ((me_index = userexist (user_buf, 0)) != -1)
     {
       me = users[me_index];
       if (passwordgood (pw_buf))
index 7eb7b31424cdc5c7c777e837db7e8f24971e38f6..7965fbc8f8536b1fe81d38f84e0c0aa69b4b3007 100644 (file)
@@ -62,6 +62,7 @@ struct dg_globalconfig
     char* dglroot;
     char* banner;
     unsigned long max;
+    int max_newnick_len; /* maximum length of new registered names. must be less than 20 chars. */
     char* shed_user;
     char* shed_group;
     uid_t shed_uid;
@@ -102,7 +103,7 @@ extern void newuser(void);
 extern void autologin(char *user, char *pass);
 extern int passwordgood(char *cpw);
 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 editoptions(int game);
 extern void writefile(int requirenew);
index 870ec11883e662646eab8b48c05a77b218907255..2f244a8bedae04bc961d973576a362f6d909cc8c 100644 (file)
@@ -338,6 +338,7 @@ create_config ()
   if (!globalconfig.chroot) globalconfig.chroot = "/var/lib/dgamelaunch/";
 
   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.banner)  globalconfig.banner = "/dgl-banner";
 
index dc972dee8707e2be34693b0117a66c170c1e0e3f..bbb828212c2a36f6782cab786a965cb9e97c36bc 100644 (file)
 # Max amount of registered users to allow.
 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.
 chroot_path = "/var/lib/dgamelaunch/"