[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Thu Jul 16 08:17:02 UTC 2020
The branch, master has been updated
via 8ea51f4135d s3: libsmb: Cleanup - Make ipstr_list_make() talloc rather than malloc.
via 1d712add994 s3: libsmb: Cleanup - Move DEBUG -> DBG_XXX() macros.
via bd205f2a6cc s3: libsmb: Cleanup - make namecache_status_record_key() use talloc.
via 56d5cbe8bf6 s3: libsmb: Cleanup - make namecache_key() use talloc.
via df0e54bea30 s3: libsmb: Cleanup - namecache_store() - use common out.
via 06f0a7e911d s3: libsmb: Cleanup - namecache_store() initialize stack variables.
via 67ea64d27e6 s3: libsmb: Cleanup - move talloc frame out of inner scope.
via be41035127d s3: libsmb: Cleanup modern coding standards. 'True/False' -> 'true/false'.
via c7e8c3d427d s3: lib: Cleanup - make ipstr_list_make() and ipstr_list_parse() private to the only user.
via 2371c45f11c s3: lib: Cleanup - nothing uses ipstr_list_free(). Remove it.
via 527d7df08ee s3: lib: Cleanup - all the ipstr_XXX() functions are only used in namecache.c.
from 0e287127cb8 ctdb-tools: Improve onnode's ShellCheck credibility
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 8ea51f4135d21f0cf70215521818eeb55e7bdbaa
Author: Jeremy Allison <jra at samba.org>
Date: Wed Jul 15 15:02:02 2020 -0700
s3: libsmb: Cleanup - Make ipstr_list_make() talloc rather than malloc.
Remove the excessive and unneeded ipstr_list_add() function,
fold it into ipstr_list_make() to make it much clearer what
we're doing.
The only use of MALLOC now is in ipstr_list_parse() returned
by namecache_fetch(). We need to fix the caller before
we can move that to talloc. As that is used inside internal_resolve_name()
which is designed to return a MALLOC'ed ip list from all
name resolution mechanisms leave that fix for another day.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
Autobuild-User(master): Volker Lendecke <vl at samba.org>
Autobuild-Date(master): Thu Jul 16 08:16:31 UTC 2020 on sn-devel-184
commit 1d712add994f8426a90589788be53c1ce2e54c17
Author: Jeremy Allison <jra at samba.org>
Date: Wed Jul 15 14:41:45 2020 -0700
s3: libsmb: Cleanup - Move DEBUG -> DBG_XXX() macros.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit bd205f2a6cc6ca23bab8eb15d57c16994641d711
Author: Jeremy Allison <jra at samba.org>
Date: Wed Jul 15 14:38:23 2020 -0700
s3: libsmb: Cleanup - make namecache_status_record_key() use talloc.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 56d5cbe8bf6f4cd65b673b7923f955a457f8e0c7
Author: Jeremy Allison <jra at samba.org>
Date: Wed Jul 15 13:37:59 2020 -0700
s3: libsmb: Cleanup - make namecache_key() use talloc.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit df0e54bea307b459433e1fdf9dc547875ee494cc
Author: Jeremy Allison <jra at samba.org>
Date: Wed Jul 15 13:33:27 2020 -0700
s3: libsmb: Cleanup - namecache_store() - use common out.
Prepare for moving malloc values to talloc.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 06f0a7e911da4f3279066f5ffaf4e03d01b354af
Author: Jeremy Allison <jra at samba.org>
Date: Wed Jul 15 13:31:38 2020 -0700
s3: libsmb: Cleanup - namecache_store() initialize stack variables.
Preparing for common out: exit.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 67ea64d27e6ede6993025e9598162f385d2937f7
Author: Jeremy Allison <jra at samba.org>
Date: Wed Jul 15 13:28:33 2020 -0700
s3: libsmb: Cleanup - move talloc frame out of inner scope.
Make it available thoughout the function. Prepare to use
talloc for namecache_key().
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit be41035127d3cc7f8144b10dcbc1894dff4d587f
Author: Jeremy Allison <jra at samba.org>
Date: Wed Jul 15 12:12:23 2020 -0700
s3: libsmb: Cleanup modern coding standards. 'True/False' -> 'true/false'.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit c7e8c3d427d39f275588c495c92f3e2eeca2b832
Author: Jeremy Allison <jra at samba.org>
Date: Wed Jul 15 11:58:45 2020 -0700
s3: lib: Cleanup - make ipstr_list_make() and ipstr_list_parse() private to the only user.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 2371c45f11c91ef16b02d86cdc6f6d4f7624b356
Author: Jeremy Allison <jra at samba.org>
Date: Wed Jul 15 11:48:30 2020 -0700
s3: lib: Cleanup - nothing uses ipstr_list_free(). Remove it.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 527d7df08eef1ab8a3ecbed3e16d4ffcbd93db1c
Author: Jeremy Allison <jra at samba.org>
Date: Wed Jul 15 11:43:03 2020 -0700
s3: lib: Cleanup - all the ipstr_XXX() functions are only used in namecache.c.
Move them there. Will remove from the global namespace next.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/include/proto.h | 5 -
source3/lib/util_str.c | 164 ---------------------------
source3/libsmb/namecache.c | 275 ++++++++++++++++++++++++++++++++++-----------
3 files changed, 212 insertions(+), 232 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 12aa392abae..d349e22aa6b 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -631,11 +631,6 @@ size_t strlen_m_term(const char *s);
size_t strlen_m_term_null(const char *s);
int fstr_sprintf(fstring s, const char *fmt, ...);
-char *ipstr_list_make(char **ipstr_list,
- const struct ip_service *ip_list,
- int ip_count);
-int ipstr_list_parse(const char *ipstr_list, struct ip_service **ip_list);
-void ipstr_list_free(char* ipstr_list);
uint64_t STR_TO_SMB_BIG_UINT(const char *nptr, const char **entptr);
uint64_t conv_str_size(const char * str);
int asprintf_strupper_m(char **strp, const char *fmt, ...)
diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c
index c62cbe16a59..c31667c8821 100644
--- a/source3/lib/util_str.c
+++ b/source3/lib/util_str.c
@@ -560,170 +560,6 @@ int fstr_sprintf(fstring s, const char *fmt, ...)
return ret;
}
-#define IPSTR_LIST_SEP ","
-#define IPSTR_LIST_CHAR ','
-
-/**
- * Add ip string representation to ipstr list. Used also
- * as part of @function ipstr_list_make
- *
- * @param ipstr_list pointer to string containing ip list;
- * MUST BE already allocated and IS reallocated if necessary
- * @param ipstr_size pointer to current size of ipstr_list (might be changed
- * as a result of reallocation)
- * @param ip IP address which is to be added to list
- * @return pointer to string appended with new ip and possibly
- * reallocated to new length
- **/
-
-static char *ipstr_list_add(char **ipstr_list, const struct ip_service *service)
-{
- char *new_ipstr = NULL;
- char addr_buf[INET6_ADDRSTRLEN];
- int ret;
-
- /* arguments checking */
- if (!ipstr_list || !service) {
- return NULL;
- }
-
- print_sockaddr(addr_buf,
- sizeof(addr_buf),
- &service->ss);
-
- /* attempt to convert ip to a string and append colon separator to it */
- if (*ipstr_list) {
- if (service->ss.ss_family == AF_INET) {
- /* IPv4 */
- ret = asprintf(&new_ipstr, "%s%s%s:%d", *ipstr_list,
- IPSTR_LIST_SEP, addr_buf,
- service->port);
- } else {
- /* IPv6 */
- ret = asprintf(&new_ipstr, "%s%s[%s]:%d", *ipstr_list,
- IPSTR_LIST_SEP, addr_buf,
- service->port);
- }
- SAFE_FREE(*ipstr_list);
- } else {
- if (service->ss.ss_family == AF_INET) {
- /* IPv4 */
- ret = asprintf(&new_ipstr, "%s:%d", addr_buf,
- service->port);
- } else {
- /* IPv6 */
- ret = asprintf(&new_ipstr, "[%s]:%d", addr_buf,
- service->port);
- }
- }
- if (ret == -1) {
- return NULL;
- }
- *ipstr_list = new_ipstr;
- return *ipstr_list;
-}
-
-/**
- * Allocate and initialise an ipstr list using ip adresses
- * passed as arguments.
- *
- * @param ipstr_list pointer to string meant to be allocated and set
- * @param ip_list array of ip addresses to place in the list
- * @param ip_count number of addresses stored in ip_list
- * @return pointer to allocated ip string
- **/
-
-char *ipstr_list_make(char **ipstr_list,
- const struct ip_service *ip_list,
- int ip_count)
-{
- int i;
-
- /* arguments checking */
- if (!ip_list || !ipstr_list) {
- return 0;
- }
-
- *ipstr_list = NULL;
-
- /* process ip addresses given as arguments */
- for (i = 0; i < ip_count; i++) {
- *ipstr_list = ipstr_list_add(ipstr_list, &ip_list[i]);
- }
-
- return (*ipstr_list);
-}
-
-
-/**
- * Parse given ip string list into array of ip addresses
- * (as ip_service structures)
- * e.g. [IPv6]:port,192.168.1.100:389,192.168.1.78, ...
- *
- * @param ipstr ip string list to be parsed
- * @param ip_list pointer to array of ip addresses which is
- * allocated by this function and must be freed by caller
- * @return number of successfully parsed addresses
- **/
-
-int ipstr_list_parse(const char *ipstr_list, struct ip_service **ip_list)
-{
- TALLOC_CTX *frame;
- char *token_str = NULL;
- size_t i, count;
-
- if (!ipstr_list || !ip_list)
- return 0;
-
- count = count_chars(ipstr_list, IPSTR_LIST_CHAR) + 1;
- if ( (*ip_list = SMB_MALLOC_ARRAY(struct ip_service, count)) == NULL ) {
- DEBUG(0,("ipstr_list_parse: malloc failed for %lu entries\n",
- (unsigned long)count));
- return 0;
- }
-
- frame = talloc_stackframe();
- for ( i=0; next_token_talloc(frame, &ipstr_list, &token_str,
- IPSTR_LIST_SEP) && i<count; i++ ) {
- char *s = token_str;
- char *p = strrchr(token_str, ':');
-
- if (p) {
- *p = 0;
- (*ip_list)[i].port = atoi(p+1);
- }
-
- /* convert single token to ip address */
- if (token_str[0] == '[') {
- /* IPv6 address. */
- s++;
- p = strchr(token_str, ']');
- if (!p) {
- continue;
- }
- *p = '\0';
- }
- if (!interpret_string_addr(&(*ip_list)[i].ss,
- s,
- AI_NUMERICHOST)) {
- continue;
- }
- }
- TALLOC_FREE(frame);
- return count;
-}
-
-/**
- * Safely free ip string list
- *
- * @param ipstr_list ip string list to be freed
- **/
-
-void ipstr_list_free(char* ipstr_list)
-{
- SAFE_FREE(ipstr_list);
-}
-
/* read a SMB_BIG_UINT from a string */
uint64_t STR_TO_SMB_BIG_UINT(const char *nptr, const char **entptr)
{
diff --git a/source3/libsmb/namecache.c b/source3/libsmb/namecache.c
index 082f256bc02..7f534587263 100644
--- a/source3/libsmb/namecache.c
+++ b/source3/libsmb/namecache.c
@@ -24,6 +24,147 @@
#include "includes.h"
#include "lib/gencache.h"
+#define IPSTR_LIST_SEP ","
+#define IPSTR_LIST_CHAR ','
+
+/**
+ * Allocate and initialise an ipstr list using ip adresses
+ * passed as arguments.
+ *
+ * @param ctx TALLOC_CTX to use
+ * @param ip_list array of ip addresses to place in the list
+ * @param ip_count number of addresses stored in ip_list
+ * @return pointer to allocated ip string
+ **/
+
+static char *ipstr_list_make(TALLOC_CTX *ctx,
+ const struct ip_service *ip_list,
+ int ip_count)
+{
+ char *ipstr_list = NULL;
+ int i;
+
+ /* arguments checking */
+ if (ip_list == NULL) {
+ return NULL;
+ }
+
+ /* process ip addresses given as arguments */
+ for (i = 0; i < ip_count; i++) {
+ char addr_buf[INET6_ADDRSTRLEN];
+ char *new_str = NULL;
+
+ print_sockaddr(addr_buf,
+ sizeof(addr_buf),
+ &ip_list[i].ss);
+
+ if (ip_list->ss.ss_family == AF_INET) {
+ /* IPv4 */
+ new_str = talloc_asprintf(ctx,
+ "%s:%d",
+ addr_buf,
+ ip_list[i].port);
+ } else {
+ /* IPv6 */
+ new_str = talloc_asprintf(ctx,
+ "[%s]:%d",
+ addr_buf,
+ ip_list[i].port);
+ }
+ if (new_str == NULL) {
+ TALLOC_FREE(ipstr_list);
+ return NULL;
+ }
+
+ if (ipstr_list == NULL) {
+ /* First ip address. */
+ ipstr_list = new_str;
+ } else {
+ /*
+ * Append the separator "," and then the new
+ * ip address to the existing list.
+ *
+ * The efficiency here is horrible, but
+ * ip_count should be small enough we can
+ * live with it.
+ */
+ char *tmp = talloc_asprintf(ctx,
+ "%s%s%s",
+ ipstr_list,
+ IPSTR_LIST_SEP,
+ new_str);
+ if (tmp == NULL) {
+ TALLOC_FREE(new_str);
+ TALLOC_FREE(ipstr_list);
+ return NULL;
+ }
+ TALLOC_FREE(new_str);
+ TALLOC_FREE(ipstr_list);
+ ipstr_list = tmp;
+ }
+ }
+
+ return ipstr_list;
+}
+
+/**
+ * Parse given ip string list into array of ip addresses
+ * (as ip_service structures)
+ * e.g. [IPv6]:port,192.168.1.100:389,192.168.1.78, ...
+ *
+ * @param ipstr ip string list to be parsed
+ * @param ip_list pointer to array of ip addresses which is
+ * allocated by this function and must be freed by caller
+ * @return number of successfully parsed addresses
+ **/
+
+static int ipstr_list_parse(const char *ipstr_list, struct ip_service **ip_list)
+{
+ TALLOC_CTX *frame;
+ char *token_str = NULL;
+ size_t i, count;
+
+ if (!ipstr_list || !ip_list)
+ return 0;
+
+ count = count_chars(ipstr_list, IPSTR_LIST_CHAR) + 1;
+ if ( (*ip_list = SMB_MALLOC_ARRAY(struct ip_service, count)) == NULL ) {
+ DBG_ERR("malloc failed for %lu entries\n",
+ (unsigned long)count);
+ return 0;
+ }
+
+ frame = talloc_stackframe();
+ for ( i=0; next_token_talloc(frame, &ipstr_list, &token_str,
+ IPSTR_LIST_SEP) && i<count; i++ ) {
+ char *s = token_str;
+ char *p = strrchr(token_str, ':');
+
+ if (p) {
+ *p = 0;
+ (*ip_list)[i].port = atoi(p+1);
+ }
+
+ /* convert single token to ip address */
+ if (token_str[0] == '[') {
+ /* IPv6 address. */
+ s++;
+ p = strchr(token_str, ']');
+ if (!p) {
+ continue;
+ }
+ *p = '\0';
+ }
+ if (!interpret_string_addr(&(*ip_list)[i].ss,
+ s,
+ AI_NUMERICHOST)) {
+ continue;
+ }
+ }
+ TALLOC_FREE(frame);
+ return count;
+}
+
#define NBTKEY_FMT "NBT/%s#%02X"
/**
@@ -38,13 +179,14 @@
* type number
*/
-static char *namecache_key(const char *name,
- int name_type)
+static char *namecache_key(TALLOC_CTX *ctx,
+ const char *name,
+ int name_type)
{
- char *keystr = NULL;
- asprintf_strupper_m(&keystr, NBTKEY_FMT, name, name_type);
-
- return keystr;
+ return talloc_asprintf_strupper_m(ctx,
+ NBTKEY_FMT,
+ name,
+ name_type);
}
/**
@@ -63,23 +205,25 @@ bool namecache_store(const char *name,
struct ip_service *ip_list)
{
time_t expiry;
- char *key, *value_string;
+ char *key = NULL;
+ char *value_string = NULL;
int i;
- bool ret;
+ bool ret = false;
+ TALLOC_CTX *frame = talloc_stackframe();
if (name_type > 255) {
- return False; /* Don't store non-real name types. */
+ /* Don't store non-real name types. */
+ goto out;
}
if ( DEBUGLEVEL >= 5 ) {
- TALLOC_CTX *ctx = talloc_stackframe();
char *addr = NULL;
- DEBUG(5, ("namecache_store: storing %d address%s for %s#%02x: ",
- num_names, num_names == 1 ? "": "es", name, name_type));
+ DBG_INFO("storing %d address%s for %s#%02x: ",
+ num_names, num_names == 1 ? "": "es", name, name_type);
for (i = 0; i < num_names; i++) {
- addr = print_canonical_sockaddr(ctx,
+ addr = print_canonical_sockaddr(frame,
&ip_list[i].ss);
if (!addr) {
continue;
@@ -89,31 +233,31 @@ bool namecache_store(const char *name,
}
DEBUGADD(5, ("\n"));
- TALLOC_FREE(ctx);
}
- key = namecache_key(name, name_type);
+ key = namecache_key(frame, name, name_type);
if (!key) {
- return False;
+ goto out;
}
expiry = time(NULL) + lp_name_cache_timeout();
/*
* Generate string representation of ip addresses list
- * First, store the number of ip addresses and then
- * place each single ip
*/
- if (!ipstr_list_make(&value_string, ip_list, num_names)) {
- SAFE_FREE(key);
- SAFE_FREE(value_string);
- return false;
+ value_string = ipstr_list_make(frame, ip_list, num_names);
+ if (value_string == NULL) {
+ goto out;
}
/* set the entry */
ret = gencache_set(key, value_string, expiry);
- SAFE_FREE(key);
- SAFE_FREE(value_string);
+
+ out:
+
+ TALLOC_FREE(key);
+ TALLOC_FREE(value_string);
+ TALLOC_FREE(frame);
return ret;
}
@@ -140,11 +284,11 @@ bool namecache_fetch(const char *name,
/* exit now if null pointers were passed as they're required further */
if (!ip_list || !num_names) {
- return False;
+ return false;
}
if (name_type > 255) {
- return False; /* Don't fetch non-real name types. */
+ return false; /* Don't fetch non-real name types. */
}
*num_names = 0;
@@ -152,25 +296,25 @@ bool namecache_fetch(const char *name,
/*
* Use gencache interface - lookup the key
*/
- key = namecache_key(name, name_type);
+ key = namecache_key(talloc_tos(), name, name_type);
if (!key) {
- return False;
+ return false;
}
if (!gencache_get(key, talloc_tos(), &value, &timeout)) {
- DEBUG(5, ("no entry for %s#%02X found.\n", name, name_type));
- SAFE_FREE(key);
- return False;
+ DBG_INFO("no entry for %s#%02X found.\n", name, name_type);
+ TALLOC_FREE(key);
+ return false;
}
- DEBUG(5, ("name %s#%02X found.\n", name, name_type));
+ DBG_INFO("name %s#%02X found.\n", name, name_type);
/*
* Split up the stored value into the list of IP adresses
*/
*num_names = ipstr_list_parse(value, ip_list);
- SAFE_FREE(key);
+ TALLOC_FREE(key);
TALLOC_FREE(value);
return *num_names > 0; /* true only if some ip has been fetched */
@@ -187,15 +331,15 @@ bool namecache_delete(const char *name, int name_type)
char *key;
if (name_type > 255) {
- return False; /* Don't fetch non-real name types. */
+ return false; /* Don't fetch non-real name types. */
}
- key = namecache_key(name, name_type);
+ key = namecache_key(talloc_tos(), name, name_type);
if (!key) {
- return False;
+ return false;
--
Samba Shared Repository
More information about the samba-cvs
mailing list