From 526e875cec15761099438e17df3f56bc2bd5b761 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 8 Aug 2012 15:35:28 -0700 Subject: Check error returns from strupper_m() (in all reasonable places). --- source3/libsmb/cliconnect.c | 4 +++- source3/libsmb/clirap.c | 8 ++++++-- source3/libsmb/clirap2.c | 8 ++++++-- source3/libsmb/namequery_dc.c | 5 ++++- source3/libsmb/nmblib.c | 6 ++++-- 5 files changed, 23 insertions(+), 8 deletions(-) (limited to 'source3/libsmb') diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index cd914bf852..b74faa6fd9 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -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; } diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c index 6685fbd1d8..7c185ef5ad 100644 --- a/source3/libsmb/clirap.c +++ b/source3/libsmb/clirap.c @@ -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; diff --git a/source3/libsmb/clirap2.c b/source3/libsmb/clirap2.c index 1333f468f4..05d8fb2a29 100644 --- a/source3/libsmb/clirap2.c +++ b/source3/libsmb/clirap2.c @@ -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); diff --git a/source3/libsmb/namequery_dc.c b/source3/libsmb/namequery_dc.c index f4c2fc1929..df5eeb8d89 100644 --- a/source3/libsmb/namequery_dc.c +++ b/source3/libsmb/namequery_dc.c @@ -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 diff --git a/source3/libsmb/nmblib.c b/source3/libsmb/nmblib.c index 767ff81476..a6816db5b9 100644 --- a/source3/libsmb/nmblib.c +++ b/source3/libsmb/nmblib.c @@ -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); -- cgit