summaryrefslogtreecommitdiff
path: root/source3/rpc_server
diff options
context:
space:
mode:
authorRalph Boehme <slow@samba.org>2018-11-16 14:24:35 +0100
committerJeremy Allison <jra@samba.org>2019-08-08 20:24:31 +0000
commitf58026b30b2bf9d60222d39947d07ee858ee5756 (patch)
tree087cbefa3f00fef6fe0c82abff2778e4fd73e4b3 /source3/rpc_server
parentb5731a94bbc95fa001059d488a2c16a988127619 (diff)
downloadsamba-f58026b30b2bf9d60222d39947d07ee858ee5756.tar.gz
s3:mdssvc: mds_dalloc_dump() -> dalloc_dump()
Move mds_dalloc_dump() to dalloc and rename it to dalloc_dump(). Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/rpc_server')
-rw-r--r--source3/rpc_server/mdssvc/dalloc.c171
-rw-r--r--source3/rpc_server/mdssvc/dalloc.h2
-rw-r--r--source3/rpc_server/mdssvc/mdssvc.c173
-rw-r--r--source3/rpc_server/mdssvc/mdssvc.h1
4 files changed, 176 insertions, 171 deletions
diff --git a/source3/rpc_server/mdssvc/dalloc.c b/source3/rpc_server/mdssvc/dalloc.c
index 28944b809f1..23193fee70a 100644
--- a/source3/rpc_server/mdssvc/dalloc.c
+++ b/source3/rpc_server/mdssvc/dalloc.c
@@ -18,6 +18,10 @@
#include "replace.h"
#include <talloc.h>
#include "dalloc.h"
+#include "marshalling.h"
+#include "lib/util/charset/charset.h"
+#include "lib/util/talloc_stack.h"
+#include "system/time.h"
/**
* Dynamic Datastore
@@ -230,3 +234,170 @@ int dalloc_stradd(DALLOC_CTX *d, const char *string)
return 0;
}
+
+static char *tab_level(TALLOC_CTX *mem_ctx, int level)
+{
+ int i;
+ char *string = talloc_array(mem_ctx, char, level + 1);
+
+ for (i = 0; i < level; i++) {
+ string[i] = '\t';
+ }
+
+ string[i] = '\0';
+ return string;
+}
+
+char *dalloc_dump(DALLOC_CTX *dd, int nestinglevel)
+{
+ const char *type;
+ int n, result;
+ uint64_t i;
+ sl_bool_t bl;
+ sl_time_t t;
+ struct tm *tm;
+ char datestring[256];
+ sl_cnids_t cnids;
+ char *logstring, *nested_logstring;
+ char *tab_string1, *tab_string2;
+ void *p;
+ bool ok;
+ char *utf8string;
+ size_t utf8len;
+
+ tab_string1 = tab_level(dd, nestinglevel);
+ if (tab_string1 == NULL) {
+ return NULL;
+ }
+ tab_string2 = tab_level(dd, nestinglevel + 1);
+ if (tab_string2 == NULL) {
+ return NULL;
+ }
+
+ logstring = talloc_asprintf(dd,
+ "%s%s(#%lu): {\n",
+ tab_string1,
+ talloc_get_name(dd),
+ dalloc_size(dd));
+ if (logstring == NULL) {
+ return NULL;
+ }
+
+ for (n = 0; n < dalloc_size(dd); n++) {
+ type = dalloc_get_name(dd, n);
+ if (type == NULL) {
+ return NULL;
+ }
+ p = dalloc_get_object(dd, n);
+ if (p == NULL) {
+ return NULL;
+ }
+ if (strcmp(type, "DALLOC_CTX") == 0
+ || strcmp(type, "sl_array_t") == 0
+ || strcmp(type, "sl_filemeta_t") == 0
+ || strcmp(type, "sl_dict_t") == 0) {
+ nested_logstring = dalloc_dump(p, nestinglevel + 1);
+ if (nested_logstring == NULL) {
+ return NULL;
+ }
+ logstring = talloc_strdup_append(logstring,
+ nested_logstring);
+ } else if (strcmp(type, "uint64_t") == 0) {
+ memcpy(&i, p, sizeof(uint64_t));
+ logstring = talloc_asprintf_append(
+ logstring,
+ "%suint64_t: 0x%04jx\n",
+ tab_string2, (uintmax_t)i);
+ } else if (strcmp(type, "char *") == 0) {
+ logstring = talloc_asprintf_append(
+ logstring,
+ "%sstring: %s\n",
+ tab_string2,
+ (char *)p);
+ } else if (strcmp(type, "smb_ucs2_t *") == 0) {
+ ok = convert_string_talloc(talloc_tos(),
+ CH_UTF16LE,
+ CH_UTF8,
+ p,
+ talloc_get_size(p),
+ &utf8string,
+ &utf8len);
+ if (!ok) {
+ return NULL;
+ }
+ logstring = talloc_asprintf_append(
+ logstring,
+ "%sUTF16-string: %s\n",
+ tab_string2,
+ utf8string);
+ TALLOC_FREE(utf8string);
+ } else if (strcmp(type, "sl_bool_t") == 0) {
+ memcpy(&bl, p, sizeof(sl_bool_t));
+ logstring = talloc_asprintf_append(
+ logstring,
+ "%sbool: %s\n",
+ tab_string2,
+ bl ? "true" : "false");
+ } else if (strcmp(type, "sl_nil_t") == 0) {
+ logstring = talloc_asprintf_append(
+ logstring,
+ "%snil\n",
+ tab_string2);
+ } else if (strcmp(type, "sl_time_t") == 0) {
+ memcpy(&t, p, sizeof(sl_time_t));
+ tm = localtime(&t.tv_sec);
+ if (tm == NULL) {
+ return NULL;
+ }
+ result = strftime(datestring,
+ sizeof(datestring),
+ "%Y-%m-%d %H:%M:%S", tm);
+ if (result == 0) {
+ return NULL;
+ }
+ logstring = talloc_asprintf_append(
+ logstring,
+ "%ssl_time_t: %s.%06lu\n",
+ tab_string2,
+ datestring,
+ (unsigned long)t.tv_usec);
+ } else if (strcmp(type, "sl_cnids_t") == 0) {
+ memcpy(&cnids, p, sizeof(sl_cnids_t));
+ logstring = talloc_asprintf_append(
+ logstring,
+ "%sCNIDs: unkn1: 0x%" PRIx16 ", unkn2: 0x%" PRIx32 "\n",
+ tab_string2,
+ cnids.ca_unkn1,
+ cnids.ca_context);
+ if (logstring == NULL) {
+ return NULL;
+ }
+ if (cnids.ca_cnids) {
+ nested_logstring = dalloc_dump(
+ cnids.ca_cnids,
+ nestinglevel + 2);
+ if (!nested_logstring) {
+ return NULL;
+ }
+ logstring = talloc_strdup_append(logstring,
+ nested_logstring);
+ }
+ } else {
+ logstring = talloc_asprintf_append(
+ logstring,
+ "%stype: %s\n",
+ tab_string2,
+ type);
+ }
+ if (logstring == NULL) {
+ return NULL;
+ }
+ }
+ logstring = talloc_asprintf_append(logstring,
+ "%s}\n",
+ tab_string1);
+ if (logstring == NULL) {
+ return NULL;
+ }
+ return logstring;
+}
diff --git a/source3/rpc_server/mdssvc/dalloc.h b/source3/rpc_server/mdssvc/dalloc.h
index b268893160b..69650b8a7a0 100644
--- a/source3/rpc_server/mdssvc/dalloc.h
+++ b/source3/rpc_server/mdssvc/dalloc.h
@@ -160,4 +160,6 @@ extern int dalloc_stradd(DALLOC_CTX *d, const char *string);
extern void *_dalloc_new(TALLOC_CTX *mem_ctx, const char *type);
extern int _dalloc_add_talloc_chunk(DALLOC_CTX *d, void *obj, const char *type, size_t size);
+extern char *dalloc_dump(DALLOC_CTX *dd, int nestinglevel);
+
#endif /* DALLOC_H */
diff --git a/source3/rpc_server/mdssvc/mdssvc.c b/source3/rpc_server/mdssvc/mdssvc.c
index 2090841d8be..514672f2d76 100644
--- a/source3/rpc_server/mdssvc/mdssvc.c
+++ b/source3/rpc_server/mdssvc/mdssvc.c
@@ -79,173 +79,6 @@ static bool slrpc_close_query(struct mds_ctx *mds_ctx,
* Misc utility functions
************************************************/
-static char *tab_level(TALLOC_CTX *mem_ctx, int level)
-{
- int i;
- char *string = talloc_array(mem_ctx, char, level + 1);
-
- for (i = 0; i < level; i++) {
- string[i] = '\t';
- }
-
- string[i] = '\0';
- return string;
-}
-
-char *mds_dalloc_dump(DALLOC_CTX *dd, int nestinglevel)
-{
- const char *type;
- int n, result;
- uint64_t i;
- sl_bool_t bl;
- sl_time_t t;
- struct tm *tm;
- char datestring[256];
- sl_cnids_t cnids;
- char *logstring, *nested_logstring;
- char *tab_string1, *tab_string2;
- void *p;
- bool ok;
- char *utf8string;
- size_t utf8len;
-
- tab_string1 = tab_level(dd, nestinglevel);
- if (tab_string1 == NULL) {
- return NULL;
- }
- tab_string2 = tab_level(dd, nestinglevel + 1);
- if (tab_string2 == NULL) {
- return NULL;
- }
-
- logstring = talloc_asprintf(dd,
- "%s%s(#%lu): {\n",
- tab_string1,
- talloc_get_name(dd),
- dalloc_size(dd));
- if (logstring == NULL) {
- return NULL;
- }
-
- for (n = 0; n < dalloc_size(dd); n++) {
- type = dalloc_get_name(dd, n);
- if (type == NULL) {
- return NULL;
- }
- p = dalloc_get_object(dd, n);
- if (p == NULL) {
- return NULL;
- }
- if (strcmp(type, "DALLOC_CTX") == 0
- || strcmp(type, "sl_array_t") == 0
- || strcmp(type, "sl_filemeta_t") == 0
- || strcmp(type, "sl_dict_t") == 0) {
- nested_logstring = mds_dalloc_dump(p, nestinglevel + 1);
- if (nested_logstring == NULL) {
- return NULL;
- }
- logstring = talloc_strdup_append(logstring,
- nested_logstring);
- } else if (strcmp(type, "uint64_t") == 0) {
- memcpy(&i, p, sizeof(uint64_t));
- logstring = talloc_asprintf_append(
- logstring,
- "%suint64_t: 0x%04jx\n",
- tab_string2, (uintmax_t)i);
- } else if (strcmp(type, "char *") == 0) {
- logstring = talloc_asprintf_append(
- logstring,
- "%sstring: %s\n",
- tab_string2,
- (char *)p);
- } else if (strcmp(type, "smb_ucs2_t *") == 0) {
- ok = convert_string_talloc(talloc_tos(),
- CH_UTF16LE,
- CH_UTF8,
- p,
- talloc_get_size(p),
- &utf8string,
- &utf8len);
- if (!ok) {
- return NULL;
- }
- logstring = talloc_asprintf_append(
- logstring,
- "%sUTF16-string: %s\n",
- tab_string2,
- utf8string);
- TALLOC_FREE(utf8string);
- } else if (strcmp(type, "sl_bool_t") == 0) {
- memcpy(&bl, p, sizeof(sl_bool_t));
- logstring = talloc_asprintf_append(
- logstring,
- "%sbool: %s\n",
- tab_string2,
- bl ? "true" : "false");
- } else if (strcmp(type, "sl_nil_t") == 0) {
- logstring = talloc_asprintf_append(
- logstring,
- "%snil\n",
- tab_string2);
- } else if (strcmp(type, "sl_time_t") == 0) {
- memcpy(&t, p, sizeof(sl_time_t));
- tm = localtime(&t.tv_sec);
- if (tm == NULL) {
- return NULL;
- }
- result = strftime(datestring,
- sizeof(datestring),
- "%Y-%m-%d %H:%M:%S", tm);
- if (result == 0) {
- return NULL;
- }
- logstring = talloc_asprintf_append(
- logstring,
- "%ssl_time_t: %s.%06lu\n",
- tab_string2,
- datestring,
- (unsigned long)t.tv_usec);
- } else if (strcmp(type, "sl_cnids_t") == 0) {
- memcpy(&cnids, p, sizeof(sl_cnids_t));
- logstring = talloc_asprintf_append(
- logstring,
- "%sCNIDs: unkn1: 0x%" PRIx16 ", unkn2: 0x%" PRIx32 "\n",
- tab_string2,
- cnids.ca_unkn1,
- cnids.ca_context);
- if (logstring == NULL) {
- return NULL;
- }
- if (cnids.ca_cnids) {
- nested_logstring = mds_dalloc_dump(
- cnids.ca_cnids,
- nestinglevel + 2);
- if (!nested_logstring) {
- return NULL;
- }
- logstring = talloc_strdup_append(logstring,
- nested_logstring);
- }
- } else {
- logstring = talloc_asprintf_append(
- logstring,
- "%stype: %s\n",
- tab_string2,
- type);
- }
- if (logstring == NULL) {
- return NULL;
- }
- }
- logstring = talloc_asprintf_append(logstring,
- "%s}\n",
- tab_string1);
- if (logstring == NULL) {
- return NULL;
- }
- return logstring;
-}
-
/**
* Add requested metadata for a query result element
*
@@ -1071,7 +904,7 @@ static bool slrpc_open_query(struct mds_ctx *mds_ctx,
}
slq->reqinfo = talloc_steal(slq, reqinfo);
- DEBUG(10, ("requested attributes: %s", mds_dalloc_dump(reqinfo, 0)));
+ DEBUG(10, ("requested attributes: %s", dalloc_dump(reqinfo, 0)));
cnids = dalloc_value_for_key(query, "DALLOC_CTX", 0,
"DALLOC_CTX", 1, "kMDQueryItemArray");
@@ -1793,7 +1626,7 @@ bool mds_dispatch(struct mds_ctx *mds_ctx,
goto cleanup;
}
- DEBUG(5, ("%s", mds_dalloc_dump(query, 0)));
+ DEBUG(5, ("%s", dalloc_dump(query, 0)));
rpccmd = dalloc_get(query, "DALLOC_CTX", 0, "DALLOC_CTX", 0,
"char *", 0);
@@ -1823,7 +1656,7 @@ bool mds_dispatch(struct mds_ctx *mds_ctx,
goto cleanup;
}
- DEBUG(5, ("%s", mds_dalloc_dump(reply, 0)));
+ DEBUG(5, ("%s", dalloc_dump(reply, 0)));
len = sl_pack(reply, (char *)response_blob->spotlight_blob,
response_blob->size);
diff --git a/source3/rpc_server/mdssvc/mdssvc.h b/source3/rpc_server/mdssvc/mdssvc.h
index 6836e65ea06..361ca044fd2 100644
--- a/source3/rpc_server/mdssvc/mdssvc.h
+++ b/source3/rpc_server/mdssvc/mdssvc.h
@@ -158,7 +158,6 @@ struct mds_ctx *mds_init_ctx(TALLOC_CTX *mem_ctx,
extern bool mds_dispatch(struct mds_ctx *query_ctx,
struct mdssvc_blob *request_blob,
struct mdssvc_blob *response_blob);
-extern char *mds_dalloc_dump(DALLOC_CTX *dd, int nestinglevel);
bool mds_add_result(struct sl_query *slq, const char *path);
#endif /* _MDSSVC_H */