1/*tests cac_RegOpenKey()*/
2
3#include "libmsrpc.h"
4
5int main() {
6   CacServerHandle *hnd = NULL;
7    TALLOC_CTX *mem_ctx  = NULL;
8
9    int num_keys;
10    int i;
11
12    fstring *key_names;
13
14    mem_ctx = talloc_init("regopenkey");
15
16    hnd = cac_NewServerHandle(True);
17
18    printf("Enter server to connect to: ");
19    fscanf(stdin, "%s", hnd->server);
20
21    printf("How many keys do you want to open?: ");
22    fscanf(stdin, "%d", &num_keys);
23
24    key_names = TALLOC_ARRAY(mem_ctx, fstring , num_keys);
25    if(!key_names) {
26       fprintf(stderr, "No memory\n");
27       exit(-1);
28    }
29
30    for(i = 0; i < num_keys; i++) {
31       printf("Enter key to open: ");
32       fscanf(stdin, "%s", key_names[i]);
33    }
34
35    if(!cac_Connect(hnd, NULL)) {
36       fprintf(stderr, "Could not connect to server.\n Error: %s.\n errno: %s\n", nt_errstr(hnd->status), strerror(errno));
37       cac_FreeHandle(hnd);
38       exit(-1);
39    }
40
41    for(i = 0; i < num_keys; i++) {
42       printf("trying to open key %s...\n", key_names[i]);
43
44       struct RegOpenKey rok;
45       ZERO_STRUCT(rok);
46
47       rok.in.parent_key = NULL;
48       rok.in.name   = key_names[i];
49       rok.in.access = REG_KEY_ALL;
50
51       if(!cac_RegOpenKey(hnd, mem_ctx, &rok)) {
52          fprintf(stderr, "Could not open key %s\n Error: %s\n", rok.in.name, nt_errstr(hnd->status));
53          continue;
54       }
55
56       printf("closing key %s...\n", key_names[i]);
57
58       if(!cac_RegClose(hnd, mem_ctx, rok.out.key)) {
59          fprintf(stderr, "Could not close handle %s\n", nt_errstr(hnd->status));
60       }
61    }
62
63    cac_FreeHandle(hnd);
64
65    talloc_destroy(mem_ctx);
66
67    return 0;
68
69}
70