diff options
-rw-r--r-- | source3/include/vfs.h | 8 | ||||
-rw-r--r-- | source3/modules/vfs_readonly.c | 4 | ||||
-rw-r--r-- | source3/smbd/conn.c | 3 | ||||
-rw-r--r-- | source3/smbd/uid.c | 10 |
4 files changed, 15 insertions, 10 deletions
diff --git a/source3/include/vfs.h b/source3/include/vfs.h index 2992c1db32..7da022ef37 100644 --- a/source3/include/vfs.h +++ b/source3/include/vfs.h @@ -147,7 +147,11 @@ /* Bump to version 30 - Samba 4.0.0 will ship with interface version 30 */ /* Leave at 30 - not yet released. Added conn->cwd to save vfs_GetWd() calls. */ /* Leave at 30 - not yet released. Changed sys_acl_blob_get_file interface to remove type */ -#define SMB_VFS_INTERFACE_VERSION 30 +/* Bump to version 31 - Samba 4.1.0 will ship with interface version 31 */ +/* Leave at 31 - not yet released. Make struct vuid_cache_entry in + connection_struct a pointer. */ + +#define SMB_VFS_INTERFACE_VERSION 31 /* All intercepted VFS operations must be declared as static functions inside module source @@ -306,7 +310,7 @@ typedef struct connection_struct { uint32_t cnum; /* an index passed over the wire */ struct share_params *params; bool force_user; - struct vuid_cache vuid_cache; + struct vuid_cache *vuid_cache; bool printer; bool ipc; bool read_only; /* Attributes for the current user of the share. */ diff --git a/source3/modules/vfs_readonly.c b/source3/modules/vfs_readonly.c index 7919dbc78b..f75db093cc 100644 --- a/source3/modules/vfs_readonly.c +++ b/source3/modules/vfs_readonly.c @@ -82,12 +82,12 @@ static int readonly_connect(vfs_handle_struct *handle, /* Wipe out the VUID cache. */ for (i=0; i< VUID_CACHE_SIZE; i++) { - struct vuid_cache_entry *ent = &conn->vuid_cache.array[i]; + struct vuid_cache_entry *ent = &conn->vuid_cache->array[i]; ent->vuid = UID_FIELD_INVALID; TALLOC_FREE(ent->session_info); ent->read_only = false; } - conn->vuid_cache.next_entry = 0; + conn->vuid_cache->next_entry = 0; } return 0; diff --git a/source3/smbd/conn.c b/source3/smbd/conn.c index bc5a03b4eb..1d4444f368 100644 --- a/source3/smbd/conn.c +++ b/source3/smbd/conn.c @@ -63,6 +63,7 @@ connection_struct *conn_new(struct smbd_server_connection *sconn) if (!(conn=talloc_zero(NULL, connection_struct)) || !(conn->params = talloc(conn, struct share_params)) || + !(conn->vuid_cache = talloc_zero(conn, struct vuid_cache)) || !(conn->connectpath = talloc_strdup(conn, "")) || !(conn->origpath = talloc_strdup(conn, ""))) { DEBUG(0,("TALLOC_ZERO() failed!\n")); @@ -89,7 +90,7 @@ static void conn_clear_vuid_cache(connection_struct *conn, uint64_t vuid) for (i=0; i<VUID_CACHE_SIZE; i++) { struct vuid_cache_entry *ent; - ent = &conn->vuid_cache.array[i]; + ent = &conn->vuid_cache->array[i]; if (ent->vuid == vuid) { ent->vuid = UID_FIELD_INVALID; diff --git a/source3/smbd/uid.c b/source3/smbd/uid.c index 9244f2997d..f9b5716f3d 100644 --- a/source3/smbd/uid.c +++ b/source3/smbd/uid.c @@ -68,7 +68,7 @@ static void free_conn_session_info_if_unused(connection_struct *conn) for (i = 0; i < VUID_CACHE_SIZE; i++) { struct vuid_cache_entry *ent; - ent = &conn->vuid_cache.array[i]; + ent = &conn->vuid_cache->array[i]; if (ent->vuid != UID_FIELD_INVALID && conn->session_info == ent->session_info) { return; @@ -96,7 +96,7 @@ static bool check_user_ok(connection_struct *conn, struct vuid_cache_entry *ent = NULL; for (i=0; i<VUID_CACHE_SIZE; i++) { - ent = &conn->vuid_cache.array[i]; + ent = &conn->vuid_cache->array[i]; if (ent->vuid == vuid) { free_conn_session_info_if_unused(conn); conn->session_info = ent->session_info; @@ -141,10 +141,10 @@ static bool check_user_ok(connection_struct *conn, session_info->info->domain_name, NULL, session_info->security_token, lp_admin_users(snum)); - ent = &conn->vuid_cache.array[conn->vuid_cache.next_entry]; + ent = &conn->vuid_cache->array[conn->vuid_cache->next_entry]; - conn->vuid_cache.next_entry = - (conn->vuid_cache.next_entry + 1) % VUID_CACHE_SIZE; + conn->vuid_cache->next_entry = + (conn->vuid_cache->next_entry + 1) % VUID_CACHE_SIZE; TALLOC_FREE(ent->session_info); |