1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00
samba-mirror/lib/replace
Ralph Boehme 738797d8ad lib/replace: validate xattr namespace prefix on FreeBSD
We should validate the xattr name string ensuring it either begins with
"sytem." or "user.". If it doesn't, we should fail the request with
EINVAL.

The FreeBSD xattr API uses namespaces but doesn't put the namespace name
as a string prefix at the beginning of the xattr name. It gets passed as
an additional int arg instead.

On the other hand, our libreplace xattr API expects the caller to put a
namespace prefix into the xattr name.

Unfortunately the conversion and stripping of the namespace string prefix
from the xattr name gives the following unexpected result on FreeBSD:

rep_setxattr("foo.bar", ...) => xattr with name "bar"

The code checks if the name begins with "system.", if it doesn't find
it, it defaults to the user namespace and then does a strchr(name, '.')
which skips *any* leading string before the first dot.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=12490

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
2017-02-10 18:33:17 +01:00
..
system replace: make sure we have a SCOPE_DELIMITER define 2016-12-09 16:58:11 +01:00
test lib replace: Fix detection of features 2017-01-02 14:12:27 +01:00
.checker_innocent
closefrom.c libreplace: Add a closefrom() implementation 2016-06-13 10:10:11 +02:00
configure replace: Look harder for waf. 2010-10-31 17:24:04 +00:00
crypt.c
cwrap.c replace: Add socket_wrapper_enabled(). 2014-04-17 14:56:06 +02:00
dlfcn.c
getaddrinfo.c libreplace: free() deals fine with NULL pointers 2014-01-24 13:55:47 -08:00
getaddrinfo.h
getifaddrs.c replace: fix some trailing whitespaces 2017-01-21 13:15:19 +01:00
hdr_replace.h
inet_aton.c
inet_ntoa.c
inet_ntop.c
inet_pton.c
Makefile waf: ensure "make dist" works from a clean git tree for all libraries 2011-01-08 02:35:22 +01:00
poll.c replace: fix 520c9b0b0a 2012-09-18 16:06:18 +02:00
README replace: Remove deprecated getpass() support. 2012-12-03 14:35:10 +01:00
replace-test.h lib/replace: Try to fix build on HP-UX for os2_delete test 2012-09-23 14:31:01 +10:00
replace-testsuite.h lib/replace: Try to fix build on HP-UX for os2_delete test 2012-09-23 14:31:01 +10:00
replace.c lib/replace: Make sure that replacement strto[u]ll does not reset errno unexpectedly 2015-10-31 22:03:14 +01:00
replace.h replace: Include sysmacros.h 2017-01-08 22:30:02 +01:00
snprintf.c lib: replace: snprintf - Fix length calculation for hex/octal 64-bit values. 2016-06-03 03:48:58 +02:00
socket.c Bug 8997: change libreplace GPL source to LGPL 2013-06-03 18:06:18 +02:00
socketpair.c
strptime.c replace: fix unused variable warning 2012-06-13 23:57:57 +02:00
timegm.c
win32_replace.h
wscript lib/replace tests: prevent GCC fretting over snprintf sizes 2017-02-10 05:09:08 +01:00
xattr.c lib/replace: validate xattr namespace prefix on FreeBSD 2017-02-10 18:33:17 +01:00

This subsystem ensures that we can always use a certain core set of 
functions and types, that are either provided by the OS or by replacement 
functions / definitions in this subsystem. The aim is to try to stick 
to POSIX functions in here as much as possible. Convenience functions 
that are available on no platform at all belong in other subsystems
(such as LIBUTIL).

The following functions are guaranteed:

ftruncate
strlcpy
strlcat
mktime
rename
initgroups
memmove
strdup
setlinebuf
vsyslog
timegm
setenv
unsetenv
strndup
strnlen
waitpid
seteuid
setegid
asprintf
snprintf
vasprintf
vsnprintf
opendir
readdir
telldir
seekdir
clock_gettime
closedir
dlopen
dlclose
dlsym
dlerror
chroot
bzero
strerror
errno
mkdtemp
mkstemp (a secure one!)
pread
pwrite
chown
lchown
readline (the library)
inet_ntoa
inet_ntop
inet_pton
inet_aton
strtoll
strtoull
socketpair
strptime
getaddrinfo
freeaddrinfo
getnameinfo
gai_strerror
getifaddrs
freeifaddrs
utime
utimes
dup2
link
readlink
symlink
realpath
poll
setproctitle

Types:
bool
socklen_t
uint{8,16,32,64}_t
int{8,16,32,64}_t
intptr_t
sig_atomic_t
blksize_t
blkcnt_t

Constants:
PATH_NAME_MAX
UINT{16,32,64}_MAX
INT32_MAX
RTLD_LAZY
HOST_NAME_MAX
UINT16_MAX
UINT32_MAX
UINT64_MAX
CHAR_BIT

Macros:
va_copy
__FUNCTION__
__FILE__
__LINE__
__LINESTR__
__location__
__STRING
__STRINGSTRING
MIN
MAX
QSORT_CAST
ZERO_STRUCT
ZERO_STRUCTP
ZERO_STRUCTPN
ZERO_ARRAY
ARRAY_SIZE
PTR_DIFF

Headers:
stdint.h
stdbool.h

Optional C keywords:
volatile

Prerequisites:
memset (for bzero)
syslog (for vsyslog)
mktemp (for mkstemp and mkdtemp)