Check error returns from strupper_m() (in all reasonable places).
authorJeremy Allison <jra@samba.org>
Wed, 8 Aug 2012 22:35:28 +0000 (15:35 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 9 Aug 2012 19:06:54 +0000 (12:06 -0700)
49 files changed:
libgpo/gpext/gpext.c
source3/auth/auth_builtin.c
source3/lib/charcnv.c
source3/lib/username.c
source3/lib/util_names.c
source3/lib/util_str.c
source3/libads/kerberos.c
source3/libads/kerberos_keytab.c
source3/libads/ldap.c
source3/libads/sasl.c
source3/libnet/libnet_join.c
source3/libsmb/cliconnect.c
source3/libsmb/clirap.c
source3/libsmb/clirap2.c
source3/libsmb/namequery_dc.c
source3/libsmb/nmblib.c
source3/modules/vfs_streams_depot.c
source3/modules/vfs_streams_xattr.c
source3/nmbd/nmbd_browserdb.c
source3/nmbd/nmbd_browsesync.c
source3/nmbd/nmbd_elections.c
source3/nmbd/nmbd_incomingdgrams.c
source3/nmbd/nmbd_incomingrequests.c
source3/nmbd/nmbd_namelistdb.c
source3/nmbd/nmbd_sendannounce.c
source3/nmbd/nmbd_serverlistdb.c
source3/nmbd/nmbd_winsserver.c
source3/passdb/lookup_sid.c
source3/passdb/machine_account_secrets.c
source3/registry/reg_backend_db.c
source3/registry/reg_util_internal.c
source3/smbd/lanman.c
source3/smbd/mangle_hash.c
source3/smbd/mangle_hash2.c
source3/smbd/service.c
source3/torture/torture.c
source3/utils/net_ads.c
source3/utils/net_idmap.c
source3/utils/net_registry_check.c
source3/utils/net_rpc.c
source3/utils/net_rpc_join.c
source3/utils/ntlm_auth.c
source3/utils/smbcontrol.c
source3/winbindd/idmap_ldap.c
source3/winbindd/winbindd_ads.c
source3/winbindd/winbindd_cache.c
source3/winbindd/winbindd_cm.c
source3/winbindd/winbindd_pam.c
source3/winbindd/winbindd_util.c

index 8bda729d692e8897dbdf69aebe8f993a81bc01fa..df84475754ddb3195d480a099cdeb9f7f5117f7f 100644 (file)
@@ -440,7 +440,9 @@ static WERROR gp_extension_store_reg_entry(TALLOC_CTX *mem_ctx,
        subkeyname = GUID_string2(mem_ctx, &entry->guid);
        W_ERROR_HAVE_NO_MEMORY(subkeyname);
 
-       strupper_m(discard_const_p(char, subkeyname));
+       if (!strupper_m(discard_const_p(char, subkeyname))) {
+               return WERR_INVALID_PARAM;
+       }
 
        werr = gp_store_reg_subkey(mem_ctx,
                                   subkeyname,
index b757894a7c678a2b6444bf46168704737ff76a64..d61a0ec7bf0293c5909eff55389ae56bb56f254a 100644 (file)
@@ -97,7 +97,9 @@ static NTSTATUS check_name_to_ntstatus_security(const struct auth_context *auth_
        fstrcpy(user, user_info->client.account_name);
 
        if (strnequal("NT_STATUS", user, strlen("NT_STATUS"))) {
-               strupper_m(user);
+               if (!strupper_m(user)) {
+                       return NT_STATUS_INVALID_PARAMETER;
+               }
                return nt_status_string_to_code(user);
        }
 
index 5863d72f38059fb611db20de83b06e84be1611df..32ba97aaa4da68ed7fe00313dd63a692d260def8 100644 (file)
@@ -61,7 +61,10 @@ size_t push_ascii(void *dest, const char *src, size_t dest_len, int flags)
                if (!tmpbuf) {
                        smb_panic("malloc fail");
                }
-               strupper_m(tmpbuf);
+               if (!strupper_m(tmpbuf)) {
+                       SAFE_FREE(tmpbuf);
+                       return (size_t)-1;
+               }
                src = tmpbuf;
        }
 
index 519200436555ca4b8f01cebb5d7080f9ab1f339d..7435a59ac7a8e6fb97d7428406f97ad9080f3716 100644 (file)
@@ -128,7 +128,10 @@ static struct passwd *Get_Pwnam_internals(TALLOC_CTX *mem_ctx,
        }
 
        /* Try as uppercase, if username wasn't originally uppercase */
-       strupper_m(user2);
+       if (!strupper_m(user2)) {
+               goto done;
+       }
+
        if(strcmp(user, user2) != 0) {
                DEBUG(5,("Trying _Get_Pwnam(), username as uppercase is %s\n",
                         user2));
index 0e128eab1cdc855f71816884f2d2faaf0ba3c82c..cf54a0eeceeb7412bde959f075e4b1056f3d97b1 100644 (file)
@@ -63,8 +63,7 @@ static bool set_my_netbios_names(const char *name, int i)
        smb_my_netbios_names[i] = SMB_STRDUP(name);
        if (!smb_my_netbios_names[i])
                return False;
-       strupper_m(smb_my_netbios_names[i]);
-       return True;
+       return strupper_m(smb_my_netbios_names[i]);
 }
 
 /***********************************************************************
index f97cd3cc25e16b1fd0b54bd03030d4ba408cf44e..b740de6659aebf591f7a28fa8c84b48e7eabe6b7 100644 (file)
@@ -58,7 +58,7 @@ bool strnequal(const char *s1,const char *s2,size_t n)
 void strnorm(char *s, int case_default)
 {
        if (case_default == CASE_UPPER)
-               strupper_m(s);
+               (void)strupper_m(s); /* FIXME - return a bool here. */
        else
                strlower_m(s);
 }
@@ -575,7 +575,6 @@ bool strupper_m(char *s)
        /* Catch mb conversion errors that may not terminate. */
        if (errno) {
                s[len-1] = '\0';
-               ret = false;
        }
        errno = errno_save;
        return ret;
@@ -989,7 +988,11 @@ int asprintf_strupper_m(char **strp, const char *fmt, ...)
        if (ret == -1)
                return -1;
 
-       strupper_m(result);
+       if (!strupper_m(result)) {
+               SAFE_FREE(result);
+               return -1;
+       }
+
        *strp = result;
        return ret;
 }
@@ -1006,7 +1009,10 @@ char *talloc_asprintf_strupper_m(TALLOC_CTX *t, const char *fmt, ...)
        if (ret == NULL) {
                return NULL;
        }
-       strupper_m(ret);
+       if (!strupper_m(ret)) {
+               TALLOC_FREE(ret);
+               return NULL;
+       }
        return ret;
 }
 
