net: Parse namemap_cache in "net cache list"
authorVolker Lendecke <vl@samba.org>
Thu, 3 Aug 2017 14:26:04 +0000 (16:26 +0200)
committerRalph Boehme <slow@samba.org>
Wed, 29 Nov 2017 15:59:16 +0000 (16:59 +0100)
namemap_cache.c saves these as strv lists: An array of 0-terminated strings.
"net cache list" only printfs the values, so they would be cut off.

We might want to do this with other gencache values too in the future.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/utils/net_cache.c

index f43eb0e88c69ead16c8ba4dd5c6498b2715fed0a..8f9f69f8659a066b66d2bd328c14d5e3af33f756 100644 (file)
@@ -23,6 +23,7 @@
 #include "../librpc/gen_ndr/netlogon.h"
 #include "../librpc/gen_ndr/ndr_netlogon.h"
 #include "libcli/security/dom_sid.h"
+#include "lib/util/strv.h"
 
 /**
  * @file net_cache.c
@@ -77,6 +78,24 @@ static void print_cache_entry(const char* keystr, DATA_BLOB value,
 
        datastr = (char *)value.data;
 
+       if (strnequal(keystr, "NAME2SID/", strlen("NAME2SID/"))) {
+               const char *strv = (char *)value.data;
+               size_t strv_len = value.length;
+               const char *sid = strv_len_next(strv, strv_len, NULL);
+               const char *type = strv_len_next(strv, strv_len, sid);
+               datastr = talloc_asprintf(talloc_tos(), "%s (%s)", sid, type);
+       }
+
+       if (strnequal(keystr, "SID2NAME/", strlen("SID2NAME/"))) {
+               const char *strv = (char *)value.data;
+               size_t strv_len = value.length;
+               const char *domain = strv_len_next(strv, strv_len, NULL);
+               const char *name = strv_len_next(strv, strv_len, domain);
+               const char *type = strv_len_next(strv, strv_len, name);
+               datastr = talloc_asprintf(talloc_tos(), "%s\\%s (%s)",
+                                         domain, name, type);
+       }
+
        if ((value.length > 0) && (value.data[value.length-1] != '\0')) {
                datastr_free = talloc_asprintf(
                        talloc_tos(), "<binary length %d>",