[SCM] Samba Shared Repository - branch v3-2-test updated -
initial-v3-2-unstable-389-g82f393e
Jeremy Allison
jra at samba.org
Wed Nov 28 08:01:38 GMT 2007
The branch, v3-2-test has been updated
via 82f393e60378eb42ddcc740241902eee495719d3 (commit)
via 71ccd0c42e0ae66172ca5797be3d3a01f4a67a69 (commit)
from 9755c5311416f17bac0a848d027cafb3fd487618 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test
- Log -----------------------------------------------------------------
commit 82f393e60378eb42ddcc740241902eee495719d3
Author: Jeremy Allison <jra at samba.org>
Date: Tue Nov 27 23:40:54 2007 -0800
Remove pstrings from asn1.c.
Jeremy.
commit 71ccd0c42e0ae66172ca5797be3d3a01f4a67a69
Author: Jeremy Allison <jra at samba.org>
Date: Tue Nov 27 23:10:20 2007 -0800
Remove pstrings from namequery.c.
Jeremy.
-----------------------------------------------------------------------
Summary of changes:
source/libsmb/asn1.c | 39 +++++++++++++++++-------
source/libsmb/namequery.c | 71 +++++++++++++++++++++++++++++---------------
2 files changed, 75 insertions(+), 35 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/libsmb/asn1.c b/source/libsmb/asn1.c
index 0cbfa70..99c5b0b 100644
--- a/source/libsmb/asn1.c
+++ b/source/libsmb/asn1.c
@@ -348,22 +348,30 @@ int asn1_tag_remaining(ASN1_DATA *data)
/* read an object ID from a ASN1 buffer */
bool asn1_read_OID(ASN1_DATA *data, char **OID)
{
- uint8 b;
- pstring oid_str;
- fstring el;
+ uint8 b = 0;
+ char *oid_str = NULL;
*OID = NULL;
if (!asn1_start_tag(data, ASN1_OID)) {
- return False;
+ return false;
}
asn1_read_uint8(data, &b);
- oid_str[0] = 0;
- fstr_sprintf(el, "%u", b/40);
- pstrcat(oid_str, el);
- fstr_sprintf(el, " %u", b%40);
- pstrcat(oid_str, el);
+ oid_str = talloc_asprintf(NULL,
+ "%u",
+ b/40);
+ if (!oid_str) {
+ data->has_error = true;
+ goto out;
+ }
+ oid_str = talloc_asprintf_append(oid_str,
+ " %u",
+ b%40);
+ if (!oid_str) {
+ data->has_error = true;
+ goto out;
+ }
while (asn1_tag_remaining(data) > 0) {
unsigned v = 0;
@@ -371,16 +379,25 @@ bool asn1_read_OID(ASN1_DATA *data, char **OID)
asn1_read_uint8(data, &b);
v = (v<<7) | (b&0x7f);
} while (!data->has_error && b & 0x80);
- fstr_sprintf(el, " %u", v);
- pstrcat(oid_str, el);
+ oid_str = talloc_asprintf_append(oid_str,
+ " %u",
+ v);
+ if (!oid_str) {
+ data->has_error = true;
+ goto out;
+ }
}
+ out:
+
asn1_end_tag(data);
if (!data->has_error) {
*OID = SMB_STRDUP(oid_str);
}
+ TALLOC_FREE(oid_str);
+
return !data->has_error;
}
diff --git a/source/libsmb/namequery.c b/source/libsmb/namequery.c
index f4f9f84..71d7096 100644
--- a/source/libsmb/namequery.c
+++ b/source/libsmb/namequery.c
@@ -1421,7 +1421,7 @@ NTSTATUS internal_resolve_name(const char *name,
int *return_count,
const char *resolve_order)
{
- pstring name_resolve_list;
+ const char *name_resolve_list;
fstring tok;
const char *ptr;
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
@@ -1475,9 +1475,9 @@ NTSTATUS internal_resolve_name(const char *name,
}
if (!resolve_order) {
- pstrcpy(name_resolve_list, lp_name_resolve_order());
+ name_resolve_list = lp_name_resolve_order();
} else {
- pstrcpy(name_resolve_list, resolve_order);
+ name_resolve_list = resolve_order;
}
if (!name_resolve_list[0]) {
@@ -1732,20 +1732,25 @@ static NTSTATUS get_dc_list(const char *domain,
enum dc_lookup_type lookup_type,
bool *ordered)
{
- fstring resolve_order;
- char *saf_servername;
- pstring pserver;
+ char *resolve_order = NULL;
+ char *saf_servername = NULL;
+ char *pserver = NULL;
const char *p;
- char *port_str;
+ char *port_str = NULL;
int port;
fstring name;
int num_addresses = 0;
int local_count, i, j;
struct ip_service *return_iplist = NULL;
struct ip_service *auto_ip_list = NULL;
- bool done_auto_lookup = False;
+ bool done_auto_lookup = false;
int auto_count = 0;
NTSTATUS status;
+ TALLOC_CTX *ctx = talloc_init("get_dc_list");
+
+ if (!ctx) {
+ return NT_STATUS_NO_MEMORY;
+ }
*ordered = False;
@@ -1755,23 +1760,31 @@ static NTSTATUS get_dc_list(const char *domain,
are disabled and ads_only is True, then set the string to
NULL. */
- fstrcpy(resolve_order, lp_name_resolve_order());
+ resolve_order = talloc_strdup(ctx, lp_name_resolve_order());
+ if (!resolve_order) {
+ status = NT_STATUS_NO_MEMORY;
+ goto out;
+ }
strlower_m(resolve_order);
if (lookup_type == DC_ADS_ONLY) {
if (strstr( resolve_order, "host")) {
- fstrcpy( resolve_order, "ads");
+ resolve_order = talloc_strdup(ctx, "ads");
/* DNS SRV lookups used by the ads resolver
are already sorted by priority and weight */
*ordered = true;
} else {
- fstrcpy(resolve_order, "NULL");
+ resolve_order = talloc_strdup(ctx, "NULL");
}
} else if (lookup_type == DC_KDC_ONLY) {
/* DNS SRV lookups used by the ads/kdc resolver
are already sorted by priority and weight */
*ordered = true;
- fstrcpy(resolve_order, "kdc");
+ resolve_order = talloc_strdup(ctx, "kdc");
+ }
+ if (!resolve_order) {
+ status = NT_STATUS_NO_MEMORY;
+ goto out;
}
/* fetch the server we have affinity for. Add the
@@ -1780,22 +1793,27 @@ static NTSTATUS get_dc_list(const char *domain,
saf_servername = saf_fetch( domain);
if (strequal(domain, lp_workgroup()) || strequal(domain, lp_realm())) {
- pstr_sprintf(pserver, "%s, %s",
+ pserver = talloc_asprintf(NULL, "%s, %s",
saf_servername ? saf_servername : "",
lp_passwordserver());
} else {
- pstr_sprintf(pserver, "%s, *",
+ pserver = talloc_asprintf(NULL, "%s, *",
saf_servername ? saf_servername : "");
}
- SAFE_FREE( saf_servername );
+ SAFE_FREE(saf_servername);
+ if (!pserver) {
+ status = NT_STATUS_NO_MEMORY;
+ goto out;
+ }
/* if we are starting from scratch, just lookup DOMAIN<0x1c> */
if (!*pserver ) {
DEBUG(10,("get_dc_list: no preferred domain controllers.\n"));
- return internal_resolve_name(domain, 0x1C, sitename, ip_list,
+ status = internal_resolve_name(domain, 0x1C, sitename, ip_list,
count, resolve_order);
+ goto out;
}
DEBUG(3,("get_dc_list: preferred server list: \"%s\"\n", pserver ));
@@ -1831,18 +1849,19 @@ static NTSTATUS get_dc_list(const char *domain,
if ((num_addresses == 0)) {
if (done_auto_lookup) {
DEBUG(4,("get_dc_list: no servers found\n"));
- SAFE_FREE(auto_ip_list);
- return NT_STATUS_NO_LOGON_SERVERS;
+ status = NT_STATUS_NO_LOGON_SERVERS;
+ goto out;
}
- return internal_resolve_name(domain, 0x1C, sitename, ip_list,
+ status = internal_resolve_name(domain, 0x1C, sitename, ip_list,
count, resolve_order);
+ goto out;
}
if ((return_iplist = SMB_MALLOC_ARRAY(struct ip_service,
num_addresses)) == NULL) {
DEBUG(3,("get_dc_list: malloc fail !\n"));
- SAFE_FREE(auto_ip_list);
- return NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
+ goto out;
}
p = pserver;
@@ -1918,8 +1937,6 @@ static NTSTATUS get_dc_list(const char *domain,
}
}
- SAFE_FREE(auto_ip_list);
-
/* need to remove duplicates in the list if we have any
explicit password servers */
@@ -1947,7 +1964,13 @@ static NTSTATUS get_dc_list(const char *domain,
*ip_list = return_iplist;
*count = local_count;
- return ( *count != 0 ? NT_STATUS_OK : NT_STATUS_NO_LOGON_SERVERS );
+ status = ( *count != 0 ? NT_STATUS_OK : NT_STATUS_NO_LOGON_SERVERS );
+
+ out:
+
+ SAFE_FREE(auto_ip_list);
+ TALLOC_FREE(ctx);
+ return status;
}
/*********************************************************************
--
Samba Shared Repository
More information about the samba-cvs
mailing list