summaryrefslogtreecommitdiff
path: root/source3/smbd/service.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2007-09-12 21:48:20 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:30:41 -0500
commit12f61e09d943ea7fc4149166077507b5b0b3b4e7 (patch)
tree8382cf512a97b3159c3cda38eb952c85f8f2237f /source3/smbd/service.c
parent4754b0ec65a3be4380f3216bd3f59c1906db259b (diff)
downloadsamba-12f61e09d943ea7fc4149166077507b5b0b3b4e7.tar.gz
samba-12f61e09d943ea7fc4149166077507b5b0b3b4e7.tar.bz2
samba-12f61e09d943ea7fc4149166077507b5b0b3b4e7.zip
r25117: The mega-patch Jerry was waiting for. Remove all pstrings from
the main server code paths. We should now be able to cope with paths up to PATH_MAX length now. Final job will be to add the TALLOC_CTX * parameter to unix_convert to make it explicit (for Volker). Jeremy. (This used to be commit 7f0db75fb0f24873577dcb758a2ecee74fdc4297)
Diffstat (limited to 'source3/smbd/service.c')
-rw-r--r--source3/smbd/service.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index aeb0e0f31d..4daa2924a2 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -52,7 +52,7 @@ static BOOL canonicalize_path(connection_struct *conn, pstring path)
Observent people will notice a similarity between this and check_path_syntax :-).
****************************************************************************/
-void set_conn_connectpath(connection_struct *conn, const pstring connectpath)
+void set_conn_connectpath(connection_struct *conn, const char *connectpath)
{
pstring destname;
char *d = destname;
@@ -1117,27 +1117,31 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
strerror(errno) ));
}
change_to_root_user();
- /* Call VFS disconnect hook */
+ /* Call VFS disconnect hook */
SMB_VFS_DISCONNECT(conn);
yield_connection(conn, lp_servicename(snum));
conn_free(conn);
*status = NT_STATUS_BAD_NETWORK_NAME;
return NULL;
}
-
+
string_set(&conn->origpath,conn->connectpath);
-
+
#if SOFTLINK_OPTIMISATION
/* resolve any soft links early if possible */
if (vfs_ChDir(conn,conn->connectpath) == 0) {
- pstring s;
- pstrcpy(s,conn->connectpath);
- vfs_GetWd(conn,s);
+ TALLOC_CTX *ctx = talloc_stackframe();
+ char *s = vfs_GetWd(ctx,s);
+ if (!s) {
+ *status = map_nt_error_from_unix(errno);
+ return NULL;
+ }
set_conn_connectpath(conn,s);
vfs_ChDir(conn,conn->connectpath);
+ TALLOC_FREE(ctx);
}
#endif
-
+
/*
* Print out the 'connected as' stuff here as we need
* to know the effective uid and gid we will be using
@@ -1153,7 +1157,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
dbgtext( "(uid=%d, gid=%d) ", (int)geteuid(), (int)getegid() );
dbgtext( "(pid %d)\n", (int)sys_getpid() );
}
-
+
/* we've finished with the user stuff - go back to root */
change_to_root_user();
return(conn);