index 7e953800114d7973ab573610557b1d7bd721b9c6..80f99de4823ec39dfd54f9ba90a47bcf17431d7a 100644 (file)
@@ -861,7 +861,9 @@ bool create_local_private_krb5_conf_for_domain(const char *realm,
                fname, realm, domain ));
 
        realm_upper = talloc_strdup(fname, realm);
-       strupper_m(realm_upper);
+       if (!strupper_m(realm_upper)) {
+               goto done;
+       }
 
        kdc_ip_string = get_kdc_ip_string(dname, realm, sitename, pss, kdc_name);
        if (!kdc_ip_string) {
index 0e23a6add3952792e11a9e35c23e135e79ed4121..eb2603b672093f64ad62112613ce3f3030cb43d4 100644 (file)
@@ -564,7 +564,10 @@ int ads_keytab_create_default(ADS_STRUCT *ads)
 
        /* upper case the sAMAccountName to make it easier for apps to
           know what case to use in the keytab file */
-       strupper_m(sam_account_name);
+       if (!strupper_m(sam_account_name)) {
+               ret = -1;
+               goto done;
+       }
 
        ret = ads_keytab_add_entry(ads, sam_account_name);
        if (ret != 0) {
index 640a020a8bdbbe12cd638acfed73fdff79706e72..fa88244598bea2e0bf4e84aa80f3b1aa7526ca07 100644 (file)
@@ -298,7 +298,11 @@ static bool ads_try_connect(ADS_STRUCT *ads, const char *server, bool gc)
        ads->config.flags              = cldap_reply.server_type;
        ads->config.ldap_server_name   = SMB_STRDUP(cldap_reply.pdc_dns_name);
        ads->config.realm              = SMB_STRDUP(cldap_reply.dns_domain);
-       strupper_m(ads->config.realm);
+       if (!strupper_m(ads->config.realm)) {
+               ret = false;
+               goto out;
+       }
+
        ads->config.bind_path          = ads_build_dn(ads->config.realm);
        if (*cldap_reply.server_site) {
                ads->config.server_site_name =
@@ -1945,7 +1949,11 @@ ADS_STATUS ads_add_service_principal_name(ADS_STRUCT *ads, const char *machine_n
                ads_msgfree(ads, res);
                return ADS_ERROR(LDAP_NO_MEMORY);
        }
-       strupper_m(psp1);
+       if (!strupper_m(psp1)) {
+               ret = ADS_ERROR(LDAP_NO_MEMORY);
+               goto out;
+       }
+
        strlower_m(&psp1[strlen(spn)]);
        servicePrincipalName[0] = psp1;
 
@@ -1959,7 +1967,11 @@ ADS_STATUS ads_add_service_principal_name(ADS_STRUCT *ads, const char *machine_n
                ret = ADS_ERROR(LDAP_NO_MEMORY);
                goto out;
        }
-       strupper_m(psp2);
+       if (!strupper_m(psp2)) {
+               ret = ADS_ERROR(LDAP_NO_MEMORY);
+               goto out;
+       }
+
        strlower_m(&psp2[strlen(spn)]);
        servicePrincipalName[1] = psp2;
 
index ee3a693f717b66001f8bc87d413d7df52ae995d1..a04ac9dd691717d1ff1874a5e83cc01d32d4cdd6 100644 (file)
@@ -653,7 +653,12 @@ static ADS_STATUS ads_guess_service_principal(ADS_STRUCT *ads,
                }
 
                strlower_m(server);
-               strupper_m(server_realm);
+               if (!strupper_m(server_realm)) {
+                       SAFE_FREE(server);
+                       SAFE_FREE(server_realm);
+                       return ADS_ERROR(LDAP_NO_MEMORY);
+               }
+
                if (asprintf(&princ, "ldap/%s@%s", server, server_realm) == -1) {
                        SAFE_FREE(server);
                        SAFE_FREE(server_realm);
@@ -679,7 +684,11 @@ static ADS_STATUS ads_guess_service_principal(ADS_STRUCT *ads,
                }
 
                strlower_m(server);
-               strupper_m(server_realm);
+               if (!strupper_m(server_realm)) {
+                       SAFE_FREE(server);
+                       SAFE_FREE(server_realm);
+                       return ADS_ERROR(LDAP_NO_MEMORY);
+               }
                if (asprintf(&princ, "ldap/%s@%s", server, server_realm) == -1) {
                        SAFE_FREE(server);
                        SAFE_FREE(server_realm);
index 399c13a86a72693227ac2093bba1e8f788c80a2f..5806f7bc75c799d682943d5e6553a29bd6cced92 100644 (file)
@@ -136,7 +136,10 @@ static ADS_STATUS libnet_connect_ads(const char *dns_domain_name,
                        *cp++ = '\0';
                        SAFE_FREE(my_ads->auth.realm);
                        my_ads->auth.realm = smb_xstrdup(cp);
-                       strupper_m(my_ads->auth.realm);
+                       if (!strupper_m(my_ads->auth.realm)) {
+                               ads_destroy(&my_ads);
+                               return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
+                       }
                }
        }
 
@@ -381,7 +384,9 @@ static ADS_STATUS libnet_join_set_machine_spn(TALLOC_CTX *mem_ctx,
        if (!spn) {
                return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
        }
-       strupper_m(spn);
+       if (!strupper_m(spn)) {
+               return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
+       }
        spn_array[0] = spn;
 
        if (!name_to_fqdn(my_fqdn, r->in.machine_name)
index cd914bf8529336d6171f89582f77281cec389431..b74faa6fd9cd039225442675c95b407b2a5e36a5 100644 (file)
@@ -2048,7 +2048,9 @@ NTSTATUS cli_session_setup(struct cli_state *cli,
            (p=strchr_m(user2,*lp_winbind_separator()))) {
                *p = 0;
                user = p+1;
-               strupper_m(user2);
+               if (!strupper_m(user2)) {
+                       return NT_STATUS_INVALID_PARAMETER;
+               }
                workgroup = user2;
        }
 
index 6685fbd1d8b8c5a3e306c5bbcf1abea8e7c0af07..7c185ef5ad08598bd556db0232942e758d94b241 100644 (file)
@@ -117,13 +117,17 @@ bool cli_NetWkstaUserLogon(struct cli_state *cli,char *user, char *workstation)
        SSVAL(p,0,1);
        p += 2;
        strlcpy(p,user,sizeof(param)-PTR_DIFF(p,param));
-       strupper_m(p);
+       if (!strupper_m(p)) {
+               return false;
+       }
        p += 21;
        p++;
        p += 15;
        p++;
        strlcpy(p, workstation,sizeof(param)-PTR_DIFF(p,param));
-       strupper_m(p);
+       if (!strupper_m(p)) {
+               return false;
+       }
        p += 16;
        SSVAL(p, 0, CLI_BUFFER_SIZE);
        p += 2;
index 1333f468f47f9b10eef00cd6442a67ad8df070ab..05d8fb2a291f790a3efe1f9f7496f94a91182e0e 100644 (file)
@@ -1876,12 +1876,16 @@ bool cli_NetWkstaUserLogoff(struct cli_state *cli, const char *user, const char
        PUTDWORD(p, 0); /* Null pointer */
        PUTDWORD(p, 0); /* Null pointer */
        strlcpy(upperbuf, user, sizeof(upperbuf));
-       strupper_m(upperbuf);
+       if (!strupper_m(upperbuf)) {
+               return false;
+       }
        tmp = upperbuf;
        PUTSTRINGF(p, tmp, RAP_USERNAME_LEN);
        p++; /* strange format, but ok */
        strlcpy(upperbuf, workstation, sizeof(upperbuf));
-       strupper_m(upperbuf);
+       if (!strupper_m(upperbuf)) {
+               return false;
+       }
        tmp = upperbuf;
        PUTSTRINGF(p, tmp, RAP_MACHNAME_LEN);
        PUTWORD(p, CLI_BUFFER_SIZE);
index f4c2fc1929bdec7cc72a43ee679e168632575ebd..df5eeb8d89a50e305dfaefe466a5db4843101e4e 100644 (file)
@@ -137,7 +137,10 @@ static bool ads_dc_name(const char *domain,
        SAFE_FREE(sitename);
 
        fstrcpy(srv_name, ads->config.ldap_server_name);
-       strupper_m(srv_name);
+       if (!strupper_m(srv_name)) {
+               ads_destroy(&ads);
+               return false;
+       }
 #ifdef HAVE_ADS
        *dc_ss = ads->ldap.ss;
 #else
index 767ff81476e882140172a014b7699448d51ec975..a6816db5b95edca6e051f694d2d63e4252a8b2f1 100644 (file)
@@ -933,7 +933,7 @@ void make_nmb_name( struct nmb_name *n, const char *name, int type)
        fstring unix_name;
        memset( (char *)n, '\0', sizeof(struct nmb_name) );
        fstrcpy(unix_name, name);
-       strupper_m(unix_name);
+       (void)strupper_m(unix_name);
        push_ascii(n->name, unix_name, sizeof(n->name), STR_TERMINATE);
        n->name_type = (unsigned int)type & 0xFF;
        push_ascii(n->scope,  lp_netbios_scope(), 64, STR_TERMINATE);
@@ -1277,7 +1277,9 @@ char *name_mangle(TALLOC_CTX *mem_ctx, const char *In, char name_type)
                nstring buf_dos;
 
                pull_ascii_fstring(buf_unix, In);
-               strupper_m(buf_unix);
+               if (!strupper_m(buf_unix)) {
+                       return NULL;
+               }
 
                push_ascii_nstring(buf_dos, buf_unix);
                put_name(buf, buf_dos, ' ', name_type);
index f984f75e9f25018bfab4626c74e9aec0576e4e3e..a3ce8c1cc5b8dc5c7b2632894df915e0c501b2a3 100644 (file)
@@ -345,7 +345,10 @@ static NTSTATUS stream_smb_fname(vfs_handle_struct *handle,
                }
        } else {
                /* Normalize the stream type to upercase. */
-               strupper_m(strrchr_m(stream_fname, ':') + 1);
+               if (!strupper_m(strrchr_m(stream_fname, ':') + 1)) {
+                       status = NT_STATUS_INVALID_PARAMETER;
+                       goto fail;
+               }
        }
 
        DEBUG(10, ("stream filename = %s\n", stream_fname));
index 291531e59aae01744706b5ed46106405272f09d6..dd1135d77ccbb82a4f23207710fbd455523431a6 100644 (file)
@@ -119,7 +119,9 @@ static NTSTATUS streams_xattr_get_name(TALLOC_CTX *ctx,
                }
        } else {
                /* Normalize the stream type to upercase. */
-               strupper_m(strrchr_m(*xattr_name, ':') + 1);
+               if (!strupper_m(strrchr_m(*xattr_name, ':') + 1)) {
+                       return NT_STATUS_INVALID_PARAMETER;
+               }
        }
 
        DEBUG(10, ("xattr_name: %s, stream_name: %s\n", *xattr_name,
index b7c99005bbf129ba40d3997beaab51d32b441a7a..bd027239eca00cf9be06cadf1fff9835380b50f9 100644 (file)
@@ -109,8 +109,14 @@ struct browse_cache_record *create_browser_in_lmb_cache( const char *work_name,
 
        unstrcpy( browc->lmb_name, browser_name);
        unstrcpy( browc->work_group, work_name);
-       strupper_m( browc->lmb_name );
-       strupper_m( browc->work_group );
+       if (!strupper_m( browc->lmb_name )) {
+               SAFE_FREE(browc);
+               return NULL;
+       }
+       if (!strupper_m( browc->work_group )) {
+               SAFE_FREE(browc);
+               return NULL;
+       }
   
        browc->ip = ip;
  
index e009cf9a61479072df085e3eb7f60eee3809d3e2..b56baedf270dcd101cc751cf486409c7c0224a1f 100644 (file)
@@ -120,7 +120,10 @@ static void announce_local_master_browser_to_domain_master_browser( struct work_
        p++;
 
        unstrcpy(myname, lp_netbios_name());
-       strupper_m(myname);
+       if (!strupper_m(myname)) {
+               DEBUG(2,("strupper_m %s failed\n", myname));
+               return;
+       }
        myname[15]='\0';
        /* The call below does CH_UNIX -> CH_DOS conversion. JRA */
        push_ascii(p, myname, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE);
index ac0d8735120c36c6b6c6c288223e58ed12079e42..1947e37e3afeb0bbac0272408eaace56d35504c8 100644 (file)
@@ -51,7 +51,10 @@ static void send_election_dgram(struct subnet_record *subrec, const char *workgr
        SIVAL(p,5,timeup*1000); /* ms - Despite what the spec says. */
        p += 13;
        unstrcpy(srv_name, server_name);
-       strupper_m(srv_name);
+       if (!strupper_m(srv_name)) {
+               DEBUG(2,("strupper_m failed for %s\n", srv_name));
+               return;
+       }
        /* The following call does UNIX -> DOS charset conversion. */
        push_ascii(p, srv_name, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE);
        p = skip_string(outbuf,sizeof(outbuf),p);
index 582848c1fcf7858fb12dc1abd2a2166d6d6a68d9..153a86db55549c4ad775fcb14d4e6f11c209b8e9 100644 (file)
@@ -572,7 +572,10 @@ static void send_backup_list_response(struct subnet_record *subrec,
        /* We always return at least one name - our own. */
        count = 1;
        unstrcpy(myname, lp_netbios_name());
-       strupper_m(myname);
+       if (!strupper_m(myname)) {
+               DEBUG(4,("strupper_m %s failed\n", myname));
+               return;
+       }
        myname[15]='\0';
        push_ascii(p, myname, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE);
 
index b2545f102fc9463cad4ca64932cbe32ce556b092..562c388ee2990e0212b9162184297bf86b11f5a2 100644 (file)
@@ -347,7 +347,10 @@ subnet %s - name not found.\n", nmb_namestr(&nmb->question.question_name),
                        unstring name;
 
                        pull_ascii_nstring(name, sizeof(name), namerec->name.name);
-                       strupper_m(name);
+                       if (!strupper_m(name)) {
+                               DEBUG(2,("strupper_m %s failed\n", name));
+                               return;
+                       }
                        if (!strequal(name,"*") &&
                                        !strequal(name,"__SAMBA__") &&
                                        (name_type < 0x1b || name_type >= 0x20 || 
index 61c1d784f78aa87c236f57a1e4b1099ee9e18da9..c06bddafbddeadc792650b81996b687c39e66e72 100644 (file)
@@ -44,7 +44,7 @@ void set_samba_nb_type(void)
  Convert a NetBIOS name to upper case.
 ***************************************************************************/
 
-static void upcase_name( struct nmb_name *target, const struct nmb_name *source )
+static bool upcase_name( struct nmb_name *target, const struct nmb_name *source )
 {
        int i;
        unstring targ;
@@ -55,11 +55,15 @@ static void upcase_name( struct nmb_name *target, const struct nmb_name *source
        }
 
        pull_ascii_nstring(targ, sizeof(targ), target->name);
-       strupper_m( targ );
+       if (!strupper_m( targ )) {
+               return false;
+       }
        push_ascii_nstring( target->name, targ);
 
        pull_ascii(scope, target->scope, 64, -1, STR_TERMINATE);
-       strupper_m( scope );
+       if (!strupper_m( scope )) {
+               return false;
+       }
        push_ascii(target->scope, scope, 64, STR_TERMINATE);
 
        /* fudge... We're using a byte-by-byte compare, so we must be sure that
@@ -72,6 +76,7 @@ static void upcase_name( struct nmb_name *target, const struct nmb_name *source
        for( i = strlen( target->scope ); i < sizeof( target->scope ); i++ ) {
                target->scope[i] = '\0';
        }
+       return true;
 }
 
 /**************************************************************************
@@ -104,7 +109,9 @@ struct name_record *find_name_on_subnet(struct subnet_record *subrec,
        struct nmb_name uc_name;
        struct name_record *name_ret;
 
-       upcase_name( &uc_name, nmbname );
+       if (!upcase_name( &uc_name, nmbname )) {
+               return NULL;
+       }
        
        if (subrec == wins_server_subnet) {
                return find_name_on_wins_subnet(&uc_name, self_only);
@@ -216,7 +223,11 @@ bool add_name_to_subnet( struct subnet_record *subrec,
        namerec->subnet = subrec;
 
        make_nmb_name(&namerec->name, name, type);
-       upcase_name(&namerec->name, NULL );
+       if (!upcase_name(&namerec->name, NULL )) {
+               SAFE_FREE(namerec->data.ip);
+               SAFE_FREE(namerec);
+               return False;
+       }
 
        /* Enter the name as active. */
        namerec->data.nb_flags = nb_flags | NB_ACTIVE;
index 97bab9d25a7184dbcf221b0566ee04115a846b0c..86012b834b29934fe6c74e7b0d62ffbd9632a419 100644 (file)
@@ -106,7 +106,10 @@ static void send_announcement(struct subnet_record *subrec, int announce_type,
        SIVAL(p,1,announce_interval*1000); /* Milliseconds - despite the spec. */
 
        strlcpy(upper_server_name, server_name ? server_name : "", sizeof(upper_server_name));
-       strupper_m(upper_server_name);
+       if (!strupper_m(upper_server_name)) {
+               DEBUG(2,("strupper_m %s failed\n", upper_server_name));
+               return;
+       }
        push_string_check(p+5, upper_server_name, 16, STR_ASCII|STR_TERMINATE);
 
        SCVAL(p,21,SAMBA_MAJOR_NBT_ANNOUNCE_VERSION); /* Major version. */
@@ -568,7 +571,10 @@ for workgroup %s on subnet %s.\n", lp_workgroup(), FIRST_SUBNET->subnet_name ));
        p++;
 
        unstrcpy(myname, lp_netbios_name());
-       strupper_m(myname);
+       if (!strupper_m(myname)) {
+               DEBUG(2,("strupper_m %s failed\n", myname));
+               return;
+       }
        myname[15]='\0';
        push_ascii(p, myname, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE);
 
index ac16b5a98c97878029c3a5a42cb4a0afa3812fbf..05ca6e9367fc5dfb9fafbf148a326a69ca33e951 100644 (file)
@@ -119,7 +119,11 @@ workgroup %s. This is a bug.\n", name, work->work_group));
  
        fstrcpy(servrec->serv.name,name);
        fstrcpy(servrec->serv.comment,comment);
-       strupper_m(servrec->serv.name);
+       if (!strupper_m(servrec->serv.name)) {
+               DEBUG(2,("strupper_m %s failed\n", servrec->serv.name));
+               SAFE_FREE(servrec);
+               return NULL;
+       }
        servrec->serv.type  = servertype;
 
        update_server_ttl(servrec, ttl);
index 87b9990a63f0cda8c15e295859d461a84caf0910..d56d0f8aedd9429f8b37b8968e539980402d802e 100644 (file)
@@ -217,7 +217,7 @@ static TDB_DATA name_to_key(const struct nmb_name *nmbname)
        memset(keydata, '\0', sizeof(keydata));
 
        pull_ascii_nstring(keydata, sizeof(unstring), nmbname->name);
-       strupper_m(keydata);
+       (void)strupper_m(keydata);
        keydata[sizeof(unstring)] = nmbname->name_type;
        key.dptr = (uint8 *)keydata;
        key.dsize = sizeof(keydata);
index 8e14cec3e8193d2f316eebaf30d5f7ba0e6c96df..a2d793feb32157eb4939a76ac337b134cca78e66 100644 (file)
@@ -339,7 +339,10 @@ bool lookup_name(TALLOC_CTX *mem_ctx,
                        TALLOC_FREE(tmp_ctx);
                        return false;
                }
-               strupper_m(tmp_dom);
+               if (!strupper_m(tmp_dom)) {
+                       TALLOC_FREE(tmp_ctx);
+                       return false;
+               }
                *ret_domain = tmp_dom;
        }
 
index 30f5f822ff9dc5f8c0bfd68926cc75e5dd4a4341..a4b5709b283e1ca52efa748ddd625b0083800fa8 100644 (file)
@@ -148,7 +148,9 @@ bool secrets_store_domain_guid(const char *domain, struct GUID *guid)
 #endif
 
        slprintf(key, sizeof(key)-1, "%s/%s", SECRETS_DOMAIN_GUID, domain);
-       strupper_m(key);
+       if (!strupper_m(key)) {
+               return false;
+       }
        return secrets_store(key, guid, sizeof(struct GUID));
 }
 
@@ -160,7 +162,9 @@ bool secrets_fetch_domain_guid(const char *domain, struct GUID *guid)
        struct GUID new_guid;
 
        slprintf(key, sizeof(key)-1, "%s/%s", SECRETS_DOMAIN_GUID, domain);
-       strupper_m(key);
+       if (!strupper_m(key)) {
+               return false;
+       }
        dyn_guid = (struct GUID *)secrets_fetch(key, &size);
 
        if (!dyn_guid) {
index 75ad507e2b05b54a0f63215b963b92b4c0cc560f..3e561eb3893c484e341a3b5fd5f80e866a4d8099 100644 (file)
@@ -561,7 +561,9 @@ static bool upgrade_v2_to_v3_check_subkeylist(struct db_context *db,
        };
        bool success = false;
        char *path = talloc_asprintf(talloc_tos(), "%s\\%s", key, subkey);
-       strupper_m(path);
+       if (!strupper_m(path)) {
+               goto done;
+       }
 
        if (!dbwrap_exists(db, string_term_tdb_data(path))) {
                NTSTATUS status;
index b15015b988de11130ead76b7cfe19ebdb27169a5..e256c75cb2de18ca8d9fdeba245af8d28e9fd41a 100644 (file)
@@ -113,7 +113,10 @@ char *normalize_reg_path(TALLOC_CTX *ctx, const char *keyname )
                p = strrchr(nkeyname, '\\');
        }
 
-       strupper_m(nkeyname);
+       if (!strupper_m(nkeyname)) {
+               TALLOC_FREE(nkeyname);
+               return NULL;
+       }
 
        return nkeyname;
 }
index 1b5de57ad4e580402dd5ea0ef238e11749f39a17..b22619ff356fc8ea0ad0161be3e6c9e983622c46 100644 (file)
@@ -4004,7 +4004,9 @@ static bool api_NetWkstaGetInfo(struct smbd_server_connection *sconn,
 
        SIVAL(p,0,PTR_DIFF(p2,*rdata)); /* host name */
        strlcpy(p2,get_local_machine_name(),PTR_DIFF(endp,p2));
-       strupper_m(p2);
+       if (!strupper_m(p2)) {
+               return false;
+       }
        p2 = skip_string(*rdata,*rdata_len,p2);
        if (!p2) {
                return False;
@@ -4021,7 +4023,9 @@ static bool api_NetWkstaGetInfo(struct smbd_server_connection *sconn,
 
        SIVAL(p,0,PTR_DIFF(p2,*rdata)); /* login domain */
        strlcpy(p2,lp_workgroup(),PTR_DIFF(endp,p2));
-       strupper_m(p2);
+       if (!strupper_m(p2)) {
+               return false;
+       }
        p2 = skip_string(*rdata,*rdata_len,p2);
        if (!p2) {
                return False;
@@ -4691,7 +4695,9 @@ static bool api_WWkstaUserLogon(struct smbd_server_connection *sconn,
                        fstring mypath;
                        fstrcpy(mypath,"\\\\");
                        fstrcat(mypath,get_local_machine_name());
-                       strupper_m(mypath);
+                       if (!strupper_m(mypath)) {
+                               return false;
+                       }
                        PACKS(&desc,"z",mypath); /* computer */
                }
 
@@ -5082,7 +5088,7 @@ static void fill_printdest_info(struct spoolss_PrinterInfo2 *info2, int uLevel,
 
        strncpy(buf, info2->printername, sizeof(buf)-1);
        buf[sizeof(buf)-1] = 0;
-       strupper_m(buf);
+       (void)strupper_m(buf);
 
        if (uLevel <= 1) {
                PACKS(desc,"B9",buf);   /* szName */
index 056879c8765b0a8d1b0215f6e50bd24dc99fc367..8a44ea2d6a2c0a64aa637989757cb80674a6d76b 100644 (file)
@@ -630,7 +630,10 @@ static bool to_8_3(char magic_char, const char *in, char out[13], int default_ca
        } else
                csum = str_checksum(s);
 
-       strupper_m( s );
+       if (!strupper_m( s )) {
+               SAFE_FREE(s);
+               return false;
+       }
 
        if( p ) {
                if( p == s )
index 09cd44d5af313f09aeacc9106fb7eb066a559c6d..655c72745a47c13e8f15817cd88daf790f790b8d 100644 (file)
@@ -291,7 +291,7 @@ static unsigned int mangle_hash(const char *key, unsigned int length)
        length = MIN(length,sizeof(fstring)-1);
        strncpy(str, key, length);
        str[length] = 0;
-       strupper_m(str);
+       (void)strupper_m(str);
 
        /* the length of a multi-byte string can change after a strupper_m */
        length = strlen(str);
index 4fc1aa3e2dde74f57b3167fbeca4ba66d554eb80..ce9cff90e24c2264a0537e04cb532841ca71e1c4 100644 (file)
@@ -257,7 +257,10 @@ static NTSTATUS share_sanity_checks(const struct tsocket_address *remote_address
                }
        }
 
-       strupper_m(dev);
+       if (!strupper_m(dev)) {
+               DEBUG(2,("strupper_m %s failed\n", dev));
+               return NT_STATUS_INVALID_PARAMETER;
+       }
 
        if (lp_print_ok(snum)) {
                if (!strequal(dev, "LPT1:")) {
index 69e583ad55e2591007c6e3f45eae8e7896554df9..525484719b39af0df6d40f94df88318aad62cdd4 100644 (file)
@@ -8273,7 +8273,7 @@ static NTSTATUS split_ntfs_stream_name(TALLOC_CTX *mem_ctx, const char *fname,
                /*
                 * upper-case the type field
                 */
-               strupper_m(strchr_m(stream, ':')+1);
+               (void)strupper_m(strchr_m(stream, ':')+1);
        }
 
  done:
index a4f1588e515800550b39c3177fdf82cdeaa10c41..b1eac52df2c476c1e262cc533913b464af54892c 100644 (file)
@@ -287,7 +287,10 @@ retry:
                *cp++ = '\0';
                SAFE_FREE(ads->auth.realm);
                ads->auth.realm = smb_xstrdup(cp);
-               strupper_m(ads->auth.realm);
+               if (!strupper_m(ads->auth.realm)) {
+                       ads_destroy(&ads);
+                       return ADS_ERROR(LDAP_NO_MEMORY);
+               }
        }
 
        status = ads_connect(ads);
@@ -1371,7 +1374,10 @@ static void _net_ads_join_dns_updates(TALLOC_CTX *ctx, struct libnet_JoinCtx *r)
                goto done;
        }
 
-       strupper_m(ads_dns->auth.realm);
+       if (!strupper_m(ads_dns->auth.realm)) {
+               d_fprintf(stderr, _("strupper_m %s failed\n"), ads_dns->auth.realm);
+               goto done;
+       }
 
        ret = ads_kinit_password(ads_dns);
        if (ret != 0) {
index f067071de177834cdb99e754ba64b437e98a8b98..ebc14e528dea965778d3a46f5625bab7796816e9 100644 (file)
@@ -492,7 +492,11 @@ static bool idmap_store_secret(const char *backend,
 
        if (r < 0) return false;
 
-       strupper_m(tmp); /* make sure the key is case insensitive */
+       /* make sure the key is case insensitive */
+       if (!strupper_m(tmp)) {
+               free(tmp);
+               return false;
+       }
        ret = secrets_store_generic(tmp, identity, secret);
 
        free(tmp);
index 872aa5a371003615952bccafc579c1700b1b5d08..45a01f20f5e5ea96ff660cc6e434f8068dc5e43e 100644 (file)
@@ -419,7 +419,10 @@ static bool read_info(struct check_ctx *ctx, const char *key, TDB_DATA val)
 static bool is_all_upper(const char *str) {
        bool ret;
        char *tmp = talloc_strdup(talloc_tos(), str);
-       strupper_m(tmp);
+       if (!strupper_m(tmp)) {
+               talloc_free(tmp);
+               return false;
+       }
        ret = (strcmp(tmp, str) == 0);
        talloc_free(tmp);
        return ret;
@@ -698,7 +701,10 @@ static bool normalize_path_internal(char* path, char sep) {
        }
        *optr = '\0';
 
-       strupper_m(path);
+       if (!strupper_m(path)) {
+               talloc_free(discard_const(orig));
+               return false;
+       }
        changed = (strcmp(orig, path) != 0);
        talloc_free(discard_const(orig));
        return changed;
index 46c3c91779321f297aa90005551fa22e1d8d934b..ae5db99dd386ed13718dff72636767082568665d 100644 (file)
@@ -4750,7 +4750,11 @@ static bool get_user_tokens(struct net_context *c, int *num_tokens,
                } else {
                        *p++ = '\0';
                        fstrcpy(domain, users[i]);
-                       strupper_m(domain);
+                       if (!strupper_m(domain)) {
+                               DEBUG(1, ("strupper_m %s failed\n", domain));
+                               wbcFreeMemory(users);
+                               return false;
+                       }
                        fstrcpy(user, p);
                }
 
@@ -5794,7 +5798,10 @@ static NTSTATUS rpc_trustdom_add_internals(struct net_context *c,
                return NT_STATUS_NO_MEMORY;
        }
 
-       strupper_m(acct_name);
+       if (!strupper_m(acct_name)) {
+               SAFE_FREE(acct_name);
+               return NT_STATUS_INVALID_PARAMETER;
+       }
 
        init_lsa_String(&lsa_acct_name, acct_name);
 
@@ -5978,7 +5985,10 @@ static NTSTATUS rpc_trustdom_del_internals(struct net_context *c,
        if (acct_name == NULL)
                return NT_STATUS_NO_MEMORY;
 
-       strupper_m(acct_name);
+       if (!strupper_m(acct_name)) {
+               TALLOC_FREE(acct_name);
+               return NT_STATUS_INVALID_PARAMETER;
+       }
 
        /* Get samr policy handle */
        status = dcerpc_samr_Connect2(b, mem_ctx,
@@ -6224,13 +6234,20 @@ static int rpc_trustdom_establish(struct net_context *c, int argc,
        }
 
        domain_name = smb_xstrdup(argv[0]);
-       strupper_m(domain_name);
+       if (!strupper_m(domain_name)) {
+               SAFE_FREE(domain_name);
+               return -1;
+       }
 
        /* account name used at first is our domain's name with '$' */
        if (asprintf(&acct_name, "%s$", lp_workgroup()) == -1) {
                return -1;
        }
-       strupper_m(acct_name);
+       if (!strupper_m(acct_name)) {
+               SAFE_FREE(domain_name);
+               SAFE_FREE(acct_name);
+               return -1;
+       }
 
        /*
         * opt_workgroup will be used by connection functions further,
@@ -6402,7 +6419,10 @@ static int rpc_trustdom_revoke(struct net_context *c, int argc,
 
        /* generate upper cased domain name */
        domain_name = smb_xstrdup(argv[0]);
-       strupper_m(domain_name);
+       if (!strupper_m(domain_name)) {
+               SAFE_FREE(domain_name);
+               return -1;
+       }
 
        /* delete password of the trust */
        if (!pdb_del_trusteddom_pw(domain_name)) {
@@ -6971,7 +6991,11 @@ static int rpc_trustdom_list(struct net_context *c, int argc, const char **argv)
                                str[ascii_dom_name_len - 1] = '\0';
 
                        /* set opt_* variables to remote domain */
-                       strupper_m(str);
+                       if (!strupper_m(str)) {
+                               cli_shutdown(cli);
+                               talloc_destroy(mem_ctx);
+                               return -1;
+                       }
                        c->opt_workgroup = talloc_strdup(mem_ctx, str);
                        c->opt_target_workgroup = c->opt_workgroup;
 
index 2e3e240a3f728c505aeed604c7d3b42943737b81..50383fee6b52b1513f86dd1611623046a1af1197 100644 (file)
@@ -509,7 +509,10 @@ int net_rpc_join_newstyle(struct net_context *c, int argc, const char **argv)
 
        /* Now store the secret in the secrets database */
 
-       strupper_m(discard_const_p(char, domain));
+       if (!strupper_m(discard_const_p(char, domain))) {
+               DEBUG(0, ("strupper_m %s failed\n", domain));
+               goto done;
+       }
 
        if (!secrets_store_domain_sid(domain, domain_sid)) {
                DEBUG(0, ("error storing domain sid for %s\n", domain));
index 103a1f6d16ef6d7ddbf2266381776c3f9e242ae3..7cf40b905de188ed9ccf7db5a007162004e6658b 100644 (file)
@@ -365,9 +365,7 @@ static bool parse_ntlm_auth_domain_user(const char *domuser, fstring domain,
        fstrcpy(user, p+1);
        fstrcpy(domain, domuser);
        domain[PTR_DIFF(p, domuser)] = 0;
-       strupper_m(domain);
-
-       return True;
+       return strupper_m(domain);
 }
 
 static bool get_require_membership_sid(void) {
index 54c5d62c9774038f6e72c341efde0dab8c213d0e..c91c0f3d1676616aa4e3a8d3d6ea8e0295eee5fb 100644 (file)
@@ -1204,7 +1204,7 @@ static void my_make_nmb_name( struct nmb_name *n, const char *name, int type)
        fstring unix_name;
        memset( (char *)n, '\0', sizeof(struct nmb_name) );
        fstrcpy(unix_name, name);
-       strupper_m(unix_name);
+       (void)strupper_m(unix_name);
        push_ascii(n->name, unix_name, sizeof(n->name), STR_TERMINATE);
        n->name_type = (unsigned int)type & 0xFF;
        push_ascii(n->scope,  lp_netbios_scope(), 64, STR_TERMINATE);
index aeeb2e87d0f874c838c7474e0916e2ea8290ca76..e72a0ab1849699671716c34c50ff8cccb8808c4f 100644 (file)
@@ -50,7 +50,12 @@ static char *idmap_fetch_secret(const char *backend,
        if (r < 0)
                return NULL;
 
-       strupper_m(tmp); /* make sure the key is case insensitive */
+       /* make sure the key is case insensitive */
+       if (!strupper_m(tmp)) {
+               SAFE_FREE(tmp);
+               return NULL;
+       }
+
        ret = secrets_fetch_generic(tmp, identity);
 
        SAFE_FREE(tmp);
index 854e12c53b619ad6a7bc0a3ae765ffaf7c0d11d9..4efd829cb9d0e7cb79e04242375a447e01e15a17 100644 (file)
@@ -99,7 +99,10 @@ static ADS_STRUCT *ads_cached_connection(struct winbindd_domain *domain)
                        return NULL;
                }
                ads->auth.realm = SMB_STRDUP( ads->server.realm );
-               strupper_m( ads->auth.realm );
+               if (!strupper_m( ads->auth.realm )) {
+                       ads_destroy( &ads );
+                       return NULL;
+               }
        }
        else {
                struct winbindd_domain *our_domain = domain;
@@ -114,7 +117,10 @@ static ADS_STRUCT *ads_cached_connection(struct winbindd_domain *domain)
 
                if ( our_domain->alt_name[0] != '\0' ) {
                        ads->auth.realm = SMB_STRDUP( our_domain->alt_name );
-                       strupper_m( ads->auth.realm );
+                       if (!strupper_m( ads->auth.realm )) {
+                               ads_destroy( &ads );
+                               return NULL;
+                       }
                }
                else
                        ads->auth.realm = SMB_STRDUP( lp_realm() );
index 66de29e06136ee0b3aad0ab5dc65c492d927a557..cfa843424a37755163f9788331ab63f13c7e1248 100644 (file)
@@ -946,7 +946,7 @@ static void wcache_save_name_to_sid(struct winbindd_domain *domain,
        centry_put_uint32(centry, type);
        centry_put_sid(centry, sid);
        fstrcpy(uname, name);
-       strupper_m(uname);
+       (void)strupper_m(uname);
        centry_end(centry, "NS/%s/%s", domain_name, uname);
        DEBUG(10,("wcache_save_name_to_sid: %s\\%s -> %s (%s)\n", domain_name,
                  uname, sid_string_dbg(sid), nt_errstr(status)));
@@ -1064,7 +1064,7 @@ static void wcache_save_username_alias(struct winbindd_domain *domain,
        centry_put_string( centry, alias );
 
        fstrcpy(uname, name);
-       strupper_m(uname);
+       (void)strupper_m(uname);
        centry_end(centry, "NSS/NA/%s", uname);
 
        DEBUG(10,("wcache_save_username_alias: %s -> %s\n", name, alias ));
@@ -1085,7 +1085,7 @@ static void wcache_save_alias_username(struct winbindd_domain *domain,
        centry_put_string( centry, name );
 
        fstrcpy(uname, alias);
-       strupper_m(uname);
+       (void)strupper_m(uname);
        centry_end(centry, "NSS/AN/%s", uname);
 
        DEBUG(10,("wcache_save_alias_username: %s -> %s\n", alias, name ));
@@ -1113,7 +1113,10 @@ NTSTATUS resolve_username_to_alias( TALLOC_CTX *mem_ctx,
 
        if ( (upper_name = SMB_STRDUP(name)) == NULL )
                return NT_STATUS_NO_MEMORY;
-       strupper_m(upper_name);
+       if (!strupper_m(upper_name)) {
+               SAFE_FREE(name);
+               return NT_STATUS_INVALID_PARAMETER;
+       }
 
        centry = wcache_fetch(cache, domain, "NSS/NA/%s", upper_name);
 
@@ -1188,7 +1191,10 @@ NTSTATUS resolve_alias_to_username( TALLOC_CTX *mem_ctx,
 
        if ( (upper_name = SMB_STRDUP(alias)) == NULL )
                return NT_STATUS_NO_MEMORY;
-       strupper_m(upper_name);
+       if (!strupper_m(upper_name)) {
+               SAFE_FREE(alias);
+               return NT_STATUS_INVALID_PARAMETER;
+       }
 
        centry = wcache_fetch(cache, domain, "NSS/AN/%s", upper_name);
 
@@ -1859,7 +1865,9 @@ static NTSTATUS name_to_sid(struct winbindd_domain *domain,
 
                /* Only save the reverse mapping if this was not a UPN */
                if (!strchr(name, '@')) {
-                       strupper_m(discard_const_p(char, domain_name));
+                       if (!strupper_m(discard_const_p(char, domain_name))) {
+                               return NT_STATUS_INVALID_PARAMETER;
+                       }
                        strlower_m(discard_const_p(char, name));
                        wcache_save_sid_to_name(domain, status, sid, domain_name, name, *type);
                }
index 5a602422ae05e8ade94722e05195c0e7e912b496..c08530e81957460da7fec0eb6e8542b8abf5e839 100644 (file)
@@ -767,7 +767,10 @@ static NTSTATUS get_trust_creds(const struct winbindd_domain *domain,
                        return NT_STATUS_NO_MEMORY;
                }
 
-               strupper_m(*machine_krb5_principal);
+               if (!strupper_m(*machine_krb5_principal)) {
+                       SAFE_FREE(machine_krb5_principal);
+                       return NT_STATUS_INVALID_PARAMETER;
+               }
        }
 
        return NT_STATUS_OK;
index a64cc5692c504f0c4aef480316b3333886489255..48bb79bdcdb0b20c440fcd0b8596ba0f00466529 100644 (file)
@@ -582,7 +582,9 @@ static NTSTATUS winbindd_raw_kerberos_login(TALLOC_CTX *mem_ctx,
        parse_domain_user(user, name_domain, name_user);
 
        realm = domain->alt_name;
-       strupper_m(realm);
+       if (!strupper_m(realm)) {
+               return NT_STATUS_INVALID_PARAMETER;
+       }
 
        principal_s = talloc_asprintf(mem_ctx, "%s@%s", name_user, realm);
        if (principal_s == NULL) {
@@ -938,7 +940,9 @@ static NTSTATUS winbindd_dual_pam_auth_cached(struct winbindd_domain *domain,
                        }
 
                        realm = domain->alt_name;
-                       strupper_m(realm);
+                       if (!strupper_m(realm)) {
+                               return NT_STATUS_INVALID_PARAMETER;
+                       }
 
                        principal_s = talloc_asprintf(state->mem_ctx, "%s@%s", name_user, realm);
                        if (principal_s == NULL) {
index 52ce1e30561506c86550569b06005350bee37b37..656735633b6be22497caca62e88465fc22737303 100644 (file)
@@ -877,9 +877,7 @@ bool parse_domain_user(const char *domuser, fstring domain, fstring user)
                domain[PTR_DIFF(p, domuser)] = 0;
        }
 
-       strupper_m(domain);
-
-       return True;
+       return strupper_m(domain);
 }
 
 bool parse_domain_user_talloc(TALLOC_CTX *mem_ctx, const char *domuser,