2 Unix SMB/CIFS implementation.
3 NT Domain Authentication SMB / MSRPC client
4 Copyright (C) Andrew Tridgell 1994-1997
5 Copyright (C) Luke Kenneth Casson Leighton 1996-1997
6 Copyright (C) Simo Sorce 2001
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #include "rpcclient.h"
30 * [HKLM]|[HKU]\[parent_keyname_components]\[subkey]|[value]
32 * reg_getsubkey() splits this down into:
33 * [HKLM]|[HKU]\[parent_keyname_components] and [subkey]|[value]
35 * do_reg_connect() splits the left side down further into:
36 * [HKLM]|[HKU] and [parent_keyname_components].
38 * HKLM is short for HKEY_LOCAL_MACHINE
39 * HKU is short for HKEY_USERS
41 * oh, and HKEY stands for "Hive Key".
45 #if 0 /* This whole file need to be rewritten for the current rpcclient interface */
47 /****************************************************************************
49 ****************************************************************************/
50 static void cmd_reg_enum(struct client_info
*info
)
67 uint32 max_class_len
= 0;
70 uint32 max_subkeysize
;
72 uint32 max_valnamelen
;
73 uint32 max_valbufsize
;
78 * unknown 0x1a request
81 uint32 unk_1a_response
;
83 DEBUG(5, ("cmd_reg_enum: smb_cli->fd:%d\n", smb_cli
->fd
));
85 if (!next_token_nr(NULL
, full_keyname
, NULL
, sizeof(full_keyname
)))
87 fprintf(out_hnd
, "regenum <key_name>\n");
91 if (!reg_split_key(full_keyname
, ®_type
, key_name
)) {
92 fprintf(out_hnd
, "Unknown registry hive '%s'\n", key_name
);
96 /* open WINREG session. */
97 res
= res
? cli_nt_session_open(smb_cli
, PI_WINREG
) : False
;
99 /* open registry receive a policy handle */
100 res
= res
? do_reg_connect(smb_cli
, full_keyname
, key_name
,
101 &info
->dom
.reg_pol_connect
) : False
;
103 if ((*key_name
) != 0)
106 res1
= res
? do_reg_open_entry(smb_cli
, &info
->dom
.reg_pol_connect
,
107 key_name
, 0x02000000, &key_pol
) : False
;
111 memcpy(&key_pol
, &info
->dom
.reg_pol_connect
, sizeof(key_pol
));
114 res1
= res1
? do_reg_query_key(smb_cli
,
116 key_class
, &max_class_len
,
117 &num_subkeys
, &max_subkeylen
, &max_subkeysize
,
118 &num_values
, &max_valnamelen
, &max_valbufsize
,
119 &sec_desc
, &mod_time
) : False
;
121 if (res1
&& num_subkeys
> 0)
123 fprintf(out_hnd
,"Subkeys\n");
124 fprintf(out_hnd
,"-------\n");
127 for (i
= 0; i
< num_subkeys
; i
++)
139 res2
= res1
? do_reg_getversion(smb_cli
, &key_pol
,
140 &unk_1a_response
) : False
;
142 if (res2
&& unk_1a_response
!= 5)
144 fprintf(out_hnd
,"Unknown 1a response: %x\n", unk_1a_response
);
148 res2
= res2
? do_reg_enum_key(smb_cli
, &key_pol
,
150 &enum_unk1
, &enum_unk2
,
151 &key_mod_time
) : False
;
155 display_reg_key_info(out_hnd
, ACTION_HEADER
, enum_name
, key_mod_time
);
156 display_reg_key_info(out_hnd
, ACTION_ENUMERATE
, enum_name
, key_mod_time
);
157 display_reg_key_info(out_hnd
, ACTION_FOOTER
, enum_name
, key_mod_time
);
164 fprintf(out_hnd
,"Key Values\n");
165 fprintf(out_hnd
,"----------\n");
168 for (i
= 0; i
< num_values
; i
++)
179 res2
= res1
? do_reg_getversion(smb_cli
, &key_pol
,
180 &unk_1a_response
) : False
;
182 if (res2
&& unk_1a_response
!= 5)
184 fprintf(out_hnd
,"Unknown 1a response: %x\n", unk_1a_response
);
188 res2
= res2
? do_reg_enum_val(smb_cli
, &key_pol
,
189 i
, max_valnamelen
, max_valbufsize
,
190 val_name
, &val_type
, &value
) : False
;
194 display_reg_value_info(out_hnd
, ACTION_HEADER
, val_name
, val_type
, &value
);
195 display_reg_value_info(out_hnd
, ACTION_ENUMERATE
, val_name
, val_type
, &value
);
196 display_reg_value_info(out_hnd
, ACTION_FOOTER
, val_name
, val_type
, &value
);
200 /* close the handles */
201 if ((*key_name
) != 0)
203 res1
= res1
? do_reg_close(smb_cli
, &key_pol
) : False
;
205 res
= res
? do_reg_close(smb_cli
, &info
->dom
.reg_pol_connect
) : False
;
207 /* close the session */
208 cli_nt_session_close(smb_cli
);
210 if (res
&& res1
&& res2
)
212 DEBUG(5,("cmd_reg_enum: query succeeded\n"));
216 DEBUG(5,("cmd_reg_enum: query failed\n"));
220 /****************************************************************************
221 nt registry query key
222 ****************************************************************************/
223 static void cmd_reg_query_key(struct client_info
*info
)
229 fstring full_keyname
;
237 uint32 key_class_len
= 0;
239 uint32 max_subkeylen
;
240 uint32 max_subkeysize
;
242 uint32 max_valnamelen
;
243 uint32 max_valbufsize
;
247 DEBUG(5, ("cmd_reg_enum: smb_cli->fd:%d\n", smb_cli
->fd
));
249 if (!next_token_nr(NULL
, full_keyname
, NULL
, sizeof(full_keyname
)))
251 fprintf(out_hnd
, "regquery key_name\n");
255 /* open WINREG session. */
256 res
= res
? cli_nt_session_open(smb_cli
, PI_WINREG
) : False
;
258 /* open registry receive a policy handle */
259 res
= res
? do_reg_connect(smb_cli
, full_keyname
, key_name
,
260 &info
->dom
.reg_pol_connect
) : False
;
262 if ((*key_name
) != 0)
265 res1
= res
? do_reg_open_entry(smb_cli
, &info
->dom
.reg_pol_connect
,
266 key_name
, 0x02000000, &key_pol
) : False
;
270 memcpy(&key_pol
, &info
->dom
.reg_pol_connect
, sizeof(key_pol
));
273 res1
= res1
? do_reg_query_key(smb_cli
,
275 key_class
, &key_class_len
,
276 &num_subkeys
, &max_subkeylen
, &max_subkeysize
,
277 &num_values
, &max_valnamelen
, &max_valbufsize
,
278 &sec_desc
, &mod_time
) : False
;
280 if (res1
&& key_class_len
!= 0)
282 res1
= res1
? do_reg_query_key(smb_cli
,
284 key_class
, &key_class_len
,
285 &num_subkeys
, &max_subkeylen
, &max_subkeysize
,
286 &num_values
, &max_valnamelen
, &max_valbufsize
,
287 &sec_desc
, &mod_time
) : False
;
292 fprintf(out_hnd
,"Registry Query Info Key\n");
293 fprintf(out_hnd
,"key class: %s\n", key_class
);
294 fprintf(out_hnd
,"subkeys, max_len, max_size: %d %d %d\n", num_subkeys
, max_subkeylen
, max_subkeysize
);
295 fprintf(out_hnd
,"vals, max_len, max_size: 0x%x 0x%x 0x%x\n", num_values
, max_valnamelen
, max_valbufsize
);
296 fprintf(out_hnd
,"sec desc: 0x%x\n", sec_desc
);
297 fprintf(out_hnd
,"mod time: %s\n", http_timestring(nt_time_to_unix(&mod_time
)));
300 /* close the handles */
301 if ((*key_name
) != 0)
303 res1
= res1
? do_reg_close(smb_cli
, &key_pol
) : False
;
305 res
= res
? do_reg_close(smb_cli
, &info
->dom
.reg_pol_connect
) : False
;
307 /* close the session */
308 cli_nt_session_close(smb_cli
);
312 DEBUG(5,("cmd_reg_query: query succeeded\n"));
316 DEBUG(5,("cmd_reg_query: query failed\n"));
320 /****************************************************************************
321 nt registry create value
322 ****************************************************************************/
323 static void cmd_reg_set_val(struct client_info
*info
)
329 POLICY_HND parent_pol
;
330 fstring full_keyname
;
342 res1
= res1
? do_reg_query_info(smb_cli
, &val_pol
,
343 val_name
, *val_type
) : False
;
346 DEBUG(5, ("cmd_reg_set_val: smb_cli->fd:%d\n", smb_cli
->fd
));
348 if (!next_token_nr(NULL
, full_keyname
, NULL
, sizeof(full_keyname
)))
350 fprintf(out_hnd
, "regcreate <val_name> <val_type> <val>\n");
354 reg_get_subkey(full_keyname
, keyname
, val_name
);
356 if (keyname
[0] == 0 || val_name
[0] == 0)
358 fprintf(out_hnd
, "invalid key name\n");
362 if (!next_token_nr(NULL
, tmp
, NULL
, sizeof(tmp
)))
364 fprintf(out_hnd
, "regcreate <val_name> <val_type (1|4)> <val>\n");
368 val_type
= atoi(tmp
);
370 if (val_type
!= 1 && val_type
!= 3 && val_type
!= 4)
372 fprintf(out_hnd
, "val_type 1=UNISTR, 3=BYTES, 4=DWORD supported\n");
376 if (!next_token_nr(NULL
, tmp
, NULL
, sizeof(tmp
)))
378 fprintf(out_hnd
, "regcreate <val_name> <val_type (1|4)> <val>\n");
384 case 0x01: /* UNISTR */
386 init_rpc_blob_str(&value
, tmp
, strlen(tmp
)+1);
389 case 0x03: /* BYTES */
391 init_rpc_blob_hex(&value
, tmp
);
394 case 0x04: /* DWORD */
397 if (strnequal(tmp
, "0x", 2))
399 tmp_val
= strtol(tmp
, (char**)NULL
, 16);
403 tmp_val
= strtol(tmp
, (char**)NULL
, 10);
405 init_rpc_blob_uint32(&value
, tmp_val
);
410 fprintf(out_hnd
, "i told you i only deal with UNISTR, DWORD and BYTES!\n");
415 DEBUG(10,("key data:\n"));
416 dump_data(10, (char *)value
.buffer
, value
.buf_len
);
418 /* open WINREG session. */
419 res
= res
? cli_nt_session_open(smb_cli
, PI_WINREG
) : False
;
421 /* open registry receive a policy handle */
422 res
= res
? do_reg_connect(smb_cli
, keyname
, parent_name
,
423 &info
->dom
.reg_pol_connect
) : False
;
425 if ((*val_name
) != 0)
428 res3
= res
? do_reg_open_entry(smb_cli
, &info
->dom
.reg_pol_connect
,
429 parent_name
, 0x02000000, &parent_pol
) : False
;
433 memcpy(&parent_pol
, &info
->dom
.reg_pol_connect
, sizeof(parent_pol
));
436 /* create an entry */
437 res4
= res3
? do_reg_set_val(smb_cli
, &parent_pol
,
438 val_name
, val_type
, &value
) : False
;
440 /* flush the modified key */
441 res4
= res4
? do_reg_flush_key(smb_cli
, &parent_pol
) : False
;
443 /* close the val handle */
444 if ((*val_name
) != 0)
446 res3
= res3
? do_reg_close(smb_cli
, &parent_pol
) : False
;
449 /* close the registry handles */
450 res
= res
? do_reg_close(smb_cli
, &info
->dom
.reg_pol_connect
) : False
;
452 /* close the session */
453 cli_nt_session_close(smb_cli
);
455 if (res
&& res3
&& res4
)
457 DEBUG(5,("cmd_reg_set_val: query succeeded\n"));
458 fprintf(out_hnd
,"OK\n");
462 DEBUG(5,("cmd_reg_set_val: query failed\n"));
466 /****************************************************************************
467 nt registry delete value
468 ****************************************************************************/
469 static void cmd_reg_delete_val(struct client_info
*info
)
475 POLICY_HND parent_pol
;
476 fstring full_keyname
;
481 DEBUG(5, ("cmd_reg_delete_val: smb_cli->fd:%d\n", smb_cli
->fd
));
483 if (!next_token_nr(NULL
, full_keyname
, NULL
, sizeof(full_keyname
)))
485 fprintf(out_hnd
, "regdelete <val_name>\n");
489 reg_get_subkey(full_keyname
, keyname
, val_name
);
491 if (keyname
[0] == 0 || val_name
[0] == 0)
493 fprintf(out_hnd
, "invalid key name\n");
497 /* open WINREG session. */
498 res
= res
? cli_nt_session_open(smb_cli
, PI_WINREG
) : False
;
500 /* open registry receive a policy handle */
501 res
= res
? do_reg_connect(smb_cli
, keyname
, parent_name
,
502 &info
->dom
.reg_pol_connect
) : False
;
504 if ((*val_name
) != 0)
507 res3
= res
? do_reg_open_entry(smb_cli
, &info
->dom
.reg_pol_connect
,
508 parent_name
, 0x02000000, &parent_pol
) : False
;
512 memcpy(&parent_pol
, &info
->dom
.reg_pol_connect
, sizeof(parent_pol
));
515 /* delete an entry */
516 res4
= res3
? do_reg_delete_val(smb_cli
, &parent_pol
, val_name
) : False
;
518 /* flush the modified key */
519 res4
= res4
? do_reg_flush_key(smb_cli
, &parent_pol
) : False
;
521 /* close the key handle */
522 res3
= res3
? do_reg_close(smb_cli
, &parent_pol
) : False
;
524 /* close the registry handles */
525 res
= res
? do_reg_close(smb_cli
, &info
->dom
.reg_pol_connect
) : False
;
527 /* close the session */
528 cli_nt_session_close(smb_cli
);
530 if (res
&& res3
&& res4
)
532 DEBUG(5,("cmd_reg_delete_val: query succeeded\n"));
533 fprintf(out_hnd
,"OK\n");
537 DEBUG(5,("cmd_reg_delete_val: query failed\n"));
541 /****************************************************************************
542 nt registry delete key
543 ****************************************************************************/
544 static void cmd_reg_delete_key(struct client_info
*info
)
550 POLICY_HND parent_pol
;
551 fstring full_keyname
;
556 DEBUG(5, ("cmd_reg_delete_key: smb_cli->fd:%d\n", smb_cli
->fd
));
558 if (!next_token_nr(NULL
, full_keyname
, NULL
, sizeof(full_keyname
)))
560 fprintf(out_hnd
, "regdeletekey <key_name>\n");
564 reg_get_subkey(full_keyname
, parent_name
, subkey_name
);
566 if (parent_name
[0] == 0 || subkey_name
[0] == 0)
568 fprintf(out_hnd
, "invalid key name\n");
572 /* open WINREG session. */
573 res
= res
? cli_nt_session_open(smb_cli
, PI_WINREG
) : False
;
575 /* open registry receive a policy handle */
576 res
= res
? do_reg_connect(smb_cli
, parent_name
, key_name
,
577 &info
->dom
.reg_pol_connect
) : False
;
579 if ((*key_name
) != 0)
582 res3
= res
? do_reg_open_entry(smb_cli
, &info
->dom
.reg_pol_connect
,
583 key_name
, 0x02000000, &parent_pol
) : False
;
587 memcpy(&parent_pol
, &info
->dom
.reg_pol_connect
, sizeof(parent_pol
));
590 /* create an entry */
591 res4
= res3
? do_reg_delete_key(smb_cli
, &parent_pol
, subkey_name
) : False
;
593 /* flush the modified key */
594 res4
= res4
? do_reg_flush_key(smb_cli
, &parent_pol
) : False
;
596 /* close the key handle */
597 if ((*key_name
) != 0)
599 res3
= res3
? do_reg_close(smb_cli
, &parent_pol
) : False
;
602 /* close the registry handles */
603 res
= res
? do_reg_close(smb_cli
, &info
->dom
.reg_pol_connect
) : False
;
605 /* close the session */
606 cli_nt_session_close(smb_cli
);
608 if (res
&& res3
&& res4
)
610 DEBUG(5,("cmd_reg_delete_key: query succeeded\n"));
611 fprintf(out_hnd
,"OK\n");
615 DEBUG(5,("cmd_reg_delete_key: query failed\n"));
619 /****************************************************************************
620 nt registry create key
621 ****************************************************************************/
622 static void cmd_reg_create_key(struct client_info
*info
)
628 POLICY_HND parent_pol
;
630 fstring full_keyname
;
635 SEC_ACCESS sam_access
;
637 DEBUG(5, ("cmd_reg_create_key: smb_cli->fd:%d\n", smb_cli
->fd
));
639 if (!next_token_nr(NULL
, full_keyname
, NULL
, sizeof(full_keyname
)))
641 fprintf(out_hnd
, "regcreate <key_name> [key_class]\n");
645 reg_get_subkey(full_keyname
, parent_key
, key_name
);
647 if (parent_key
[0] == 0 || key_name
[0] == 0)
649 fprintf(out_hnd
, "invalid key name\n");
653 if (!next_token_nr(NULL
, key_class
, NULL
, sizeof(key_class
)))
655 memset(key_class
, 0, sizeof(key_class
));
658 /* set access permissions */
659 sam_access
.mask
= SEC_RIGHTS_READ
;
661 /* open WINREG session. */
662 res
= res
? cli_nt_session_open(smb_cli
, PI_WINREG
) : False
;
664 /* open registry receive a policy handle */
665 res
= res
? do_reg_connect(smb_cli
, parent_key
, parent_name
,
666 &info
->dom
.reg_pol_connect
) : False
;
668 if ((*parent_name
) != 0)
671 res3
= res
? do_reg_open_entry(smb_cli
, &info
->dom
.reg_pol_connect
,
672 parent_name
, 0x02000000, &parent_pol
) : False
;
676 memcpy(&parent_pol
, &info
->dom
.reg_pol_connect
, sizeof(parent_pol
));
679 /* create an entry */
680 res4
= res3
? do_reg_create_key(smb_cli
, &parent_pol
,
681 key_name
, key_class
, &sam_access
, &key_pol
) : False
;
683 /* flush the modified key */
684 res4
= res4
? do_reg_flush_key(smb_cli
, &parent_pol
) : False
;
686 /* close the key handle */
687 res4
= res4
? do_reg_close(smb_cli
, &key_pol
) : False
;
689 /* close the key handle */
690 if ((*parent_name
) != 0)
692 res3
= res3
? do_reg_close(smb_cli
, &parent_pol
) : False
;
695 /* close the registry handles */
696 res
= res
? do_reg_close(smb_cli
, &info
->dom
.reg_pol_connect
) : False
;
698 /* close the session */
699 cli_nt_session_close(smb_cli
);
701 if (res
&& res3
&& res4
)
703 DEBUG(5,("cmd_reg_create_key: query succeeded\n"));
704 fprintf(out_hnd
,"OK\n");
708 DEBUG(5,("cmd_reg_create_key: query failed\n"));
712 /****************************************************************************
713 nt registry security info
714 ****************************************************************************/
715 static void cmd_reg_test_key_sec(struct client_info
*info
)
722 fstring full_keyname
;
732 DEBUG(5, ("cmd_reg_get_key_sec: smb_cli->fd:%d\n", smb_cli
->fd
));
734 if (!next_token_nr(NULL
, full_keyname
, NULL
, sizeof(full_keyname
)))
736 fprintf(out_hnd
, "reggetsec <key_name>\n");
740 /* open WINREG session. */
741 res
= res
? cli_nt_session_open(smb_cli
, PI_WINREG
) : False
;
743 /* open registry receive a policy handle */
744 res
= res
? do_reg_connect(smb_cli
, full_keyname
, key_name
,
745 &info
->dom
.reg_pol_connect
) : False
;
747 if ((*key_name
) != 0)
750 res3
= res
? do_reg_open_entry(smb_cli
, &info
->dom
.reg_pol_connect
,
751 key_name
, 0x02000000, &key_pol
) : False
;
755 memcpy(&key_pol
, &info
->dom
.reg_pol_connect
, sizeof(key_pol
));
759 res3
= res
? do_reg_open_entry(smb_cli
, &info
->dom
.reg_pol_connect
,
760 key_name
, 0x02000000, &key_pol
) : False
;
762 /* query key sec info. first call sets sec_buf_size. */
765 res4
= res3
? do_reg_get_key_sec(smb_cli
, &key_pol
,
766 &sec_buf_size
, &psdb
) : False
;
768 free_sec_desc_buf(&psdb
);
770 res4
= res4
? do_reg_get_key_sec(smb_cli
, &key_pol
,
771 &sec_buf_size
, &psdb
) : False
;
773 if (res4
&& psdb
->len
> 0 && psdb
->sec
!= NULL
)
775 display_sec_desc(out_hnd
, ACTION_HEADER
, psdb
->sec
);
776 display_sec_desc(out_hnd
, ACTION_ENUMERATE
, psdb
->sec
);
777 display_sec_desc(out_hnd
, ACTION_FOOTER
, psdb
->sec
);
779 res4
= res4
? do_reg_set_key_sec(smb_cli
, &key_pol
, psdb
) : False
;
782 free_sec_desc_buf(&psdb
);
784 /* close the key handle */
785 if ((*key_name
) != 0)
787 res3
= res3
? do_reg_close(smb_cli
, &key_pol
) : False
;
790 /* close the registry handles */
791 res
= res
? do_reg_close(smb_cli
, &info
->dom
.reg_pol_connect
) : False
;
793 /* close the session */
794 cli_nt_session_close(smb_cli
);
796 if (res
&& res3
&& res4
)
798 DEBUG(5,("cmd_reg_test2: query succeeded\n"));
799 fprintf(out_hnd
,"Registry Test2\n");
803 DEBUG(5,("cmd_reg_test2: query failed\n"));
807 /****************************************************************************
808 nt registry security info
809 ****************************************************************************/
810 static void cmd_reg_get_key_sec(struct client_info
*info
)
817 fstring full_keyname
;
827 DEBUG(5, ("cmd_reg_get_key_sec: smb_cli->fd:%d\n", smb_cli
->fd
));
829 if (!next_token_nr(NULL
, full_keyname
, NULL
, sizeof(full_keyname
)))
831 fprintf(out_hnd
, "reggetsec <key_name>\n");
835 /* open WINREG session. */
836 res
= res
? cli_nt_session_open(smb_cli
, PI_WINREG
) : False
;
838 /* open registry receive a policy handle */
839 res
= res
? do_reg_connect(smb_cli
, full_keyname
, key_name
,
840 &info
->dom
.reg_pol_connect
) : False
;
842 if ((*key_name
) != 0)
845 res3
= res
? do_reg_open_entry(smb_cli
, &info
->dom
.reg_pol_connect
,
846 key_name
, 0x02000000, &key_pol
) : False
;
850 memcpy(&key_pol
, &info
->dom
.reg_pol_connect
, sizeof(key_pol
));
854 res3
= res
? do_reg_open_entry(smb_cli
, &info
->dom
.reg_pol_connect
,
855 key_name
, 0x02000000, &key_pol
) : False
;
859 res4
= res3
? do_reg_get_key_sec(smb_cli
, &key_pol
,
860 &sec_buf_size
, &psdb
) : False
;
862 free_sec_desc_buf(&psdb
);
864 res4
= res4
? do_reg_get_key_sec(smb_cli
, &key_pol
,
865 &sec_buf_size
, &psdb
) : False
;
867 if (res4
&& psdb
->len
> 0 && psdb
->sec
!= NULL
)
869 display_sec_desc(out_hnd
, ACTION_HEADER
, psdb
->sec
);
870 display_sec_desc(out_hnd
, ACTION_ENUMERATE
, psdb
->sec
);
871 display_sec_desc(out_hnd
, ACTION_FOOTER
, psdb
->sec
);
874 free_sec_desc_buf(&psdb
);
876 /* close the key handle */
877 if ((*key_name
) != 0)
879 res3
= res3
? do_reg_close(smb_cli
, &key_pol
) : False
;
882 /* close the registry handles */
883 res
= res
? do_reg_close(smb_cli
, &info
->dom
.reg_pol_connect
) : False
;
885 /* close the session */
886 cli_nt_session_close(smb_cli
);
888 if (res
&& res3
&& res4
)
890 DEBUG(5,("cmd_reg_get_key_sec: query succeeded\n"));
894 DEBUG(5,("cmd_reg_get_key_sec: query failed\n"));
899 /****************************************************************************
901 ****************************************************************************/
902 static NTSTATUS
cmd_reg_shutdown(struct cli_state
*cli
, TALLOC_CTX
*mem_ctx
,
903 int argc
, const char **argv
)
905 NTSTATUS result
= NT_STATUS_UNSUCCESSFUL
;
913 optind
= 0; /* TODO: test if this hack works on other systems too --simo */
915 while ((opt
= getopt(argc
, argv
, "m:t:rf")) != EOF
)
917 /*fprintf (stderr, "[%s]\n", argv[argc-1]);*/
922 fstrcpy(msg
, optarg
);
923 /*fprintf (stderr, "[%s|%s]\n", optarg, msg);*/
927 timeout
= atoi(optarg
);
928 /*fprintf (stderr, "[%s|%d]\n", optarg, timeout);*/
942 /* create an entry */
943 result
= werror_to_ntstatus(cli_reg_shutdown(cli
, mem_ctx
, msg
, timeout
, reboot
, force
));
945 if (NT_STATUS_IS_OK(result
))
946 DEBUG(5,("cmd_reg_shutdown: query succeeded\n"));
948 DEBUG(5,("cmd_reg_shutdown: query failed\n"));
953 /****************************************************************************
955 ****************************************************************************/
956 static NTSTATUS
cmd_reg_abort_shutdown(struct cli_state
*cli
,
957 TALLOC_CTX
*mem_ctx
, int argc
,
960 NTSTATUS result
= NT_STATUS_UNSUCCESSFUL
;
962 result
= werror_to_ntstatus(cli_reg_abort_shutdown(cli
, mem_ctx
));
964 if (NT_STATUS_IS_OK(result
))
965 DEBUG(5,("cmd_reg_abort_shutdown: query succeeded\n"));
967 DEBUG(5,("cmd_reg_abort_shutdown: query failed\n"));
972 #endif /* This whole file need to be rewritten for the cirrent rpcclient interface */
975 /* List of commands exported by this module */
976 struct cmd_set reg_commands
[] = {
980 { "shutdown", RPC_RTYPE_NTSTATUS
, cmd_reg_shutdown
, NULL
, PI_WINREG
, "Remote Shutdown",
981 "syntax: shutdown [-m message] [-t timeout] [-r] [-h] [-f] (-r == reboot, -h == halt, -f == force)" },
983 { "abortshutdown", RPC_RTYPE_NTSTATUS
, cmd_reg_abort_shutdown
, NULL
, PI_WINREG
, "Abort Shutdown",
984 "syntax: abortshutdown" },
985 { "regenum", cmd_reg_enum
, "Registry Enumeration", "<keyname>" },
986 { "regdeletekey", cmd_reg_delete_key
, "Registry Key Delete", "<keyname>" },
987 { "regcreatekey", cmd_reg_create_key
, "Registry Key Create", "<keyname> [keyclass]" },
988 { "regqueryval", cmd_reg_query_info
, "Registry Value Query", "<valname>" },
989 { "regquerykey", cmd_reg_query_key
, "Registry Key Query", "<keyname>" },
990 { "regdeleteval", cmd_reg_delete_val
, "Registry Value Delete", "<valname>" },
991 { "regsetval", cmd_reg_set_val
, "Registry Key Create", "<valname> <valtype> <value>" },
992 { "reggetsec", cmd_reg_get_key_sec
, "Registry Key Security", "<keyname>" },
993 { "regtestsec", cmd_reg_test_key_sec
, "Test Registry Key Security", "<keyname>" },