static NTSTATUS cmd_lsa_enum_privilege(struct cli_state *cli, TALLOC_CTX *mem_ctx, int argc, char **argv) { POLICY_HND pol; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; uint32 enum_context=0; uint32 pref_max_length=0x1000; uint32 count=0; char **privs_name; uint32 *privs_high; uint32 *privs_low; int i; if (argc > 3) { printf("Usage: %s [enum context] [max length]\n", argv[0]); return NT_STATUS_OK; } if (argc>=2) enum_context=atoi(argv[1]); if (argc==3) pref_max_length=atoi(argv[2]); result = cli_lsa_open_policy(cli, mem_ctx, True, SEC_RIGHTS_MAXIMUM_ALLOWED, &pol); if (!NT_STATUS_IS_OK(result)) goto done; result = cli_lsa_enum_privilege(cli, mem_ctx, &pol, &enum_context, pref_max_length, &count, &privs_name, &privs_high, &privs_low); if (!NT_STATUS_IS_OK(result)) goto done; /* Print results */ printf("found %d privileges\n\n", count); for (i = 0; i < count; i++) { printf("%s \t\t%d:%d (0x%x:0x%x)\n", privs_name[i] ? privs_name[i] : "*unknown*", privs_high[i], privs_low[i], privs_high[i], privs_low[i]); } done: return result; }
static NTSTATUS enum_privileges( TALLOC_CTX *ctx, struct cli_state *cli, POLICY_HND *pol ) { NTSTATUS result; uint32 enum_context = 0; uint32 pref_max_length=0x1000; uint32 count=0; char **privs_name; uint32 *privs_high; uint32 *privs_low; int i; uint16 lang_id=0; uint16 lang_id_sys=0; uint16 lang_id_desc; fstring description; result = cli_lsa_enum_privilege(cli, ctx, pol, &enum_context, pref_max_length, &count, &privs_name, &privs_high, &privs_low); if ( !NT_STATUS_IS_OK(result) ) return result; /* Print results */ for (i = 0; i < count; i++) { d_printf("%30s ", privs_name[i] ? privs_name[i] : "*unknown*" ); /* try to get the description */ if ( !NT_STATUS_IS_OK(cli_lsa_get_dispname(cli, ctx, pol, privs_name[i], lang_id, lang_id_sys, description, &lang_id_desc)) ) { d_printf("??????\n"); continue; } d_printf("%s\n", description ); } return NT_STATUS_OK; }