1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

Mem alloc failure checks.

Jeremy.
(This used to be commit 4e33e3f37f)
This commit is contained in:
Jeremy Allison 2003-02-04 23:44:05 +00:00
parent bfcdd6eed3
commit 0701e642f2
3 changed files with 59 additions and 23 deletions

View File

@ -33,32 +33,34 @@ char *ads_build_path(const char *realm, const char *sep, const char *field, int
r = strdup(realm);
if (!r || !*r) return r;
if (!r || !*r)
return r;
for (p=r; *p; p++) {
if (strchr(sep, *p)) numbits++;
}
for (p=r; *p; p++)
if (strchr(sep, *p))
numbits++;
len = (numbits+1)*(strlen(field)+1) + strlen(r) + 1;
ret = malloc(len);
if (!ret)
return NULL;
strlcpy(ret,field, len);
p=strtok(r,sep);
strlcat(ret, p, len);
while ((p=strtok(NULL,sep))) {
char *s;
if (reverse) {
if (reverse)
asprintf(&s, "%s%s,%s", field, p, ret);
} else {
else
asprintf(&s, "%s,%s%s", ret, field, p);
}
free(ret);
ret = s;
}
free(r);
return ret;
}

View File

@ -139,13 +139,19 @@ static krb5_error_code build_setpw_request(krb5_context context,
}
packet->data = (char *)malloc(ap_req->length + cipherpw.length + 6);
if (!packet->data)
return -1;
/* see the RFC for details */
p = ((char *)packet->data) + 2;
RSSVAL(p, 0, 0xff80); p += 2;
RSSVAL(p, 0, ap_req->length); p += 2;
memcpy(p, ap_req->data, ap_req->length); p += ap_req->length;
memcpy(p, cipherpw.data, cipherpw.length); p += cipherpw.length;
RSSVAL(p, 0, 0xff80);
p += 2;
RSSVAL(p, 0, ap_req->length);
p += 2;
memcpy(p, ap_req->data, ap_req->length);
p += ap_req->length;
memcpy(p, cipherpw.data, cipherpw.length);
p += cipherpw.length;
packet->length = PTR_DIFF(p,packet->data);
RSSVAL(packet->data, 0, packet->length);
@ -397,6 +403,17 @@ ADS_STATUS krb5_set_password(const char *kdc_host, const char *princ, const char
chpw_rep.length = 1500;
chpw_rep.data = (char *) malloc(chpw_rep.length);
if (!chpw_rep.data) {
close(sock);
free(ap_req.data);
krb5_free_creds(context, credsp);
krb5_free_principal(context, creds.client);
krb5_free_principal(context, principal);
krb5_free_context(context);
DEBUG(1,("send of chpw failed (%s)\n", strerror(errno)));
errno = ENOMEM;
return ADS_ERROR_SYSTEM(errno);
}
ret = read(sock, chpw_rep.data, chpw_rep.length);
if (ret < 0) {

View File

@ -1528,7 +1528,8 @@ char *ads_pull_string(ADS_STRUCT *ads,
int rc;
values = ldap_get_values(ads->ld, msg, field);
if (!values) return NULL;
if (!values)
return NULL;
if (values[0]) {
rc = pull_utf8_talloc(mem_ctx, &ux_string,
@ -1557,15 +1558,22 @@ char **ads_pull_strings(ADS_STRUCT *ads,
int i, n;
values = ldap_get_values(ads->ld, msg, field);
if (!values) return NULL;
if (!values)
return NULL;
for (i=0;values[i];i++) /* noop */ ;
for (i=0;values[i];i++)
/* noop */ ;
n = i;
ret = talloc(mem_ctx, sizeof(char *) * (n+1));
if (!ret) {
ldap_value_free(values);
return NULL;
}
for (i=0;i<n;i++) {
if (pull_utf8_talloc(mem_ctx, &ret[i], values[i]) == -1) {
ldap_value_free(values);
return NULL;
}
}
@ -1590,7 +1598,8 @@ BOOL ads_pull_uint32(ADS_STRUCT *ads,
char **values;
values = ldap_get_values(ads->ld, msg, field);
if (!values) return False;
if (!values)
return False;
if (!values[0]) {
ldap_value_free(values);
return False;
@ -1614,7 +1623,8 @@ BOOL ads_pull_guid(ADS_STRUCT *ads,
char **values;
values = ldap_get_values(ads->ld, msg, "objectGUID");
if (!values) return False;
if (!values)
return False;
if (values[0]) {
memcpy(guid, values[0], sizeof(GUID));
@ -1643,11 +1653,11 @@ BOOL ads_pull_sid(ADS_STRUCT *ads,
values = ldap_get_values_len(ads->ld, msg, field);
if (!values) return False;
if (!values)
return False;
if (values[0]) {
if (values[0])
ret = sid_parse(values[0]->bv_val, values[0]->bv_len, sid);
}
ldap_value_free_len(values);
return ret;
@ -1671,16 +1681,23 @@ int ads_pull_sids(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx,
values = ldap_get_values_len(ads->ld, msg, field);
if (!values) return 0;
if (!values)
return 0;
for (i=0; values[i]; i++) /* nop */ ;
for (i=0; values[i]; i++)
/* nop */ ;
(*sids) = talloc(mem_ctx, sizeof(DOM_SID) * i);
if (!(*sids)) {
ldap_value_free_len(values);
return 0;
}
count = 0;
for (i=0; values[i]; i++) {
ret = sid_parse(values[i]->bv_val, values[i]->bv_len, &(*sids)[count]);
if (ret) count++;
if (ret)
count++;
}
ldap_value_free_len(values);