summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2008-11-01 03:39:20 +0100
committerJelmer Vernooij <jelmer@samba.org>2008-11-01 03:39:20 +0100
commit38d67363aca81b970717c58b07e04396ae9dfd9f (patch)
tree7355807312f4d733e8dc33174b798aa742437295
parente8cda43e171c1aa8f4b858228e715290d400691c (diff)
downloadsamba-38d67363aca81b970717c58b07e04396ae9dfd9f.tar.gz
samba-38d67363aca81b970717c58b07e04396ae9dfd9f.tar.bz2
samba-38d67363aca81b970717c58b07e04396ae9dfd9f.zip
Move sys_lchown() to libreplace.
-rw-r--r--lib/replace/README1
-rw-r--r--lib/replace/libreplace.m42
-rw-r--r--lib/replace/replace.c8
-rw-r--r--lib/replace/replace.h4
-rw-r--r--source3/include/proto.h1
-rw-r--r--source3/lib/system.c19
-rw-r--r--source3/modules/vfs_default.c2
-rw-r--r--source3/modules/vfs_netatalk.c2
8 files changed, 16 insertions, 23 deletions
diff --git a/lib/replace/README b/lib/replace/README
index f189e8716f..1005281a6b 100644
--- a/lib/replace/README
+++ b/lib/replace/README
@@ -47,6 +47,7 @@ mkstemp (a secure one!)
pread
pwrite
chown
+lchown
getpass
readline (the library)
inet_ntoa
diff --git a/lib/replace/libreplace.m4 b/lib/replace/libreplace.m4
index a93a9dad45..cc9be162ac 100644
--- a/lib/replace/libreplace.m4
+++ b/lib/replace/libreplace.m4
@@ -108,7 +108,7 @@ AC_CHECK_FUNCS(seteuid setresuid setegid setresgid chroot bzero strerror)
AC_CHECK_FUNCS(vsyslog setlinebuf mktime ftruncate chsize rename)
AC_CHECK_FUNCS(waitpid strlcpy strlcat initgroups memmove strdup)
AC_CHECK_FUNCS(pread pwrite strndup strcasestr strtok_r mkdtemp)
-AC_CHECK_FUNCS(isatty chown link readlink symlink)
+AC_CHECK_FUNCS(isatty chown lchown link readlink symlink)
AC_HAVE_DECL(setresuid, [#include <unistd.h>])
AC_HAVE_DECL(setresgid, [#include <unistd.h>])
AC_HAVE_DECL(errno, [#include <errno.h>])
diff --git a/lib/replace/replace.c b/lib/replace/replace.c
index 37705b93cd..f4faef992a 100644
--- a/lib/replace/replace.c
+++ b/lib/replace/replace.c
@@ -650,3 +650,11 @@ int rep_symlink(const char *oldpath, const char *newpath)
return -1;
}
#endif
+
+#ifndef HAVE_LCHOWN
+int rep_lchown(const char *fname,uid_t uid,gid_t gid)
+{
+ errno = ENOSYS;
+ return -1;
+}
+#endif
diff --git a/lib/replace/replace.h b/lib/replace/replace.h
index f56c5b0dc9..b81bf5c576 100644
--- a/lib/replace/replace.h
+++ b/lib/replace/replace.h
@@ -235,6 +235,10 @@ int rep_readlink(const char *path, char *buf, size_t bufsize);
int rep_symlink(const char *oldpath, const char *newpath);
#endif
+#ifndef HAVE_LCHOWN
+#define lchown rep_lchown
+int rep_lchown(const char *fname,uid_t uid,gid_t gid);
+#endif
#ifndef HAVE_SETLINEBUF
#define setlinebuf rep_setlinebuf
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 7e6f608896..5104910e99 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1003,7 +1003,6 @@ int sys_mknod(const char *path, mode_t mode, SMB_DEV_T dev);
char *sys_realpath(const char *path, char *resolved_path);
int sys_waitpid(pid_t pid,int *status,int options);
char *sys_getwd(char *s);
-int sys_lchown(const char *fname,uid_t uid,gid_t gid);
int sys_chroot(const char *dname);
void set_effective_capability(enum smbd_capability capability);
void drop_effective_capability(enum smbd_capability capability);
diff --git a/source3/lib/system.c b/source3/lib/system.c
index e2ed11d450..27722fcab2 100644
--- a/source3/lib/system.c
+++ b/source3/lib/system.c
@@ -581,25 +581,6 @@ char *sys_getwd(char *s)
}
/*******************************************************************
- Wrapper for lchown.
-********************************************************************/
-
-int sys_lchown(const char *fname,uid_t uid,gid_t gid)
-{
-#ifndef HAVE_LCHOWN
- static int done;
- if (!done) {
- DEBUG(1,("WARNING: no lchown!\n"));
- done=1;
- }
- errno = ENOSYS;
- return -1;
-#else
- return(lchown(fname,uid,gid));
-#endif
-}
-
-/*******************************************************************
os/2 also doesn't have chroot
********************************************************************/
int sys_chroot(const char *dname)
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index 37b0fc392b..13c2770208 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -621,7 +621,7 @@ static int vfswrap_lchown(vfs_handle_struct *handle, const char *path, uid_t uid
int result;
START_PROFILE(syscall_lchown);
- result = sys_lchown(path, uid, gid);
+ result = lchown(path, uid, gid);
END_PROFILE(syscall_lchown);
return result;
}
diff --git a/source3/modules/vfs_netatalk.c b/source3/modules/vfs_netatalk.c
index 2cc4a6c4ba..ca7085ca18 100644
--- a/source3/modules/vfs_netatalk.c
+++ b/source3/modules/vfs_netatalk.c
@@ -399,7 +399,7 @@ static int atalk_lchown(struct vfs_handle_struct *handle, const char *path, uid_
goto exit_lchown;
}
- sys_lchown(adbl_path, uid, gid);
+ lchown(adbl_path, uid, gid);
exit_lchown:
talloc_destroy(ctx);