summaryrefslogtreecommitdiff
path: root/source3/libsmb/namecache.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/libsmb/namecache.c')
-rw-r--r--source3/libsmb/namecache.c53
1 files changed, 21 insertions, 32 deletions
diff --git a/source3/libsmb/namecache.c b/source3/libsmb/namecache.c
index 2252e8e59c..fc09d8eac2 100644
--- a/source3/libsmb/namecache.c
+++ b/source3/libsmb/namecache.c
@@ -29,24 +29,24 @@ static TDB_CONTEXT *namecache_tdb;
struct nc_value {
time_t expiry; /* When entry expires */
int count; /* Number of addresses */
- struct in_addr ip_list[1]; /* Address list */
+ struct in_addr ip_list[0]; /* Address list */
};
/* Initialise namecache system */
-BOOL namecache_enable(void)
+void namecache_enable(void)
{
/* Check if we have been here before, or name caching disabled
by setting the name cache timeout to zero. */
if (done_namecache_init)
- return False;
+ return;
done_namecache_init = True;
if (lp_name_cache_timeout() == 0) {
DEBUG(5, ("namecache_init: disabling netbios name cache\n"));
- return False;
+ return;
}
/* Open namecache tdb in read/write or readonly mode */
@@ -58,15 +58,13 @@ BOOL namecache_enable(void)
if (!namecache_tdb) {
DEBUG(5, ("namecache_init: could not open %s\n",
lock_path("namecache.tdb")));
- return False;
+ return;
}
DEBUG(5, ("namecache_init: enabling netbios namecache, timeout %d "
"seconds\n", lp_name_cache_timeout()));
enable_namecache = True;
-
- return True;
}
/* Return a key for a name and name type. The caller must free
@@ -93,20 +91,17 @@ static TDB_DATA namecache_value(struct in_addr *ip_list, int num_names,
{
TDB_DATA retval;
struct nc_value *value;
- int size = sizeof(struct nc_value);
+ int size;
- if (num_names > 0)
- size += sizeof(struct in_addr) * (num_names-1);
+ size = sizeof(struct nc_value) + sizeof(struct in_addr) *
+ num_names;
value = (struct nc_value *)malloc(size);
-
- memset(value, 0, size);
-
+
value->expiry = expiry;
value->count = num_names;
- if (ip_list)
- memcpy(value->ip_list, ip_list, sizeof(struct in_addr) * num_names);
+ memcpy(value->ip_list, ip_list, num_names * sizeof(struct in_addr));
retval.dptr = (char *)value;
retval.dsize = size;
@@ -165,9 +160,6 @@ BOOL namecache_fetch(const char *name, int name_type, struct in_addr **ip_list,
time_t now;
int i;
- *ip_list = NULL;
- *num_names = 0;
-
if (!enable_namecache)
return False;
@@ -217,23 +209,20 @@ BOOL namecache_fetch(const char *name, int name_type, struct in_addr **ip_list,
/* Extract and return namelist */
- DEBUG(5, ("namecache_fetch: returning %d address%s for %s#%02x: ",
- data->count, data->count == 1 ? "" : "es", name, name_type));
+ *ip_list = (struct in_addr *)malloc(
+ sizeof(struct in_addr) * data->count);
+
+ memcpy(*ip_list, data->ip_list, sizeof(struct in_addr) *
+ data->count);
- if (data->count) {
+ *num_names = data->count;
- *ip_list = (struct in_addr *)malloc(
- sizeof(struct in_addr) * data->count);
-
- memcpy(*ip_list, data->ip_list, sizeof(struct in_addr) * data->count);
-
- *num_names = data->count;
-
- for (i = 0; i < *num_names; i++)
- DEBUGADD(5, ("%s%s", inet_ntoa((*ip_list)[i]),
- i == (*num_names - 1) ? "" : ", "));
+ DEBUG(5, ("namecache_fetch: returning %d address%s for %s#%02x: ",
+ *num_names, *num_names == 1 ? "" : "es", name, name_type));
- }
+ for (i = 0; i < *num_names; i++)
+ DEBUGADD(5, ("%s%s", inet_ntoa((*ip_list)[i]),
+ i == (*num_names - 1) ? "" : ", "));
DEBUGADD(5, ("\n"));