]> skyeroc.xyz Git - dgamelaunch/commitdiff
Replace server_id with generic configurable string replacements usable in banners.
authorPasi Kallinen <paxed@alt.org>
Sun, 9 Oct 2011 15:31:34 +0000 (15:31 +0000)
committerPasi Kallinen <paxed@alt.org>
Sun, 9 Oct 2011 15:31:34 +0000 (15:31 +0000)
git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@613 db0b04b0-f4d1-0310-9a6d-de3e77497b0e

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

index 358b3c60956f5f57e3f7a037e8c9ce357f62cabe..8e517da1232757e367771b05783beba48eaa2752 100644 (file)
--- a/config.l
+++ b/config.l
@@ -87,7 +87,7 @@ extra_info_file { return TYPE_EXTRA_INFO_FILE; }
 "max_idle_time"        { return TYPE_MAX_IDLE_TIME; }
 "rc_fmt"       { return TYPE_RC_FMT; }
 "ttyrecdir"    { return TYPE_PATH_TTYREC; }
-server_id      { return TYPE_SERVER_ID; }
+bannervars     { return TYPE_BANNERVARS; }
 sortmode       { return TYPE_WATCH_SORTMODE; }
 watch_columns  { return TYPE_WATCH_COLUMNS; }
 commands       { return TYPE_CMDQUEUE; }
index a81d5dc2eac3b49e655a61fde7b0c7f3ff692906..07ed0ec884bee35d981b6e0d42a4f7e0d78cd4bc 100644 (file)
--- a/config.y
+++ b/config.y
@@ -50,7 +50,7 @@ static int sortmode_number(const char *sortmode_name) {
 }
 
 %token TYPE_SUSER TYPE_SGROUP TYPE_SGID TYPE_SUID TYPE_MAX TYPE_MAXNICKLEN
-%token TYPE_GAME_SHORT_NAME TYPE_WATCH_SORTMODE TYPE_SERVER_ID
+%token TYPE_GAME_SHORT_NAME TYPE_WATCH_SORTMODE TYPE_BANNERVARS
 %token TYPE_ALLOW_REGISTRATION TYPE_WATCH_COLUMNS
 %token TYPE_PATH_GAME TYPE_NAME_GAME TYPE_PATH_DGLDIR TYPE_PATH_SPOOL
 %token TYPE_PATH_BANNER TYPE_PATH_CANNED TYPE_PATH_CHROOT
@@ -181,11 +181,6 @@ KeyPair: TYPE_CMDQUEUE '[' TYPE_CMDQUEUENAME ']'
       }
       break;
 
-  case TYPE_SERVER_ID:
-      if (globalconfig.server_id) free(globalconfig.server_id);
-      globalconfig.server_id = strdup($3);
-      break;
-
     case TYPE_PATH_DGLDIR:
       if (globalconfig.dglroot) free(globalconfig.dglroot);
       globalconfig.dglroot = strdup($3);
@@ -284,6 +279,9 @@ KeyPair: TYPE_CMDQUEUE '[' TYPE_CMDQUEUENAME ']'
       exit(1);
   }
 }
+       | TYPE_BANNERVARS '=' '[' banner_vars ']'
+       {
+       }
        | TYPE_WATCH_COLUMNS '=' '[' watch_columns ']' {
             memcpy(globalconfig.watch_columns,
                    curr_watch_columns,
@@ -294,6 +292,14 @@ KeyPair: TYPE_CMDQUEUE '[' TYPE_CMDQUEUENAME ']'
           };
 
 
+banner_vars : banner_vars ',' banner_var
+       | banner_var;
+
+banner_var : TYPE_VALUE '=' TYPE_VALUE
+       {
+           banner_var_add($1, $3);
+       };
+
 watch_columns: watch_columns ',' watch_column
                | watch_column;
 
@@ -634,7 +640,6 @@ KeyType : TYPE_SUSER        { $$ = TYPE_SUSER; }
        | TYPE_UTF8ESC          { $$ = TYPE_UTF8ESC; }
        | TYPE_RC_FMT           { $$ = TYPE_RC_FMT; }
        | TYPE_WATCH_SORTMODE   { $$ = TYPE_WATCH_SORTMODE; }
-       | TYPE_SERVER_ID        { $$ = TYPE_SERVER_ID; }
        ;
 
 %%
@@ -666,7 +671,7 @@ const char* lookup_token (int t)
     case TYPE_RC_FMT: return "rc_fmt";
     case TYPE_WATCH_SORTMODE: return "sortmode";
     case TYPE_WATCH_COLUMNS: return "watch_columns";
-    case TYPE_SERVER_ID: return "server_id";
+    case TYPE_BANNERVARS: return "bannervars";
     case TYPE_LOCALE: return "locale";
     case TYPE_UTF8ESC: return "utf8esc";
     default: abort();
index 623754f2642b6d52f791ac545a9f2f8a9212572b..463b958281b7352a9ef5a682cbcabc1d37e40f85 100644 (file)
@@ -404,6 +404,45 @@ bannerstrmangle(char *buf, char *fromstr, char *tostr)
     return bufnew;
 }
 
