1 /*enumerate users/groups/aliases*/
6 int main(int argc
, char **argv
) {
7 CacServerHandle
*hnd
= NULL
;
8 TALLOC_CTX
*mem_ctx
= NULL
;
11 struct SamEnumUsers eu
;
12 struct SamEnumGroups eg
;
13 struct SamEnumAliases ea
;
19 mem_ctx
= talloc_init("cac_samenum");
21 hnd
= cac_NewServerHandle(True
);
23 cac_SetAuthDataFn(hnd
, cactest_GetAuthDataFn
);
25 cac_parse_cmd_line(argc
, argv
, hnd
);
27 if(!cac_Connect(hnd
, NULL
)) {
28 fprintf(stderr
, "Could not connect to server %s. Error: %s\n", hnd
->server
, nt_errstr(hnd
->status
));
32 struct SamOpenDomain sod
;
35 sod
.in
.access
= MAXIMUM_ALLOWED_ACCESS
;
37 if(!cac_SamOpenDomain(hnd
, mem_ctx
, &sod
)) {
38 fprintf(stderr
, "Could not open domain. Error: %s\n", nt_errstr(hnd
->status
));
43 while(tmp
[0] != 'q') {
44 printf("Enumerate [u]sers, [g]roups or [a]liases or [q]uit: ");
45 cactest_readline(stdin
, tmp
);
51 eu
.in
.dom_hnd
= sod
.out
.dom_hnd
;
53 printf("ACB mask (can be 0): ");
54 scanf("%x", &eu
.in
.acb_mask
);
56 while(cac_SamEnumUsers(hnd
, mem_ctx
, &eu
)) {
57 printf("Enumerated %d users:\n", eu
.out
.num_users
);
58 for(i
= 0; i
< eu
.out
.num_users
; i
++) {
59 printf(" Name: %s\n", eu
.out
.names
[i
]);
60 printf(" RID: %d\n", eu
.out
.rids
[i
]);
64 if(CAC_OP_FAILED(hnd
->status
)) {
65 printf("Could not enumerate users. Error: %s\n", nt_errstr(hnd
->status
));
70 eg
.in
.dom_hnd
= sod
.out
.dom_hnd
;
72 printf("Enumerating groups...\n");
73 while(cac_SamEnumGroups(hnd
, mem_ctx
, &eg
)) {
74 printf("Enumerated %d groups:\n", eg
.out
.num_groups
);
75 for(i
= 0; i
< eg
.out
.num_groups
; i
++) {
76 printf("RID: %d\n", eg
.out
.rids
[i
]);
77 printf("Name: %s\n", eg
.out
.names
[i
]);
78 printf("Desc: %s\n", eg
.out
.descriptions
[i
]);
82 if(CAC_OP_FAILED(hnd
->status
)) {
83 printf("Could not enumerate Groups. Error: %s\n", nt_errstr(hnd
->status
));
88 ea
.in
.dom_hnd
= sod
.out
.dom_hnd
;
90 printf("Enumerating Aliases...\n");
91 while(cac_SamEnumAliases(hnd
, mem_ctx
, &ea
)) {
92 printf("Enumerated %d aliases:\n", ea
.out
.num_aliases
);
94 for(i
= 0; i
< ea
.out
.num_aliases
; i
++) {
95 printf("RID: %d\n", ea
.out
.rids
[i
]);
96 printf("Name: %s\n", ea
.out
.names
[i
]);
97 printf("Desc: %s\n", ea
.out
.descriptions
[i
]);
100 if(CAC_OP_FAILED(hnd
->status
)) {
101 printf("Could not enumerate Aliases. Error: %s\n", nt_errstr(hnd
->status
));
107 cac_SamClose(hnd
, mem_ctx
, sod
.out
.dom_hnd
);
108 cac_SamClose(hnd
, mem_ctx
, sod
.out
.sam
);
111 talloc_destroy(mem_ctx
);