struct vuid_cache_entry {
struct auth_session_info *session_info;
+ struct name_compare_entry *hide_list;
+ struct name_compare_entry *veto_list;
uint64_t vuid; /* SMB2 compat */
bool read_only;
uint32_t share_access;
set_namearray(conn,
lp_aio_write_behind(talloc_tos(), lp_sub, snum),
&conn->aio_write_behind_list);
- set_namearray(conn,
- lp_veto_oplock_files(talloc_tos(), lp_sub, snum),
- &conn->veto_oplock_list);
- set_namearray(conn,
- lp_aio_write_behind(talloc_tos(), lp_sub, snum),
- &conn->aio_write_behind_list);
}
smb_fname_cpath = synthetic_smb_fname(talloc_tos(),
conn->connectpath,
const struct auth_session_info *session_info,
int snum)
{
+ const struct loadparm_substitution *lp_sub =
+ loadparm_s3_global_substitution();
unsigned int i;
bool readonly_share = false;
bool admin_user = false;
conn->read_only = ent->read_only;
conn->share_access = ent->share_access;
conn->vuid = ent->vuid;
+ conn->veto_list = ent->veto_list;
+ conn->hide_list = ent->hide_list;
return(True);
}
}
(conn->vuid_cache->next_entry + 1) % VUID_CACHE_SIZE;
TALLOC_FREE(ent->session_info);
+ TALLOC_FREE(ent->veto_list);
+ TALLOC_FREE(ent->hide_list);
/*
* If force_user was set, all session_info's are based on the same
ent->vuid = vuid;
ent->read_only = readonly_share;
ent->share_access = share_access;
+
+ /* Add veto/hide lists */
+ if (!IS_IPC(conn) && !IS_PRINT(conn)) {
+ set_namearray(conn,
+ lp_veto_files(talloc_tos(), lp_sub, snum),
+ &ent->veto_list);
+ set_namearray(conn,
+ lp_hide_files(talloc_tos(), lp_sub, snum),
+ &ent->hide_list);
+ }
+
free_conn_state_if_unused(conn);
conn->session_info = ent->session_info;
+ conn->veto_list = ent->veto_list;
+ conn->hide_list = ent->hide_list;
conn->vuid = ent->vuid;
if (vuid == UID_FIELD_INVALID) {
/*