1 /*
2  * wzdftpd - a modular and cool ftp server
3  * Copyright (C) 2002-2004  Pierre Chifflier
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18  *
19  * As a special exemption, Pierre Chifflier
20  * and other respective copyright holders give permission to link this program
21  * with OpenSSL, and distribute the resulting executable, without including
22  * the source code for OpenSSL in the source distribution.
23  */
24 
25 #ifndef __WZD_VFS_H__
26 #define __WZD_VFS_H__
27 
28 char *stripdir(const char * dir, char *buf, int maxlen);
29 int checkpath(const char *wanted_path, char *path, wzd_context_t *context);
30 int checkpath_new(const char *wanted_path, char *path, wzd_context_t *context);
31 int test_path(const char *trial_path, wzd_context_t *context);
32 
33 int path_abs2rel(const char *abs, char *rel, int rel_len, wzd_context_t *context);
34 
35 
36 /** kill all users inside path */
37 int killpath(const char *path, wzd_context_t * context);
38 
39 /* remove a vfs entry */
40 int vfs_remove( wzd_vfs_t **vfs_list, const char *vpath );
41 
42 /* free vfs list */
43 int vfs_free(wzd_vfs_t **vfs_list);
44 
45 /* register a new vfs entry */
46 int vfs_add(wzd_vfs_t ** vfs_list, const char *vpath, const char *path);
47 
48 /* if needed, replace the vfs in the path */
49 int vfs_replace(wzd_vfs_t *vfs_list, char *buffer, unsigned int maxlen, wzd_context_t *context);
50 
51 /** register a new vfs entry, with a condition */
52 int vfs_add_restricted(wzd_vfs_t ** vfs_list, const char *vpath, const char *path, const char *target);
53 
54 /** \return 1 if user match corresponding line */
55 int vfs_match_perm(const char *perms,wzd_user_t *user);
56 
57 /** parse vfs entry and replace cookies by their value
58  * \return a newly allocated string with the interpreted path
59  */
60 char * vfs_replace_cookies(const char * path, wzd_context_t * context);
61 
62 #endif /* __WZD_VFS_H__ */
63