~vcs-imports/samba/main

« back to all changes in this revision

Viewing changes to examples/libmsrpc/test/sam/samlookup.c

  • Committer: jerry
  • Date: 2006-07-14 21:48:39 UTC
  • Revision ID: vcs-imports@canonical.com-20060714214839-586d8c489a8fcead
gutting trunk to move to svn:externals

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*lookup names or rids*/
2
 
 
3
 
#include "libmsrpc.h"
4
 
#include "test_util.h"
5
 
 
6
 
int main(int argc, char **argv) {
7
 
   CacServerHandle *hnd = NULL;
8
 
   TALLOC_CTX *mem_ctx = NULL;
9
 
            
10
 
   
11
 
   struct SamGetNamesFromRids sgn;
12
 
   struct SamGetRidsFromNames sgr;
13
 
 
14
 
   fstring tmp;
15
 
   fstring input;
16
 
   
17
 
   int i;
18
 
 
19
 
   mem_ctx = talloc_init("cac_samenum");
20
 
 
21
 
   hnd = cac_NewServerHandle(True);
22
 
 
23
 
   cac_parse_cmd_line(argc, argv, hnd);
24
 
 
25
 
   if(!cac_Connect(hnd, NULL)) {
26
 
      fprintf(stderr, "Could not connect to server %s. Error: %s\n", hnd->server, nt_errstr(hnd->status));
27
 
      exit(-1);
28
 
   }
29
 
 
30
 
   struct SamOpenDomain sod;
31
 
   ZERO_STRUCT(sod);
32
 
 
33
 
   sod.in.access = MAXIMUM_ALLOWED_ACCESS; 
34
 
 
35
 
   if(!cac_SamOpenDomain(hnd, mem_ctx, &sod)) {
36
 
      fprintf(stderr, "Could not open domain. Error: %s\n", nt_errstr(hnd->status));
37
 
      goto done;
38
 
   }
39
 
 
40
 
   tmp[0] = 0x00;
41
 
   while(tmp[0] != 'q') {
42
 
      printf("get [n]ames or get [r]ids or [q]uit: ");
43
 
      cactest_readline(stdin, tmp);
44
 
 
45
 
      switch(tmp[0]) {
46
 
         case 'n':
47
 
            ZERO_STRUCT(sgn);
48
 
 
49
 
            sgn.in.dom_hnd = sod.out.dom_hnd;
50
 
 
51
 
            printf("How many rids will you enter: ");
52
 
            scanf("%d", &sgn.in.num_rids);
53
 
 
54
 
            sgn.in.rids = talloc_array(mem_ctx, int, sgn.in.num_rids);
55
 
            
56
 
            for(i = 0; i < sgn.in.num_rids; i++) {
57
 
               printf("  Enter RID %d: 0x", i);
58
 
               scanf("%x", &sgn.in.rids[i]);
59
 
            }
60
 
 
61
 
            printf("Getting names...\n");
62
 
 
63
 
            if(!cac_SamGetNamesFromRids(hnd, mem_ctx, &sgn)) {
64
 
               fprintf(stderr, "could not lookup names. Error: %s\n", nt_errstr(hnd->status));
65
 
               talloc_free(sgn.in.rids);
66
 
               continue;
67
 
            }
68
 
 
69
 
            printf("Found %d names:\n", sgn.out.num_names);
70
 
 
71
 
            for(i = 0; i < sgn.out.num_names; i++) {
72
 
               printf(" RID:  0x%x ", sgn.out.map[i].rid);
73
 
 
74
 
               if(sgn.out.map[i].found) {
75
 
                  printf("Name: %s\n", sgn.out.map[i].name);
76
 
               }
77
 
               else {
78
 
                  printf("Unknown RID\n");
79
 
               }
80
 
 
81
 
            }
82
 
 
83
 
            break;
84
 
 
85
 
         case 'r':
86
 
            ZERO_STRUCT(sgr);
87
 
 
88
 
            sgr.in.dom_hnd = sod.out.dom_hnd;
89
 
 
90
 
            printf("How many names will you enter: ");
91
 
            scanf("%d", &sgr.in.num_names);
92
 
 
93
 
            sgr.in.names = talloc_array(mem_ctx, char *, sgr.in.num_names);
94
 
 
95
 
            for(i = 0; i < sgr.in.num_names; i++) {
96
 
               printf(" Enter name %d: ", (i+1));
97
 
               cactest_readline(stdin, input);
98
 
 
99
 
               sgr.in.names[i] = talloc_strdup(mem_ctx, input);
100
 
            }
101
 
 
102
 
            if(!cac_SamGetRidsFromNames(hnd, mem_ctx, &sgr)) {
103
 
               fprintf(stderr, "Could not lookup names. Error: %s\n", nt_errstr(hnd->status));
104
 
               continue;
105
 
            }
106
 
 
107
 
            printf("Found %d RIDs:\n", sgr.out.num_rids);
108
 
 
109
 
            for(i = 0; i < sgr.out.num_rids; i++) {
110
 
               printf(" Name: %s ", sgr.out.map[i].name);
111
 
 
112
 
               if(sgr.out.map[i].found) {
113
 
                  printf("RID: 0x%x\n", sgr.out.map[i].rid);
114
 
               }
115
 
               else {
116
 
                  printf("Unknown name\n");
117
 
               }
118
 
            }
119
 
 
120
 
            break;
121
 
         case 'q':
122
 
            printf("\n");
123
 
            break;
124
 
         default:
125
 
            printf("Invalid command!\n");
126
 
      }
127
 
   }
128
 
 
129
 
 
130
 
   cac_SamClose(hnd, mem_ctx, sod.out.dom_hnd);
131
 
   cac_SamClose(hnd, mem_ctx, sod.out.sam);
132
 
 
133
 
done:
134
 
   talloc_destroy(mem_ctx);
135
 
   cac_FreeHandle(hnd);
136
 
 
137
 
   return 0;
138
 
 
139
 
}
140