summaryrefslogtreecommitdiff
path: root/source3/smbd/lanman.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/smbd/lanman.c')
-rw-r--r--source3/smbd/lanman.c213
1 files changed, 110 insertions, 103 deletions
diff --git a/source3/smbd/lanman.c b/source3/smbd/lanman.c
index f56ea30c0e..d54e1d51e6 100644
--- a/source3/smbd/lanman.c
+++ b/source3/smbd/lanman.c
@@ -79,7 +79,7 @@ static char *smb_realloc_limit(void *ptr, size_t size)
}
static bool api_Unsupported(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt,
@@ -87,7 +87,7 @@ static bool api_Unsupported(struct smbd_server_connection *sconn,
int *rdata_len, int *rparam_len);
static bool api_TooSmall(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid, char *param, char *data,
+ connection_struct *conn, uint64_t vuid, char *param, char *data,
int mdrcnt, int mprcnt,
char **rdata, char **rparam,
int *rdata_len, int *rparam_len);
@@ -110,18 +110,18 @@ static int CopyExpanded(connection_struct *conn,
*p_space_remaining = 0;
return 0;
}
- buf = talloc_string_sub(ctx, buf,"%S",lp_servicename(snum));
+ buf = talloc_string_sub(ctx, buf,"%S", lp_servicename(ctx, snum));
if (!buf) {
*p_space_remaining = 0;
return 0;
}
buf = talloc_sub_advanced(ctx,
- lp_servicename(SNUM(conn)),
- conn->session_info->unix_name,
+ lp_servicename(ctx, SNUM(conn)),
+ conn->session_info->unix_info->unix_name,
conn->connectpath,
- conn->session_info->utok.gid,
- conn->session_info->sanitized_username,
- conn->session_info->info3->base.domain.string,
+ conn->session_info->unix_token->gid,
+ conn->session_info->unix_info->sanitized_username,
+ conn->session_info->info->domain_name,
buf);
if (!buf) {
*p_space_remaining = 0;
@@ -162,17 +162,17 @@ static int StrlenExpanded(connection_struct *conn, int snum, char *s)
if (!buf) {
return 0;
}
- buf = talloc_string_sub(ctx,buf,"%S",lp_servicename(snum));
+ buf = talloc_string_sub(ctx,buf,"%S",lp_servicename(ctx, snum));
if (!buf) {
return 0;
}
buf = talloc_sub_advanced(ctx,
- lp_servicename(SNUM(conn)),
- conn->session_info->unix_name,
+ lp_servicename(ctx, SNUM(conn)),
+ conn->session_info->unix_info->unix_name,
conn->connectpath,
- conn->session_info->utok.gid,
- conn->session_info->sanitized_username,
- conn->session_info->info3->base.domain.string,
+ conn->session_info->unix_token->gid,
+ conn->session_info->unix_info->sanitized_username,
+ conn->session_info->info->domain_name,
buf);
if (!buf) {
return 0;
@@ -612,9 +612,9 @@ static void fill_printq_info_52(struct spoolss_DriverInfo3 *driver,
{
int i;
fstring location;
- trim_string((char *)driver->driver_path, "\\print$\\WIN40\\0\\", 0);
- trim_string((char *)driver->data_file, "\\print$\\WIN40\\0\\", 0);
- trim_string((char *)driver->help_file, "\\print$\\WIN40\\0\\", 0);
+ trim_string(discard_const_p(char, driver->driver_path), "\\print$\\WIN40\\0\\", 0);
+ trim_string(discard_const_p(char, driver->data_file), "\\print$\\WIN40\\0\\", 0);
+ trim_string(discard_const_p(char, driver->help_file), "\\print$\\WIN40\\0\\", 0);
PACKI(desc, "W", 0x0400); /* don't know */
PACKS(desc, "z", driver->driver_name); /* long printer name */
@@ -641,7 +641,7 @@ static void fill_printq_info_52(struct spoolss_DriverInfo3 *driver,
for ( i=0; i<count && driver->dependent_files && *driver->dependent_files[i]; i++)
{
- trim_string((char *)driver->dependent_files[i], "\\print$\\WIN40\\0\\", 0);
+ trim_string(discard_const_p(char, driver->dependent_files[i]), "\\print$\\WIN40\\0\\", 0);
PACKS(desc,"z",driver->dependent_files[i]); /* driver files to copy */
DEBUG(3,("Dependent File: %s:\n", driver->dependent_files[i]));
}
@@ -756,7 +756,7 @@ static int get_printerdrivernumber(const struct spoolss_DriverInfo3 *driver)
}
static bool api_DosPrintQGetInfo(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -834,7 +834,7 @@ static bool api_DosPrintQGetInfo(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(conn,
&ndr_table_spoolss.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -971,7 +971,7 @@ static bool api_DosPrintQGetInfo(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_DosPrintQEnum(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt,
@@ -1031,7 +1031,7 @@ static bool api_DosPrintQEnum(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(conn,
&ndr_table_spoolss.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -1427,7 +1427,7 @@ static int fill_srv_info(struct srv_info_struct *service,
static int srv_comp(struct srv_info_struct *s1,struct srv_info_struct *s2)
{
- return StrCaseCmp(s1->name,s2->name);
+ return strcasecmp_m(s1->name,s2->name);
}
/****************************************************************************
@@ -1436,7 +1436,7 @@ static int srv_comp(struct srv_info_struct *s1,struct srv_info_struct *s2)
****************************************************************************/
static bool api_RNetServerEnum2(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt, char **rdata,
@@ -1596,7 +1596,7 @@ static int srv_name_match(const char *n1, const char *n2)
* the server will return a list of servers that exist on
* the network greater than or equal to the FirstNameToReturn.
*/
- int ret = StrCaseCmp(n1, n2);
+ int ret = strcasecmp_m(n1, n2);
if (ret <= 0) {
return 0;
@@ -1606,7 +1606,7 @@ static int srv_name_match(const char *n1, const char *n2)
}
static bool api_RNetServerEnum3(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt, char **rdata,
@@ -1708,7 +1708,7 @@ static bool api_RNetServerEnum3(struct smbd_server_connection *sconn,
*/
for (;first > 0;) {
int ret;
- ret = StrCaseCmp(first_name,
+ ret = strcasecmp_m(first_name,
servers[first-1].name);
if (ret > 0) {
break;
@@ -1799,7 +1799,7 @@ static bool api_RNetServerEnum3(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_RNetGroupGetUsers(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt, char **rdata,
@@ -1906,10 +1906,10 @@ static int fill_share_info(connection_struct *conn, int snum, int uLevel,
len = 0;
if (uLevel > 0) {
- len += StrlenExpanded(conn,snum,lp_comment(snum));
+ len += StrlenExpanded(conn,snum,lp_comment(talloc_tos(), snum));
}
if (uLevel > 1) {
- len += strlen(lp_pathname(snum)) + 1;
+ len += strlen(lp_pathname(talloc_tos(), snum)) + 1;
}
if (buflen) {
*buflen = struct_len;
@@ -1938,7 +1938,7 @@ static int fill_share_info(connection_struct *conn, int snum, int uLevel,
baseaddr = p;
}
- push_ascii(p,lp_servicename(snum),13, STR_TERMINATE);
+ push_ascii(p,lp_servicename(talloc_tos(), snum),13, STR_TERMINATE);
if (uLevel > 0) {
int type;
@@ -1948,12 +1948,12 @@ static int fill_share_info(connection_struct *conn, int snum, int uLevel,
if (lp_print_ok(snum)) {
type = STYPE_PRINTQ;
}
- if (strequal("IPC",lp_fstype(snum))) {
+ if (strequal("IPC",lp_fstype(talloc_tos(),snum))) {
type = STYPE_IPC;
}
SSVAL(p,14,type); /* device type */
SIVAL(p,16,PTR_DIFF(p2,baseaddr));
- len += CopyExpanded(conn,snum,&p2,lp_comment(snum),&l2);
+ len += CopyExpanded(conn,snum,&p2,lp_comment(talloc_tos(),snum),&l2);
}
if (uLevel > 1) {
@@ -1961,7 +1961,7 @@ static int fill_share_info(connection_struct *conn, int snum, int uLevel,
SSVALS(p,22,-1); /* max uses */
SSVAL(p,24,1); /* current uses */
SIVAL(p,26,PTR_DIFF(p2,baseaddr)); /* local pathname */
- len += CopyAndAdvance(&p2,lp_pathname(snum),&l2);
+ len += CopyAndAdvance(&p2,lp_pathname(talloc_tos(),snum),&l2);
memset(p+30,0,SHPWLEN+2); /* passwd (reserved), pad field */
}
@@ -1990,7 +1990,7 @@ static int fill_share_info(connection_struct *conn, int snum, int uLevel,
}
static bool api_RNetShareGetInfo(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -2005,7 +2005,7 @@ static bool api_RNetShareGetInfo(struct smbd_server_connection *sconn,
int uLevel = get_safe_SVAL(param,tpscnt,p,0,-1);
int snum;
- if (!str1 || !str2 || !netname || !p) {
+ if (!str1 || !str2 || !netname_in || !p) {
return False;
}
@@ -2055,7 +2055,7 @@ static bool api_RNetShareGetInfo(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_RNetShareEnum(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,
@@ -2092,7 +2092,7 @@ static bool api_RNetShareEnum(struct smbd_server_connection *sconn,
/* Ensure all the usershares are loaded. */
become_root();
load_registry_shares();
- count = load_usershare_shares();
+ count = load_usershare_shares(NULL, connections_snum_used);
unbecome_root();
data_len = fixed_len = string_len = 0;
@@ -2101,7 +2101,7 @@ static bool api_RNetShareEnum(struct smbd_server_connection *sconn,
if (!(lp_browseable(i) && lp_snum_ok(i))) {
continue;
}
- push_ascii_fstring(servicename_dos, lp_servicename(i));
+ push_ascii_fstring(servicename_dos, lp_servicename(talloc_tos(), i));
/* Maximum name length = 13. */
if( lp_browseable( i ) && lp_snum_ok( i ) && (strlen(servicename_dos) < 13)) {
total++;
@@ -2133,7 +2133,8 @@ static bool api_RNetShareEnum(struct smbd_server_connection *sconn,
continue;
}
- push_ascii_fstring(servicename_dos, lp_servicename(i));
+ push_ascii_fstring(servicename_dos,
+ lp_servicename(talloc_tos(), i));
if (lp_browseable(i) && lp_snum_ok(i) && (strlen(servicename_dos) < 13)) {
if (fill_share_info( conn,i,uLevel,&p,&f_len,&p2,&s_len,*rdata ) < 0) {
break;
@@ -2163,7 +2164,7 @@ static bool api_RNetShareEnum(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_RNetShareAdd(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -2256,7 +2257,7 @@ static bool api_RNetShareAdd(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(mem_ctx, &ndr_table_srvsvc.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -2324,7 +2325,7 @@ static bool api_RNetShareAdd(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_RNetGroupEnum(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -2367,7 +2368,7 @@ static bool api_RNetGroupEnum(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(
talloc_tos(), &ndr_table_samr.syntax_id,
- conn->session_info, &conn->sconn->client_id,
+ conn->session_info, conn->sconn->remote_address,
conn->sconn->msg_ctx, &samr_pipe);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("api_RNetUserEnum: Could not connect to samr: %s\n",
@@ -2377,7 +2378,7 @@ static bool api_RNetGroupEnum(struct smbd_server_connection *sconn,
b = samr_pipe->binding_handle;
- status = dcerpc_samr_Connect2(b, talloc_tos(), global_myname(),
+ status = dcerpc_samr_Connect2(b, talloc_tos(), lp_netbios_name(),
SAMR_ACCESS_LOOKUP_DOMAIN, &samr_handle,
&result);
if (!NT_STATUS_IS_OK(status)) {
@@ -2506,7 +2507,7 @@ static bool api_RNetGroupEnum(struct smbd_server_connection *sconn,
******************************************************************/
static bool api_NetUserGetGroups(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -2573,7 +2574,7 @@ static bool api_NetUserGetGroups(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(
talloc_tos(), &ndr_table_samr.syntax_id,
- conn->session_info, &conn->sconn->client_id,
+ conn->session_info, conn->sconn->remote_address,
conn->sconn->msg_ctx, &samr_pipe);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("api_RNetUserEnum: Could not connect to samr: %s\n",
@@ -2583,7 +2584,7 @@ static bool api_NetUserGetGroups(struct smbd_server_connection *sconn,
b = samr_pipe->binding_handle;
- status = dcerpc_samr_Connect2(b, talloc_tos(), global_myname(),
+ status = dcerpc_samr_Connect2(b, talloc_tos(), lp_netbios_name(),
SAMR_ACCESS_LOOKUP_DOMAIN, &samr_handle,
&result);
if (!NT_STATUS_IS_OK(status)) {
@@ -2701,7 +2702,7 @@ static bool api_NetUserGetGroups(struct smbd_server_connection *sconn,
******************************************************************/
static bool api_RNetUserEnum(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -2765,7 +2766,7 @@ static bool api_RNetUserEnum(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(
talloc_tos(), &ndr_table_samr.syntax_id,
- conn->session_info, &conn->sconn->client_id,
+ conn->session_info, conn->sconn->remote_address,
conn->sconn->msg_ctx, &samr_pipe);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("api_RNetUserEnum: Could not connect to samr: %s\n",
@@ -2775,7 +2776,7 @@ static bool api_RNetUserEnum(struct smbd_server_connection *sconn,
b = samr_pipe->binding_handle;
- status = dcerpc_samr_Connect2(b, talloc_tos(), global_myname(),
+ status = dcerpc_samr_Connect2(b, talloc_tos(), lp_netbios_name(),
SAMR_ACCESS_LOOKUP_DOMAIN, &samr_handle,
&result);
if (!NT_STATUS_IS_OK(status)) {
@@ -2884,7 +2885,7 @@ static bool api_RNetUserEnum(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_NetRemoteTOD(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -2943,7 +2944,7 @@ static bool api_NetRemoteTOD(struct smbd_server_connection *sconn,
*****************************************************************************/
static bool api_SetUserPassword(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -3031,7 +3032,7 @@ static bool api_SetUserPassword(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(mem_ctx, &ndr_table_samr.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -3044,7 +3045,7 @@ static bool api_SetUserPassword(struct smbd_server_connection *sconn,
b = cli->binding_handle;
status = dcerpc_samr_Connect2(b, mem_ctx,
- global_myname(),
+ lp_netbios_name(),
SAMR_ACCESS_CONNECT_TO_SERVER |
SAMR_ACCESS_ENUM_DOMAINS |
SAMR_ACCESS_LOOKUP_DOMAIN,
@@ -3145,7 +3146,7 @@ static bool api_SetUserPassword(struct smbd_server_connection *sconn,
ZERO_STRUCT(old_lm_hash);
ZERO_STRUCT(new_lm_hash);
memcpy(old_lm_hash.hash, pass1, MIN(strlen(pass1), 16));
- memcpy(new_lm_hash.hash, pass1, MIN(strlen(pass2), 16));
+ memcpy(new_lm_hash.hash, pass2, MIN(strlen(pass2), 16));
}
status = dcerpc_samr_ChangePasswordUser(b, mem_ctx,
@@ -3196,7 +3197,7 @@ static bool api_SetUserPassword(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_SamOEMChangePassword(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -3282,7 +3283,7 @@ static bool api_SamOEMChangePassword(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(mem_ctx, &ndr_table_samr.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -3294,7 +3295,7 @@ static bool api_SamOEMChangePassword(struct smbd_server_connection *sconn,
b = cli->binding_handle;
- init_lsa_AsciiString(&server, global_myname());
+ init_lsa_AsciiString(&server, lp_netbios_name());
init_lsa_AsciiString(&account, user);
status = dcerpc_samr_OemChangePasswordUser2(b, mem_ctx,
@@ -3326,7 +3327,7 @@ static bool api_SamOEMChangePassword(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_RDosPrintJobDel(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -3379,7 +3380,7 @@ static bool api_RDosPrintJobDel(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(conn,
&ndr_table_spoolss.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -3459,7 +3460,7 @@ static bool api_RDosPrintJobDel(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_WPrintQueueCtrl(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -3507,7 +3508,7 @@ static bool api_WPrintQueueCtrl(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(conn,
&ndr_table_spoolss.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -3621,7 +3622,7 @@ static int check_printjob_info(struct pack_desc* desc,
}
static bool api_PrintJobInfo(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -3689,7 +3690,7 @@ static bool api_PrintJobInfo(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(conn,
&ndr_table_spoolss.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -3781,7 +3782,7 @@ static bool api_PrintJobInfo(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_RNetServerGetInfo(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -3866,7 +3867,7 @@ static bool api_RNetServerGetInfo(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(mem_ctx, &ndr_table_srvsvc.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -3953,7 +3954,7 @@ static bool api_RNetServerGetInfo(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_NetWkstaGetInfo(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -4003,7 +4004,9 @@ static bool api_NetWkstaGetInfo(struct smbd_server_connection *sconn,
SIVAL(p,0,PTR_DIFF(p2,*rdata)); /* host name */
strlcpy(p2,get_local_machine_name(),PTR_DIFF(endp,p2));
- strupper_m(p2);
+ if (!strupper_m(p2)) {
+ return false;
+ }
p2 = skip_string(*rdata,*rdata_len,p2);
if (!p2) {
return False;
@@ -4011,7 +4014,7 @@ static bool api_NetWkstaGetInfo(struct smbd_server_connection *sconn,
p += 4;
SIVAL(p,0,PTR_DIFF(p2,*rdata));
- strlcpy(p2,conn->session_info->sanitized_username,PTR_DIFF(endp,p2));
+ strlcpy(p2,conn->session_info->unix_info->sanitized_username,PTR_DIFF(endp,p2));
p2 = skip_string(*rdata,*rdata_len,p2);
if (!p2) {
return False;
@@ -4020,15 +4023,17 @@ static bool api_NetWkstaGetInfo(struct smbd_server_connection *sconn,
SIVAL(p,0,PTR_DIFF(p2,*rdata)); /* login domain */
strlcpy(p2,lp_workgroup(),PTR_DIFF(endp,p2));
- strupper_m(p2);
+ if (!strupper_m(p2)) {
+ return false;
+ }
p2 = skip_string(*rdata,*rdata_len,p2);
if (!p2) {
return False;
}
p += 4;
- SCVAL(p,0,lp_major_announce_version()); /* system version - e.g 4 in 4.1 */
- SCVAL(p,1,lp_minor_announce_version()); /* system version - e.g .1 in 4.1 */
+ SCVAL(p,0,SAMBA_MAJOR_NBT_ANNOUNCE_VERSION); /* system version - e.g 4 in 4.1 */
+ SCVAL(p,1,SAMBA_MINOR_NBT_ANNOUNCE_VERSION); /* system version - e.g .1 in 4.1 */
p += 2;
SIVAL(p,0,PTR_DIFF(p2,*rdata));
@@ -4215,7 +4220,7 @@ There is no auxiliary data in the response.
#define usri11_end 86
static bool api_RNetUserGetInfo(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -4293,7 +4298,7 @@ static bool api_RNetUserGetInfo(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(mem_ctx, &ndr_table_samr.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -4306,7 +4311,7 @@ static bool api_RNetUserGetInfo(struct smbd_server_connection *sconn,
b = cli->binding_handle;
status = dcerpc_samr_Connect2(b, mem_ctx,
- global_myname(),
+ lp_netbios_name(),
SAMR_ACCESS_CONNECT_TO_SERVER |
SAMR_ACCESS_ENUM_DOMAINS |
SAMR_ACCESS_LOOKUP_DOMAIN,
@@ -4612,7 +4617,7 @@ static bool api_RNetUserGetInfo(struct smbd_server_connection *sconn,
}
static bool api_WWkstaUserLogon(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -4627,7 +4632,7 @@ static bool api_WWkstaUserLogon(struct smbd_server_connection *sconn,
char* name;
/* With share level security vuid will always be zero.
Don't depend on vuser being non-null !!. JRA */
- user_struct *vuser = get_valid_user_struct(sconn, vuid);
+ struct user_struct *vuser = get_valid_user_struct(sconn, vuid);
if (!str1 || !str2 || !p) {
return False;
@@ -4635,8 +4640,8 @@ static bool api_WWkstaUserLogon(struct smbd_server_connection *sconn,
if(vuser != NULL) {
DEBUG(3,(" Username of UID %d is %s\n",
- (int)vuser->session_info->utok.uid,
- vuser->session_info->unix_name));
+ (int)vuser->session_info->unix_token->uid,
+ vuser->session_info->unix_info->unix_name));
}
uLevel = get_safe_SVAL(param,tpscnt,p,0,-1);
@@ -4690,13 +4695,15 @@ static bool api_WWkstaUserLogon(struct smbd_server_connection *sconn,
fstring mypath;
fstrcpy(mypath,"\\\\");
fstrcat(mypath,get_local_machine_name());
- strupper_m(mypath);
+ if (!strupper_m(mypath)) {
+ return false;
+ }
PACKS(&desc,"z",mypath); /* computer */
}
PACKS(&desc,"z",lp_workgroup());/* domain */
PACKS(&desc,"z", vuser ?
- vuser->session_info->info3->base.logon_script.string
+ vuser->session_info->info->logon_script
: ""); /* script path */
PACKI(&desc,"D",0x00000000); /* reserved */
}
@@ -4721,7 +4728,7 @@ static bool api_WWkstaUserLogon(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_WAccessGetUserPerms(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid,
+ connection_struct *conn,uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -4767,7 +4774,7 @@ static bool api_WAccessGetUserPerms(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_WPrintJobGetInfo(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -4820,7 +4827,7 @@ static bool api_WPrintJobGetInfo(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(conn,
&ndr_table_spoolss.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -4905,7 +4912,7 @@ static bool api_WPrintJobGetInfo(struct smbd_server_connection *sconn,
}
static bool api_WPrintJobEnumerate(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -4962,7 +4969,7 @@ static bool api_WPrintJobEnumerate(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(conn,
&ndr_table_spoolss.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -5081,7 +5088,7 @@ static void fill_printdest_info(struct spoolss_PrinterInfo2 *info2, int uLevel,
strncpy(buf, info2->printername, sizeof(buf)-1);
buf[sizeof(buf)-1] = 0;
- strupper_m(buf);
+ (void)strupper_m(buf);
if (uLevel <= 1) {
PACKS(desc,"B9",buf); /* szName */
@@ -5111,7 +5118,7 @@ static void fill_printdest_info(struct spoolss_PrinterInfo2 *info2, int uLevel,
}
static bool api_WPrintDestGetInfo(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -5162,7 +5169,7 @@ static bool api_WPrintDestGetInfo(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(conn,
&ndr_table_spoolss.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -5249,7 +5256,7 @@ static bool api_WPrintDestGetInfo(struct smbd_server_connection *sconn,
}
static bool api_WPrintDestEnum(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -5294,7 +5301,7 @@ static bool api_WPrintDestEnum(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(conn,
&ndr_table_spoolss.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -5360,7 +5367,7 @@ static bool api_WPrintDestEnum(struct smbd_server_connection *sconn,
}
static bool api_WPrintDriverEnum(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -5424,7 +5431,7 @@ static bool api_WPrintDriverEnum(struct smbd_server_connection *sconn,
}
static bool api_WPrintQProcEnum(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -5488,7 +5495,7 @@ static bool api_WPrintQProcEnum(struct smbd_server_connection *sconn,
}
static bool api_WPrintPortEnum(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -5558,7 +5565,7 @@ static bool api_WPrintPortEnum(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_RNetSessionEnum(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt,int mprcnt,
@@ -5605,7 +5612,7 @@ static bool api_RNetSessionEnum(struct smbd_server_connection *sconn,
status = rpc_pipe_open_interface(conn,
&ndr_table_srvsvc.syntax_id,
conn->session_info,
- &conn->sconn->client_id,
+ conn->sconn->remote_address,
conn->sconn->msg_ctx,
&cli);
if (!NT_STATUS_IS_OK(status)) {
@@ -5697,7 +5704,7 @@ static bool api_RNetSessionEnum(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_TooSmall(struct smbd_server_connection *sconn,
- connection_struct *conn,uint16 vuid, char *param, char *data,
+ connection_struct *conn,uint64_t vuid, char *param, char *data,
int mdrcnt, int mprcnt,
char **rdata, char **rparam,
int *rdata_len, int *rparam_len)
@@ -5722,7 +5729,7 @@ static bool api_TooSmall(struct smbd_server_connection *sconn,
****************************************************************************/
static bool api_Unsupported(struct smbd_server_connection *sconn,
- connection_struct *conn, uint16 vuid,
+ connection_struct *conn, uint64_t vuid,
char *param, int tpscnt,
char *data, int tdscnt,
int mdrcnt, int mprcnt,
@@ -5749,7 +5756,7 @@ static const struct {
const char *name;
int id;
bool (*fn)(struct smbd_server_connection *sconn,
- connection_struct *, uint16,
+ connection_struct *, uint64_t,
char *, int,
char *, int,
int,int,char **,char **,int *,int *);
@@ -5801,7 +5808,7 @@ static const struct {
Handle remote api calls.
****************************************************************************/
-void api_reply(connection_struct *conn, uint16 vuid,
+void api_reply(connection_struct *conn, uint64_t vuid,
struct smb_request *req,
char *data, char *params,
int tdscnt, int tpscnt,
@@ -5855,9 +5862,9 @@ void api_reply(connection_struct *conn, uint16 vuid,
/* 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(req->sconn, vuid);
+ struct user_struct *user = get_valid_user_struct(req->sconn, vuid);
- if (!user || user->session_info->guest) {
+ if (!user || security_session_user_level(user->session_info, NULL) < SECURITY_USER) {
reply_nterror(req, NT_STATUS_ACCESS_DENIED);
return;
}