Put strcasecmp/strncasecmp on the banned list (except for needed calls
authorJeremy Allison <jra@samba.org>
Wed, 22 Oct 2003 23:38:20 +0000 (23:38 +0000)
committerJeremy Allison <jra@samba.org>
Wed, 22 Oct 2003 23:38:20 +0000 (23:38 +0000)
in iconv.c and nsswitch/). Using them means you're not thinking about multibyte at
all and I really want to discourage that.
Jeremy.
(This used to be commit d7e35dfb9283d560d0ed2ab231f36ed92767dace)

25 files changed:
source3/auth/auth_builtin.c
source3/include/safe_string.h
source3/lib/access.c
source3/lib/charcnv.c
source3/lib/iconv.c
source3/lib/smbldap.c
source3/lib/substitute.c
source3/lib/util_sock.c
source3/libads/ads_struct.c
source3/libads/ldap.c
source3/libsmb/namequery_dc.c
source3/msdfs/msdfs.c
source3/nmbd/nmbd_elections.c
source3/nsswitch/winbindd_rpc.c
source3/nsswitch/winbindd_util.c
source3/param/loadparm.c
source3/passdb/pdb_ldap.c
source3/passdb/pdb_smbpasswd.c
source3/smbd/mangle_hash2.c
source3/smbd/sesssetup.c
source3/smbwrapper/smbw_dir.c
source3/torture/mangle_test.c
source3/utils/net.c
source3/utils/smbcquotas.c
source3/web/cgi.c

