]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cvar.c
Fixed a invalid use of the sizeof() operator. Thanks to OpenBSD's custom GCC for...
[xonotic/darkplaces.git] / cvar.c
diff --git a/cvar.c b/cvar.c
index 3de5a8838d23ce1dd2b210e904962669461a8d18..75ff70f44ad1242b7d2b630190d79b756d49605e 100644 (file)
--- a/cvar.c
+++ b/cvar.c
@@ -40,7 +40,7 @@ cvar_t *Cvar_FindVar (const char *var_name)
        // use hash lookup to minimize search time
        hashindex = CRC_Block((const unsigned char *)var_name, strlen(var_name));
        for (var = cvar_hashtable[hashindex];var;var = var->nextonhashchain)
-               if (!strcasecmp (var_name, var->name))
+               if (!strcmp (var_name, var->name))
                        return var;
 
        return NULL;
@@ -294,6 +294,16 @@ void Cvar_SetQuick_Internal (cvar_t *var, const char *value)
                        CL_SetInfo("playermodel", var->string, true, false, false, false);
                else if (!strcmp(var->name, "_cl_name"))
                        CL_SetInfo("name", var->string, true, false, false, false);
+               else if (!strcmp(var->name, "rcon_secure"))
+               {
+                       // whenever rcon_secure is changed to 0, clear rcon_password for
+                       // security reasons (prevents a send-rcon-password-as-plaintext
+                       // attack based on NQ protocol session takeover and svc_stufftext)
+                       if(!var->integer)
+                               Cvar_Set("rcon_password", "");
+               }
+               else if (!strcmp(var->name, "net_slist_favorites"))
+                       NetConn_UpdateFavorites();
        }
 }
 
@@ -663,6 +673,7 @@ void Cvar_List_f (void)
        const char *partial;
        size_t len;
        int count;
+       qboolean ispattern;
 
        if (Cmd_Argc() > 1)
        {
@@ -675,18 +686,25 @@ void Cvar_List_f (void)
                len = 0;
        }
 
+       ispattern = partial && (strchr(partial, '*') || strchr(partial, '?'));
+
        count = 0;
        for (cvar = cvar_vars; cvar; cvar = cvar->next)
        {
-               if (partial && strncasecmp (partial,cvar->name,len))
+               if (len && (ispattern ? !matchpattern_with_separator(cvar->name, partial, false, "", false) : strncmp (partial,cvar->name,len)))
                        continue;
 
                Con_Printf("%s is \"%s\" [\"%s\"] %s\n", cvar->name, cvar->string, cvar->defstring, cvar->description);
                count++;
        }
 
-       if (partial)
-               Con_Printf("%i cvar(s) beginning with \"%s\"\n", count, partial);
+       if (len)
+       {
+               if(ispattern)
+                       Con_Printf("%i cvar(s) matching \"%s\"\n", count, partial);
+               else
+                       Con_Printf("%i cvar(s) beginning with \"%s\"\n", count, partial);
+       }
        else
                Con_Printf("%i cvar(s)\n", count);
 }