#include "libmsrpc.h"#include "test_util.h"Go to the source code of this file.
Defines | |
| #define | BIGGEST_UINT32 0xffffffff |
Functions | |
| int | main (int argc, char **argv) |
|
|
Definition at line 6 of file lsapriv.c. Referenced by main(). |
|
||||||||||||
|
Definition at line 8 of file lsapriv.c. References BIGGEST_UINT32, cac_Connect(), cac_FreeHandle(), cac_LsaEnumAccountRights(), cac_LsaEnumPrivileges(), cac_LsaOpenPolicy(), cac_LsaSetPrivileges(), cac_NewServerHandle(), CAC_OP_FAILED, cac_parse_cmd_line(), cac_SetAuthDataFn(), cactest_GetAuthDataFn(), cactest_readline(), fprintf(), LsaAddPrivileges::in, LsaEnumAccountRights::in, LsaEnumPrivileges::in, LsaOpenPolicy::in, nt_errstr(), LsaEnumAccountRights::out, LsaEnumPrivileges::out, LsaOpenPolicy::out, printf(), SEC_RIGHT_MAXIMUM_ALLOWED, _CACSERVERHANDLE::server, _CACSERVERHANDLE::status, talloc_array, talloc_destroy, talloc_init(), talloc_strdup(), True, uint32, and ZERO_STRUCT. 00008 { 00009 CacServerHandle *hnd = NULL; 00010 TALLOC_CTX *mem_ctx = NULL; 00011 00012 struct LsaOpenPolicy lop; 00013 struct LsaEnumPrivileges ep; 00014 struct LsaEnumAccountRights ar; 00015 struct LsaAddPrivileges ap; 00016 00017 fstring tmp; 00018 00019 uint32 i = 0; 00020 00021 mem_ctx = talloc_init("lsapriv"); 00022 00023 hnd = cac_NewServerHandle(True); 00024 00025 cac_SetAuthDataFn(hnd, cactest_GetAuthDataFn); 00026 00027 cac_parse_cmd_line(argc, argv, hnd); 00028 00029 if(!cac_Connect(hnd, NULL)) { 00030 fprintf(stderr, "Could not connect to server %s. Error: %s\n", hnd->server, nt_errstr(hnd->status)); 00031 exit(-1); 00032 } 00033 00034 ZERO_STRUCT(lop); 00035 00036 lop.in.access = SEC_RIGHT_MAXIMUM_ALLOWED; 00037 00038 if(!cac_LsaOpenPolicy(hnd, mem_ctx, &lop)) { 00039 fprintf(stderr, "Could not open LSA policy. Error: %s\n", nt_errstr(hnd->status)); 00040 goto done; 00041 } 00042 00043 /*first enumerate possible privileges*/ 00044 ZERO_STRUCT(ep); 00045 00046 ep.in.pol = lop.out.pol; 00047 ep.in.pref_max_privs = BIGGEST_UINT32; 00048 00049 printf("Enumerating supported privileges:\n"); 00050 while(cac_LsaEnumPrivileges(hnd, mem_ctx, &ep)) { 00051 for(i = 0; i < ep.out.num_privs; i++) { 00052 printf("\t%s\n", ep.out.priv_names[i]); 00053 } 00054 } 00055 00056 if(CAC_OP_FAILED(hnd->status)) { 00057 fprintf(stderr, "Could not enumerate privileges. Error: %s\n", nt_errstr(hnd->status)); 00058 goto done; 00059 } 00060 00061 printf("Enter account name: "); 00062 cactest_readline(stdin, tmp); 00063 00064 ZERO_STRUCT(ar); 00065 00066 ar.in.pol = lop.out.pol; 00067 ar.in.name = talloc_strdup(mem_ctx, tmp); 00068 00069 printf("Enumerating privileges for %s:\n", ar.in.name); 00070 if(!cac_LsaEnumAccountRights(hnd, mem_ctx, &ar)) { 00071 fprintf(stderr, "Could not enumerate privileges. Error: %s\n", nt_errstr(hnd->status)); 00072 goto done; 00073 } 00074 00075 printf("Enumerated %d privileges:\n", ar.out.num_privs); 00076 00077 for(i = 0; i < ar.out.num_privs; i++) 00078 printf("\t%s\n", ar.out.priv_names[i]); 00079 00080 ZERO_STRUCT(ap); 00081 00082 ap.in.pol = lop.out.pol; 00083 ap.in.name = ar.in.name; 00084 00085 printf("How many privileges will you set: "); 00086 scanf("%d", &ap.in.num_privs); 00087 00088 ap.in.priv_names = talloc_array(mem_ctx, char *, ap.in.num_privs); 00089 if(!ap.in.priv_names) { 00090 fprintf(stderr, "No memory\n"); 00091 goto done; 00092 } 00093 00094 for(i = 0; i < ap.in.num_privs; i++) { 00095 printf("Enter priv %d: ", i); 00096 cactest_readline(stdin, tmp); 00097 00098 ap.in.priv_names[i] = talloc_strdup(mem_ctx, tmp); 00099 } 00100 00101 if(!cac_LsaSetPrivileges(hnd, mem_ctx, &ap)) { 00102 fprintf(stderr, "Could not set privileges. Error: %s\n", nt_errstr(hnd->status)); 00103 goto done; 00104 } 00105 00106 done: 00107 talloc_destroy(mem_ctx); 00108 cac_FreeHandle(hnd); 00109 00110 return 0; 00111 00112 }
|