s3:mdssvc: mds_dalloc_dump() -> dalloc_dump()
authorRalph Boehme <slow@samba.org>
Fri, 16 Nov 2018 13:24:35 +0000 (14:24 +0100)
committerJeremy Allison <jra@samba.org>
Thu, 8 Aug 2019 20:24:31 +0000 (20:24 +0000)
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>
source3/rpc_server/mdssvc/dalloc.c
source3/rpc_server/mdssvc/dalloc.h
source3/rpc_server/mdssvc/mdssvc.c
source3/rpc_server/mdssvc/mdssvc.h

index 28944b809f158c1103f6e043ad03b0a433186a1f..23193fee70a3ac04dc18108794c40c126c10c5a7 100644 (file)
 #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;
+}
index b268893160bc70224669abb6f97a68d42d010ed3..69650b8a7a0492f10d936f1104f11faba3cff9d0 100644 (file)
@@ -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 */
index 2090841d8be5409509ac27fb60761a44ebd17cac..514672f2d76d4c454c2d91e9b9dce857d708d9b0 100644 (file)
@@ -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);
index 6836e65ea0654242e4d8269531ee147060562b8d..361ca044fd2dcfb033c149021c3fc71ce76b6650 100644 (file)
@@ -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 */