⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 samlookup.c

📁 samba服务器!
💻 C
字号:
/*lookup names or rids*/#include "libmsrpc.h"#include "test_util.h"int main(int argc, char **argv) {   CacServerHandle *hnd = NULL;   TALLOC_CTX *mem_ctx = NULL;                  struct SamGetNamesFromRids sgn;   struct SamGetRidsFromNames sgr;   fstring tmp;   fstring input;      int i;   mem_ctx = talloc_init("cac_samenum");   hnd = cac_NewServerHandle(True);   cac_parse_cmd_line(argc, argv, hnd);   if(!cac_Connect(hnd, NULL)) {      fprintf(stderr, "Could not connect to server %s. Error: %s\n", hnd->server, nt_errstr(hnd->status));      exit(-1);   }   struct SamOpenDomain sod;   ZERO_STRUCT(sod);   sod.in.access = MAXIMUM_ALLOWED_ACCESS;    if(!cac_SamOpenDomain(hnd, mem_ctx, &sod)) {      fprintf(stderr, "Could not open domain. Error: %s\n", nt_errstr(hnd->status));      goto done;   }   tmp[0] = 0x00;   while(tmp[0] != 'q') {      printf("get [n]ames or get [r]ids or [q]uit: ");      cactest_readline(stdin, tmp);      switch(tmp[0]) {         case 'n':            ZERO_STRUCT(sgn);            sgn.in.dom_hnd = sod.out.dom_hnd;            printf("How many rids will you enter: ");            scanf("%d", &sgn.in.num_rids);            sgn.in.rids = talloc_array(mem_ctx, int, sgn.in.num_rids);                        for(i = 0; i < sgn.in.num_rids; i++) {               printf("  Enter RID %d: 0x", i);               scanf("%x", &sgn.in.rids[i]);            }            printf("Getting names...\n");            if(!cac_SamGetNamesFromRids(hnd, mem_ctx, &sgn)) {               fprintf(stderr, "could not lookup names. Error: %s\n", nt_errstr(hnd->status));               talloc_free(sgn.in.rids);               continue;            }            printf("Found %d names:\n", sgn.out.num_names);            for(i = 0; i < sgn.out.num_names; i++) {               printf(" RID:  0x%x ", sgn.out.map[i].rid);               if(sgn.out.map[i].found) {                  printf("Name: %s\n", sgn.out.map[i].name);               }               else {                  printf("Unknown RID\n");               }            }            break;         case 'r':            ZERO_STRUCT(sgr);            sgr.in.dom_hnd = sod.out.dom_hnd;            printf("How many names will you enter: ");            scanf("%d", &sgr.in.num_names);            sgr.in.names = talloc_array(mem_ctx, char *, sgr.in.num_names);            for(i = 0; i < sgr.in.num_names; i++) {               printf(" Enter name %d: ", (i+1));               cactest_readline(stdin, input);               sgr.in.names[i] = talloc_strdup(mem_ctx, input);            }            if(!cac_SamGetRidsFromNames(hnd, mem_ctx, &sgr)) {               fprintf(stderr, "Could not lookup names. Error: %s\n", nt_errstr(hnd->status));               continue;            }            printf("Found %d RIDs:\n", sgr.out.num_rids);            for(i = 0; i < sgr.out.num_rids; i++) {               printf(" Name: %s ", sgr.out.map[i].name);               if(sgr.out.map[i].found) {                  printf("RID: 0x%x\n", sgr.out.map[i].rid);               }               else {                  printf("Unknown name\n");               }            }            break;         case 'q':            printf("\n");            break;         default:            printf("Invalid command!\n");      }   }   cac_SamClose(hnd, mem_ctx, sod.out.dom_hnd);   cac_SamClose(hnd, mem_ctx, sod.out.sam);done:   talloc_destroy(mem_ctx);   cac_FreeHandle(hnd);   return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -