2 Unix SMB/Netbios implementation.
4 NT Domain Authentication SMB / MSRPC client
5 Copyright (C) Andrew Tridgell 1994-1997
6 Copyright (C) Luke Kenneth Casson Leighton 1996-1997
7 Copyright (C) Simo Sorce 2001
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
38 * [HKLM]|[HKU]\[parent_keyname_components]\[subkey]|[value]
40 * reg_getsubkey() splits this down into:
41 * [HKLM]|[HKU]\[parent_keyname_components] and [subkey]|[value]
43 * do_reg_connect() splits the left side down further into:
44 * [HKLM]|[HKU] and [parent_keyname_components].
46 * HKLM is short for HKEY_LOCAL_MACHINE
47 * HKU is short for HKEY_USERS
49 * oh, and HKEY stands for "Hive Key".
53 #if 0 /* Simo: reg functions need to be updated to the new cmd interface */
55 /****************************************************************************
57 ****************************************************************************/
58 static void cmd_reg_enum(struct client_info *info)
74 uint32 max_class_len = 0;
77 uint32 max_subkeysize;
79 uint32 max_valnamelen;
80 uint32 max_valbufsize;
85 * unknown 0x1a request
88 uint32 unk_1a_response;
90 DEBUG(5, ("cmd_reg_enum: smb_cli->fd:%d\n", smb_cli->fd));
92 if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname)))
94 fprintf(out_hnd, "regenum <key_name>\n");
98 /* open WINREG session. */
99 res = res ? cli_nt_session_open(smb_cli, PIPE_WINREG) : False;
101 /* open registry receive a policy handle */
102 res = res ? do_reg_connect(smb_cli, full_keyname, key_name,
103 &info->dom.reg_pol_connect) : False;
105 if ((*key_name) != 0)
108 res1 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect,
109 key_name, 0x02000000, &key_pol) : False;
113 memcpy(&key_pol, &info->dom.reg_pol_connect, sizeof(key_pol));
116 res1 = res1 ? do_reg_query_key(smb_cli,
118 key_class, &max_class_len,
119 &num_subkeys, &max_subkeylen, &max_subkeysize,
120 &num_values, &max_valnamelen, &max_valbufsize,
121 &sec_desc, &mod_time) : False;
123 if (res1 && num_subkeys > 0)
125 fprintf(out_hnd,"Subkeys\n");
126 fprintf(out_hnd,"-------\n");
129 for (i = 0; i < num_subkeys; i++)
141 res2 = res1 ? do_reg_unknown_1a(smb_cli, &key_pol,
142 &unk_1a_response) : False;
144 if (res2 && unk_1a_response != 5)
146 fprintf(out_hnd,"Unknown 1a response: %x\n", unk_1a_response);
150 res2 = res2 ? do_reg_enum_key(smb_cli, &key_pol,
152 &enum_unk1, &enum_unk2,
153 &key_mod_time) : False;
157 display_reg_key_info(out_hnd, ACTION_HEADER , enum_name, key_mod_time);
158 display_reg_key_info(out_hnd, ACTION_ENUMERATE, enum_name, key_mod_time);
159 display_reg_key_info(out_hnd, ACTION_FOOTER , enum_name, key_mod_time);
166 fprintf(out_hnd,"Key Values\n");
167 fprintf(out_hnd,"----------\n");
170 for (i = 0; i < num_values; i++)
181 res2 = res1 ? do_reg_unknown_1a(smb_cli, &key_pol,
182 &unk_1a_response) : False;
184 if (res2 && unk_1a_response != 5)
186 fprintf(out_hnd,"Unknown 1a response: %x\n", unk_1a_response);
190 res2 = res2 ? do_reg_enum_val(smb_cli, &key_pol,
191 i, max_valnamelen, max_valbufsize,
192 val_name, &val_type, &value) : False;
196 display_reg_value_info(out_hnd, ACTION_HEADER , val_name, val_type, &value);
197 display_reg_value_info(out_hnd, ACTION_ENUMERATE, val_name, val_type, &value);
198 display_reg_value_info(out_hnd, ACTION_FOOTER , val_name, val_type, &value);
202 /* close the handles */
203 if ((*key_name) != 0)
205 res1 = res1 ? do_reg_close(smb_cli, &key_pol) : False;
207 res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False;
209 /* close the session */
210 cli_nt_session_close(smb_cli);
212 if (res && res1 && res2)
214 DEBUG(5,("cmd_reg_enum: query succeeded\n"));
218 DEBUG(5,("cmd_reg_enum: query failed\n"));
222 /****************************************************************************
223 nt registry query key
224 ****************************************************************************/
225 static void cmd_reg_query_key(struct client_info *info)
231 fstring full_keyname;
239 uint32 key_class_len = 0;
241 uint32 max_subkeylen;
242 uint32 max_subkeysize;
244 uint32 max_valnamelen;
245 uint32 max_valbufsize;
249 DEBUG(5, ("cmd_reg_enum: smb_cli->fd:%d\n", smb_cli->fd));
251 if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname)))
253 fprintf(out_hnd, "regquery key_name\n");
257 /* open WINREG session. */
258 res = res ? cli_nt_session_open(smb_cli, PIPE_WINREG) : False;
260 /* open registry receive a policy handle */
261 res = res ? do_reg_connect(smb_cli, full_keyname, key_name,
262 &info->dom.reg_pol_connect) : False;
264 if ((*key_name) != 0)
267 res1 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect,
268 key_name, 0x02000000, &key_pol) : False;
272 memcpy(&key_pol, &info->dom.reg_pol_connect, sizeof(key_pol));
275 res1 = res1 ? do_reg_query_key(smb_cli,
277 key_class, &key_class_len,
278 &num_subkeys, &max_subkeylen, &max_subkeysize,
279 &num_values, &max_valnamelen, &max_valbufsize,
280 &sec_desc, &mod_time) : False;
282 if (res1 && key_class_len != 0)
284 res1 = res1 ? do_reg_query_key(smb_cli,
286 key_class, &key_class_len,
287 &num_subkeys, &max_subkeylen, &max_subkeysize,
288 &num_values, &max_valnamelen, &max_valbufsize,
289 &sec_desc, &mod_time) : False;
294 fprintf(out_hnd,"Registry Query Info Key\n");
295 fprintf(out_hnd,"key class: %s\n", key_class);
296 fprintf(out_hnd,"subkeys, max_len, max_size: %d %d %d\n", num_subkeys, max_subkeylen, max_subkeysize);
297 fprintf(out_hnd,"vals, max_len, max_size: 0x%x 0x%x 0x%x\n", num_values, max_valnamelen, max_valbufsize);
298 fprintf(out_hnd,"sec desc: 0x%x\n", sec_desc);
299 fprintf(out_hnd,"mod time: %s\n", http_timestring(nt_time_to_unix(&mod_time)));
302 /* close the handles */
303 if ((*key_name) != 0)
305 res1 = res1 ? do_reg_close(smb_cli, &key_pol) : False;
307 res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False;
309 /* close the session */
310 cli_nt_session_close(smb_cli);
314 DEBUG(5,("cmd_reg_query: query succeeded\n"));
318 DEBUG(5,("cmd_reg_query: query failed\n"));
322 /****************************************************************************
323 nt registry create value
324 ****************************************************************************/
325 static void cmd_reg_create_val(struct client_info *info)
331 POLICY_HND parent_pol;
332 fstring full_keyname;
344 res1 = res1 ? do_reg_query_info(smb_cli, &val_pol,
345 val_name, *val_type) : False;
348 DEBUG(5, ("cmd_reg_create_val: smb_cli->fd:%d\n", smb_cli->fd));
350 if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname)))
352 fprintf(out_hnd, "regcreate <val_name> <val_type> <val>\n");
356 reg_get_subkey(full_keyname, keyname, val_name);
358 if (keyname[0] == 0 || val_name[0] == 0)
360 fprintf(out_hnd, "invalid key name\n");
364 if (!next_token_nr(NULL, tmp, NULL, sizeof(tmp)))
366 fprintf(out_hnd, "regcreate <val_name> <val_type (1|4)> <val>\n");
370 val_type = atoi(tmp);
372 if (val_type != 1 && val_type != 3 && val_type != 4)
374 fprintf(out_hnd, "val_type 1=UNISTR, 3=BYTES, 4=DWORD supported\n");
378 if (!next_token_nr(NULL, tmp, NULL, sizeof(tmp)))
380 fprintf(out_hnd, "regcreate <val_name> <val_type (1|4)> <val>\n");
386 case 0x01: /* UNISTR */
388 init_buffer3_str(&value, tmp, strlen(tmp)+1);
391 case 0x03: /* BYTES */
393 init_buffer3_hex(&value, tmp);
396 case 0x04: /* DWORD */
399 if (strnequal(tmp, "0x", 2))
401 tmp_val = strtol(tmp, (char**)NULL, 16);
405 tmp_val = strtol(tmp, (char**)NULL, 10);
407 init_buffer3_uint32(&value, tmp_val);
412 fprintf(out_hnd, "i told you i only deal with UNISTR, DWORD and BYTES!\n");
417 DEBUG(10,("key data:\n"));
418 dump_data(10, (char *)value.buffer, value.buf_len);
420 /* open WINREG session. */
421 res = res ? cli_nt_session_open(smb_cli, PIPE_WINREG) : False;
423 /* open registry receive a policy handle */
424 res = res ? do_reg_connect(smb_cli, keyname, parent_name,
425 &info->dom.reg_pol_connect) : False;
427 if ((*val_name) != 0)
430 res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect,
431 parent_name, 0x02000000, &parent_pol) : False;
435 memcpy(&parent_pol, &info->dom.reg_pol_connect, sizeof(parent_pol));
438 /* create an entry */
439 res4 = res3 ? do_reg_create_val(smb_cli, &parent_pol,
440 val_name, val_type, &value) : False;
442 /* flush the modified key */
443 res4 = res4 ? do_reg_flush_key(smb_cli, &parent_pol) : False;
445 /* close the val handle */
446 if ((*val_name) != 0)
448 res3 = res3 ? do_reg_close(smb_cli, &parent_pol) : False;
451 /* close the registry handles */
452 res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False;
454 /* close the session */
455 cli_nt_session_close(smb_cli);
457 if (res && res3 && res4)
459 DEBUG(5,("cmd_reg_create_val: query succeeded\n"));
460 fprintf(out_hnd,"OK\n");
464 DEBUG(5,("cmd_reg_create_val: query failed\n"));
468 /****************************************************************************
469 nt registry delete value
470 ****************************************************************************/
471 static void cmd_reg_delete_val(struct client_info *info)
477 POLICY_HND parent_pol;
478 fstring full_keyname;
483 DEBUG(5, ("cmd_reg_delete_val: smb_cli->fd:%d\n", smb_cli->fd));
485 if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname)))
487 fprintf(out_hnd, "regdelete <val_name>\n");
491 reg_get_subkey(full_keyname, keyname, val_name);
493 if (keyname[0] == 0 || val_name[0] == 0)
495 fprintf(out_hnd, "invalid key name\n");
499 /* open WINREG session. */
500 res = res ? cli_nt_session_open(smb_cli, PIPE_WINREG) : False;
502 /* open registry receive a policy handle */
503 res = res ? do_reg_connect(smb_cli, keyname, parent_name,
504 &info->dom.reg_pol_connect) : False;
506 if ((*val_name) != 0)
509 res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect,
510 parent_name, 0x02000000, &parent_pol) : False;
514 memcpy(&parent_pol, &info->dom.reg_pol_connect, sizeof(parent_pol));
517 /* delete an entry */
518 res4 = res3 ? do_reg_delete_val(smb_cli, &parent_pol, val_name) : False;
520 /* flush the modified key */
521 res4 = res4 ? do_reg_flush_key(smb_cli, &parent_pol) : False;
523 /* close the key handle */
524 res3 = res3 ? do_reg_close(smb_cli, &parent_pol) : False;
526 /* close the registry handles */
527 res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False;
529 /* close the session */
530 cli_nt_session_close(smb_cli);
532 if (res && res3 && res4)
534 DEBUG(5,("cmd_reg_delete_val: query succeeded\n"));
535 fprintf(out_hnd,"OK\n");
539 DEBUG(5,("cmd_reg_delete_val: query failed\n"));
543 /****************************************************************************
544 nt registry delete key
545 ****************************************************************************/
546 static void cmd_reg_delete_key(struct client_info *info)
552 POLICY_HND parent_pol;
553 fstring full_keyname;
558 DEBUG(5, ("cmd_reg_delete_key: smb_cli->fd:%d\n", smb_cli->fd));
560 if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname)))
562 fprintf(out_hnd, "regdeletekey <key_name>\n");
566 reg_get_subkey(full_keyname, parent_name, subkey_name);
568 if (parent_name[0] == 0 || subkey_name[0] == 0)
570 fprintf(out_hnd, "invalid key name\n");
574 /* open WINREG session. */
575 res = res ? cli_nt_session_open(smb_cli, PIPE_WINREG) : False;
577 /* open registry receive a policy handle */
578 res = res ? do_reg_connect(smb_cli, parent_name, key_name,
579 &info->dom.reg_pol_connect) : False;
581 if ((*key_name) != 0)
584 res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect,
585 key_name, 0x02000000, &parent_pol) : False;
589 memcpy(&parent_pol, &info->dom.reg_pol_connect, sizeof(parent_pol));
592 /* create an entry */
593 res4 = res3 ? do_reg_delete_key(smb_cli, &parent_pol, subkey_name) : False;
595 /* flush the modified key */
596 res4 = res4 ? do_reg_flush_key(smb_cli, &parent_pol) : False;
598 /* close the key handle */
599 if ((*key_name) != 0)
601 res3 = res3 ? do_reg_close(smb_cli, &parent_pol) : False;
604 /* close the registry handles */
605 res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False;
607 /* close the session */
608 cli_nt_session_close(smb_cli);
610 if (res && res3 && res4)
612 DEBUG(5,("cmd_reg_delete_key: query succeeded\n"));
613 fprintf(out_hnd,"OK\n");
617 DEBUG(5,("cmd_reg_delete_key: query failed\n"));
621 /****************************************************************************
622 nt registry create key
623 ****************************************************************************/
624 static void cmd_reg_create_key(struct client_info *info)
630 POLICY_HND parent_pol;
632 fstring full_keyname;
637 SEC_ACCESS sam_access;
639 DEBUG(5, ("cmd_reg_create_key: smb_cli->fd:%d\n", smb_cli->fd));
641 if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname)))
643 fprintf(out_hnd, "regcreate <key_name> [key_class]\n");
647 reg_get_subkey(full_keyname, parent_key, key_name);
649 if (parent_key[0] == 0 || key_name[0] == 0)
651 fprintf(out_hnd, "invalid key name\n");
655 if (!next_token_nr(NULL, key_class, NULL, sizeof(key_class)))
657 memset(key_class, 0, sizeof(key_class));
660 /* set access permissions */
661 sam_access.mask = SEC_RIGHTS_READ;
663 /* open WINREG session. */
664 res = res ? cli_nt_session_open(smb_cli, PIPE_WINREG) : False;
666 /* open registry receive a policy handle */
667 res = res ? do_reg_connect(smb_cli, parent_key, parent_name,
668 &info->dom.reg_pol_connect) : False;
670 if ((*parent_name) != 0)
673 res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect,
674 parent_name, 0x02000000, &parent_pol) : False;
678 memcpy(&parent_pol, &info->dom.reg_pol_connect, sizeof(parent_pol));
681 /* create an entry */
682 res4 = res3 ? do_reg_create_key(smb_cli, &parent_pol,
683 key_name, key_class, &sam_access, &key_pol) : False;
685 /* flush the modified key */
686 res4 = res4 ? do_reg_flush_key(smb_cli, &parent_pol) : False;
688 /* close the key handle */
689 res4 = res4 ? do_reg_close(smb_cli, &key_pol) : False;
691 /* close the key handle */
692 if ((*parent_name) != 0)
694 res3 = res3 ? do_reg_close(smb_cli, &parent_pol) : False;
697 /* close the registry handles */
698 res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False;
700 /* close the session */
701 cli_nt_session_close(smb_cli);
703 if (res && res3 && res4)
705 DEBUG(5,("cmd_reg_create_key: query succeeded\n"));
706 fprintf(out_hnd,"OK\n");
710 DEBUG(5,("cmd_reg_create_key: query failed\n"));
714 /****************************************************************************
715 nt registry security info
716 ****************************************************************************/
717 static void cmd_reg_test_key_sec(struct client_info *info)
724 fstring full_keyname;
734 DEBUG(5, ("cmd_reg_get_key_sec: smb_cli->fd:%d\n", smb_cli->fd));
736 if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname)))
738 fprintf(out_hnd, "reggetsec <key_name>\n");
742 /* open WINREG session. */
743 res = res ? cli_nt_session_open(smb_cli, PIPE_WINREG) : False;
745 /* open registry receive a policy handle */
746 res = res ? do_reg_connect(smb_cli, full_keyname, key_name,
747 &info->dom.reg_pol_connect) : False;
749 if ((*key_name) != 0)
752 res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect,
753 key_name, 0x02000000, &key_pol) : False;
757 memcpy(&key_pol, &info->dom.reg_pol_connect, sizeof(key_pol));
761 res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect,
762 key_name, 0x02000000, &key_pol) : False;
764 /* query key sec info. first call sets sec_buf_size. */
767 res4 = res3 ? do_reg_get_key_sec(smb_cli, &key_pol,
768 &sec_buf_size, &psdb) : False;
770 free_sec_desc_buf(&psdb);
772 res4 = res4 ? do_reg_get_key_sec(smb_cli, &key_pol,
773 &sec_buf_size, &psdb) : False;
775 if (res4 && psdb->len > 0 && psdb->sec != NULL)
777 display_sec_desc(out_hnd, ACTION_HEADER , psdb->sec);
778 display_sec_desc(out_hnd, ACTION_ENUMERATE, psdb->sec);
779 display_sec_desc(out_hnd, ACTION_FOOTER , psdb->sec);
781 res4 = res4 ? do_reg_set_key_sec(smb_cli, &key_pol, psdb) : False;
784 free_sec_desc_buf(&psdb);
786 /* close the key handle */
787 if ((*key_name) != 0)
789 res3 = res3 ? do_reg_close(smb_cli, &key_pol) : False;
792 /* close the registry handles */
793 res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False;
795 /* close the session */
796 cli_nt_session_close(smb_cli);
798 if (res && res3 && res4)
800 DEBUG(5,("cmd_reg_test2: query succeeded\n"));
801 fprintf(out_hnd,"Registry Test2\n");
805 DEBUG(5,("cmd_reg_test2: query failed\n"));
809 /****************************************************************************
810 nt registry security info
811 ****************************************************************************/
812 static void cmd_reg_get_key_sec(struct client_info *info)
819 fstring full_keyname;
829 DEBUG(5, ("cmd_reg_get_key_sec: smb_cli->fd:%d\n", smb_cli->fd));
831 if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname)))
833 fprintf(out_hnd, "reggetsec <key_name>\n");
837 /* open WINREG session. */
838 res = res ? cli_nt_session_open(smb_cli, PIPE_WINREG) : False;
840 /* open registry receive a policy handle */
841 res = res ? do_reg_connect(smb_cli, full_keyname, key_name,
842 &info->dom.reg_pol_connect) : False;
844 if ((*key_name) != 0)
847 res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect,
848 key_name, 0x02000000, &key_pol) : False;
852 memcpy(&key_pol, &info->dom.reg_pol_connect, sizeof(key_pol));
856 res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect,
857 key_name, 0x02000000, &key_pol) : False;
861 res4 = res3 ? do_reg_get_key_sec(smb_cli, &key_pol,
862 &sec_buf_size, &psdb) : False;
864 free_sec_desc_buf(&psdb);
866 res4 = res4 ? do_reg_get_key_sec(smb_cli, &key_pol,
867 &sec_buf_size, &psdb) : False;
869 if (res4 && psdb->len > 0 && psdb->sec != NULL)
871 display_sec_desc(out_hnd, ACTION_HEADER , psdb->sec);
872 display_sec_desc(out_hnd, ACTION_ENUMERATE, psdb->sec);
873 display_sec_desc(out_hnd, ACTION_FOOTER , psdb->sec);
876 free_sec_desc_buf(&psdb);
878 /* close the key handle */
879 if ((*key_name) != 0)
881 res3 = res3 ? do_reg_close(smb_cli, &key_pol) : False;
884 /* close the registry handles */
885 res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False;
887 /* close the session */
888 cli_nt_session_close(smb_cli);
890 if (res && res3 && res4)
892 DEBUG(5,("cmd_reg_get_key_sec: query succeeded\n"));
896 DEBUG(5,("cmd_reg_get_key_sec: query failed\n"));
902 /****************************************************************************
904 ****************************************************************************/
905 static NTSTATUS cmd_reg_shutdown(struct cli_state *cli, int argc, char **argv)
907 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
916 ret = asprintf (&srv_name, "\\\\%s", cli->desthost);
918 DEBUG(0,("cmd_reg_shutdown: Not enough memory!\n"));
919 return NT_STATUS_UNSUCCESSFUL;
923 if (!(mem_ctx=talloc_init()))
925 DEBUG(0,("cmd_spoolss_getprinter: talloc_init returned NULL!\n"));
926 return NT_STATUS_UNSUCCESSFUL;
929 /* Initialise RPC connection */
930 if (!cli_nt_session_open (cli, PIPE_WINREG)) {
931 fprintf (stderr, "Could not initialize winreg pipe!\n");
936 optind = 0; /* TODO: test if this hack works on other systems too --simo */
938 while ((opt = getopt(argc, argv, "m:t:rf")) != EOF)
940 fprintf (stderr, "[%s]\n", argv[argc-1]);
946 safe_strcpy(msg, optarg, sizeof(msg)-1);
947 fprintf (stderr, "[%s|%s]\n", optarg, msg);
952 timeout = atoi(optarg);
953 fprintf (stderr, "[%s|%d]\n", optarg, timeout);
969 /* create an entry */
970 result = cli_reg_shutdown(cli, mem_ctx, srv_name, msg, timeout, flgs);
972 if (NT_STATUS_IS_OK(result))
973 DEBUG(5,("cmd_reg_shutdown: query succeeded\n"));
975 DEBUG(5,("cmd_reg_shutdown: query failed\n"));
977 cli_nt_session_close(cli);
980 talloc_destroy(mem_ctx);
985 /****************************************************************************
987 ****************************************************************************/
988 static NTSTATUS cmd_reg_abort_shutdown(struct cli_state *cli, int argc, char **argv)
990 NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
995 ret = asprintf(&srv_name, "\\\\%s", cli->desthost);
997 DEBUG(0,("cmd_reg_shutdown: Not enough memory!\n"));
998 return NT_STATUS_UNSUCCESSFUL;
1002 if (!(mem_ctx=talloc_init()))
1004 DEBUG(0,("cmd_spoolss_getprinter: talloc_init returned NULL!\n"));
1005 return NT_STATUS_UNSUCCESSFUL;
1008 /* Initialise RPC connection */
1009 if (!cli_nt_session_open (cli, PIPE_WINREG)) {
1010 fprintf (stderr, "Could not initialize winreg pipe!\n");
1014 result = cli_reg_abort_shutdown(cli, mem_ctx, srv_name);
1016 if (NT_STATUS_IS_OK(result))
1017 DEBUG(5,("cmd_reg_abort_shutdown: query succeeded\n"));
1019 DEBUG(5,("cmd_reg_abort_shutdown: query failed\n"));
1021 cli_nt_session_close(cli);
1024 talloc_destroy(mem_ctx);
1030 /* List of commands exported by this module */
1031 struct cmd_set reg_commands[] = {
1035 { "shutdown", cmd_reg_shutdown, "Remote Shutdown",
1036 "[-m message] [-t timeout] [-r] [-f] (-r == reboot, -f == force)" },
1038 { "abortshutdown", cmd_reg_abort_shutdown, "Abort Shutdown",
1041 { "regenum", cmd_reg_enum, "Registry Enumeration",
1044 { "regdeletekey", cmd_reg_delete_key, "Registry Key Delete",
1047 { "regcreatekey", cmd_reg_create_key, "Registry Key Create",
1048 "<keyname> [keyclass]" },
1050 { "regqueryval", cmd_reg_query_info, "Registry Value Query",
1053 { "regquerykey", cmd_reg_query_key, "Registry Key Query",
1056 { "regdeleteval", cmd_reg_delete_val, "Registry Value Delete",
1059 { "regcreateval", cmd_reg_create_val, "Registry Key Create",
1060 "<valname> <valtype> <value>" },
1062 { "reggetsec", cmd_reg_get_key_sec, "Registry Key Security",
1065 { "regtestsec", cmd_reg_test_key_sec, "Test Registry Key Security",