#include "libmsrpc.h"#include "test_util.h"Go to the source code of this file.
Functions | |
| int | main (int argc, char **argv) |
|
||||||||||||
|
Definition at line 6 of file samenum.c. References cac_Connect(), cac_FreeHandle(), cac_NewServerHandle(), CAC_OP_FAILED, cac_parse_cmd_line(), cac_SamClose(), cac_SamEnumAliases(), cac_SamEnumGroups(), cac_SamEnumUsers(), cac_SamOpenDomain(), cac_SetAuthDataFn(), cactest_GetAuthDataFn(), cactest_readline(), fprintf(), SamEnumAliases::in, SamEnumGroups::in, SamEnumUsers::in, SamOpenDomain::in, MAXIMUM_ALLOWED_ACCESS, nt_errstr(), SamEnumAliases::out, SamEnumGroups::out, SamEnumUsers::out, SamOpenDomain::out, printf(), _CACSERVERHANDLE::server, _CACSERVERHANDLE::status, talloc_destroy, talloc_init(), True, and ZERO_STRUCT. 00006 { 00007 CacServerHandle *hnd = NULL; 00008 TALLOC_CTX *mem_ctx = NULL; 00009 00010 00011 struct SamEnumUsers eu; 00012 struct SamEnumGroups eg; 00013 struct SamEnumAliases ea; 00014 00015 fstring tmp; 00016 00017 int i; 00018 00019 mem_ctx = talloc_init("cac_samenum"); 00020 00021 hnd = cac_NewServerHandle(True); 00022 00023 cac_SetAuthDataFn(hnd, cactest_GetAuthDataFn); 00024 00025 cac_parse_cmd_line(argc, argv, hnd); 00026 00027 if(!cac_Connect(hnd, NULL)) { 00028 fprintf(stderr, "Could not connect to server %s. Error: %s\n", hnd->server, nt_errstr(hnd->status)); 00029 exit(-1); 00030 } 00031 00032 struct SamOpenDomain sod; 00033 ZERO_STRUCT(sod); 00034 00035 sod.in.access = MAXIMUM_ALLOWED_ACCESS; 00036 00037 if(!cac_SamOpenDomain(hnd, mem_ctx, &sod)) { 00038 fprintf(stderr, "Could not open domain. Error: %s\n", nt_errstr(hnd->status)); 00039 goto done; 00040 } 00041 00042 tmp[0] = 0x00; 00043 while(tmp[0] != 'q') { 00044 printf("Enumerate [u]sers, [g]roups or [a]liases or [q]uit: "); 00045 cactest_readline(stdin, tmp); 00046 00047 switch(tmp[0]) { 00048 case 'u': 00049 ZERO_STRUCT(eu); 00050 00051 eu.in.dom_hnd = sod.out.dom_hnd; 00052 00053 printf("ACB mask (can be 0): "); 00054 scanf("%x", &eu.in.acb_mask); 00055 00056 while(cac_SamEnumUsers(hnd, mem_ctx, &eu)) { 00057 printf("Enumerated %d users:\n", eu.out.num_users); 00058 for(i = 0; i < eu.out.num_users; i++) { 00059 printf(" Name: %s\n", eu.out.names[i]); 00060 printf(" RID: %d\n", eu.out.rids[i]); 00061 } 00062 } 00063 00064 if(CAC_OP_FAILED(hnd->status)) { 00065 printf("Could not enumerate users. Error: %s\n", nt_errstr(hnd->status)); 00066 } 00067 break; 00068 case 'g': 00069 ZERO_STRUCT(eg); 00070 eg.in.dom_hnd = sod.out.dom_hnd; 00071 00072 printf("Enumerating groups...\n"); 00073 while(cac_SamEnumGroups(hnd, mem_ctx, &eg)) { 00074 printf("Enumerated %d groups:\n", eg.out.num_groups); 00075 for(i = 0; i < eg.out.num_groups; i++) { 00076 printf("RID: %d\n", eg.out.rids[i]); 00077 printf("Name: %s\n", eg.out.names[i]); 00078 printf("Desc: %s\n", eg.out.descriptions[i]); 00079 } 00080 } 00081 00082 if(CAC_OP_FAILED(hnd->status)) { 00083 printf("Could not enumerate Groups. Error: %s\n", nt_errstr(hnd->status)); 00084 } 00085 break; 00086 case 'a': 00087 ZERO_STRUCT(ea); 00088 ea.in.dom_hnd = sod.out.dom_hnd; 00089 00090 printf("Enumerating Aliases...\n"); 00091 while(cac_SamEnumAliases(hnd, mem_ctx, &ea)) { 00092 printf("Enumerated %d aliases:\n", ea.out.num_aliases); 00093 00094 for(i = 0; i < ea.out.num_aliases; i++) { 00095 printf("RID: %d\n", ea.out.rids[i]); 00096 printf("Name: %s\n", ea.out.names[i]); 00097 printf("Desc: %s\n", ea.out.descriptions[i]); 00098 } 00099 } 00100 if(CAC_OP_FAILED(hnd->status)) { 00101 printf("Could not enumerate Aliases. Error: %s\n", nt_errstr(hnd->status)); 00102 } 00103 break; 00104 } 00105 } 00106 00107 cac_SamClose(hnd, mem_ctx, sod.out.dom_hnd); 00108 cac_SamClose(hnd, mem_ctx, sod.out.sam); 00109 00110 done: 00111 talloc_destroy(mem_ctx); 00112 cac_FreeHandle(hnd); 00113 00114 return 0; 00115 00116 }
|