+void
+banner_var_add(char *name, char *value)
+{
+    struct dg_banner_var *tmp = (struct dg_banner_var *)malloc(sizeof(struct dg_banner_var));
+
+    if (!tmp) return;
+
+    tmp->name = strdup(name);
+    tmp->value = strdup(value);
+    tmp->next = globalconfig.banner_var_list;
+    globalconfig.banner_var_list = tmp;
+}
+
+void
+banner_var_free()
+{
+    struct dg_banner_var *tmp;
+    struct dg_banner_var *bv = globalconfig.banner_var_list;
+    while (bv) {
+       tmp = bv->next;
+       free(bv->name);
+       free(bv->value);
+       free(bv);
+       bv = tmp;
+    }
+    globalconfig.banner_var_list = NULL;
+}
+
+char *
+banner_var_value(char *name)
+{
+    struct dg_banner_var *bv = globalconfig.banner_var_list;
+    while (bv) {
+       if (!strcmp(bv->name, name)) return bv->name;
+       bv = bv->next;
+    }
+    return NULL;
+}
+
 void
 freebanner(struct dg_banner *ban)
 {
@@ -477,8 +516,12 @@ loadbanner (char *fname, struct dg_banner *ban)
              }
          }
       } else {
+         struct dg_banner_var *bv = globalconfig.banner_var_list;
+         while (bv) {
+             strncpy(bufnew, bannerstrmangle(bufnew, bv->name, bv->value), 80);
+             bv = bv->next;
+         }
          strncpy(bufnew, bannerstrmangle(bufnew, "$VERSION", PACKAGE_STRING), 80);
-         strncpy(bufnew, bannerstrmangle(bufnew, "$SERVERID", globalconfig.server_id ? globalconfig.server_id : ""), 80);
          if (me && loggedin) {
              strncpy(bufnew, bannerstrmangle(bufnew, "$USERNAME", me->username), 80);
          } else {
@@ -2782,7 +2825,7 @@ main (int argc, char** argv)
     free (me);
 
   freebanner(&banner);
-
+  banner_var_free();
   graceful_exit (1);
 
   return 1;
index a74f59d952ff2801de2a491fc4d599e53b10d4df..00b50662f22b7a18231666f3b35b5597ca656625 100644 (file)
@@ -101,6 +101,12 @@ static const char *SORTMODE_NAME[NUM_SORTMODES] = {
 #endif
 };
 
+struct dg_banner_var {
+    char *name;
+    char *value;
+    struct dg_banner_var *next;
+};
+
 struct dg_cmdpart
 {
     dglcmd_actions cmd;
@@ -224,7 +230,7 @@ struct dg_globalconfig
     char* lockfile;
     int allow_registration; /* allow registering new nicks */
     int sortmode; /* default watching-screen sortmode */
-    char *server_id; /* string for the server name or whatever */
+    struct dg_banner_var *banner_var_list;
     char *locale;
     int utf8esc; /* send select-utf8-charset escape code */
 
@@ -273,6 +279,9 @@ extern char *gen_inprogress_lock(int game, pid_t pid, char *ttyrec_filename);
 extern void catch_sighup(int signum);
 extern void loadbanner(char *fname, struct dg_banner *ban);
 extern void drawbanner(struct dg_banner *ban, unsigned int start_line, unsigned int howmany);
+extern void banner_var_add(char *name, char *value);
+extern char *banner_var_value(char *name);
+extern void banner_var_free(void);
 extern int check_retard(int reset);
 extern char *dgl_format_str(int game, struct dg_user *me, char *str, char *plrname);
 
index eee4d5acee7a739d64f87608f1cc9f627773f7d6..7f1b796e13e08f5b7d1f12f0c5b789a1ac037f76 100644 (file)
@@ -743,7 +743,7 @@ create_config ()
 
   if (!globalconfig.allow_registration) globalconfig.allow_registration = 1;
   globalconfig.menulist = NULL;
-  globalconfig.server_id = NULL;
+  globalconfig.banner_var_list = NULL;
   globalconfig.locale = NULL;
 
   globalconfig.shed_uid = (uid_t)-1;
index 4f9cd9e72b67dc7b5ca6a0f2cc9eb24f17e39651..364225e897e29f3f283c7eef95a4101a873bcb9f 100644 (file)
@@ -46,14 +46,17 @@ chroot_path = "/opt/nethack/nethack.alt.org/"
 # From inside the jail, dgamelaunch's working directory for rcfiles/ttyrec/etc
 dglroot = "/dgldir/"
 
-# Server ID string
-server_id = "nethack.alt.org - http://nethack.alt.org/"
+# Strings to be replaced in every banner
+bannervars = [ "$MOTDTIME" = "2011.10.08",
+              "$SERVERID" = "nethack.alt.org - http://nethack.alt.org/"
+            ]
 
 # From inside the jail, location of a banner file, the topmost line will be
 # shown in submenus that cannot be defined separately.
 # Some string substitution is done for the file:
-# $VERSION   replaced with "dgamelaunch v" + dgl version number.
-# $SERVERID  replaced with the server_id string, as defined above.
+# - bannervars from above
+# - $VERSION replaced with "dgamelaunch v" + dgl version number.
+# - $USERNAME replaced with logged-in user's name, or with "[Anonymous]"
 banner = "/dgl-banner"
 
 # The following two options are fairly insecure. They will force us to
index 4ed7e4d40cc936a06d486c14292249bf9515ec66..48c5624a990e3db4aaa1ca2dfdde836197fbb4b0 100644 (file)
--- a/ttyrec.c
+++ b/ttyrec.c
@@ -99,6 +99,7 @@ ttyrec_id(int game, char *username, char *ttyrec_filename)
     Header h;
     char *buf = (char *)malloc(1024);
     char tmpbuf[256];
+    char *server_id = banner_var_value("$SERVERID");
     if (!buf) return;
 
     tstamp = time(NULL);
@@ -115,7 +116,7 @@ ttyrec_id(int game, char *username, char *ttyrec_filename)
             dCLRSCR,
             username,
             myconfig[game]->game_name,
-            globalconfig.server_id,
+           (server_id ? server_id : "Unknown"),
             ttyrec_filename,
             tstamp, ctime(&tstamp)
             );