summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Leighton <lkcl@samba.org>1999-02-16 18:02:50 +0000
committerLuke Leighton <lkcl@samba.org>1999-02-16 18:02:50 +0000
commit78314c2e327ccd67e75dbc92be497ff2852b1817 (patch)
treef48dab8e76aa4d15912340579aa1c291a7963fa8
parent2737f26ad64ee32d6ef7365dcce0a3eb881f99db (diff)
downloadsamba-78314c2e327ccd67e75dbc92be497ff2852b1817.tar.gz
samba-78314c2e327ccd67e75dbc92be497ff2852b1817.tar.bz2
samba-78314c2e327ccd67e75dbc92be497ff2852b1817.zip
bitmap to strings
(This used to be commit ba5919bcaefa792bae503c7ab19d4b7bbf9bb954)
-rw-r--r--source3/lib/util_str.c70
-rw-r--r--source3/rpcclient/display.c30
2 files changed, 84 insertions, 16 deletions
diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c
index a55d4cd8dc..31dc9bfd62 100644
--- a/source3/lib/util_str.c
+++ b/source3/lib/util_str.c
@@ -1089,3 +1089,73 @@ void split_at_last_component(char *path, char *front, char sep, char *back)
}
}
}
+
+/****************************************************************************
+convert a bit field to a string. if you want multiple bits to be detected
+set them first, e.g SV_TYPE_ALL to be "All" or "Full Control" for ACB_INFOs.
+
+strings are expected to contain their own separators, although the code
+below only assumes that separators are spaces.
+
+****************************************************************************/
+char *bit_field_to_str(uint32 type, struct field_info *bs)
+{
+ static fstring typestr;
+ int i = 0;
+
+ typestr[0] = 0;
+
+ if (type == 0 || bs == NULL)
+ {
+ return NULL;
+ }
+
+ while (bs[i].str != NULL && type != 0)
+ {
+ if (IS_BITS_SET_ALL(bs[i].bits, type))
+ {
+ fstrcat(typestr, bs[i].str);
+ type &= ~bs[i].bits;
+ }
+ i++;
+ }
+
+ i = strlen(typestr)-1;
+ if (i > 0 && typestr[i] == ' ')
+ {
+ typestr[i] = 0;
+ }
+
+ return typestr;
+}
+
+/****************************************************************************
+convert an enumeration to a string. first item is the default.
+****************************************************************************/
+char *enum_field_to_str(uint32 type, struct field_info *bs, BOOL first_default)
+{
+ int i = 0;
+
+ if (bs == NULL)
+ {
+ return NULL;
+ }
+
+ while (bs[i].str != NULL && type != 0)
+ {
+ if (bs[i].bits == type)
+ {
+ return bs[i].str;
+ }
+ i++;
+ }
+
+ /* oops - none found */
+
+ if (first_default)
+ {
+ return bs[0].str;
+ }
+
+ return NULL;
+}
diff --git a/source3/rpcclient/display.c b/source3/rpcclient/display.c
index 0bfed9eba3..ce464a72e6 100644
--- a/source3/rpcclient/display.c
+++ b/source3/rpcclient/display.c
@@ -23,27 +23,25 @@
#include "includes.h"
+struct field_info sid_name_info[] =
+{
+ { SID_NAME_UNKNOWN, "UNKNOWN" }, /* default */
+ { SID_NAME_USER , "User" },
+ { SID_NAME_DOM_GRP, "Domain Group" },
+ { SID_NAME_DOMAIN , "Domain" },
+ { SID_NAME_ALIAS , "Local Group" },
+ { SID_NAME_WKN_GRP, "Well-known Group"},
+ { SID_NAME_DELETED, "Deleted" },
+ { SID_NAME_INVALID, "Invalid" },
+ { 0 , NULL }
+};
+
/****************************************************************************
convert a SID_NAME_USE to a string
****************************************************************************/
char *get_sid_name_use_str(uint8 sid_name_use)
{
- static fstring type;
-
- switch (sid_name_use)
- {
- case SID_NAME_USER : fstrcpy(type, "User" ); break;
- case SID_NAME_DOM_GRP : fstrcpy(type, "Domain Group" ); break;
- case SID_NAME_DOMAIN : fstrcpy(type, "Domain" ); break;
- case SID_NAME_ALIAS : fstrcpy(type, "Local Group" ); break;
- case SID_NAME_WKN_GRP : fstrcpy(type, "Well-known Group"); break;
- case SID_NAME_DELETED : fstrcpy(type, "Deleted" ); break;
- case SID_NAME_INVALID : fstrcpy(type, "Invalid" ); break;
- case SID_NAME_UNKNOWN :
- default : fstrcpy(type, "UNKNOWN" ); break;
- }
-
- return type;
+ return enum_field_to_str((uint32)sid_name_use, sid_name_info, True);
}
/****************************************************************************