#include "../librpc/gen_ndr/rap.h"
#include "../lib/util/binsearch.h"
#include "../libcli/auth/libcli_auth.h"
+#include "rpc_client/init_lsa.h"
+#include "rpc_server/rpc_ncacn_np.h"
#ifdef CHECK_TYPES
#undef CHECK_TYPES
return val;
}
-static bool api_Unsupported(connection_struct *conn, uint16 vuid,
+static bool api_Unsupported(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt,
char **rdata, char **rparam,
int *rdata_len, int *rparam_len);
-static bool api_TooSmall(connection_struct *conn, uint16 vuid, char *param, char *data,
+static bool api_TooSmall(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid, char *param, char *data,
int mdrcnt, int mprcnt,
char **rdata, char **rparam,
int *rdata_len, int *rparam_len);
conn->connectpath,
conn->server_info->utok.gid,
conn->server_info->sanitized_username,
- pdb_get_domain(conn->server_info->sam_account),
+ conn->server_info->info3->base.domain.string,
buf);
if (!buf) {
*p_space_remaining = 0;
conn->connectpath,
conn->server_info->utok.gid,
conn->server_info->sanitized_username,
- pdb_get_domain(conn->server_info->sam_account),
+ conn->server_info->info3->base.domain.string,
buf);
if (!buf) {
return 0;
return result;
}
-static bool api_DosPrintQGetInfo(connection_struct *conn, uint16 vuid,
+static bool api_DosPrintQGetInfo(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
struct policy_handle handle;
struct spoolss_DevmodeContainer devmode_ctr;
union spoolss_DriverInfo driver_info;
- union spoolss_JobInfo *job_info;
+ union spoolss_JobInfo *job_info = NULL;
union spoolss_PrinterInfo printer_info;
if (!str1 || !str2 || !p) {
ZERO_STRUCT(handle);
- status = rpc_connect_spoolss_pipe(conn, &cli);
+ if (QueueName == NULL || (strlen(QueueName) < 1)) {
+ desc.errcode = W_ERROR_V(WERR_INVALID_PARAM);
+ goto out;
+ }
+
+ status = rpc_pipe_open_interface(conn,
+ &ndr_table_spoolss.syntax_id,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
+ &cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_DosPrintQGetInfo: could not connect to spoolss: %s\n",
nt_errstr(status)));
View list of all print jobs on all queues.
****************************************************************************/
-static bool api_DosPrintQEnum(connection_struct *conn, uint16 vuid,
+static bool api_DosPrintQEnum(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt,
return(True);
}
- status = rpc_connect_spoolss_pipe(conn, &cli);
+ status = rpc_pipe_open_interface(conn,
+ &ndr_table_spoolss.syntax_id,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
+ &cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_DosPrintQEnum: could not connect to spoolss: %s\n",
nt_errstr(status)));
extracted from lists saved by nmbd on the local host.
****************************************************************************/
-static bool api_RNetServerEnum2(connection_struct *conn, uint16 vuid,
+static bool api_RNetServerEnum2(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt, char **rdata,
return ret;
}
-static bool api_RNetServerEnum3(connection_struct *conn, uint16 vuid,
+static bool api_RNetServerEnum3(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt, char **rdata,
command 0x34 - suspected of being a "Lookup Names" stub api
****************************************************************************/
-static bool api_RNetGroupGetUsers(connection_struct *conn, uint16 vuid,
+static bool api_RNetGroupGetUsers(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt, char **rdata,
return len;
}
-static bool api_RNetShareGetInfo(connection_struct *conn,uint16 vuid,
+static bool api_RNetShareGetInfo(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
Share names longer than 12 bytes must be skipped.
****************************************************************************/
-static bool api_RNetShareEnum( connection_struct *conn, uint16 vuid,
+static bool api_RNetShareEnum(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,
Add a share
****************************************************************************/
-static bool api_RNetShareAdd(connection_struct *conn,uint16 vuid,
+static bool api_RNetShareAdd(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
}
status = rpc_pipe_open_internal(mem_ctx, &ndr_table_srvsvc.syntax_id,
- rpc_srvsvc_dispatch, conn->server_info,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_RNetShareAdd: could not connect to srvsvc: %s\n",
view list of groups available
****************************************************************************/
-static bool api_RNetGroupEnum(connection_struct *conn,uint16 vuid,
+static bool api_RNetGroupEnum(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
}
status = rpc_pipe_open_internal(
- talloc_tos(), &ndr_table_samr.syntax_id, rpc_samr_dispatch,
- conn->server_info, &samr_pipe);
+ talloc_tos(), &ndr_table_samr.syntax_id,
+ conn->server_info, &conn->sconn->client_id,
+ conn->sconn->msg_ctx, &samr_pipe);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("api_RNetUserEnum: Could not connect to samr: %s\n",
nt_errstr(status)));
Get groups that a user is a member of.
******************************************************************/
-static bool api_NetUserGetGroups(connection_struct *conn,uint16 vuid,
+static bool api_NetUserGetGroups(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
endp = *rdata + *rdata_len;
status = rpc_pipe_open_internal(
- talloc_tos(), &ndr_table_samr.syntax_id, rpc_samr_dispatch,
- conn->server_info, &samr_pipe);
+ talloc_tos(), &ndr_table_samr.syntax_id,
+ conn->server_info, &conn->sconn->client_id,
+ conn->sconn->msg_ctx, &samr_pipe);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("api_RNetUserEnum: Could not connect to samr: %s\n",
nt_errstr(status)));
Get all users.
******************************************************************/
-static bool api_RNetUserEnum(connection_struct *conn, uint16 vuid,
+static bool api_RNetUserEnum(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
endp = *rdata + *rdata_len;
status = rpc_pipe_open_internal(
- talloc_tos(), &ndr_table_samr.syntax_id, rpc_samr_dispatch,
- conn->server_info, &samr_pipe);
+ talloc_tos(), &ndr_table_samr.syntax_id,
+ conn->server_info, &conn->sconn->client_id,
+ conn->sconn->msg_ctx, &samr_pipe);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("api_RNetUserEnum: Could not connect to samr: %s\n",
nt_errstr(status)));
Get the time of day info.
****************************************************************************/
-static bool api_NetRemoteTOD(connection_struct *conn,uint16 vuid,
+static bool api_NetRemoteTOD(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
Set the user password.
*****************************************************************************/
-static bool api_SetUserPassword(connection_struct *conn,uint16 vuid,
+static bool api_SetUserPassword(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
ZERO_STRUCT(user_handle);
status = rpc_pipe_open_internal(mem_ctx, &ndr_table_samr.syntax_id,
- rpc_samr_dispatch, conn->server_info,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_SetUserPassword: could not connect to samr: %s\n",
Set the user password (SamOEM version - gets plaintext).
****************************************************************************/
-static bool api_SamOEMChangePassword(connection_struct *conn,uint16 vuid,
+static bool api_SamOEMChangePassword(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
memcpy(hash.hash, data+516, 16);
status = rpc_pipe_open_internal(mem_ctx, &ndr_table_samr.syntax_id,
- rpc_samr_dispatch, conn->server_info,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_SamOEMChangePassword: could not connect to samr: %s\n",
Form: <W> <>
****************************************************************************/
-static bool api_RDosPrintJobDel(connection_struct *conn,uint16 vuid,
+static bool api_RDosPrintJobDel(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
ZERO_STRUCT(handle);
- status = rpc_connect_spoolss_pipe(conn, &cli);
+ status = rpc_pipe_open_interface(conn,
+ &ndr_table_spoolss.syntax_id,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
+ &cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_RDosPrintJobDel: could not connect to spoolss: %s\n",
nt_errstr(status)));
Purge a print queue - or pause or resume it.
****************************************************************************/
-static bool api_WPrintQueueCtrl(connection_struct *conn,uint16 vuid,
+static bool api_WPrintQueueCtrl(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
ZERO_STRUCT(handle);
- status = rpc_connect_spoolss_pipe(conn, &cli);
+ status = rpc_pipe_open_interface(conn,
+ &ndr_table_spoolss.syntax_id,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
+ &cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_WPrintQueueCtrl: could not connect to spoolss: %s\n",
nt_errstr(status)));
return True;
}
-static bool api_PrintJobInfo(connection_struct *conn, uint16 vuid,
+static bool api_PrintJobInfo(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
ZERO_STRUCT(handle);
- status = rpc_connect_spoolss_pipe(conn, &cli);
+ status = rpc_pipe_open_interface(conn,
+ &ndr_table_spoolss.syntax_id,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
+ &cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_PrintJobInfo: could not connect to spoolss: %s\n",
nt_errstr(status)));
Get info about the server.
****************************************************************************/
-static bool api_RNetServerGetInfo(connection_struct *conn,uint16 vuid,
+static bool api_RNetServerGetInfo(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
p2 = p + struct_len;
status = rpc_pipe_open_internal(mem_ctx, &ndr_table_srvsvc.syntax_id,
- rpc_srvsvc_dispatch, conn->server_info,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_RNetServerGetInfo: could not connect to srvsvc: %s\n",
Get info about the server.
****************************************************************************/
-static bool api_NetWkstaGetInfo(connection_struct *conn,uint16 vuid,
+static bool api_NetWkstaGetInfo(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
#define usri11_code_page 84
#define usri11_end 86
-static bool api_RNetUserGetInfo(connection_struct *conn, uint16 vuid,
+static bool api_RNetUserGetInfo(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
char **rdata,char **rparam,
int *rdata_len,int *rparam_len)
{
- struct smbd_server_connection *sconn = smbd_server_conn;
char *str1 = get_safe_str_ptr(param,tpscnt,param,2);
char *str2 = skip_string(param,tpscnt,str1);
char *UserName = skip_string(param,tpscnt,str2);
ZERO_STRUCT(user_handle);
status = rpc_pipe_open_internal(mem_ctx, &ndr_table_samr.syntax_id,
- rpc_samr_dispatch, conn->server_info,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_RNetUserGetInfo: could not connect to samr: %s\n",
return False;
}
if (uLevel == 2) {
- SIVAL(p,60,0); /* auth_flags */
- SIVAL(p,64,PTR_DIFF(p2,*rdata)); /* full_name */
+ SIVAL(p,58,0); /* auth_flags */
+ SIVAL(p,62,PTR_DIFF(p2,*rdata)); /* full_name */
strlcpy(p2,info->info21.full_name.string,PTR_DIFF(endp,p2));
p2 = skip_string(*rdata,*rdata_len,p2);
if (!p2) {
return False;
}
- SIVAL(p,68,0); /* urs_comment */
- SIVAL(p,72,PTR_DIFF(p2,*rdata)); /* parms */
+ SIVAL(p,66,0); /* urs_comment */
+ SIVAL(p,70,PTR_DIFF(p2,*rdata)); /* parms */
strlcpy(p2,"",PTR_DIFF(endp,p2));
p2 = skip_string(*rdata,*rdata_len,p2);
if (!p2) {
return False;
}
- SIVAL(p,76,0); /* workstations */
- SIVAL(p,80,0); /* last_logon */
- SIVAL(p,84,0); /* last_logoff */
- SIVALS(p,88,-1); /* acct_expires */
- SIVALS(p,92,-1); /* max_storage */
- SSVAL(p,96,168); /* units_per_week */
- SIVAL(p,98,PTR_DIFF(p2,*rdata)); /* logon_hours */
+ SIVAL(p,74,0); /* workstations */
+ SIVAL(p,78,0); /* last_logon */
+ SIVAL(p,82,0); /* last_logoff */
+ SIVALS(p,86,-1); /* acct_expires */
+ SIVALS(p,90,-1); /* max_storage */
+ SSVAL(p,94,168); /* units_per_week */
+ SIVAL(p,96,PTR_DIFF(p2,*rdata)); /* logon_hours */
memset(p2,-1,21);
p2 += 21;
- SSVALS(p,102,-1); /* bad_pw_count */
- SSVALS(p,104,-1); /* num_logons */
- SIVAL(p,106,PTR_DIFF(p2,*rdata)); /* logon_server */
+ SSVALS(p,100,-1); /* bad_pw_count */
+ SSVALS(p,102,-1); /* num_logons */
+ SIVAL(p,104,PTR_DIFF(p2,*rdata)); /* logon_server */
{
TALLOC_CTX *ctx = talloc_tos();
int space_rem = *rdata_len - (p2 - *rdata);
if (!p2) {
return False;
}
- SSVAL(p,110,49); /* country_code */
- SSVAL(p,112,860); /* code page */
+ SSVAL(p,108,49); /* country_code */
+ SSVAL(p,110,860); /* code page */
}
}
return(True);
}
-static bool api_WWkstaUserLogon(connection_struct *conn,uint16 vuid,
+static bool api_WWkstaUserLogon(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
char **rdata,char **rparam,
int *rdata_len,int *rparam_len)
{
- struct smbd_server_connection *sconn = smbd_server_conn;
char *str1 = get_safe_str_ptr(param,tpscnt,param,2);
char *str2 = skip_string(param,tpscnt,str1);
char *p = skip_string(param,tpscnt,str2);
}
PACKS(&desc,"z",lp_workgroup());/* domain */
- PACKS(&desc,"z", vuser ? pdb_get_logon_script(
- vuser->server_info->sam_account) : ""); /* script path */
+ PACKS(&desc,"z", vuser ?
+ vuser->server_info->info3->base.logon_script.string
+ : ""); /* script path */
PACKI(&desc,"D",0x00000000); /* reserved */
}
api_WAccessGetUserPerms
****************************************************************************/
-static bool api_WAccessGetUserPerms(connection_struct *conn,uint16 vuid,
+static bool api_WAccessGetUserPerms(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
api_WPrintJobEnumerate
****************************************************************************/
-static bool api_WPrintJobGetInfo(connection_struct *conn, uint16 vuid,
+static bool api_WPrintJobGetInfo(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
ZERO_STRUCT(handle);
- status = rpc_connect_spoolss_pipe(conn, &cli);
+ status = rpc_pipe_open_interface(conn,
+ &ndr_table_spoolss.syntax_id,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
+ &cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_WPrintJobGetInfo: could not connect to spoolss: %s\n",
nt_errstr(status)));
return True;
}
-static bool api_WPrintJobEnumerate(connection_struct *conn, uint16 vuid,
+static bool api_WPrintJobEnumerate(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
struct rpc_pipe_client *cli = NULL;
struct policy_handle handle;
struct spoolss_DevmodeContainer devmode_ctr;
- uint32_t count;
+ uint32_t count = 0;
union spoolss_JobInfo *info;
if (!str1 || !str2 || !p) {
ZERO_STRUCT(handle);
- status = rpc_connect_spoolss_pipe(conn, &cli);
+ status = rpc_pipe_open_interface(conn,
+ &ndr_table_spoolss.syntax_id,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
+ &cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_WPrintJobEnumerate: could not connect to spoolss: %s\n",
nt_errstr(status)));
}
}
-static bool api_WPrintDestGetInfo(connection_struct *conn, uint16 vuid,
+static bool api_WPrintDestGetInfo(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
ZERO_STRUCT(handle);
- status = rpc_connect_spoolss_pipe(conn, &cli);
+ status = rpc_pipe_open_interface(conn,
+ &ndr_table_spoolss.syntax_id,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
+ &cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_WPrintDestGetInfo: could not connect to spoolss: %s\n",
nt_errstr(status)));
return True;
}
-static bool api_WPrintDestEnum(connection_struct *conn, uint16 vuid,
+static bool api_WPrintDestEnum(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
queuecnt = 0;
- status = rpc_connect_spoolss_pipe(conn, &cli);
+ status = rpc_pipe_open_interface(conn,
+ &ndr_table_spoolss.syntax_id,
+ conn->server_info,
+ &conn->sconn->client_id,
+ conn->sconn->msg_ctx,
+ &cli);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("api_WPrintDestEnum: could not connect to spoolss: %s\n",
nt_errstr(status)));
return True;
}
-static bool api_WPrintDriverEnum(connection_struct *conn, uint16 vuid,
+static bool api_WPrintDriverEnum(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
return True;
}
-static bool api_WPrintQProcEnum(connection_struct *conn, uint16 vuid,
+static bool api_WPrintQProcEnum(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
return True;
}
-static bool api_WPrintPortEnum(connection_struct *conn, uint16 vuid,
+static bool api_WPrintPortEnum(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
List open sessions
****************************************************************************/
-static bool api_RNetSessionEnum(connection_struct *conn, uint16 vuid,
+static bool api_RNetSessionEnum(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
The buffer was too small.
****************************************************************************/
-static bool api_TooSmall(connection_struct *conn,uint16 vuid, char *param, char *data,
+static bool api_TooSmall(struct smbd_server_connection *sconn,
+ connection_struct *conn,uint16 vuid, char *param, char *data,
int mdrcnt, int mprcnt,
char **rdata, char **rparam,
int *rdata_len, int *rparam_len)
The request is not supported.
****************************************************************************/
-static bool api_Unsupported(connection_struct *conn, uint16 vuid,
+static bool api_Unsupported(struct smbd_server_connection *sconn,
+ connection_struct *conn, uint16 vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt,
static const struct {
const char *name;
int id;
- bool (*fn)(connection_struct *, uint16,
+ bool (*fn)(struct smbd_server_connection *sconn,
+ connection_struct *, uint16,
char *, int,
char *, int,
int,int,char **,char **,int *,int *);
int tdscnt, int tpscnt,
int mdrcnt, int mprcnt)
{
- struct smbd_server_connection *sconn = smbd_server_conn;
int api_command;
char *rdata = NULL;
char *rparam = NULL;
/* Check whether this api call can be done anonymously */
if (api_commands[i].auth_user && lp_restrict_anonymous()) {
- user_struct *user = get_valid_user_struct(sconn, vuid);
+ user_struct *user = get_valid_user_struct(req->sconn, vuid);
if (!user || user->server_info->guest) {
reply_nterror(req, NT_STATUS_ACCESS_DENIED);
return;
}
- reply = api_commands[i].fn(conn,
+ reply = api_commands[i].fn(req->sconn, conn,
vuid,
params,tpscnt, /* params + length */
data,tdscnt, /* data + length */
if (rdata_len > mdrcnt || rparam_len > mprcnt) {
- reply = api_TooSmall(conn,vuid,params,data,mdrcnt,mprcnt,
+ reply = api_TooSmall(req->sconn,conn,vuid,params,data,
+ mdrcnt,mprcnt,
&rdata,&rparam,&rdata_len,&rparam_len);
}
/* if we get False back then it's actually unsupported */
if (!reply) {
- reply = api_Unsupported(conn,vuid,params,tpscnt,data,tdscnt,mdrcnt,mprcnt,
+ reply = api_Unsupported(req->sconn,conn,vuid,params,tpscnt,
+ data,
+ tdscnt,mdrcnt,mprcnt,
&rdata,&rparam,&rdata_len,&rparam_len);
}