r23784: use the GPLv3 boilerplate as recommended by the FSF and the license text
[abartlet/samba.git/.git] / source3 / rpcclient / cmd_lsarpc.c
index e94b4bc7a68cb7594fbff0ee55396258775bcec2..3f4117ffbe53fe29e45dc871eaeb23d80d48db8d 100644 (file)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,8 +16,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
@@ -47,7 +46,7 @@ static NTSTATUS name_to_sid(struct rpc_pipe_client *cli,
        if (!NT_STATUS_IS_OK(result))
                goto done;
 
-       result = rpccli_lsa_lookup_names(cli, mem_ctx, &pol, 1, &name, NULL, &sids, &sid_types);
+       result = rpccli_lsa_lookup_names(cli, mem_ctx, &pol, 1, &name, NULL, 1, &sids, &sid_types);
        if (!NT_STATUS_IS_OK(result))
                goto done;
 
@@ -63,9 +62,9 @@ static void display_query_info_1(DOM_QUERY_1 d)
 {
        d_printf("percent_full:\t%d\n", d.percent_full);
        d_printf("log_size:\t%d\n", d.log_size);
-       d_printf("retention_time:\t%lld\n", d.retention_time);
+       d_printf("retention_time:\t%lld\n", (long long)d.retention_time);
        d_printf("shutdown_in_progress:\t%d\n", d.shutdown_in_progress);
-       d_printf("time_to_shutdown:\t%lld\n", d.time_to_shutdown);
+       d_printf("time_to_shutdown:\t%lld\n", (long long)d.time_to_shutdown);
        d_printf("next_audit_record:\t%d\n", d.next_audit_record);
        d_printf("unknown:\t%d\n", d.unknown);
 }
@@ -239,7 +238,7 @@ static NTSTATUS cmd_lsa_lookup_names(struct rpc_pipe_client *cli,
                goto done;
 
        result = rpccli_lsa_lookup_names(cli, mem_ctx, &pol, argc - 1, 
-                                     (const char**)(argv + 1), NULL, &sids, &types);
+                                     (const char**)(argv + 1), NULL, 1, &sids, &types);
 
        if (!NT_STATUS_IS_OK(result) && NT_STATUS_V(result) != 
            NT_STATUS_V(STATUS_SOME_UNMAPPED))
@@ -262,6 +261,57 @@ static NTSTATUS cmd_lsa_lookup_names(struct rpc_pipe_client *cli,
        return result;
 }
 
+/* Resolve a list of names to a list of sids */
+
+static NTSTATUS cmd_lsa_lookup_names_level(struct rpc_pipe_client *cli, 
+                                          TALLOC_CTX *mem_ctx, int argc, 
+                                          const char **argv)
+{
+       POLICY_HND pol;
+       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+       DOM_SID *sids;
+       enum lsa_SidType *types;
+       int i, level;
+
+       if (argc < 3) {
+               printf("Usage: %s [level] [name1 [name2 [...]]]\n", argv[0]);
+               return NT_STATUS_OK;
+       }
+
+       result = rpccli_lsa_open_policy(cli, mem_ctx, True, 
+                                    SEC_RIGHTS_MAXIMUM_ALLOWED,
+                                    &pol);
+
+       if (!NT_STATUS_IS_OK(result))
+               goto done;
+
+       level = atoi(argv[1]);
+
+       result = rpccli_lsa_lookup_names(cli, mem_ctx, &pol, argc - 2, 
+                                     (const char**)(argv + 2), NULL, level, &sids, &types);
+
+       if (!NT_STATUS_IS_OK(result) && NT_STATUS_V(result) != 
+           NT_STATUS_V(STATUS_SOME_UNMAPPED))
+               goto done;
+
+       result = NT_STATUS_OK;
+
+       /* Print results */
+
+       for (i = 0; i < (argc - 2); i++) {
+               fstring sid_str;
+               sid_to_string(sid_str, &sids[i]);
+               printf("%s %s (%s: %d)\n", argv[i + 2], sid_str,
+                      sid_type_lookup(types[i]), types[i]);
+       }
+
+       rpccli_lsa_Close(cli, mem_ctx, &pol);
+
+ done:
+       return result;
+}
+
+
 /* Resolve a list of SIDs to a list of names */
 
 static NTSTATUS cmd_lsa_lookup_sids(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
@@ -1047,6 +1097,7 @@ struct cmd_set lsarpc_commands[] = {
        { "lsaquery",            RPC_RTYPE_NTSTATUS, cmd_lsa_query_info_policy,  NULL, PI_LSARPC, NULL, "Query info policy",                    "" },
        { "lookupsids",          RPC_RTYPE_NTSTATUS, cmd_lsa_lookup_sids,        NULL, PI_LSARPC, NULL, "Convert SIDs to names",                "" },
        { "lookupnames",         RPC_RTYPE_NTSTATUS, cmd_lsa_lookup_names,       NULL, PI_LSARPC, NULL, "Convert names to SIDs",                "" },
+       { "lookupnames_level",   RPC_RTYPE_NTSTATUS, cmd_lsa_lookup_names_level, NULL, PI_LSARPC, NULL, "Convert names to SIDs",                "" },
        { "enumtrust",           RPC_RTYPE_NTSTATUS, cmd_lsa_enum_trust_dom,     NULL, PI_LSARPC, NULL, "Enumerate trusted domains",            "Usage: [preferred max number] [enum context (0)]" },
        { "enumprivs",           RPC_RTYPE_NTSTATUS, cmd_lsa_enum_privilege,     NULL, PI_LSARPC, NULL, "Enumerate privileges",                 "" },
        { "getdispname",         RPC_RTYPE_NTSTATUS, cmd_lsa_get_dispname,       NULL, PI_LSARPC, NULL, "Get the privilege name",               "" },