summaryrefslogtreecommitdiff
path: root/source3/smbd/service.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/smbd/service.c')
-rw-r--r--source3/smbd/service.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index caf1cef17a..590e4cedfc 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -704,6 +704,34 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
return(conn);
}
+/***************************************************************************************
+ Simple wrapper function for make_connection() to include a call to
+ vfs_chdir()
+ **************************************************************************************/
+
+connection_struct *make_connection_with_chdir(const char *service_in, DATA_BLOB password,
+ char *dev, uint16 vuid, NTSTATUS *status)
+{
+ connection_struct *conn = NULL;
+
+ conn = make_connection(service_in, password, dev, vuid, status);
+
+ /*
+ * make_connection() does not change the directory for us any more
+ * so we have to do it as a separate step --jerry
+ */
+
+ if (vfs_ChDir(conn,conn->connectpath) != 0) {
+ DEBUG(0,("move_driver_to_download_area: Can't change directory to %s for [print$] (%s)\n",
+ conn->connectpath,strerror(errno)));
+ yield_connection(conn, lp_servicename(SNUM(conn)));
+ conn_free(conn);
+ return NULL;
+ }
+
+ return conn;
+}
+
/****************************************************************************
Make a connection to a service.
*