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

📄 clirap2.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
*             False     - failure*************************************************************************/BOOL cli_get_pdc_name(struct cli_state *cli, char *workgroup, char *pdc_name){  char *rparam = NULL;  char *rdata = NULL;  unsigned int rdrcnt,rprcnt;  char *p;  char param[WORDSIZE                       /* api number    */	    +sizeof(RAP_NetServerEnum2_REQ) /* req string    */	    +sizeof(RAP_SERVER_INFO_L1)     /* return string */	    +WORDSIZE                       /* info level    */	    +WORDSIZE                       /* buffer size   */	    +DWORDSIZE                      /* server type   */	    +RAP_MACHNAME_LEN];             /* workgroup     */  int count = -1;    *pdc_name = '\0';  /* send a SMBtrans command with api NetServerEnum */  p = make_header(param, RAP_NetServerEnum2,		  RAP_NetServerEnum2_REQ, RAP_SERVER_INFO_L1);  PUTWORD(p, 1); /* info level */  PUTWORD(p, CLI_BUFFER_SIZE);  PUTDWORD(p, SV_TYPE_DOMAIN_CTRL);  PUTSTRING(p, workgroup, RAP_MACHNAME_LEN);	  if (cli_api(cli, 	      param, PTR_DIFF(p,param), 8,        /* params, length, max */	      NULL, 0, CLI_BUFFER_SIZE,               /* data, length, max */	      &rparam, &rprcnt,                   /* return params, return size */	      &rdata, &rdrcnt                     /* return data, return size */	      )) {    cli->rap_error = GETRES(rparam);			        /*         * We only really care to copy a name if the         * API succeeded and we got back a name.         */    if (cli->rap_error == 0) {      p = rparam + WORDSIZE + WORDSIZE; /* skip result and converter */      GETWORD(p, count);      p = rdata;            if (count > 0)	GETSTRING(p, pdc_name);    }    else {	DEBUG(4,("cli_get_pdc_name: machine %s failed the NetServerEnum call. "		 "Error was : %s.\n", cli->desthost, cli_errstr(cli) ));    }  }    SAFE_FREE(rparam);  SAFE_FREE(rdata);    return(count > 0);}/*************************************************************************** Function Name:  cli_get_server_domain** PURPOSE:  Remotes a NetWkstaGetInfo API call to the current server*           requesting wksta_info_10 level information to determine*           the domain the server belongs to. On success, this*           routine sets the server_domain field in the cli_state structure*           to the server's domain name.** Dependencies: none** Parameters: *             cli       - pointer to cli_state structure** Returns:*             True      - success*             False     - failure** Origins:  samba 2.0.6 source/libsmb/clientgen.c cli_NetServerEnum()*************************************************************************/BOOL cli_get_server_domain(struct cli_state *cli){  char *rparam = NULL;  char *rdata = NULL;  unsigned int rdrcnt,rprcnt;  char *p;  char param[WORDSIZE                      /* api number    */	    +sizeof(RAP_WWkstaGetInfo_REQ) /* req string    */	    +sizeof(RAP_WKSTA_INFO_L10)    /* return string */	    +WORDSIZE                      /* info level    */	    +WORDSIZE];                    /* buffer size   */  int res = -1;    /* send a SMBtrans command with api NetWkstaGetInfo */  p = make_header(param, RAP_WWkstaGetInfo,		  RAP_WWkstaGetInfo_REQ, RAP_WKSTA_INFO_L10);  PUTWORD(p, 10); /* info level */  PUTWORD(p, CLI_BUFFER_SIZE);	  if (cli_api(cli, param, PTR_DIFF(p,param), 8, /* params, length, max */	      NULL, 0, CLI_BUFFER_SIZE,         /* data, length, max */	      &rparam, &rprcnt,         /* return params, return size */	      &rdata, &rdrcnt)) {       /* return data, return size */    res = GETRES(rparam);    p = rdata;		        if (res == 0) {      int converter;      p = rparam + WORDSIZE;      GETWORD(p, converter);            p = rdata + DWORDSIZE + DWORDSIZE; /* skip computer & user names */      GETSTRINGP(p, cli->server_domain, rdata, converter);    }  }    SAFE_FREE(rparam);  SAFE_FREE(rdata);    return(res == 0);}/*************************************************************************** Function Name:  cli_get_server_type** PURPOSE:  Remotes a NetServerGetInfo API call to the current server*           requesting server_info_1 level information to retrieve*           the server type.** Dependencies: none** Parameters: *             cli       - pointer to cli_state structure*             pstype    - pointer to uint32 to contain returned server type** Returns:*             True      - success*             False     - failure** Origins:  samba 2.0.6 source/libsmb/clientgen.c cli_NetServerEnum()*************************************************************************/BOOL cli_get_server_type(struct cli_state *cli, uint32 *pstype){  char *rparam = NULL;  char *rdata = NULL;  unsigned int rdrcnt,rprcnt;  char *p;  char param[WORDSIZE                       /* api number    */	    +sizeof(RAP_WserverGetInfo_REQ) /* req string    */	    +sizeof(RAP_SERVER_INFO_L1)     /* return string */	    +WORDSIZE                       /* info level    */            +WORDSIZE];                     /* buffer size   */  int res = -1;    /* send a SMBtrans command with api NetServerGetInfo */  p = make_header(param, RAP_WserverGetInfo,		  RAP_WserverGetInfo_REQ, RAP_SERVER_INFO_L1);  PUTWORD(p, 1); /* info level */  PUTWORD(p, CLI_BUFFER_SIZE);	  if (cli_api(cli, 	      param, PTR_DIFF(p,param), 8, /* params, length, max */	      NULL, 0, CLI_BUFFER_SIZE, /* data, length, max */	      &rparam, &rprcnt,         /* return params, return size */	      &rdata, &rdrcnt           /* return data, return size */	      )) {        res = GETRES(rparam);        if (res == 0 || res == ERRmoredata) {      p = rdata;					      *pstype = IVAL(p,18) & ~SV_TYPE_LOCAL_LIST_ONLY;    }  }    SAFE_FREE(rparam);  SAFE_FREE(rdata);    return(res == 0 || res == ERRmoredata);}/*************************************************************************** Function Name:  cli_ns_check_server_type** PURPOSE:  Remotes a NetServerEnum2 API call to the current server*           requesting server_info_0 level information of machines*           matching the given server type. If the returned server*           list contains the machine name contained in cli->desthost*           then we conclude the server type checks out. This routine*           is useful to retrieve list of server's of a certain*           type when all you have is a null session connection and*           can't remote API calls such as NetWkstaGetInfo or *           NetServerGetInfo.** Dependencies: none** Parameters: *             cli       - pointer to cli_state structure*             workgroup - pointer to string containing domain*             stype     - server type** Returns:*             True      - success*             False     - failure*************************************************************************/BOOL cli_ns_check_server_type(struct cli_state *cli, char *workgroup, uint32 stype){  char *rparam = NULL;  char *rdata = NULL;  unsigned int rdrcnt,rprcnt;  char *p;  char param[WORDSIZE                       /* api number    */	    +sizeof(RAP_NetServerEnum2_REQ) /* req string    */	    +sizeof(RAP_SERVER_INFO_L0)     /* return string */	    +WORDSIZE                       /* info level    */	    +WORDSIZE                       /* buffer size   */	    +DWORDSIZE                      /* server type   */	    +RAP_MACHNAME_LEN];             /* workgroup     */  BOOL found_server = False;  int res = -1;    /* send a SMBtrans command with api NetServerEnum */  p = make_header(param, RAP_NetServerEnum2,		  RAP_NetServerEnum2_REQ, RAP_SERVER_INFO_L0);  PUTWORD(p, 0); /* info level 0 */  PUTWORD(p, CLI_BUFFER_SIZE);  PUTDWORD(p, stype);  PUTSTRING(p, workgroup, RAP_MACHNAME_LEN);	  if (cli_api(cli, 	      param, PTR_DIFF(p,param), 8, /* params, length, max */	      NULL, 0, CLI_BUFFER_SIZE,  /* data, length, max */	      &rparam, &rprcnt,          /* return params, return size */	      &rdata, &rdrcnt            /* return data, return size */	      )) {	    res = GETRES(rparam);    cli->rap_error = res;    if (res == 0 || res == ERRmoredata) {      int i, count;      p = rparam + WORDSIZE + WORDSIZE;      GETWORD(p, count);      p = rdata;      for (i = 0;i < count;i++, p += 16) {	char ret_server[RAP_MACHNAME_LEN];	GETSTRINGF(p, ret_server, RAP_MACHNAME_LEN);	if (strequal(ret_server, cli->desthost)) {	  found_server = True;	  break;	}      }    }    else {      DEBUG(4,("cli_ns_check_server_type: machine %s failed the NetServerEnum call. "	       "Error was : %s.\n", cli->desthost, cli_errstr(cli) ));    }  }    SAFE_FREE(rparam);  SAFE_FREE(rdata);	  return found_server; }/**************************************************************************** perform a NetWkstaUserLogoff****************************************************************************/BOOL cli_NetWkstaUserLogoff(struct cli_state *cli,char *user, char *workstation){  char *rparam = NULL;  char *rdata = NULL;  char *p;  unsigned int rdrcnt,rprcnt;  char param[WORDSIZE                           /* api number    */	    +sizeof(RAP_NetWkstaUserLogoff_REQ) /* req string    */	    +sizeof(RAP_USER_LOGOFF_INFO_L1)    /* return string */	    +RAP_USERNAME_LEN+1                 /* user name+pad */	    +RAP_MACHNAME_LEN                   /* wksta name    */	    +WORDSIZE                           /* buffer size   */	    +WORDSIZE];                         /* buffer size?  */  fstring upperbuf;    memset(param, 0, sizeof(param));  /* send a SMBtrans command with api NetWkstaUserLogoff */  p = make_header(param, RAP_WWkstaUserLogoff,		  RAP_NetWkstaUserLogoff_REQ, RAP_USER_LOGOFF_INFO_L1);  PUTDWORD(p, 0); /* Null pointer */  PUTDWORD(p, 0); /* Null pointer */  fstrcpy(upperbuf, user);  strupper_m(upperbuf);  PUTSTRINGF(p, upperbuf, RAP_USERNAME_LEN);  p++; /* strange format, but ok */  fstrcpy(upperbuf, workstation);  strupper_m(upperbuf);  PUTSTRINGF(p, upperbuf, RAP_MACHNAME_LEN);  PUTWORD(p, CLI_BUFFER_SIZE);  PUTWORD(p, CLI_BUFFER_SIZE);    if (cli_api(cli,	      param, PTR_DIFF(p,param),1024,  /* param, length, max */	      NULL, 0, CLI_BUFFER_SIZE,       /* data, length, max */	      &rparam, &rprcnt,               /* return params, return size */	      &rdata, &rdrcnt                 /* return data, return size */	      )) {    cli->rap_error = GETRES(rparam);        if (cli->rap_error != 0) {      DEBUG(4,("NetwkstaUserLogoff gave error %d\n", cli->rap_error));    }  }    SAFE_FREE(rparam);  SAFE_FREE(rdata);  return (cli->rap_error == 0);} int cli_NetPrintQEnum(struct cli_state *cli,		void (*qfn)(const char*,uint16,uint16,uint16,const char*,const char*,const char*,const char*,const char*,uint16,uint16),		void (*jfn)(uint16,const char*,const char*,const char*,const char*,uint16,uint16,const char*,uint,uint,const char*)){  char param[WORDSIZE                         /* api number    */	    +sizeof(RAP_NetPrintQEnum_REQ)    /* req string    */	    +sizeof(RAP_PRINTQ_INFO_L2)       /* return string */	    +WORDSIZE                         /* info level    */	    +WORDSIZE                         /* buffer size   */	    +sizeof(RAP_SMB_PRINT_JOB_L1)];   /* more ret data */  char *p;  char *rparam = NULL;  char *rdata = NULL;   unsigned int rprcnt, rdrcnt;  int res = -1;    memset(param, '\0',sizeof(param));  p = make_header(param, RAP_WPrintQEnum, 		  RAP_NetPrintQEnum_REQ, RAP_PRINTQ_INFO_L2);  PUTWORD(p,2); /* Info level 2 */  PUTWORD(p,0xFFE0); /* Return buffer size */  PUTSTRING(p, RAP_SMB_PRINT_JOB_L1, 0);  if (cli_api(cli,	      param, PTR_DIFF(p,param),1024,	      NULL, 0, CLI_BUFFER_SIZE,	      &rparam, &rprcnt,	      &rdata, &rdrcnt)) {    res = GETRES(rparam);    cli->rap_error = res;    if (res != 0) {      DEBUG(1,("NetPrintQEnum gave error %d\n", res));    }  }  if (rdata) {    if (res == 0 || res == ERRmoredata) {      int i, converter, count;      p = rparam + WORDSIZE;      GETWORD(p, converter);      GETWORD(p, count);      p = rdata;      for (i=0;i<count;i++) {	pstring qname, sep_file, print_proc, dest, parms, comment;	uint16 jobcount, priority, start_time, until_time, status;	GETSTRINGF(p, qname, RAP_SHARENAME_LEN);	p++; /* pad */	GETWORD(p, priority);	GETWORD(p, start_time);	GETWORD(p, until_time);	GETSTRINGP(p, sep_file, rdata, converter);	GETSTRINGP(p, print_proc, rdata, converter);	GETSTRINGP(p, dest, rdata, converter);	GETSTRINGP(p, parms, rdata, converter);	GETSTRINGP(p, parms, comment, converter);	GETWORD(p, status);	GETWORD(p, jobcount);	qfn(qname, priority, start_time, until_time, sep_file, print_proc,	    dest, parms, comment, status, jobcount);	if (jobcount) {	  int j;	  for (j=0;j<jobcount;j++) {	    uint16 jid, pos, fsstatus;	    pstring ownername, notifyname, datatype, jparms, jstatus, jcomment;	    unsigned int submitted, jsize;	    	    GETWORD(p, jid);	    GETSTRINGF(p, ownername, RAP_USERNAME_LEN);

⌨️ 快捷键说明

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