summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source3/smbwrapper/realcalls.h1
-rw-r--r--source3/smbwrapper/smbw.c4
-rw-r--r--source3/smbwrapper/wrapped.c14
3 files changed, 17 insertions, 2 deletions
diff --git a/source3/smbwrapper/realcalls.h b/source3/smbwrapper/realcalls.h
index a234332b615..786e8966416 100644
--- a/source3/smbwrapper/realcalls.h
+++ b/source3/smbwrapper/realcalls.h
@@ -51,6 +51,7 @@
#define real_readlink(fn,buf,len) (syscall(SYS_readlink, (fn), (buf), (len)))
#define real_rename(fn1, fn2) (syscall(SYS_rename, (fn1), (fn2)))
+#define real_symlink(fn1, fn2) (syscall(SYS_symlink, (fn1), (fn2)))
#define real_stat(fn, buf ) (syscall(SYS_stat, (fn), (buf)))
#define real_fstat(fd, buf ) (syscall(SYS_fstat, (fd), (buf)))
#define real_read(fd, buf, count ) (syscall(SYS_read, (fd), (buf), (count)))
diff --git a/source3/smbwrapper/smbw.c b/source3/smbwrapper/smbw.c
index e933fc36361..39c3eec90c1 100644
--- a/source3/smbwrapper/smbw.c
+++ b/source3/smbwrapper/smbw.c
@@ -319,8 +319,8 @@ int smbw_errno(struct cli_state *c)
ret = cli_error(c, &eclass, &ecode);
if (ret) {
- DEBUG(3,("smbw_error %d %d (0x%x)\n",
- (int)eclass, (int)ecode, (int)ecode));
+ DEBUG(3,("smbw_error %d %d (0x%x) -> %d\n",
+ (int)eclass, (int)ecode, (int)ecode, ret));
}
return ret;
}
diff --git a/source3/smbwrapper/wrapped.c b/source3/smbwrapper/wrapped.c
index 30676ca3d0f..13bd449db3a 100644
--- a/source3/smbwrapper/wrapped.c
+++ b/source3/smbwrapper/wrapped.c
@@ -495,3 +495,17 @@ __asm__(".globl __write; __write = write");
return real_rmdir(name);
}
+
+ int symlink(const char *topath,const char *frompath)
+{
+ int p1, p2;
+ p1 = smbw_path(topath);
+ p2 = smbw_path(frompath);
+ if (p1 || p2) {
+ /* can't handle symlinks */
+ errno = EPERM;
+ return -1;
+ }
+
+ return real_symlink(topath, frompath);
+}