index f7cdfe3fd2e9b76405175b62dd2b2666bacbe095..96c2221652eef25d6dc7a44787eb84b376256ec7 100644 (file)
@@ -86,7 +86,7 @@ static NTSTATUS check_name_to_ntstatus_security(const struct auth_context *auth_
        long error_num;
        fstrcpy(user, user_info->smb_name.str);
        
-       if (strncasecmp("NT_STATUS", user, strlen("NT_STATUS")) == 0) {
+       if (strnequal("NT_STATUS", user, strlen("NT_STATUS"))) {
                strupper_m(user);
                return nt_status_string_to_code(user);
        }
index 07578b2424c3d00ffcaa2394c201b90e9726fc40..cb3f37c48410167cbe422482d1075d84c34e6f2f 100644 (file)
 #endif /* sprintf */
 #define sprintf __ERROR__XX__NEVER_USE_SPRINTF__;
 
+/*
+ * strcasecmp/strncasecmp aren't an error, but it means you're not thinking about
+ * multibyte. Don't use them. JRA.
+ */
+#ifdef strcasecmp
+#undef strcasecmp
+#endif
+#define strcasecmp __ERROR__XX__NEVER_USE_STRCASECMP__;
+
+#ifdef strncasecmp
+#undef strncasecmp
+#endif
+#define strncasecmp __ERROR__XX__NEVER_USE_STRCASECMP__;
+
 #endif /* !_SPLINT_ */
 
 #ifdef DEVELOPER
index a874c8b1e2065e01a06c898ff4510bfbd85a5192..62414726fb0c4217d941b361f39364457da21fb2 100644 (file)
@@ -71,7 +71,7 @@ static BOOL string_match(const char *tok,const char *s, char *invalid_char)
 
        if (tok[0] == '.') {                    /* domain: match last fields */
                if ((str_len = strlen(s)) > (tok_len = strlen(tok))
-                   && strcasecmp(tok, s + str_len - tok_len) == 0)
+                   && strequal(tok, s + str_len - tok_len))
                        return (True);
        } else if (tok[0] == '@') { /* netgroup: look it up */
 #ifdef HAVE_NETGROUP
@@ -107,14 +107,14 @@ static BOOL string_match(const char *tok,const char *s, char *invalid_char)
                DEBUG(0,("access: netgroup support is not configured\n"));
                return (False);
 #endif
-       } else if (strcasecmp(tok, "ALL") == 0) {       /* all: match any */
+       } else if (strequal(tok, "ALL")) {      /* all: match any */
                return (True);
-       } else if (strcasecmp(tok, "FAIL") == 0) {      /* fail: match any */
+       } else if (strequal(tok, "FAIL")) {     /* fail: match any */
                return (FAIL);
-       } else if (strcasecmp(tok, "LOCAL") == 0) {     /* local: no dots */
-               if (strchr_m(s, '.') == 0 && strcasecmp(s, "unknown") != 0)
+       } else if (strequal(tok, "LOCAL")) {    /* local: no dots */
+               if (strchr_m(s, '.') == 0 && !strequal(s, "unknown"))
                        return (True);
-       } else if (!strcasecmp(tok, s)) {   /* match host name or address */
+       } else if (!strequal(tok, s)) {   /* match host name or address */
                return (True);
        } else if (tok[(tok_len = strlen(tok)) - 1] == '.') {   /* network */
                if (strncmp(tok, s, tok_len) == 0)
@@ -175,7 +175,7 @@ static BOOL list_match(const char **list,const char *item,
         */
 
        for (; *list ; list++) {
-               if (strcasecmp(*list, "EXCEPT") == 0)   /* EXCEPT: give up */
+               if (strequal(*list, "EXCEPT"))  /* EXCEPT: give up */
                        break;
                if ((match = (*match_fn) (*list, item)))        /* True or FAIL */
                        break;
@@ -183,7 +183,7 @@ static BOOL list_match(const char **list,const char *item,
        /* Process exceptions to True or FAIL matches. */
 
        if (match != False) {
-               while (*list  && strcasecmp(*list, "EXCEPT"))
+               while (*list  && !strequal(*list, "EXCEPT"))
                        list++;
 
                for (; *list; list++) {
@@ -275,8 +275,8 @@ static BOOL only_ipaddrs_in_list(const char** list)
                        
        for (; *list ; list++) {
                /* factor out the special strings */
-               if (!strcasecmp(*list, "ALL") || !strcasecmp(*list, "FAIL") || 
-                   !strcasecmp(*list, "EXCEPT")) {
+               if (strequal(*list, "ALL") || strequal(*list, "FAIL") || 
+                   strequal(*list, "EXCEPT")) {
                        continue;
                }
                
index dafc88fb77a087c7778f0ebe97dcade798c2efc2..9d15c6daa028b16fcd2c46488de83bd0d986b0d5 100644 (file)
@@ -56,7 +56,7 @@ static const char *charset_name(charset_t ch)
        else if (ch == CH_UTF8) ret = "UTF8";
 
 #if defined(HAVE_NL_LANGINFO) && defined(CODESET)
-       if (ret && strcasecmp(ret, "LOCALE") == 0) {
+       if (ret && !strcmp(ret, "LOCALE")) {
                const char *ln = NULL;
 
 #ifdef HAVE_SETLOCALE
index 0326ca70611db5bb27f426490a52e3f645d0c476..9f6db79ee242f626c7e0590ed09507b5faea0f31 100644 (file)
 
 #include "includes.h"
 
+/*
+ * We have to use strcasecmp here as the character conversions
+ * haven't been initialised yet. JRA.
+ */
+
+#undef strcasecmp
 
 /**
  * @file
index 781e6b976c37cf0c4d8a8f624bd74163dde14325..8f58e80ddef59d8179850001056af54aeeafad68 100644 (file)
@@ -350,7 +350,7 @@ BOOL fetch_ldap_pw(char **dn, char** pw)
        }
 
        for (i = 0; mods[i] != NULL; ++i) {
-               if (mods[i]->mod_op == modop && !strcasecmp(mods[i]->mod_type, attribute))
+               if (mods[i]->mod_op == modop && strequal(mods[i]->mod_type, attribute))
                        break;
        }
 
@@ -542,7 +542,7 @@ static int smbldap_open_connection (struct smbldap_state *ldap_state)
                SMB_ASSERT(sizeof(protocol)>10 && sizeof(host)>254);
                
                /* skip leading "URL:" (if any) */
-               if ( strncasecmp( p, "URL:", 4 ) == 0 ) {
+               if ( strnequal( p, "URL:", 4 ) ) {
                        p += 4;
                }
                
index 28466e43f29172b0586cae3ad0756b98eb78549e..6e546bc161f4f6470628b3b8e3aaea752b03101a 100644 (file)
@@ -45,10 +45,10 @@ void set_local_machine_name(const char* local_name, BOOL perm)
         * arrggg!!! 
         */
 
-       if (strcasecmp(local_name, "*SMBSERVER")==0
+       if (strequal(local_name, "*SMBSERVER")
                return;
 
-       if (strcasecmp(local_name, "*SMBSERV")==0
+       if (strequal(local_name, "*SMBSERV")
                return;
 
        if (already_perm)
index 5a1f631ba4321fd5dc87a156626dbe846b448a26..eb19caa31b2a1fe4f8c59f18286f4887941b84e7 100644 (file)
@@ -837,8 +837,8 @@ static BOOL matchname(char *remotehost,struct in_addr  addr)
         * DNS is perverted). We always check the address list, though.
         */
        
-       if (strcasecmp(remotehost, hp->h_name)
-           && strcasecmp(remotehost, "localhost")) {
+       if (!strequal(remotehost, hp->h_name)
+           && !strequal(remotehost, "localhost")) {
                DEBUG(0,("host name/name mismatch: %s != %s\n",
                         remotehost, hp->h_name));
                return False;
index dd31439d830209aa9610afdd3c1d139a4771d7e1..9774968e1214998f2294844a17a514b856b12dc9 100644 (file)
@@ -95,10 +95,10 @@ ADS_STRUCT *ads_init(const char *realm,
        ads->server.ldap_server = ldap_server? strdup(ldap_server) : NULL;
 
        /* we need to know if this is a foreign realm */
-       if (realm && *realm && strcasecmp(lp_realm(), realm) != 0) {
+       if (realm && *realm && !strequal(lp_realm(), realm)) {
                ads->server.foreign = 1;
        }
-       if (workgroup && *workgroup && strcasecmp(lp_workgroup(), workgroup) != 0) {
+       if (workgroup && *workgroup && !strequal(lp_workgroup(), workgroup)) {
                ads->server.foreign = 1;
        }
 
index 8c3185ea5e3e28573349bc9374d9817bb139f291..b3706cb2403cc28c0739dffa6d0d631bee5682a9 100644 (file)
@@ -972,7 +972,7 @@ ADS_STATUS ads_del_dn(ADS_STRUCT *ads, char *del_dn)
  **/
 char *ads_ou_string(const char *org_unit)
 {      
-       if (!org_unit || !*org_unit || strcasecmp(org_unit, "Computers") == 0) {
+       if (!org_unit || !*org_unit || strequal(org_unit, "Computers")) {
                return strdup("cn=Computers");
        }
 
@@ -1970,8 +1970,8 @@ ADS_STATUS ads_workgroup_name(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, char **workg
        prefix_length = strlen(prefix);
 
        for (i=0;principles[i]; i++) {
-               if (strncasecmp(principles[i], prefix, prefix_length) == 0 &&
-                   strcasecmp(ads->config.realm, principles[i]+prefix_length) != 0 &&
+               if (strnequal(principles[i], prefix, prefix_length) &&
+                   !strequal(ads->config.realm, principles[i]+prefix_length) &&
                    !strchr(principles[i]+prefix_length, '.')) {
                        /* found an alternate (short) name for the domain. */
                        DEBUG(3,("Found alternate name '%s' for realm '%s'\n",
index a596f00ddb9b0ab8c896426d6a26e39a152c0761..df7f856cd7b1837ee06d8bf7c955cc228dd1147d 100644 (file)
@@ -34,7 +34,7 @@ static BOOL ads_dc_name(const char *domain, struct in_addr *dc_ip, fstring srv_n
        ADS_STRUCT *ads;
        const char *realm = domain;
 
-       if (strcasecmp(realm, lp_workgroup()) == 0)
+       if (strequal(realm, lp_workgroup()))
                realm = lp_realm();
 
        ads = ads_init(realm, domain, NULL);
index f8a97effee4d17791a1a0a1f3779b64eea552653..5cc4bf45d6698f53f0ef48e9adbfcef0a01475d6 100644 (file)
@@ -314,7 +314,7 @@ BOOL dfs_redirect(char* pathname, connection_struct* conn,
                return False;
        }
        
-       if (strcasecmp(dp.servicename, lp_servicename(SNUM(conn)) ) != 0
+       if (!strequal(dp.servicename, lp_servicename(SNUM(conn)) )
                return False;
 
        if (resolve_dfs_path(pathname, &dp, conn, findfirst_flag,
@@ -362,7 +362,7 @@ BOOL get_referred_path(char *pathname, struct junction_map* jn,
        parse_dfs_path(pathname, &dp);
 
        /* Verify hostname in path */
-       if (local_machine && (strcasecmp(local_machine, dp.hostname) != 0)) {
+       if (local_machine && (!strequal(local_machine, dp.hostname))) {
 
           /* Hostname mismatch, check if one of our IP addresses */
           if (!ismyip(*interpret_addr2(dp.hostname))) {
@@ -711,7 +711,7 @@ BOOL create_junction(char* pathname, struct junction_map* jn)
         parse_dfs_path(pathname,&dp);
 
         /* check if path is dfs : validate first token */
-        if (local_machine && (strcasecmp(local_machine,dp.hostname)!=0)) {
+        if (local_machine && (!strequal(local_machine,dp.hostname))) {
            
           /* Hostname mismatch, check if one of our IP addresses */
           if (!ismyip(*interpret_addr2(dp.hostname))) {
index fabc0eddca2120894a22a5596a6a7d8cd7a77fe0..19b00f1f4d23177db114bdf9e55f8de33994c1c5 100644 (file)
@@ -247,7 +247,7 @@ static BOOL win_election(struct work_record *work, int version,
        if (timeup < mytimeup)
                return(True);
 
-       if (strcasecmp(global_myname(), server_name) > 0)
+       if (StrCaseCmp(global_myname(), server_name) > 0)
                return(False);
   
        return(True);
index 8bd2c66511341ab50a278523ac66adfcec8f81d4..ba14a51d240fd261ea667919f662e35fe1fd1ada 100644 (file)
@@ -336,7 +336,7 @@ static NTSTATUS sid_to_name(struct winbindd_domain *domain,
                DEBUG(5,("Mapped sid to [%s]\\[%s]\n", domains[0], *name));
 
                /* Paranoia */
-               if (strcasecmp(domain->name, domains[0]) != 0) {
+               if (!strequal(domain->name, domains[0])) {
                        DEBUG(1, ("domain name from domain param and PDC lookup return differ! (%s vs %s)\n", domain->name, domains[0]));
                        return NT_STATUS_UNSUCCESSFUL;
                }
index 850a0b1a2d548566bd60441dc26037d6a1276322..6d1675752f420f41f049d692e1d3aaea1c27d821 100644 (file)
@@ -92,13 +92,13 @@ static struct winbindd_domain *add_trusted_domain(const char *domain_name, const
        /* We can't call domain_list() as this function is called from
           init_domain_list() and we'll get stuck in a loop. */
        for (domain = _domain_list; domain; domain = domain->next) {
-               if (strcasecmp(domain_name, domain->name) == 0 ||
-                   strcasecmp(domain_name, domain->alt_name) == 0) {
+               if (strequal(domain_name, domain->name) ||
+                   strequal(domain_name, domain->alt_name)) {
                        return domain;
                }
                if (alternative_name && *alternative_name) {
-                       if (strcasecmp(alternative_name, domain->name) == 0 ||
-                           strcasecmp(alternative_name, domain->alt_name) == 0) {
+                       if (strequal(alternative_name, domain->name) ||
+                           strequal(alternative_name, domain->alt_name)) {
                                return domain;
                        }
                }
index 5a5ac4a2cc1a2f983f8d3b5e97babe7cd145ebb6..55ab4ee3a08cff8ecab545dc8837fc524bd723e3 100644 (file)
@@ -2025,7 +2025,7 @@ static int lp_enum(const char *s,const struct enum_list *_enum)
        }
        
        for (i=0; _enum[i].name; i++) {
-               if (strcasecmp(_enum[i].name,s)==0)
+               if (strequal(_enum[i].name,s))
                        return _enum[i].value;
        }
 
index 5cf1691f0dd0c1ddeeda08b89d3bfd939af098e9..fdc79ae2ab46c99fb4eff39becf78384efb4175b 100644 (file)
@@ -356,7 +356,7 @@ static BOOL get_unix_attributes (struct ldapsam_privates *ldap_state,
        }
 
        for (values=ldap_values;*values;values++) {
-               if (strcasecmp(*values, LDAP_OBJ_POSIXACCOUNT ) == 0) {
+               if (strequal(*values, LDAP_OBJ_POSIXACCOUNT )) {
                        break;
                }
        }
index 8cdbec9b9d00188a8ff7af8b345a8aba00315f3a..562d50f89e36fb44b746b4ed1e31dba8364e0480 100644 (file)
@@ -431,7 +431,7 @@ static struct smb_passwd *getsmbfilepwent(struct smbpasswd_privates *smbpasswd_s
       continue;
     }
 
-    if (!strncasecmp((char *) p, "NO PASSWORD", 11)) {
+    if (strnequal((char *) p, "NO PASSWORD", 11)) {
       pw_buf->smb_passwd = NULL;
       pw_buf->acct_ctrl |= ACB_PWNOTREQ;
     } else {
index e0efb3e41bc9a686cb188dbf7c4c2057f77cb471..7e7bc8c68cf59cfd22725e7d7146effeea17f02b 100644 (file)
@@ -427,7 +427,7 @@ static BOOL is_reserved_name(const char *name)
                for (i=0; reserved_names[i]; i++) {
                        int len = strlen(reserved_names[i]);
                        /* note that we match on COM1 as well as COM1.foo */
-                       if (strncasecmp(name, reserved_names[i], len) == 0 &&
+                       if (strnequal(name, reserved_names[i], len) &&
                            (name[len] == '.' || name[len] == 0)) {
                                return True;
                        }
index 945855b832b3a53703439e2048c7d032a927429f..314ffbb4a9b9a58819dfebb67e38afb8d270a78b 100644 (file)
@@ -186,7 +186,7 @@ static int reply_spnego_kerberos(connection_struct *conn,
        }
 
        *p = 0;
-       if (strcasecmp(p+1, lp_realm()) != 0) {
+       if (!strequal(p+1, lp_realm())) {
                DEBUG(3,("Ticket for foreign realm %s@%s\n", client, p+1));
                if (!lp_allow_trusted_domains()) {
                        data_blob_free(&ap_rep);
index 6d55c1d9da2bf30fe9e37d36a608d31442ae6c56..0a6deede41ff170ca349d49e5d5c4f70714dbc36 100644 (file)
@@ -216,7 +216,7 @@ int smbw_dir_open(const char *fname)
                smbw_NetServerEnum(&srv->cli, srv->server_name, SV_TYPE_ALL,
                                   smbw_server_add, NULL);
                *p = '#';
-       } else if ((strcmp(srv->cli.dev,"IPC") == 0) || (strcasecmp(share,"IPC$") == 0)) {
+       } else if ((strcmp(srv->cli.dev,"IPC") == 0) || (strequal(share,"IPC$"))) {
                DEBUG(4,("doing NetShareEnum\n"));
                smbw_share_add(".",0,"", NULL);
                smbw_share_add("..",0,"", NULL);
@@ -413,7 +413,7 @@ int smbw_chdir(const char *name)
        }
 
        if (strncmp(srv->cli.dev,"IPC",3) && 
-           strcasecmp(share, "IPC$") &&
+           !strequal(share, "IPC$") &&
            strncmp(srv->cli.dev,"LPT",3) &&
            !smbw_getatr(srv, path, 
                         &mode, NULL, NULL, NULL, NULL, NULL)) {
index 9a719349b651530b612363c7074a02fb9555d455..f31621b23b72550fb519f91df7df1b9598d730d2 100644 (file)
@@ -85,7 +85,7 @@ static BOOL test_one(struct cli_state *cli, const char *name)
        data = tdb_fetch_bystring(tdb, shortname);
        if (data.dptr) {
                /* maybe its a duplicate long name? */
-               if (strcasecmp(name, data.dptr) != 0) {
+               if (!strequal(name, data.dptr)) {
                        /* we have a collision */
                        collisions++;
                        printf("Collision between %s and %s   ->  %s "
index 42966b4f830887e22c2018dbf0121952f6c05d4d..38c144caa8499e433ef7cf7b8f39ed3eb76e0c72 100644 (file)
@@ -84,14 +84,14 @@ uint32 get_sec_channel_type(const char *param)
        if (!(param && *param)) {
                return get_default_sec_channel();
        } else {
-               if (strcasecmp(param, "PDC")==0) {
+               if (strequal(param, "PDC")) {
                        return SEC_CHAN_BDC;
-               } else if (strcasecmp(param, "BDC")==0) {
+               } else if (strequal(param, "BDC")) {
                        return SEC_CHAN_BDC;
-               } else if (strcasecmp(param, "MEMBER")==0) {
+               } else if (strequal(param, "MEMBER")) {
                        return SEC_CHAN_WKSTA;
 #if 0                  
-               } else if (strcasecmp(param, "DOMAIN")==0) {
+               } else if (strequal(param, "DOMAIN")) {
                        return SEC_CHAN_DOMAIN;
 #endif
                } else {
index 64321d5bfc3a2c187151583fcc99e4bde55ef029..0bd8755420991fe9fb3afc62cbd56c6bde00336a 100644 (file)
@@ -140,7 +140,7 @@ static int parse_quota_set(pstring set_str, pstring username_str, enum SMB_QUOTA
        BOOL enable = False;
        BOOL deny = False;
        
-       if (strncasecmp(set_str,"UQLIM:",6)==0) {
+       if (strnequal(set_str,"UQLIM:",6)) {
                p += 6;
                *qtype = SMB_USER_QUOTA_TYPE;
                *cmd = QUOTA_SETLIM;
@@ -154,12 +154,12 @@ static int parse_quota_set(pstring set_str, pstring username_str, enum SMB_QUOTA
                
                fstrcpy(username_str,p);
                p = p2;
-       } else if (strncasecmp(set_str,"FSQLIM:",7)==0) {
+       } else if (strnequal(set_str,"FSQLIM:",7)) {
                p +=7;
                *qtype = SMB_USER_FS_QUOTA_TYPE;
                *cmd = QUOTA_SETLIM;
                todo = PARSE_LIM;
-       } else if (strncasecmp(set_str,"FSQFLAGS:",9)==0) {
+       } else if (strnequal(set_str,"FSQFLAGS:",9)) {
                p +=9;
                todo = PARSE_FLAGS;
                *qtype = SMB_USER_FS_QUOTA_TYPE;
@@ -189,13 +189,13 @@ static int parse_quota_set(pstring set_str, pstring username_str, enum SMB_QUOTA
                                        p2++;
                                }
 
-                               if (strncasecmp(p,"QUOTA_ENABLED",13)==0) {
+                               if (strnequal(p,"QUOTA_ENABLED",13)) {
                                        enable = True;
-                               } else if (strncasecmp(p,"DENY_DISK",9)==0) {
+                               } else if (strnequal(p,"DENY_DISK",9)) {
                                        deny = True;
-                               } else if (strncasecmp(p,"LOG_SOFTLIMIT",13)==0) {
+                               } else if (strnequal(p,"LOG_SOFTLIMIT",13)) {
                                        pqt->qflags |= QUOTAS_LOG_THRESHOLD;
-                               } else if (strncasecmp(p,"LOG_HARDLIMIT",13)==0) {
+                               } else if (strnequal(p,"LOG_HARDLIMIT",13)) {
                                        pqt->qflags |= QUOTAS_LOG_LIMIT;
                                } else {
                                        return -1;
index 8e739cd224e7fb513b09cb07ae3f2a1c0db3606d..6778e5965695d93cca4b10ad03419c542d6b44a6 100644 (file)
@@ -114,7 +114,7 @@ void cgi_load_variables(void)
        if (len > 0 && 
            (request_post ||
             ((s=getenv("REQUEST_METHOD")) && 
-             strcasecmp(s,"POST")==0))) {
+             strequal(s,"POST")))) {
                while (len && (line=grab_line(f, &len))) {
                        p = strchr_m(line,'=');
                        if (!p) continue;
@@ -224,9 +224,9 @@ static void cgi_setup_error(const char *err, const char *header, const char *inf
                /* damn browsers don't like getting cut off before they give a request */
                char line[1024];
                while (fgets(line, sizeof(line)-1, stdin)) {
-                       if (strncasecmp(line,"GET ", 4)==0 || 
-                           strncasecmp(line,"POST ", 5)==0 ||
-                           strncasecmp(line,"PUT ", 4)==0) {
+                       if (strnequal(line,"GET ", 4) || 
+                           strnequal(line,"POST ", 5) ||
+                           strnequal(line,"PUT ", 4)) {
                                break;
                        }
                }
@@ -301,7 +301,7 @@ static BOOL cgi_handle_authorization(char *line)
        fstring user, user_pass;
        struct passwd *pass = NULL;
 
-       if (strncasecmp(line,"Basic ", 6)) {
+       if (!strnequal(line,"Basic ", 6)) {
                goto err;
        }
        line += 6;
@@ -489,22 +489,22 @@ void cgi_setup(const char *rootdir, int auth_required)
           and handle authentication etc */
        while (fgets(line, sizeof(line)-1, stdin)) {
                if (line[0] == '\r' || line[0] == '\n') break;
-               if (strncasecmp(line,"GET ", 4)==0) {
+               if (strnequal(line,"GET ", 4)) {
                        got_request = True;
                        url = strdup(&line[4]);
-               } else if (strncasecmp(line,"POST ", 5)==0) {
+               } else if (strnequal(line,"POST ", 5)) {
                        got_request = True;
                        request_post = 1;
                        url = strdup(&line[5]);
-               } else if (strncasecmp(line,"PUT ", 4)==0) {
+               } else if (strnequal(line,"PUT ", 4)) {
                        got_request = True;
                        cgi_setup_error("400 Bad Request", "",
                                        "This server does not accept PUT requests");
-               } else if (strncasecmp(line,"Authorization: ", 15)==0) {
+               } else if (strnequal(line,"Authorization: ", 15)) {
                        authenticated = cgi_handle_authorization(&line[15]);
-               } else if (strncasecmp(line,"Content-Length: ", 16)==0) {
+               } else if (strnequal(line,"Content-Length: ", 16)) {
                        content_length = atoi(&line[16]);
-               } else if (strncasecmp(line,"Accept-Language: ", 17)==0) {
+               } else if (strnequal(line,"Accept-Language: ", 17)) {
                        web_set_lang(&line[17]);
                }
                /* ignore all other requests! */