• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/samba-3.0.25b/examples/libmsrpc/test/reg/
1/*tests enumerating keys or values*/
2
3#include "libmsrpc.h"
4
5#define MAX_KEYS_PER_ENUM 3
6
7int main() {
8   CacServerHandle *hnd = NULL;
9    TALLOC_CTX *mem_ctx  = NULL;
10
11    int num_keys;
12
13    int max_enum;
14
15    int i;
16
17    fstring *key_names;
18
19    mem_ctx = talloc_init("regkeyenum");
20
21    hnd = cac_NewServerHandle(True);
22
23    printf("Enter server to connect to: ");
24    fscanf(stdin, "%s", hnd->server);
25
26    printf("How many keys do you want to open?: ");
27    fscanf(stdin, "%d", &num_keys);
28
29    printf("How many keys per enum?: ");
30    fscanf(stdin, "%d", &max_enum);
31
32    key_names = TALLOC_ARRAY(mem_ctx, fstring , num_keys);
33    if(!key_names) {
34       fprintf(stderr, "No memory\n");
35       exit(-1);
36    }
37
38    for(i = 0; i < num_keys; i++) {
39       printf("Enter key to open: ");
40       fscanf(stdin, "%s", key_names[i]);
41    }
42
43    if(!cac_Connect(hnd, NULL)) {
44       fprintf(stderr, "Could not connect to server.\n Error: %s.\n errno: %s\n", nt_errstr(hnd->status), strerror(errno));
45       cac_FreeHandle(hnd);
46       exit(-1);
47    }
48
49    for(i = 0; i < num_keys; i++) {
50       printf("trying to open key %s...\n", key_names[i]);
51
52       struct RegOpenKey rok;
53       ZERO_STRUCT(rok);
54
55       rok.in.parent_key = NULL;
56       rok.in.name   = key_names[i];
57       rok.in.access = REG_KEY_ALL;
58
59       if(!cac_RegOpenKey(hnd, mem_ctx, &rok)) {
60          fprintf(stderr, "Could not open key %s\n Error: %s\n", rok.in.name, nt_errstr(hnd->status));
61          continue;
62       }
63
64       /**enumerate all the subkeys*/
65       printf("Enumerating all subkeys:\n");
66
67       struct RegEnumKeys ek;
68       ZERO_STRUCT(ek);
69
70       ek.in.key = rok.out.key;
71       ek.in.max_keys = max_enum;
72
73       while(cac_RegEnumKeys(hnd, mem_ctx, &ek)) {
74          int j;
75
76          for(j = 0; j < ek.out.num_keys; j++) {
77             printf(" Key name: %s\n", ek.out.key_names[j]);
78          }
79       }
80
81       if(CAC_OP_FAILED(hnd->status)) {
82          fprintf(stderr, "Could not enumerate keys: %s\n", nt_errstr(hnd->status));
83          continue;
84       }
85
86       printf("closing key %s...\n", key_names[i]);
87
88       if(!cac_RegClose(hnd, mem_ctx, rok.out.key)) {
89          fprintf(stderr, "Could not close handle %s\n", nt_errstr(hnd->status));
90       }
91    }
92
93    cac_FreeHandle(hnd);
94
95    talloc_destroy(mem_ctx);
96
97    return 0;
98
99}
100