diff options
author | Andrew Bartlett <abartlet@samba.org> | 2003-01-06 07:40:39 +0000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2003-01-06 07:40:39 +0000 |
commit | 7b95151ddcb1e4abd592e72d509ec24c5d160511 (patch) | |
tree | 1f1a2d0d243f659d0aeac083fd9b7ecbe9902bcb /source/smbd | |
parent | c3a779fc0d9be38f6aa2569c36916a76e1a04359 (diff) | |
download | samba-7b95151ddcb1e4abd592e72d509ec24c5d160511.tar.gz samba-7b95151ddcb1e4abd592e72d509ec24c5d160511.tar.xz samba-7b95151ddcb1e4abd592e72d509ec24c5d160511.zip |
Merge from HEAD - handle VFS module load failures, change some error returns to
avoid sending NT_STATUS_UNSUCCESSFUL.
Andrew Bartlett
Diffstat (limited to 'source/smbd')
-rw-r--r-- | source/smbd/service.c | 6 | ||||
-rw-r--r-- | source/smbd/vfs.c | 6 |
2 files changed, 9 insertions, 3 deletions
diff --git a/source/smbd/service.c b/source/smbd/service.c index d00c908a1a9..dd427c2ae84 100644 --- a/source/smbd/service.c +++ b/source/smbd/service.c @@ -569,7 +569,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, if (!smbd_vfs_init(conn)) { DEBUG(0, ("vfs_init failed for service %s\n", lp_servicename(SNUM(conn)))); conn_free(conn); - *status = NT_STATUS_UNSUCCESSFUL; + *status = NT_STATUS_BAD_NETWORK_NAME; return NULL; } @@ -598,7 +598,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, DEBUG(1,("root preexec gave %d - failing connection\n", ret)); yield_connection(conn, lp_servicename(SNUM(conn))); conn_free(conn); - *status = NT_STATUS_UNSUCCESSFUL; + *status = NT_STATUS_ACCESS_DENIED; return NULL; } } @@ -627,7 +627,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, change_to_root_user(); yield_connection(conn, lp_servicename(SNUM(conn))); conn_free(conn); - *status = NT_STATUS_UNSUCCESSFUL; + *status = NT_STATUS_ACCESS_DENIED; return NULL; } } diff --git a/source/smbd/vfs.c b/source/smbd/vfs.c index 7b8d9d7e9e0..de7b90df726 100644 --- a/source/smbd/vfs.c +++ b/source/smbd/vfs.c @@ -164,6 +164,7 @@ BOOL vfs_init_custom(connection_struct *conn, const char *vfs_object) if (init_fptr == NULL) { DEBUG(0, ("No vfs_init() symbol found in %s\n", vfs_object)); + sys_dlclose(conn->vfs_private->handle); return False; } @@ -171,12 +172,14 @@ BOOL vfs_init_custom(connection_struct *conn, const char *vfs_object) if ((ops = init_fptr(&vfs_version, &conn->vfs_ops, conn->vfs_private)) == NULL) { DEBUG(0, ("vfs_init() function from %s failed\n", vfs_object)); + sys_dlclose(conn->vfs_private->handle); return False; } if ((vfs_version < SMB_VFS_INTERFACE_CASCADED)) { DEBUG(0, ("vfs_init() returned wrong interface version info (was %d, should be no less than %d)\n", vfs_version, SMB_VFS_INTERFACE_VERSION )); + sys_dlclose(conn->vfs_private->handle); return False; } @@ -184,6 +187,7 @@ BOOL vfs_init_custom(connection_struct *conn, const char *vfs_object) DEBUG(0, ("Warning: vfs_init() states that module confirms interface version #%d, current interface version is #%d.\n\ Proceeding in compatibility mode, new operations (since version #%d) will fallback to default ones.\n", vfs_version, SMB_VFS_INTERFACE_VERSION, vfs_version )); + sys_dlclose(conn->vfs_private->handle); return False; } @@ -249,6 +253,8 @@ BOOL smbd_vfs_init(connection_struct *conn) DEBUG(0, ("smbd_vfs_init: vfs_init_custom failed for %s\n", vfs_module)); string_free(&vfsobj); SAFE_FREE(vfs_module); + DLIST_REMOVE(conn->vfs_private, handle); + SAFE_FREE(handle); return False; } SAFE_FREE(vfs_module); |