123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /*
- * Part of Very Secure FTPd
- * Licence: GPL v2
- * Author: Chris Evans
- * sysstr.c
- *
- * This file basically wraps system functions so that we can deal in our
- * nice abstracted string buffer objects.
- */
- #include "sysstr.h"
- #include "str.h"
- #include "secbuf.h"
- #include "sysutil.h"
- #include "defs.h"
- #include "utility.h"
- #include "tunables.h"
- void
- str_getcwd(struct mystr* p_str)
- {
- static char* p_getcwd_buf;
- char* p_ret;
- if (p_getcwd_buf == 0)
- {
- vsf_secbuf_alloc(&p_getcwd_buf, VSFTP_PATH_MAX);
- }
- /* In case getcwd() fails */
- str_empty(p_str);
- p_ret = vsf_sysutil_getcwd(p_getcwd_buf, VSFTP_PATH_MAX);
- if (p_ret != 0)
- {
- str_alloc_text(p_str, p_getcwd_buf);
- }
- }
- int
- str_write_loop(const struct mystr* p_str, const int fd)
- {
- return vsf_sysutil_write_loop(fd, str_getbuf(p_str), str_getlen(p_str));
- }
- int
- str_read_loop(struct mystr* p_str, const int fd)
- {
- return vsf_sysutil_read_loop(
- fd, (char*) str_getbuf(p_str), str_getlen(p_str));
- }
- int
- str_mkdir(const struct mystr* p_str, const unsigned int mode)
- {
- return vsf_sysutil_mkdir(str_getbuf(p_str), mode);
- }
- int
- str_rmdir(const struct mystr* p_str)
- {
- return vsf_sysutil_rmdir(str_getbuf(p_str));
- }
- int
- str_unlink(const struct mystr* p_str)
- {
- return vsf_sysutil_unlink(str_getbuf(p_str));
- }
- int
- str_chdir(const struct mystr* p_str)
- {
- return vsf_sysutil_chdir(str_getbuf(p_str));
- }
- int
- str_open(const struct mystr* p_str, const enum EVSFSysStrOpenMode mode)
- {
- enum EVSFSysUtilOpenMode open_mode = kVSFSysStrOpenUnknown;
- switch (mode)
- {
- case kVSFSysStrOpenReadOnly:
- open_mode = kVSFSysUtilOpenReadOnly;
- break;
- case kVSFSysStrOpenUnknown:
- /* Fall through */
- default:
- bug("unknown mode value in str_open");
- break;
- }
- return vsf_sysutil_open_file(str_getbuf(p_str), open_mode);
- }
- int
- str_stat(const struct mystr* p_str, struct vsf_sysutil_statbuf** p_ptr)
- {
- return vsf_sysutil_stat(str_getbuf(p_str), p_ptr);
- }
- int
- str_lstat(const struct mystr* p_str, struct vsf_sysutil_statbuf** p_ptr)
- {
- return vsf_sysutil_lstat(str_getbuf(p_str), p_ptr);
- }
- int
- str_create_exclusive(const struct mystr* p_str)
- {
- return vsf_sysutil_create_file_exclusive(str_getbuf(p_str));
- }
- int
- str_create(const struct mystr* p_str)
- {
- return vsf_sysutil_create_or_open_file(
- str_getbuf(p_str), tunable_file_open_mode);
- }
- int
- str_chmod(const struct mystr* p_str, unsigned int mode)
- {
- return vsf_sysutil_chmod(str_getbuf(p_str), mode);
- }
- int
- str_rename(const struct mystr* p_from_str, const struct mystr* p_to_str)
- {
- return vsf_sysutil_rename(str_getbuf(p_from_str), str_getbuf(p_to_str));
- }
- struct vsf_sysutil_dir*
- str_opendir(const struct mystr* p_str)
- {
- return vsf_sysutil_opendir(str_getbuf(p_str));
- }
- void
- str_next_dirent(struct mystr* p_filename_str, struct vsf_sysutil_dir* p_dir)
- {
- const char* p_filename = vsf_sysutil_next_dirent(p_dir);
- str_empty(p_filename_str);
- if (p_filename != 0)
- {
- str_alloc_text(p_filename_str, p_filename);
- }
- }
- int
- str_readlink(struct mystr* p_str, const struct mystr* p_filename_str)
- {
- static char* p_readlink_buf;
- int retval;
- if (p_readlink_buf == 0)
- {
- vsf_secbuf_alloc(&p_readlink_buf, VSFTP_PATH_MAX);
- }
- /* In case readlink() fails */
- str_empty(p_str);
- /* Note: readlink(2) does not NULL terminate, but our wrapper does */
- retval = vsf_sysutil_readlink(str_getbuf(p_filename_str), p_readlink_buf,
- VSFTP_PATH_MAX);
- if (vsf_sysutil_retval_is_error(retval))
- {
- return retval;
- }
- str_alloc_text(p_str, p_readlink_buf);
- return 0;
- }
- struct vsf_sysutil_user*
- str_getpwnam(const struct mystr* p_user_str)
- {
- return vsf_sysutil_getpwnam(str_getbuf(p_user_str));
- }
- void
- str_syslog(const struct mystr* p_str, int severe)
- {
- vsf_sysutil_syslog(str_getbuf(p_str), severe);
- }
|