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

📄 clirap2.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
  p = make_header(param, RAP_WGroupDelUser, RAP_NetGroupDelUser_REQ, NULL);  PUTSTRING(p,group_name,RAP_GROUPNAME_LEN);  PUTSTRING(p,user_name,RAP_USERNAME_LEN);  if (cli_api(cli, 	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */	      NULL, 0, 200,       /* data, length, maxlen */	      &rparam, &rprcnt,   /* return params, length */	      &rdata, &rdrcnt))   /* return data, length */    {      res = GETRES(rparam);            switch(res) {        case 0:	  break;        case 5:        case 65:	  DEBUG(1, ("Access Denied\n"));	  break;        case 50:	  DEBUG(1, ("Not supported by server\n"));	  break;        case 2220:	  DEBUG(1, ("Group does not exist\n"));	  break;        case 2221:	  DEBUG(1, ("User does not exist\n"));	  break;        case 2237:	  DEBUG(1, ("User is not in group\n"));	  break;        default:	  DEBUG(4,("NetGroupDelUser res=%d\n", res));      }    } else {      res = -1;      DEBUG(4,("NetGroupDelUser failed\n"));    }    SAFE_FREE(rparam);  SAFE_FREE(rdata);	  return res; }int cli_NetGroupAddUser(struct cli_state * cli, const char *group_name, const char *user_name){  char *rparam = NULL;  char *rdata = NULL;  char *p;  unsigned int rdrcnt,rprcnt;  int res;  char param[WORDSIZE                        /* api number    */	    +sizeof(RAP_NetGroupAddUser_REQ) /* parm string   */	    +1                               /* no ret string */	    +RAP_GROUPNAME_LEN               /* group name    */	    +RAP_USERNAME_LEN];              /* user to add   */  /* now send a SMBtrans command with api GroupMemberAdd */  p = make_header(param, RAP_WGroupAddUser, RAP_NetGroupAddUser_REQ, NULL);  PUTSTRING(p,group_name,RAP_GROUPNAME_LEN);  PUTSTRING(p,user_name,RAP_USERNAME_LEN);  if (cli_api(cli, 	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */	      NULL, 0, 200,       /* data, length, maxlen */	      &rparam, &rprcnt,   /* return params, length */	      &rdata, &rdrcnt))   /* return data, length */    {      res = GETRES(rparam);            switch(res) {        case 0:	  break;        case 5:        case 65:	  DEBUG(1, ("Access Denied\n"));	  break;        case 50:	  DEBUG(1, ("Not supported by server\n"));	  break;        case 2220:	  DEBUG(1, ("Group does not exist\n"));	  break;        case 2221:	  DEBUG(1, ("User does not exist\n"));	  break;        default:	  DEBUG(4,("NetGroupAddUser res=%d\n", res));      }    } else {      res = -1;      DEBUG(4,("NetGroupAddUser failed\n"));    }    SAFE_FREE(rparam);  SAFE_FREE(rdata);	  return res;}int cli_NetGroupGetUsers(struct cli_state * cli, const char *group_name, void (*fn)(const char *, void *), void *state ){  char *rparam = NULL;  char *rdata = NULL;  char *p;  unsigned int rdrcnt,rprcnt;  int res = -1;  char param[WORDSIZE                        /* api number    */	    +sizeof(RAP_NetGroupGetUsers_REQ)/* parm string   */	    +sizeof(RAP_GROUP_USERS_INFO_0)  /* return string */	    +RAP_GROUPNAME_LEN               /* group name    */	    +WORDSIZE                        /* info level    */	    +WORDSIZE];                      /* buffer size   */  /* now send a SMBtrans command with api GroupGetUsers */  p = make_header(param, RAP_WGroupGetUsers,		  RAP_NetGroupGetUsers_REQ, RAP_GROUP_USERS_INFO_0);  PUTSTRING(p,group_name,RAP_GROUPNAME_LEN-1);  PUTWORD(p,0); /* info level 0 */  PUTWORD(p,0xFFE0); /* return buffer size */  if (cli_api(cli,	      param, PTR_DIFF(p,param),PTR_DIFF(p,param),	      NULL, 0, CLI_BUFFER_SIZE,	      &rparam, &rprcnt,	      &rdata, &rdrcnt)) {    res = GETRES(rparam);    cli->rap_error = res;    if (res != 0) {      DEBUG(1,("NetGroupGetUsers gave error %d\n", res));    }  }  if (rdata) {    if (res == 0 || res == ERRmoredata) {      int i, count;      fstring username;      p = rparam + WORDSIZE + WORDSIZE;      GETWORD(p, count);      for (i=0,p=rdata; i<count; i++) {	GETSTRINGF(p, username, RAP_USERNAME_LEN);	fn(username, state);      }    } else {      DEBUG(4,("NetGroupGetUsers res=%d\n", res));    }  } else {    DEBUG(4,("NetGroupGetUsers no data returned\n"));  }  SAFE_FREE(rdata);  SAFE_FREE(rparam);  return res;}int cli_NetUserGetGroups(struct cli_state * cli, const char *user_name, void (*fn)(const char *, void *), void *state ){  char *rparam = NULL;  char *rdata = NULL;  char *p;  unsigned int rdrcnt,rprcnt;  int res = -1;  char param[WORDSIZE                        /* api number    */	    +sizeof(RAP_NetUserGetGroups_REQ)/* parm string   */	    +sizeof(RAP_GROUP_USERS_INFO_0)  /* return string */	    +RAP_USERNAME_LEN               /* user name    */	    +WORDSIZE                        /* info level    */	    +WORDSIZE];                      /* buffer size   */  /* now send a SMBtrans command with api GroupGetUsers */  p = make_header(param, RAP_WUserGetGroups,		  RAP_NetUserGetGroups_REQ, RAP_GROUP_USERS_INFO_0);  PUTSTRING(p,user_name,RAP_USERNAME_LEN-1);  PUTWORD(p,0); /* info level 0 */  PUTWORD(p,0xFFE0); /* return buffer size */  if (cli_api(cli,	      param, PTR_DIFF(p,param),PTR_DIFF(p,param),	      NULL, 0, CLI_BUFFER_SIZE,	      &rparam, &rprcnt,	      &rdata, &rdrcnt)) {    res = GETRES(rparam);    cli->rap_error = res;    if (res != 0) {      DEBUG(1,("NetUserGetGroups gave error %d\n", res));    }  }  if (rdata) {    if (res == 0 || res == ERRmoredata) {      int i, count;      fstring groupname;      p = rparam + WORDSIZE + WORDSIZE;      GETWORD(p, count);      for (i=0,p=rdata; i<count; i++) {    	GETSTRINGF(p, groupname, RAP_USERNAME_LEN);	    fn(groupname, state);      }    } else {      DEBUG(4,("NetUserGetGroups res=%d\n", res));    }  } else {    DEBUG(4,("NetUserGetGroups no data returned\n"));  }  SAFE_FREE(rdata);  SAFE_FREE(rparam);  return res;}/**************************************************************************** call a NetUserDelete - delete user from remote server****************************************************************************/int cli_NetUserDelete(struct cli_state *cli, const char * user_name ){  char *rparam = NULL;  char *rdata = NULL;  char *p;  unsigned int rdrcnt,rprcnt;  int res;  char param[WORDSIZE                    /* api number    */	    +sizeof(RAP_NetGroupDel_REQ) /* parm string   */	    +1                           /* no ret string */	    +RAP_USERNAME_LEN            /* user to del   */	    +WORDSIZE];                  /* reserved word */  /* now send a SMBtrans command with api UserDel */  p = make_header(param, RAP_WUserDel, RAP_NetGroupDel_REQ, NULL);    PUTSTRING(p, user_name, RAP_USERNAME_LEN);  PUTWORD(p,0);  /* reserved word MBZ on input */        	   if (cli_api(cli, 	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */	      NULL, 0, 200,       /* data, length, maxlen */	      &rparam, &rprcnt,   /* return params, length */	      &rdata, &rdrcnt))   /* return data, length */    {      res = GETRES(rparam);            if (res == 0) {	/* nothing to do */		      }      else if ((res == 5) || (res == 65)) {         DEBUG(1, ("Access Denied\n"));      }      else if (res == 2221) {         DEBUG (1, ("User does not exist\n"));      }      else {          DEBUG(4,("NetUserDelete res=%d\n", res));      }          } else {      res = -1;      DEBUG(4,("NetUserDelete failed\n"));    }    SAFE_FREE(rparam);  SAFE_FREE(rdata);	  return res;}/**************************************************************************** call a NetUserAdd - add user to remote server****************************************************************************/int cli_NetUserAdd(struct cli_state *cli, RAP_USER_INFO_1 * userinfo ){     char *rparam = NULL;  char *rdata = NULL;  char *p;                                            unsigned int rdrcnt,rprcnt;  int res;  char param[WORDSIZE                    /* api number    */	    +sizeof(RAP_NetUserAdd2_REQ) /* req string    */	    +sizeof(RAP_USER_INFO_L1)    /* data string   */	    +WORDSIZE                    /* info level    */	    +WORDSIZE                    /* buffer length */	    +WORDSIZE];                  /* reserved      */   char data[1024];  /* offset into data of free format strings.  Will be updated */  /* by PUTSTRINGP macro and end up with total data length.    */  int soffset=RAP_USERNAME_LEN+1 /* user name + pad */    + RAP_UPASSWD_LEN            /* password        */    + DWORDSIZE                  /* password age    */    + WORDSIZE                   /* privilege       */    + DWORDSIZE                  /* home dir ptr    */    + DWORDSIZE                  /* comment ptr     */    + WORDSIZE                   /* flags           */    + DWORDSIZE;                 /* login script ptr*/  /* now send a SMBtrans command with api NetUserAdd */  p = make_header(param, RAP_WUserAdd2,		  RAP_NetUserAdd2_REQ, RAP_USER_INFO_L1);  PUTWORD(p, 1); /* info level */  PUTWORD(p, 0); /* pwencrypt */  if(userinfo->passwrd)    PUTWORD(p,MIN(strlen(userinfo->passwrd), RAP_UPASSWD_LEN));  else    PUTWORD(p, 0); /* password length */  p = data;  memset(data, '\0', soffset);  PUTSTRINGF(p, userinfo->user_name, RAP_USERNAME_LEN);  PUTBYTE(p, 0); /* pad byte 0 */  PUTSTRINGF(p, userinfo->passwrd, RAP_UPASSWD_LEN);  PUTDWORD(p, 0); /* pw age - n.a. on user add */  PUTWORD(p, userinfo->priv);  PUTSTRINGP(p, userinfo->home_dir, data, soffset);  PUTSTRINGP(p, userinfo->comment, data, soffset);  PUTWORD(p, userinfo->userflags);  PUTSTRINGP(p, userinfo->logon_script, data, soffset);  if (cli_api(cli, 	      param, sizeof(param), 1024, /* Param, length, maxlen */	      data, soffset, sizeof(data), /* data, length, maxlen */	      &rparam, &rprcnt,   /* return params, length */	      &rdata, &rdrcnt))   /* return data, length */    {      res = GETRES(rparam);            if (res == 0) {	/* nothing to do */		      }             else if ((res == 5) || (res == 65)) {        DEBUG(1, ("Access Denied\n"));      }      else if (res == 2224) {        DEBUG (1, ("User already exists\n"));      }      else {	    DEBUG(4,("NetUserAdd res=%d\n", res));      }    } else {      res = -1;      DEBUG(4,("NetUserAdd failed\n"));    }    SAFE_FREE(rparam);  SAFE_FREE(rdata);  return res;}/****************************************************************************call a NetUserEnum - try and list users on a different host****************************************************************************/int cli_RNetUserEnum(struct cli_state *cli, void (*fn)(const char *, const char *, const char *, const char *, void *), void *state){  char param[WORDSIZE                 /* api number    */	    +sizeof(RAP_NetUserEnum_REQ) /* parm string   */	    +sizeof(RAP_USER_INFO_L1)    /* return string */	    +WORDSIZE                 /* info level    */	    +WORDSIZE];               /* buffer size   */  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_WUserEnum,		  RAP_NetUserEnum_REQ, RAP_USER_INFO_L1);  PUTWORD(p,1); /* Info level 1 */  PUTWORD(p,0xFF00); /* Return buffer size *//* BB Fix handling of large numbers of users to be returned */  if (cli_api(cli,	      param, PTR_DIFF(p,param),8,	      NULL, 0, CLI_BUFFER_SIZE,	      &rparam, &rprcnt,	      &rdata, &rdrcnt)) {    res = GETRES(rparam);    cli->rap_error = res;    if (cli->rap_error != 0) {      DEBUG(1,("NetUserEnum gave error %d\n", cli->rap_error));    }  }  if (rdata) {    if (res == 0 || res == ERRmoredata) {      int i, converter, count;      char username[RAP_USERNAME_LEN];      char userpw[RAP_UPASSWD_LEN];      pstring comment, homedir, logonscript;      p = rparam + WORDSIZE; /* skip result */      GETWORD(p, converter);      GETWORD(p, count);      for (i=0,p=rdata;i<count;i++) {        GETSTRINGF(p, username, RAP_USERNAME_LEN);        p++; /* pad byte */        GETSTRINGF(p, userpw, RAP_UPASSWD_LEN);        p += DWORDSIZE; /* skip password age */        p += WORDSIZE;  /* skip priv: 0=guest, 1=user, 2=admin */        GETSTRINGP(p, homedir, rdata, converter);        GETSTRINGP(p, comment, rdata, converter);        p += WORDSIZE;  /* skip flags */        GETSTRINGP(p, logonscript, rdata, converter);

⌨️ 快捷键说明

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