diff options
Diffstat (limited to 'examples/libmsrpc/cacusermgr/cacusermgr.c')
-rw-r--r-- | examples/libmsrpc/cacusermgr/cacusermgr.c | 343 |
1 files changed, 0 insertions, 343 deletions
diff --git a/examples/libmsrpc/cacusermgr/cacusermgr.c b/examples/libmsrpc/cacusermgr/cacusermgr.c deleted file mode 100644 index 43c789b872..0000000000 --- a/examples/libmsrpc/cacusermgr/cacusermgr.c +++ /dev/null @@ -1,343 +0,0 @@ -/* - * Unix SMB/CIFS implementation. - * cacusermgr main implementation. - * - * Copyright (C) Chris Nicholls 2005 - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 3 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, see <http://www.gnu.org/licenses/>. */ - -#include "cacusermgr.h" - -#define DEFAULT_MENU_LINES 15 - - -void create_menu(CacServerHandle *hnd, TALLOC_CTX *mem_ctx, POLICY_HND *dom_hnd) { - struct SamCreateUser cu; - struct SamCreateGroup cg; - - fstring in; - fstring tmp; - - if(!hnd || !mem_ctx || !dom_hnd) { - printf("No Handle to SAM.\n"); - return; - } - - /*the menu*/ - in[0] = '\0'; - while(in[0] != 'c' && in[0] != 'C' && in[0] != 'q' && in[0] != 'Q') { - printf("\n"); - printf("[u] Create User\n"); - printf("[g] Create Group\n"); - printf("[m] Create Machine Account\n"); - printf("[c] Cancel\n\n"); - - printf("Command: "); - mgr_getline(in); - - printf("\n"); - - switch(in[0]) { - case 'u': /*create user*/ - case 'U': - ZERO_STRUCT(cu); - cu.in.dom_hnd = dom_hnd; - cu.in.acb_mask = ACB_NORMAL; - - printf("Enter name: "); - mgr_getline(tmp); - cu.in.name = talloc_strdup(mem_ctx, tmp); - - if(!cac_SamCreateUser(hnd, mem_ctx, &cu)) { - printerr("Could not create user.", hnd->status); - } - else { - user_menu(hnd, mem_ctx, dom_hnd, cu.out.user_hnd); - } - - /*this will break the loop and send us back to the main menu*/ - in[0] = 'c'; - break; - - case 'g': /*create group*/ - case 'G': - ZERO_STRUCT(cg); - cg.in.dom_hnd = dom_hnd; - cg.in.access = MAXIMUM_ALLOWED_ACCESS; - - printf("Enter name: "); - mgr_getline(tmp); - cg.in.name = talloc_strdup(mem_ctx, tmp); - - if(!cac_SamCreateGroup(hnd, mem_ctx, &cg)) { - printerr("Could not create group.", hnd->status); - } - else { - group_menu(hnd, mem_ctx, dom_hnd, cg.out.group_hnd); - } - - /*this will break the loop and send us back to the main menu*/ - in[0] = 'c'; - break; - - case 'm': /*create machine account*/ - case 'M': - ZERO_STRUCT(cu); - cu.in.dom_hnd = dom_hnd; - cu.in.acb_mask = ACB_WSTRUST; - - printf("Enter machine name: "); - mgr_getline(tmp); - - /*make sure we have a $ on the end*/ - if(tmp[strlen(tmp) - 1] != '$') - cu.in.name = talloc_asprintf(mem_ctx, "%s$", tmp); - else - cu.in.name = talloc_strdup(mem_ctx, tmp); - - strlower_m(cu.in.name); - - printf("Creating account: %s\n", cu.in.name); - - if(!cac_SamCreateUser(hnd, mem_ctx, &cu)) { - printerr("Could not create account.", hnd->status); - } - else { - user_menu(hnd, mem_ctx, dom_hnd, cu.out.user_hnd); - } - - /*this will break the loop and send us back to the main menu*/ - in[0] = 'c'; - break; - - case 'c': /*cancel*/ - case 'C': - case 'q': - case 'Q': - /*do nothing*/ - break; - - default: - printf("Invalid option\n"); - } - } - - return; -} - -void main_menu(CacServerHandle *hnd, TALLOC_CTX *mem_ctx, POLICY_HND *dom_hnd) { - fstring in; - - uint32 rid_type = 0; - - struct SamOpenUser openu; - struct SamOpenGroup openg; - struct SamEnumUsers enumu; - struct SamEnumGroups enumg; - struct SamFlush flush; - - char *name = NULL; - uint32 rid = 0; - - if(!hnd || !mem_ctx || !dom_hnd) { - printf("No handle to SAM.\n"); - return; - } - - /*initialize this here and don't worry about it later*/ - ZERO_STRUCT(flush); - flush.in.dom_hnd = dom_hnd; - - in[0] = '\0'; - - /*handle the menu and commands*/ - while(in[0] != 'q' && in[0] != 'Q') { - printf("\n"); - - printf("[o] Open User or Group\n"); - printf("[c] Create Account or Group\n"); - printf("[u] List Users\n"); - printf("[g] List Groups\n"); - printf("[m] List Machine Accounts\n"); - printf("[q] Quit\n\n"); - - printf("Command: "); - - mgr_getline(in); - - printf("\n"); - - switch(in[0]) { - case 'o': /*open user or group*/ - case 'O': - printf("Enter RID or Name: "); - rid_type = rid_or_name(hnd, mem_ctx, dom_hnd, &rid, &name); - - if(rid_type == CAC_USER_RID) { - ZERO_STRUCT(openu); - openu.in.dom_hnd = dom_hnd; - openu.in.rid = rid; - openu.in.access = MAXIMUM_ALLOWED_ACCESS; - - if(!cac_SamOpenUser(hnd, mem_ctx, &openu)) - printerr("Could not open user.", hnd->status); - else { - user_menu(hnd, mem_ctx, dom_hnd, openu.out.user_hnd); - - if(!cac_SamFlush(hnd, mem_ctx, &flush)) { - printerr("Lost handle while flushing SAM.", hnd->status); - /*we want to quit*/ - in[0] = 'q'; - } - } - } - else if(rid_type == CAC_GROUP_RID) { - ZERO_STRUCT(openg); - openg.in.dom_hnd = dom_hnd; - openg.in.rid = rid; - openg.in.access = MAXIMUM_ALLOWED_ACCESS; - - if(!cac_SamOpenGroup(hnd, mem_ctx, &openg)) - printerr("Could not open group.", hnd->status); - else { - group_menu(hnd, mem_ctx, dom_hnd, openg.out.group_hnd); - - if(!cac_SamFlush(hnd, mem_ctx, &flush)) { - printerr("Lost handle while flushing SAM.", hnd->status); - /*we want to quit*/ - in[0] = 'q'; - } - } - } - else { - printf("Unknown RID/Name.\n"); - } - - break; - - case 'c': /*create account/group*/ - case 'C': - create_menu(hnd, mem_ctx, dom_hnd); - if(!cac_SamFlush(hnd, mem_ctx, &flush)) { - printerr("Lost handle while flushing SAM.", hnd->status); - /*we want to quit*/ - in[0] = 'q'; - } - break; - - case 'u': /*list users*/ - case 'U': - ZERO_STRUCT(enumu); - enumu.in.dom_hnd = dom_hnd; - enumu.in.acb_mask = ACB_NORMAL; - - printf("Users:\n"); - while(cac_SamEnumUsers(hnd, mem_ctx, &enumu)) { - print_rid_list(enumu.out.rids, enumu.out.names, enumu.out.num_users); - } - if(CAC_OP_FAILED(hnd->status)) - printerr("Error occured while enumerating users.", hnd->status); - break; - - case 'g': /*list groups*/ - case 'G': - ZERO_STRUCT(enumg); - enumg.in.dom_hnd = dom_hnd; - - while(cac_SamEnumGroups(hnd, mem_ctx, &enumg)) { - print_rid_list( enumg.out.rids, enumg.out.names, enumg.out.num_groups); - } - - if(CAC_OP_FAILED(hnd->status)) - printerr("Error occured while enumerating groups.", hnd->status); - break; - - case 'm': /*list machine accounts*/ - case 'M': - ZERO_STRUCT(enumu); - enumu.in.dom_hnd = dom_hnd; - enumu.in.acb_mask = ACB_WSTRUST; - - printf("Users:\n"); - while(cac_SamEnumUsers(hnd, mem_ctx, &enumu)) { - print_rid_list( enumu.out.rids, enumu.out.names, enumu.out.num_users); - } - if(CAC_OP_FAILED(hnd->status)) - printerr("Error occured while enumerating accounts.", hnd->status); - break; - - case 'q': /*quit*/ - case 'Q': - /*just do nothing*/ - break; - - default: - printf("Invalid Command.\n"); - } - } -} - -int main(int argc, char **argv) { - CacServerHandle *hnd = NULL; - TALLOC_CTX *mem_ctx = NULL; - - struct SamOpenDomain sod; - - mem_ctx = talloc_init("cacusermgr"); - if(!mem_ctx) { - printf("Could not initialize Talloc Context\n"); - exit(-1); - } - - /**first initialize the server handle with what we have*/ - hnd = cac_NewServerHandle(True); - if(!hnd) { - printf("Could not create server handle\n"); - exit(-1); - } - - /*fill in the blanks*/ - if(!process_cmd_line(hnd, mem_ctx, argc, argv)) - usage(); - - if(!cac_Connect(hnd, NULL)) { - printf("Could not connect to server %s. %s\n", hnd->server, nt_errstr(hnd->status)); - exit(-1); - } - - /*open the domain sam*/ - ZERO_STRUCT(sod); - sod.in.access = MAXIMUM_ALLOWED_ACCESS; - - if(!cac_SamOpenDomain(hnd, mem_ctx, &sod)) { - printf("Could not open handle to domain SAM. %s\n", nt_errstr(hnd->status)); - goto cleanup; - } - - main_menu(hnd, mem_ctx, sod.out.dom_hnd); - -cleanup: - - if(sod.out.dom_hnd) - cac_SamClose(hnd, mem_ctx, sod.out.dom_hnd); - - if(sod.out.sam) - cac_SamClose(hnd, mem_ctx, sod.out.sam); - - cac_FreeHandle(hnd); - - talloc_destroy(mem_ctx); - - return 0; -} |