From 37a3339a1891f0189ff62891e6be85ace23efc33 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 31 Jan 2007 13:09:07 +0000 Subject: [PATCH] r21082: Make canonicalize_path static to service.c -- we do have conn->connectpath (This used to be commit 06f58096e3785d0e2e0b9f2053d4975e44568e15) --- source3/smbd/notify_fam.c | 21 +++------------------ source3/smbd/notify_hash.c | 19 +++---------------- source3/smbd/service.c | 25 +++++++++++++++++++++++++ source3/smbd/vfs.c | 25 ------------------------- 4 files changed, 31 insertions(+), 59 deletions(-) diff --git a/source3/smbd/notify_fam.c b/source3/smbd/notify_fam.c index aba1f5dcb30..08dc4eabb0c 100644 --- a/source3/smbd/notify_fam.c +++ b/source3/smbd/notify_fam.c @@ -189,7 +189,6 @@ static void *fam_notify_add(TALLOC_CTX *mem_ctx, files_struct *fsp, uint32 *filter) { struct fam_notify_ctx *ctx; - pstring fullpath; if ((*filter & FILE_NOTIFY_CHANGE_FILE_NAME) == 0) { DEBUG(10, ("filter = %u, no FILE_NOTIFY_CHANGE_FILE_NAME\n", @@ -197,21 +196,6 @@ static void *fam_notify_add(TALLOC_CTX *mem_ctx, return NULL; } - /* FAM needs an absolute pathname. */ - - pstrcpy(fullpath, fsp->fsp_name); - if (!canonicalize_path(fsp->conn, fullpath)) { - DEBUG(0, ("failed to canonicalize path '%s'\n", fullpath)); - return NULL; - } - - if (*fullpath != '/') { - DEBUG(0, ("canonicalized path '%s' into `%s`\n", fsp->fsp_name, - fullpath)); - DEBUGADD(0, ("but expected an absolute path\n")); - return NULL; - } - if (!(ctx = TALLOC_P(mem_ctx, struct fam_notify_ctx))) { return NULL; } @@ -226,8 +210,9 @@ static void *fam_notify_add(TALLOC_CTX *mem_ctx, ctx->filter = FILE_NOTIFY_CHANGE_FILE_NAME; - if (!(ctx->path = talloc_strdup(ctx, fullpath))) { - DEBUG(0, ("talloc_strdup failed\n")); + if (!(ctx->path = talloc_asprintf(ctx, "%s/%s", fsp->conn->connectpath, + fsp->fsp_name))) { + DEBUG(0, ("talloc_asprintf failed\n")); TALLOC_FREE(ctx); return NULL; } diff --git a/source3/smbd/notify_hash.c b/source3/smbd/notify_hash.c index 5f563419bdd..2cd8fbc6bc0 100644 --- a/source3/smbd/notify_hash.c +++ b/source3/smbd/notify_hash.c @@ -222,7 +222,6 @@ static void *hash_notify_add(TALLOC_CTX *mem_ctx, { struct hash_notify_ctx *ctx; int timeout = lp_change_notify_timeout(SNUM(fsp->conn)); - pstring fullpath; if (timeout <= 0) { /* It change notify timeout has been disabled, never scan the @@ -230,26 +229,14 @@ static void *hash_notify_add(TALLOC_CTX *mem_ctx, return NULL; } - pstrcpy(fullpath, fsp->fsp_name); - if (!canonicalize_path(fsp->conn, fullpath)) { - DEBUG(0, ("failed to canonicalize path '%s'\n", fullpath)); - return NULL; - } - - if (*fullpath != '/') { - DEBUG(0, ("canonicalized path '%s' into `%s`\n", fsp->fsp_name, - fullpath)); - DEBUGADD(0, ("but expected an absolute path\n")); - return NULL; - } - if (!(ctx = TALLOC_P(mem_ctx, struct hash_notify_ctx))) { DEBUG(0, ("talloc failed\n")); return NULL; } - if (!(ctx->path = talloc_strdup(ctx, fullpath))) { - DEBUG(0, ("talloc_strdup failed\n")); + if (!(ctx->path = talloc_asprintf(ctx, "%s/%s", fsp->conn->connectpath, + fsp->fsp_name))) { + DEBUG(0, ("talloc_asprintf failed\n")); TALLOC_FREE(ctx); return NULL; } diff --git a/source3/smbd/service.c b/source3/smbd/service.c index 9efe63a82c1..ff6f9d1c1a6 100644 --- a/source3/smbd/service.c +++ b/source3/smbd/service.c @@ -22,6 +22,31 @@ extern userdom_struct current_user_info; +BOOL canonicalize_path(connection_struct *conn, pstring path) +{ +#ifdef REALPATH_TAKES_NULL + char *resolved_name = SMB_VFS_REALPATH(conn,path,NULL); + if (!resolved_name) { + return False; + } + pstrcpy(path, resolved_name); + SAFE_FREE(resolved_name); + return True; +#else +#ifdef PATH_MAX + char resolved_name_buf[PATH_MAX+1]; +#else + pstring resolved_name_buf; +#endif + char *resolved_name = SMB_VFS_REALPATH(conn,path,resolved_name_buf); + if (!resolved_name) { + return False; + } + pstrcpy(path, resolved_name); + return True; +#endif /* REALPATH_TAKES_NULL */ +} + /**************************************************************************** Ensure when setting connectpath it is a canonicalized (no ./ // or ../) absolute path stating in / and not ending in /. diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index 643c48cd27c..df81b2936d4 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -792,31 +792,6 @@ char *vfs_GetWd(connection_struct *conn, char *path) return (path); } -BOOL canonicalize_path(connection_struct *conn, pstring path) -{ -#ifdef REALPATH_TAKES_NULL - char *resolved_name = SMB_VFS_REALPATH(conn,path,NULL); - if (!resolved_name) { - return False; - } - pstrcpy(path, resolved_name); - SAFE_FREE(resolved_name); - return True; -#else -#ifdef PATH_MAX - char resolved_name_buf[PATH_MAX+1]; -#else - pstring resolved_name_buf; -#endif - char *resolved_name = SMB_VFS_REALPATH(conn,path,resolved_name_buf); - if (!resolved_name) { - return False; - } - pstrcpy(path, resolved_name); - return True; -#endif /* REALPATH_TAKES_NULL */ -} - /******************************************************************* Reduce a file name, removing .. elements and checking that it is below dir in the heirachy. This uses realpath. -- 2.34.1