static NTSTATUS cmd_lsa_get_dispname(struct cli_state *cli, TALLOC_CTX *mem_ctx, int argc, char **argv) { POLICY_HND pol; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; uint16 lang_id=0; uint16 lang_id_sys=0; uint16 lang_id_desc; fstring description; if (argc != 2) { printf("Usage: %s privilege name\n", argv[0]); return NT_STATUS_OK; } 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_get_dispname(cli, mem_ctx, &pol, argv[1], lang_id, lang_id_sys, description, &lang_id_desc); if (!NT_STATUS_IS_OK(result)) goto done; /* Print results */ printf("%s -> %s (language: 0x%x)\n", argv[1], description, lang_id_desc); 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; }