diff options
author | Gerald Carter <jerry@samba.org> | 2002-06-27 18:10:56 +0000 |
---|---|---|
committer | Gerald Carter <jerry@samba.org> | 2002-06-27 18:10:56 +0000 |
commit | a9093a1b5819d74e6dc21c413dc84f8fd3f181dc (patch) | |
tree | 52ffa375215d830a733bddbd22dbfc6b460a43a3 /source3 | |
parent | 551a4cd89596b7f12d23a878d65361197b20a58f (diff) | |
download | samba-a9093a1b5819d74e6dc21c413dc84f8fd3f181dc.tar.gz samba-a9093a1b5819d74e6dc21c413dc84f8fd3f181dc.tar.xz samba-a9093a1b5819d74e6dc21c413dc84f8fd3f181dc.zip |
It's fairly obvious that no one has tried to upload a driver
to a Samba print server running HEAD in a while. This has been broken
since tridge's changes to make_connection() to not do the chdir()
to the connect_path. Sorry it took me so long to get around to fixing it.
The problem occured with our internal use of make_connection().
jerry
(This used to be commit b5bc8aa0f68ceebfb5c0ec15ff93b0172cec36d8)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/printing/nt_printing.c | 4 | ||||
-rw-r--r-- | source3/smbd/service.c | 28 |
2 files changed, 30 insertions, 2 deletions
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index 08d5ea430a..0ec960b3f0 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -1064,7 +1064,7 @@ static uint32 get_correct_cversion(fstring architecture, fstring driverpath_in, /* Null password is ok - we are already an authenticated user... */ null_pw = data_blob(NULL, 0); become_root(); - conn = make_connection("print$", null_pw, "A:", user->vuid, &nt_status); + conn = make_connection_with_chdir("print$", null_pw, "A:", user->vuid, &nt_status); unbecome_root(); if (conn == NULL) { @@ -1382,7 +1382,7 @@ BOOL move_driver_to_download_area(NT_PRINTER_DRIVER_INFO_LEVEL driver_abstract, become_root(); null_pw = data_blob(NULL, 0); - conn = make_connection("print$", null_pw, "A:", user->vuid, &nt_status); + conn = make_connection_with_chdir("print$", null_pw, "A:", user->vuid, &nt_status); unbecome_root(); if (conn == NULL) { 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. * |