Пример #1
0
char *canonicalize_file_name(const char *path)
{
    const char *p;
    libc_func(canonicalize_file_name, char*, const char*);
    char *r, *oldr;

    TRAP_PATH_LOCK;
    p = trap_path(path);
    if (p == NULL)
	r = NULL;
    else {
	r = _canonicalize_file_name(p);
        if (p == path) {
	    DBG(DBG_PATH, "testbed wrapped canonicalize_file_name(%s) -> %s (not wrapped)\n", path, r);
	} else if (r != NULL) {
	    /* cut off the prefix again */
	    oldr = r;
	    r = strdup(r + trap_path_prefix_len);
	    free (oldr);
	    DBG(DBG_PATH, "testbed wrapped canonicalize_file_name(%s -> %s) -> %s (wrapped)\n", path, p, r);
	}
    }
    TRAP_PATH_UNLOCK;
    return r;
}
Пример #2
0
int
connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
{
    libc_func(connect, int, int, const struct sockaddr *, socklen_t);
    int res;

    /* playback */
    if (addr->sa_family == AF_UNIX) {
	const char *sock_path = ((struct sockaddr_un *) addr)->sun_path;
	TRAP_PATH_LOCK;
	const char *p = trap_path(sock_path);
	struct sockaddr_un trapped_addr;

	if (p != sock_path) {
	    DBG(DBG_NETLINK, "testbed wrapped connect: redirecting Unix socket %s to %s\n", sock_path, p);
	    trapped_addr.sun_family = AF_UNIX;
	    strncpy(trapped_addr.sun_path, p, sizeof(trapped_addr.sun_path));
	    addr = (struct sockaddr*) &trapped_addr;
	}
	TRAP_PATH_UNLOCK;
    }

    res = _connect(sockfd, addr, addrlen);
    script_record_connect(sockfd, addr, addrlen, res);

    return res;
}
Пример #3
0
Файл: path.c Проект: pedrox/kmod
TS_EXPORT int open(const char *path, int flags, ...)
{
	const char *p;
	char buf[PATH_MAX * 2];
	static int (*_open)(const char *path, int flags, ...);

	if (!get_rootpath(__func__))
		return -1;

	_open = get_libc_func("open");
	p = trap_path(path, buf);
	if (p == NULL)
		return -1;

	if (flags & O_CREAT) {
		mode_t mode;
		va_list ap;

		va_start(ap, flags);
		mode = va_arg(ap, mode_t);
		va_end(ap);
		_open(p, flags, mode);
	}

	return _open(p, flags);
}
Пример #4
0
int
inotify_add_watch(int fd, const char *path, uint32_t mask)
{
    const char *p;
    libc_func(inotify_add_watch, int, int, const char*, uint32_t);

    p = trap_path(path);
    if (p == NULL)
    return -1;

    return _inotify_add_watch(fd, p, mask);
}
Пример #5
0
ssize_t readlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz)
{
    const char *p;
    libc_func(readlinkat, size_t, int, const char*, char*, size_t);
    size_t r;

    TRAP_PATH_LOCK;
    p = trap_path(pathname);
    DBG(DBG_PATH, "testbed wrapped readlinkat (%s) -> %s\n", pathname, p);
    if (p == NULL)
	r = -1;
    else
	r = _readlinkat(dirfd, p, buf, bufsiz);
    TRAP_PATH_UNLOCK;
    return r;
}
Пример #6
0
int
inotify_add_watch(int fd, const char *path, uint32_t mask)
{
    const char *p;
    libc_func(inotify_add_watch, int, int, const char*, uint32_t);
    int r;

    TRAP_PATH_LOCK;
    p = trap_path(path);
    if (p == NULL)
	r = -1;
    else
	r = _inotify_add_watch(fd, p, mask);
    TRAP_PATH_UNLOCK;
    return r;
}
Пример #7
0
Файл: path.c Проект: pedrox/kmod
TS_EXPORT FILE *fopen(const char *path, const char *mode)
{
	const char *p;
	char buf[PATH_MAX * 2];
	static int (*_fopen)(const char *path, const char *mode);

	if (!get_rootpath(__func__))
		return NULL;

	_fopen = get_libc_func("fopen");

	p = trap_path(path, buf);
	if (p == NULL)
		return NULL;

	return (void *) (long) (*_fopen)(p, mode);
}
Пример #8
0
Файл: path.c Проект: pedrox/kmod
TS_EXPORT DIR *opendir(const char *path)
{
	const char *p;
	char buf[PATH_MAX * 2];
	static int (*_opendir)(const char *path);

	if (!get_rootpath(__func__))
		return NULL;

	_opendir = get_libc_func("opendir");

	p = trap_path(path, buf);
	if (p == NULL)
		return NULL;

	return (void *)(long)(*_opendir)(p);
}
Пример #9
0
Файл: path.c Проект: pedrox/kmod
TS_EXPORT int access(const char *path, int mode)
{
	const char *p;
	char buf[PATH_MAX * 2];
	static int (*_access)(const char *path, int mode);

	if (!get_rootpath(__func__))
		return -1;

	_access = get_libc_func("access");

	p = trap_path(path, buf);
	if (p == NULL)
		return -1;

	return _access(p, mode);
}
Пример #10
0
Файл: path.c Проект: pedrox/kmod
TS_EXPORT int stat64(const char *path, struct stat64 *st)
{
	const char *p;
	char buf[PATH_MAX * 2];
	static int (*_stat64)(const char *path, struct stat64 *buf);

	if (!get_rootpath(__func__))
		return -1;

	_stat64 = get_libc_func("stat64");

	p = trap_path(path, buf);
	if (p == NULL)
		return -1;

	return _stat64(p, st);
}
Пример #11
0
Файл: path.c Проект: pedrox/kmod
TS_EXPORT int __xstat(int ver, const char *path, struct stat *st)
{
	const char *p;
	char buf[PATH_MAX * 2];
	static int (*_xstat)(int __ver, const char *__filename,
						struct stat *__stat_buf);

	if (!get_rootpath(__func__))
		return -1;

	_xstat = get_libc_func("__xstat");

	p = trap_path(path, buf);
	if (p == NULL)
		return -1;

	return _xstat(ver, p, st);
}