📄 clirap2.c
字号:
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 + -