Remove gnulib

This commit is contained in:
wbaumann 2020-08-12 10:40:55 +00:00
parent 75e9a82289
commit 21aae32da7
11 changed files with 225 additions and 257 deletions

View File

@ -1,6 +1,9 @@
ChangeLog for davfs2 ChangeLog for davfs2
-------------------- --------------------


2020-08-12 Werner Baumann (werner.baumann@onlinehome.de)
* Remove gnulib.

2020-06-07 Werner Baumann (werner.baumann@onlinehome.de) 2020-06-07 Werner Baumann (werner.baumann@onlinehome.de)
* webdav.c, get_cookies: * webdav.c, get_cookies:
New parser for cookies (bug #58459). New parser for cookies (bug #58459).

View File

@ -20,9 +20,8 @@
## Process this file with automake to produce Makefile.in ## Process this file with automake to produce Makefile.in


EXTRA_DIST = bootstrap BUGS FAQ README.translators \ EXTRA_DIST = bootstrap BUGS FAQ README.translators \
config/COPYING.davfs2 config/INSTALL.davfs2 \ config/COPYING.davfs2 config/INSTALL.davfs2
config/gnulib-cache.m4 SUBDIRS = po etc man src
SUBDIRS = gl glpo po etc man src
ACLOCAL_AMFLAGS = -I config ACLOCAL_AMFLAGS = -I config
doc_DATA = AUTHORS BUGS ChangeLog COPYING FAQ INSTALL NEWS README \ doc_DATA = AUTHORS BUGS ChangeLog COPYING FAQ INSTALL NEWS README \
README.translators THANKS TODO README.translators THANKS TODO

View File

@ -8,7 +8,6 @@


set -ex set -ex
autopoint --force autopoint --force
gnulib-tool --update
cd man; po4a po4a.conf; cd .. cd man; po4a po4a.conf; cd ..
aclocal -I config aclocal -I config
autoheader autoheader

View File

@ -1,53 +0,0 @@
# Copyright (C) 2002-2014 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this file. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception to the GNU General Public License,
# this file may be distributed as part of a program that
# contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
#
# This file represents the specification of how gnulib-tool is used.
# It acts as a cache: It is written and read by gnulib-tool.
# In projects that use version control, this file is meant to be put under
# version control, like the configure.ac and various Makefile.am files.


# Specification in the form of a command-line invocation:
# gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=config --po-base=glpo --doc-base=doc --tests-base=tests --aux-dir=config --no-conditional-dependencies --no-libtool --macro-prefix=gl --po-domain=davfs2 canonicalize iconv_open rpmatch stdalign xalloc xstrndup xvasprintf

# Specification in the form of a few gnulib-tool.m4 macro invocations:
gl_LOCAL_DIR([])
gl_MODULES([
canonicalize
iconv_open
rpmatch
stdalign
xalloc
xstrndup
xvasprintf
])
gl_AVOID([])
gl_SOURCE_BASE([gl])
gl_M4_BASE([config])
gl_PO_BASE([glpo])
gl_DOC_BASE([doc])
gl_TESTS_BASE([tests])
gl_LIB([libgnu])
gl_MAKEFILE_NAME([])
gl_MACRO_PREFIX([gl])
gl_PO_DOMAIN([davfs2])
gl_WITNESS_C_MACRO([])

View File

@ -95,8 +95,6 @@ AC_CONFIG_FILES([Makefile
man/Makefile man/Makefile
man/de/Makefile man/de/Makefile
man/es/Makefile man/es/Makefile
src/Makefile src/Makefile])
gl/Makefile
glpo/Makefile.in])
AC_OUTPUT AC_OUTPUT
DAV_MESSAGE DAV_MESSAGE

View File

@ -32,7 +32,6 @@ mount_davfs_SOURCES = cache.c \
kernel_interface.h mount_davfs.h webdav.h kernel_interface.h mount_davfs.h webdav.h
umount_davfs_SOURCES = umount_davfs.c defaults.h umount_davfs_SOURCES = umount_davfs.c defaults.h


AM_CPPFLAGS = -I$(top_builddir)/gl -I$(top_srcdir)/gl
AM_CFLAGS = -Wall -Werror=format-security \ AM_CFLAGS = -Wall -Werror=format-security \
-fstack-protector --param=ssp-buffer-size=4 -fstack-protector --param=ssp-buffer-size=4
DEFS = -DPROGRAM_NAME=\"mount.davfs\" \ DEFS = -DPROGRAM_NAME=\"mount.davfs\" \
@ -50,8 +49,6 @@ DEFS = -DPROGRAM_NAME=\"mount.davfs\" \
-DDAV_GROUP=\"$(dav_group)\" \ -DDAV_GROUP=\"$(dav_group)\" \
-D_FORTIFY_SOURCE=2 @DEFS@ -D_FORTIFY_SOURCE=2 @DEFS@
LIBS = $(NEON_LIBS) @LIBS@ LIBS = $(NEON_LIBS) @LIBS@
mount_davfs_LDADD = $(LIBINTL) $(LIBICONV) $(LIBTHREAD) ../gl/libgnu.a
umount_davfs_LDADD = $(LIBINTL) ../gl/libgnu.a


install-exec-hook: install-exec-hook:
chmod u+s $(DESTDIR)$(sbindir)/mount.davfs; \ chmod u+s $(DESTDIR)$(sbindir)/mount.davfs; \

View File

@ -63,10 +63,7 @@
#endif #endif
#include <sys/xattr.h> #include <sys/xattr.h>


#include "xalloc.h" #include <ne_alloc.h>
#include "xstrndup.h"
#include "xvasprintf.h"

#include <ne_ssl.h> #include <ne_ssl.h>
#include <ne_xml.h> #include <ne_xml.h>


@ -596,7 +593,7 @@ dav_init_cache(const dav_args *args, const char *mpoint)
grpid = args->grpid; grpid = args->grpid;


table_size = args->table_size; table_size = args->table_size;
table = xcalloc(table_size, sizeof(*table)); table = ne_calloc(table_size * sizeof(*table));


dir_refresh = args->dir_refresh; dir_refresh = args->dir_refresh;
file_refresh = args->file_refresh; file_refresh = args->file_refresh;
@ -609,7 +606,7 @@ dav_init_cache(const dav_args *args, const char *mpoint)
max_upload_attempts = args->max_upload_attempts; max_upload_attempts = args->max_upload_attempts;
lock_refresh = args->lock_refresh; lock_refresh = args->lock_refresh;


fs_stat = (dav_stat *) xmalloc(sizeof(dav_stat)); fs_stat = (dav_stat *) ne_malloc(sizeof(dav_stat));


fs_stat->blocks = 333333333; fs_stat->blocks = 333333333;
fs_stat->bavail = 133333333; fs_stat->bavail = 133333333;
@ -630,13 +627,13 @@ dav_init_cache(const dav_args *args, const char *mpoint)
if (debug) if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Reading stored cache data"); syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Reading stored cache data");
parse_index(); parse_index();
root->name = xstrdup(""); root->name = ne_strdup("");
root->path = dav_conv_to_server_enc(args->path); root->path = dav_conv_to_server_enc(args->path);
root->mode = default_dir_mode; root->mode = default_dir_mode;


if (!backup) if (!backup)
backup = new_node(root, S_IFDIR | S_IRWXU); backup = new_node(root, S_IFDIR | S_IRWXU);
backup->name = xstrdup(args->backup_dir); backup->name = ne_strdup(args->backup_dir);
backup->mode = S_IFDIR | S_IRWXU; backup->mode = S_IFDIR | S_IRWXU;


clean_cache(); clean_cache();
@ -677,7 +674,8 @@ dav_close_cache(volatile int *got_sigterm)


clean_tree(root, got_sigterm); clean_tree(root, got_sigterm);


char *new_index = xasprintf("%s/%s.new",cache_dir, DAV_INDEX); char *new_index = NULL;
if (asprintf(&new_index, "%s/%s.new",cache_dir, DAV_INDEX) < 0) abort();
if (debug) if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Creating index %s.", syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Creating index %s.",
new_index); new_index);
@ -695,7 +693,8 @@ dav_close_cache(volatile int *got_sigterm)
if (debug) if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG),
"Replacing old index"); "Replacing old index");
char *old_index = xasprintf("%s/%s", cache_dir, DAV_INDEX); char *old_index = NULL;
if (asprintf(&old_index, "%s/%s", cache_dir, DAV_INDEX) < 0) abort();
if (rename(new_index, old_index) != 0) if (rename(new_index, old_index) != 0)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_ERR), syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_ERR),
_("can't replace %s with %s"), old_index, new_index); _("can't replace %s with %s"), old_index, new_index);
@ -911,12 +910,13 @@ dav_create(dav_node **nodep, dav_node *parent, const char *name, uid_t uid,
return EINVAL; return EINVAL;


char *name_conv = dav_conv_to_server_enc(name); char *name_conv = dav_conv_to_server_enc(name);
char *path = xasprintf("%s%s", parent->path, name_conv); char *path = NULL;
if (asprintf(&path, "%s%s", parent->path, name_conv) < 0) abort();
free(name_conv); free(name_conv);


*nodep = new_node(parent, mode | S_IFREG); *nodep = new_node(parent, mode | S_IFREG);
(*nodep)->path = path; (*nodep)->path = path;
(*nodep)->name = xstrdup(name); (*nodep)->name = ne_strdup(name);
(*nodep)->uid = uid; (*nodep)->uid = uid;
if (grpid && parent->gid != 0) { if (grpid && parent->gid != 0) {
(*nodep)->gid = parent->gid; (*nodep)->gid = parent->gid;
@ -1038,14 +1038,15 @@ dav_mkdir(dav_node **nodep, dav_node *parent, const char *name, uid_t uid,
return EINVAL; return EINVAL;


char *name_conv = dav_conv_to_server_enc(name); char *name_conv = dav_conv_to_server_enc(name);
char *path = xasprintf("%s%s/", parent->path, name_conv); char *path = NULL;
if (asprintf(&path, "%s%s/", parent->path, name_conv) < 0) abort();
free(name_conv); free(name_conv);
int ret = dav_make_collection(path); int ret = dav_make_collection(path);


if (!ret) { if (!ret) {
*nodep = new_node(parent, mode | S_IFDIR); *nodep = new_node(parent, mode | S_IFDIR);
(*nodep)->path = path; (*nodep)->path = path;
(*nodep)->name = xstrdup(name); (*nodep)->name = ne_strdup(name);
(*nodep)->uid = uid; (*nodep)->uid = uid;
if (grpid && parent->gid != 0) { if (grpid && parent->gid != 0) {
(*nodep)->gid = parent->gid; (*nodep)->gid = parent->gid;
@ -1571,7 +1572,7 @@ add_to_changed(dav_node *node)
return; return;
chp = &(*chp)->next; chp = &(*chp)->next;
} }
*chp = (dav_node_list_item *) xmalloc(sizeof(dav_node_list_item)); *chp = (dav_node_list_item *) ne_malloc(sizeof(dav_node_list_item));
(*chp)->node = node; (*chp)->node = node;
(*chp)->next = NULL; (*chp)->next = NULL;
(*chp)->attempts = 0; (*chp)->attempts = 0;
@ -1591,7 +1592,7 @@ backup_node(dav_node *orig)
if (!orig->cache_path) if (!orig->cache_path)
return; return;
dav_node *node = new_node(backup, orig->mode); dav_node *node = new_node(backup, orig->mode);
node->name = xstrdup(orig->cache_path + strlen(cache_dir) +1); node->name = ne_strdup(orig->cache_path + strlen(cache_dir) +1);
node->cache_path = orig->cache_path; node->cache_path = orig->cache_path;
orig->cache_path = NULL; orig->cache_path = NULL;
orig->dirty = 0; orig->dirty = 0;
@ -1776,10 +1777,11 @@ move_dir(dav_node *src, dav_node *dst, dav_node *dst_parent,
char *dst_path; char *dst_path;
if (!dst) { if (!dst) {
char *dst_conv = dav_conv_to_server_enc(dst_name); char *dst_conv = dav_conv_to_server_enc(dst_name);
dst_path = xasprintf("%s%s/", dst_parent->path, dst_conv); dst_path = NULL;
if (asprintf(&dst_path, "%s%s/", dst_parent->path, dst_conv) < 0) abort();
free(dst_conv); free(dst_conv);
} else { } else {
dst_path = xstrdup(dst->path); dst_path = ne_strdup(dst->path);
} }


if (dav_move(src->path, dst_path) != 0) { if (dav_move(src->path, dst_path) != 0) {
@ -1791,7 +1793,7 @@ move_dir(dav_node *src, dav_node *dst, dav_node *dst_parent,
remove_node(dst); remove_node(dst);


free(src->name); free(src->name);
src->name = xstrdup(dst_name); src->name = ne_strdup(dst_name);
update_path(src, src->path, dst_path); update_path(src, src->path, dst_path);
free(dst_path); free(dst_path);


@ -1815,10 +1817,11 @@ move_no_remote(dav_node *src, dav_node *dst, dav_node *dst_parent,
char *dst_path; char *dst_path;
if (!dst) { if (!dst) {
char *dst_conv = dav_conv_to_server_enc(dst_name); char *dst_conv = dav_conv_to_server_enc(dst_name);
dst_path = xasprintf("%s%s", dst_parent->path, dst_conv); dst_path = NULL;
if (asprintf(&dst_path, "%s%s", dst_parent->path, dst_conv) < 0) abort();
free(dst_conv); free(dst_conv);
} else { } else {
dst_path = xstrdup(dst->path); dst_path = ne_strdup(dst->path);
} }


if (dst) { if (dst) {
@ -1855,7 +1858,7 @@ move_no_remote(dav_node *src, dav_node *dst, dav_node *dst_parent,
dav_lock(dst_path, &src->lock_expire, &src->remote_exists); dav_lock(dst_path, &src->lock_expire, &src->remote_exists);


free(src->name); free(src->name);
src->name = xstrdup(dst_name); src->name = ne_strdup(dst_name);
free(src->path); free(src->path);
src->path = dst_path; src->path = dst_path;
if (src->etag) { if (src->etag) {
@ -1883,10 +1886,11 @@ move_reg(dav_node *src, dav_node *dst, dav_node *dst_parent,
char *dst_path; char *dst_path;
if (!dst) { if (!dst) {
char *dst_conv = dav_conv_to_server_enc(dst_name); char *dst_conv = dav_conv_to_server_enc(dst_name);
dst_path = xasprintf("%s%s", dst_parent->path, dst_conv); dst_path = NULL;
if (asprintf(&dst_path, "%s%s", dst_parent->path, dst_conv) < 0) abort();
free(dst_conv); free(dst_conv);
} else { } else {
dst_path = xstrdup(dst->path); dst_path = ne_strdup(dst->path);
} }


if (dav_move(src->path, dst_path) != 0) { if (dav_move(src->path, dst_path) != 0) {
@ -1916,7 +1920,7 @@ move_reg(dav_node *src, dav_node *dst, dav_node *dst_parent,
} }


free(src->name); free(src->name);
src->name = xstrdup(dst_name); src->name = ne_strdup(dst_name);
free(src->path); free(src->path);
src->path = dst_path; src->path = dst_path;
src->utime = time(NULL); src->utime = time(NULL);
@ -1936,7 +1940,7 @@ move_reg(dav_node *src, dav_node *dst, dav_node *dst_parent,
static dav_node * static dav_node *
new_node(dav_node *parent, mode_t mode) new_node(dav_node *parent, mode_t mode)
{ {
dav_node *node = (dav_node *) xmalloc(sizeof(dav_node)); dav_node *node = (dav_node *) ne_malloc(sizeof(dav_node));


node->parent = parent; node->parent = parent;
node->childs = NULL; node->childs = NULL;
@ -2208,7 +2212,7 @@ update_node(dav_node *node, dav_props *props)


if (strcmp(node->name, props->name) != 0) { if (strcmp(node->name, props->name) != 0) {
free(node->name); free(node->name);
node->name = xstrdup(props->name); node->name = ne_strdup(props->name);
ret = 1; ret = 1;
} }


@ -2287,7 +2291,9 @@ update_path(dav_node *node, const char *src_path, const char *dst_path)
return; return;
} }


char *path = xasprintf("%s%s", dst_path, node->path + strlen(src_path)); char *path = NULL;
if (asprintf(&path, "%s%s", dst_path, node->path + strlen(src_path)) < 0)
abort();
free(node->path); free(node->path);
node->path = path; node->path = path;
} }
@ -2441,7 +2447,8 @@ create_cache_file(dav_node *node)
} }
} }


node->cache_path = xasprintf("%s/%s-XXXXXX", cache_dir, node->name); if (asprintf(&node->cache_path, "%s/%s-XXXXXX", cache_dir, node->name) < 0)
abort();


int fd = mkstemp(node->cache_path); int fd = mkstemp(node->cache_path);
if (fd <= 0) { if (fd <= 0) {
@ -2475,7 +2482,8 @@ create_dir_cache_file(dav_node *dir)
} }
} }


dir->cache_path = xasprintf("%s/dir-%s-XXXXXX", cache_dir, dir->name); if (asprintf(&dir->cache_path, "%s/dir-%s-XXXXXX", cache_dir, dir->name) < 0)
abort();
int fd = mkstemp(dir->cache_path); int fd = mkstemp(dir->cache_path);
if (fd <= 0) { if (fd <= 0) {
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_ERR), syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_ERR),
@ -2513,7 +2521,7 @@ open_file(int *fd, dav_node *node, int flags)
*fd = open(node->cache_path, flags, node->mode); *fd = open(node->cache_path, flags, node->mode);
if (*fd <= 0) if (*fd <= 0)
return EIO; return EIO;
dav_handle *fh = (dav_handle *) xmalloc(sizeof(dav_handle)); dav_handle *fh = (dav_handle *) ne_malloc(sizeof(dav_handle));
fh->fd = *fd; fh->fd = *fd;
fh->flags = O_ACCMODE & flags; fh->flags = O_ACCMODE & flags;
fh->next = node->handles; fh->next = node->handles;
@ -2659,8 +2667,9 @@ check_cache_dir(const char *dir, const char *host, const char *path,
struct passwd *pw = getpwuid(default_uid); struct passwd *pw = getpwuid(default_uid);
if (!pw || !pw->pw_name) if (!pw || !pw->pw_name)
error(EXIT_FAILURE, 0, _("can't read user data base")); error(EXIT_FAILURE, 0, _("can't read user data base"));
char *dir_name = xasprintf("%s%s%s+%s", host, path, mpoint + 1, char *dir_name = NULL;
pw->pw_name); if (asprintf(&dir_name, "%s%s%s+%s", host, path, mpoint + 1,
pw->pw_name) < 0) abort();
*(dir_name + strlen(host) + strlen(path) - 1) = '+'; *(dir_name + strlen(host) + strlen(path) - 1) = '+';
char *pos = strchr(dir_name, '/'); char *pos = strchr(dir_name, '/');
while (pos) { while (pos) {
@ -2675,7 +2684,7 @@ check_cache_dir(const char *dir, const char *host, const char *path,
struct dirent *de = readdir(tl_dir); struct dirent *de = readdir(tl_dir);
while (de && !cache_dir) { while (de && !cache_dir) {
if (strcmp(de->d_name, dir_name) == 0) { if (strcmp(de->d_name, dir_name) == 0) {
cache_dir = xasprintf("%s/%s", dir, de->d_name); if (asprintf(&cache_dir, "%s/%s", dir, de->d_name) < 0) abort();
} }
de = readdir(tl_dir); de = readdir(tl_dir);
} }
@ -2683,7 +2692,7 @@ check_cache_dir(const char *dir, const char *host, const char *path,
closedir(tl_dir); closedir(tl_dir);


if (!cache_dir) { if (!cache_dir) {
cache_dir = xasprintf("%s/%s", dir, dir_name); if (asprintf(&cache_dir, "%s/%s", dir, dir_name) < 0) abort();
if (mkdir(cache_dir, S_IRWXU) != 0) if (mkdir(cache_dir, S_IRWXU) != 0)
error(EXIT_FAILURE, 0, _("can't create cache directory %s"), error(EXIT_FAILURE, 0, _("can't create cache directory %s"),
cache_dir); cache_dir);
@ -2716,7 +2725,8 @@ clean_cache(void)


if (strcmp(de->d_name, ".") != 0 && strcmp(de->d_name, "..") != 0 if (strcmp(de->d_name, ".") != 0 && strcmp(de->d_name, "..") != 0
&& strcmp(de->d_name, DAV_INDEX) != 0) { && strcmp(de->d_name, DAV_INDEX) != 0) {
char *path = xasprintf("%s/%s", cache_dir, de->d_name); char *path = NULL;
if (asprintf(&path, "%s/%s", cache_dir, de->d_name) < 0) abort();
int i = 0; int i = 0;
dav_node *node = NULL; dav_node *node = NULL;
while (!node && i < table_size) { while (!node && i < table_size) {
@ -2734,7 +2744,7 @@ clean_cache(void)
dav_node *found = new_node(backup, default_file_mode); dav_node *found = new_node(backup, default_file_mode);
found->mode &= ~(S_IRWXG | S_IRWXO); found->mode &= ~(S_IRWXG | S_IRWXO);
found->cache_path = path; found->cache_path = path;
found->name = xstrdup(de->d_name); found->name = ne_strdup(de->d_name);
attr_from_cache_file(found); attr_from_cache_file(found);
backup->mtime = time(NULL); backup->mtime = time(NULL);
backup->ctime = backup->mtime; backup->ctime = backup->mtime;
@ -2757,14 +2767,15 @@ clean_cache(void)
static void static void
parse_index(void) parse_index(void)
{ {
char *index = xasprintf("%s/%s", cache_dir, DAV_INDEX); char *index = NULL;
if (asprintf(&index, "%s/%s", cache_dir, DAV_INDEX) < 0) abort();
FILE *idx = fopen(index, "r"); FILE *idx = fopen(index, "r");
if (!idx) { if (!idx) {
free(index); free(index);
return; return;
} }


char *buf = xmalloc(DAV_XML_BUF_SIZE); char *buf = ne_malloc(DAV_XML_BUF_SIZE);
size_t len = fread(buf, 1, DAV_XML_BUF_SIZE, idx); size_t len = fread(buf, 1, DAV_XML_BUF_SIZE, idx);
if (len <= 0) { if (len <= 0) {
free(buf); free(buf);
@ -2900,7 +2911,8 @@ write_node(dav_node *node, FILE *file, const char *indent)
return -1; return -1;
} }


char *ind = xasprintf("%s ", indent); char *ind = NULL;
if (asprintf(&ind, "%s ", indent) < 0) abort();


if (node != root && !is_backup(node)) { if (node != root && !is_backup(node)) {
if (fprintf(file, "%s<d:%s><![CDATA[%s]]></d:%s>\n", ind, type[PATH], node->path, if (fprintf(file, "%s<d:%s><![CDATA[%s]]></d:%s>\n", ind, type[PATH], node->path,
@ -3026,10 +3038,11 @@ static int
xml_cdata(void *userdata, int state, const char *cdata, size_t len) xml_cdata(void *userdata, int state, const char *cdata, size_t len)
{ {
if (!xml_data) { if (!xml_data) {
xml_data = xstrndup(cdata, len); xml_data = ne_strndup(cdata, len);
} else { } else {
char *add = xstrndup(cdata, len); char *add = ne_strndup(cdata, len);
char *new = xasprintf("%s%s", xml_data, add); char *new = NULL;
if (asprintf(&new, "%s%s", xml_data, add) < 0) abort();
free(add); free(add);
free(xml_data); free(xml_data);
xml_data = new; xml_data = new;

View File

@ -1,5 +1,5 @@
/* dav_fuse.c: interface to the fuse kernel module FUSE_KERNEL_VERSION 7. /* dav_fuse.c: interface to the fuse kernel module FUSE_KERNEL_VERSION 7.
Copyright (C) 2006, 2007, 2008. 2009 Werner Baumann Copyright (C) 2006, 2007, 2008. 2009, 2020 Werner Baumann


This file is part of davfs2. This file is part of davfs2.


@ -60,9 +60,6 @@
#endif #endif
#include <sys/wait.h> #include <sys/wait.h>


#include "xalloc.h"
#include "xvasprintf.h"

#include <ne_ssl.h> #include <ne_ssl.h>


#include "defaults.h" #include "defaults.h"
@ -233,7 +230,8 @@ dav_init_kernel_interface(const char *url, const char *mpoint,
if (idle_time > args->lock_refresh / 2) if (idle_time > args->lock_refresh / 2)
idle_time = args->lock_refresh / 2; idle_time = args->lock_refresh / 2;


char *path = xasprintf("%s/%s", DAV_DEV_DIR, FUSE_DEV_NAME); char *path = NULL;
if (asprintf(&path, "%s/%s", DAV_DEV_DIR, FUSE_DEV_NAME) < 0) abort();


fuse_device = open(path, O_RDWR | O_NONBLOCK); fuse_device = open(path, O_RDWR | O_NONBLOCK);


@ -268,10 +266,11 @@ dav_init_kernel_interface(const char *url, const char *mpoint,
if (fuse_device <= 0) if (fuse_device <= 0)
error(EXIT_FAILURE, 0, _("can't open fuse device")); error(EXIT_FAILURE, 0, _("can't open fuse device"));


char *mdata = xasprintf("fd=%i,rootmode=%o,user_id=%i,group_id=%i," char *mdata = NULL;
"allow_other,max_read=%lu", fuse_device, if (asprintf(&mdata, "fd=%i,rootmode=%o,user_id=%i,group_id=%i,"
args->dir_mode, args->fsuid, args->fsgid, "allow_other,max_read=%lu", fuse_device, args->dir_mode,
(unsigned long int) (buf_size - 1024)); args->fsuid, args->fsgid,
(unsigned long int) (buf_size - 1024)) < 0) abort();


if (mount(url, mpoint, "fuse", args->mopts, mdata) != 0) if (mount(url, mpoint, "fuse", args->mopts, mdata) != 0)
error(EXIT_FAILURE, errno, _("mounting failed")); error(EXIT_FAILURE, errno, _("mounting failed"));

View File

@ -75,11 +75,7 @@
#include <sys/types.h> #include <sys/types.h>
#endif #endif


#include "canonicalize.h" #include <ne_alloc.h>
#include "xalloc.h"
#include "xvasprintf.h"
#include "xstrndup.h"

#include <ne_ssl.h> #include <ne_ssl.h>
#include <ne_uri.h> #include <ne_uri.h>
#include <ne_utils.h> #include <ne_utils.h>
@ -474,7 +470,9 @@ check_dirs(dav_args *args)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "mounts in: %s", mounts); syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "mounts in: %s", mounts);


if (!args->use_utab) { if (!args->use_utab) {
char *utab_dir = xasprintf("%s/%s", DAV_LOCALSTATE_DIR, DAV_UTAB_DIR); char *utab_dir;
if (asprintf(&utab_dir, "%s/%s", DAV_LOCALSTATE_DIR, DAV_UTAB_DIR) < 0)
abort();
if (stat(utab_dir, &st) != 0) { if (stat(utab_dir, &st) != 0) {
gain_privileges(args); gain_privileges(args);
if (mkdir(utab_dir, S_IRWXU | S_IRGRP | S_IXGRP if (mkdir(utab_dir, S_IRWXU | S_IRGRP | S_IXGRP
@ -513,7 +511,7 @@ check_dirs(dav_args *args)
} }
release_privileges(args); release_privileges(args);


fname = xasprintf("%s/%s", DAV_SYS_CONF_DIR, DAV_SECRETS); if (asprintf(&fname, "%s/%s", DAV_SYS_CONF_DIR, DAV_SECRETS) < 0) abort();
if (stat(fname, &st) == 0) { if (stat(fname, &st) == 0) {
if (st.st_uid != 0) if (st.st_uid != 0)
error(EXIT_FAILURE, 0, _("file %s has wrong owner"), fname); error(EXIT_FAILURE, 0, _("file %s has wrong owner"), fname);
@ -526,38 +524,47 @@ check_dirs(dav_args *args)


if (!args->privileged) { if (!args->privileged) {


char *path = xasprintf("%s/.%s", args->home, PACKAGE); char *path;
if (asprintf(&path, "%s/.%s", args->home, PACKAGE) < 0) abort();
if (stat(path, &st) != 0) if (stat(path, &st) != 0)
mkdir(path, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); mkdir(path, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);


if (stat(path, &st) == 0) { if (stat(path, &st) == 0) {
fname = xasprintf("%s/.%s/%s", args->home, PACKAGE, DAV_CACHE); if (asprintf(&fname, "%s/.%s/%s", args->home, PACKAGE, DAV_CACHE) < 0)
abort();
if (stat(fname, &st) != 0) if (stat(fname, &st) != 0)
mkdir(fname, S_IRWXU); mkdir(fname, S_IRWXU);
free(fname); free(fname);


fname = xasprintf("%s/.%s/%s", args->home, PACKAGE, DAV_CERTS_DIR); if (asprintf(&fname, "%s/.%s/%s", args->home, PACKAGE,
DAV_CERTS_DIR) < 0) abort();
if (stat(fname, &st) != 0) if (stat(fname, &st) != 0)
mkdir(fname, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); mkdir(fname, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
free(fname); free(fname);


fname = xasprintf("%s/.%s/%s/%s", args->home, PACKAGE, if (asprintf(&fname, "%s/.%s/%s/%s", args->home, PACKAGE,
DAV_CERTS_DIR, DAV_CLICERTS_DIR); DAV_CERTS_DIR, DAV_CLICERTS_DIR) < 0) abort();
if (stat(fname, &st) != 0) if (stat(fname, &st) != 0)
mkdir(fname, S_IRWXU); mkdir(fname, S_IRWXU);
free(fname); free(fname);


fname = xasprintf("%s/.%s/%s", args->home, PACKAGE, DAV_CONFIG); if (asprintf(&fname, "%s/.%s/%s", args->home, PACKAGE, DAV_CONFIG) < 0)
abort();
if (stat(fname, &st) != 0) { if (stat(fname, &st) != 0) {
char *template = xasprintf("%s/%s", DAV_DATA_DIR, DAV_CONFIG); char *template;
if (asprintf(&template, "%s/%s", DAV_DATA_DIR, DAV_CONFIG) < 0)
abort();
cp_file(template, fname); cp_file(template, fname);
free(template); free(template);
} }
free(fname); free(fname);


fname = xasprintf("%s/.%s/%s", args->home, PACKAGE, DAV_SECRETS); if (asprintf(&fname, "%s/.%s/%s", args->home, PACKAGE,
DAV_SECRETS) < 0) abort();
if (stat(fname, &st) != 0) { if (stat(fname, &st) != 0) {
char *template = xasprintf("%s/%s", DAV_DATA_DIR, DAV_SECRETS); char *template;
if (asprintf(&template, "%s/%s", DAV_DATA_DIR, DAV_SECRETS) < 0)
abort();
cp_file(template, fname); cp_file(template, fname);
chmod(fname, S_IRUSR | S_IWUSR); chmod(fname, S_IRUSR | S_IWUSR);
free(template); free(template);
@ -659,13 +666,14 @@ check_double_mounts(dav_args *args)
char *m = mpoint; char *m = mpoint;
while (*m == '/') while (*m == '/')
m++; m++;
char *mp = xstrdup(m); char *mp = ne_strdup(m);
m = strchr(mp, '/'); m = strchr(mp, '/');
while (m) { while (m) {
*m = '-'; *m = '-';
m = strchr(mp, '/'); m = strchr(mp, '/');
} }
char *pidf = xasprintf("%s/%s.pid", DAV_SYS_RUN, mp); char *pidf;
if (asprintf(&pidf, "%s/%s.pid", DAV_SYS_RUN, mp) < 0) abort();
free(mp); free(mp);
if (debug) if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "PID file: %s", pidf); syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "PID file: %s", pidf);
@ -837,7 +845,7 @@ parse_commandline(dav_args *args, int argc, char *argv[])
int i; int i;
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
len += strlen(argv[i]); len += strlen(argv[i]);
args->cmdline = xmalloc(len); args->cmdline = ne_malloc(len);
char *p = args->cmdline; char *p = args->cmdline;
for (i = 0; i < argc - 1; i++) { for (i = 0; i < argc - 1; i++) {
strcpy(p, argv[i]); strcpy(p, argv[i]);
@ -893,9 +901,9 @@ parse_commandline(dav_args *args, int argc, char *argv[])
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
case 2: case 2:
if (*argv[i] == '\"' || *argv[i] == '\'') { if (*argv[i] == '\"' || *argv[i] == '\'') {
url = xstrndup(argv[i] + 1, strlen(argv[i]) - 2); url = ne_strndup(argv[i] + 1, strlen(argv[i]) - 2);
} else { } else {
url = xstrdup(argv[i]); url = ne_strdup(argv[i]);
} }
i++; i++;
mpoint = canonicalize_file_name(argv[i]); mpoint = canonicalize_file_name(argv[i]);
@ -939,14 +947,15 @@ parse_config(dav_args *args)
if (args->conf) { if (args->conf) {
expand_home(&args->conf, args); expand_home(&args->conf, args);
} else if (!args->privileged) { } else if (!args->privileged) {
args->conf = xasprintf("%s/.%s/%s", args->home, PACKAGE, DAV_CONFIG); if (asprintf(&args->conf, "%s/.%s/%s", args->home, PACKAGE,
DAV_CONFIG) < 0) abort();
} }


if (args->conf) if (args->conf)
read_config(args, args->conf, 0); read_config(args, args->conf, 0);


if (!args->dav_user) if (!args->dav_user)
args->dav_user = xstrdup(DAV_USER); args->dav_user = ne_strdup(DAV_USER);
struct passwd *pw = getpwnam(args->dav_user); struct passwd *pw = getpwnam(args->dav_user);
if (!pw) if (!pw)
error(EXIT_FAILURE, errno, _("user %s does not exist"), error(EXIT_FAILURE, errno, _("user %s does not exist"),
@ -954,7 +963,7 @@ parse_config(dav_args *args)
args->dav_uid = pw->pw_uid; args->dav_uid = pw->pw_uid;


if (!args->dav_group) if (!args->dav_group)
args->dav_group = xstrdup(DAV_GROUP); args->dav_group = ne_strdup(DAV_GROUP);
struct group *grp = getgrnam(args->dav_group); struct group *grp = getgrnam(args->dav_group);
if (!grp) if (!grp)
error(EXIT_FAILURE, errno, _("group %s does not exist"), error(EXIT_FAILURE, errno, _("group %s does not exist"),
@ -973,8 +982,8 @@ parse_config(dav_args *args)
if (args->secrets) if (args->secrets)
expand_home(&args->secrets, args); expand_home(&args->secrets, args);
if (!args->privileged && !args->secrets) if (!args->privileged && !args->secrets)
args->secrets = xasprintf("%s/.%s/%s", args->home, PACKAGE, if (asprintf(&args->secrets, "%s/.%s/%s", args->home, PACKAGE,
DAV_SECRETS); DAV_SECRETS) < 0) abort();


if (args->clicert) { if (args->clicert) {
args->client_cert = read_client_cert(&args->clicert, args, 0); args->client_cert = read_client_cert(&args->clicert, args, 0);
@ -992,20 +1001,20 @@ parse_config(dav_args *args)
args->useproxy = 0; args->useproxy = 0;


if (!args->sys_cache) if (!args->sys_cache)
args->sys_cache = xstrdup(DAV_SYS_CACHE); args->sys_cache = ne_strdup(DAV_SYS_CACHE);
if (args->privileged) { if (args->privileged) {
args->cache_dir = xstrdup(args->sys_cache); args->cache_dir = ne_strdup(args->sys_cache);
} else { } else {
if (args->cache_dir) { if (args->cache_dir) {
expand_home(&args->cache_dir, args); expand_home(&args->cache_dir, args);
} else { } else {
args->cache_dir = xasprintf("%s/.%s/%s", args->home, PACKAGE, if (asprintf(&args->cache_dir, "%s/.%s/%s", args->home, PACKAGE,
DAV_CACHE); DAV_CACHE) < 0) abort();
} }
} }


if (!args->backup_dir) if (!args->backup_dir)
args->backup_dir = xstrdup(DAV_BACKUP_DIR); args->backup_dir = ne_strdup(DAV_BACKUP_DIR);


if (!args->delay_upload) if (!args->delay_upload)
args->delay_upload = DAV_DELAY_UPLOAD; args->delay_upload = DAV_DELAY_UPLOAD;
@ -1034,13 +1043,13 @@ parse_persona(dav_args *args)
struct passwd *pw = getpwuid(args->uid); struct passwd *pw = getpwuid(args->uid);
if (!pw || !pw->pw_name || !pw->pw_dir) if (!pw || !pw->pw_name || !pw->pw_dir)
error(EXIT_FAILURE, errno, _("can't read user data base")); error(EXIT_FAILURE, errno, _("can't read user data base"));
args->uid_name = xstrdup(pw->pw_name); args->uid_name = ne_strdup(pw->pw_name);
args->home = canonicalize_file_name(pw->pw_dir); args->home = canonicalize_file_name(pw->pw_dir);
} }


args->ngroups = getgroups(0, NULL); args->ngroups = getgroups(0, NULL);
if (args->ngroups) { if (args->ngroups) {
args->groups = (gid_t *) xmalloc(args->ngroups * sizeof(gid_t)); args->groups = (gid_t *) ne_malloc(args->ngroups * sizeof(gid_t));
if (getgroups(args->ngroups, args->groups) < 0) if (getgroups(args->ngroups, args->groups) < 0)
error(EXIT_FAILURE, 0, _("can't read group data base")); error(EXIT_FAILURE, 0, _("can't read group data base"));
} }
@ -1209,35 +1218,37 @@ write_mtab_entry(const dav_args *args)
char *lock_file = NULL; char *lock_file = NULL;


if (args->use_utab) { if (args->use_utab) {
utab_line = xasprintf("SRC=%s TARGET=%s ROOT=/ " if (asprintf(&utab_line,
"OPTS=uid=%i,gid=%i%s%s%s,helper=%s\n", "SRC=%s TARGET=%s ROOT=/ "
url, mpoint, args->fsuid, args->fsgid, "OPTS=uid=%i,gid=%i%s%s%s,helper=%s\n",
(args->grpid) ? ",grpid" : "", url, mpoint, args->fsuid, args->fsgid,
(!args->privileged) ? ",user=" : "", (args->grpid) ? ",grpid" : "",
(!args->privileged) ? args->uid_name : "", (!args->privileged) ? ",user=" : "",
DAV_FS_TYPE); (!args->privileged) ? args->uid_name : "",
tab_file = xasprintf("%s/%s/%s", DAV_LOCALSTATE_DIR, DAV_UTAB_DIR, DAV_FS_TYPE) < 0) abort();
DAV_UTAB); if (asprintf(&tab_file, "%s/%s/%s", DAV_LOCALSTATE_DIR, DAV_UTAB_DIR,
lock_file = xasprintf("%s,lock", tab_file); DAV_UTAB) < 0) abort();
if (asprintf(&lock_file, "%s,lock", tab_file) < 0) abort();


} else { } else {
mntent.mnt_fsname = url; mntent.mnt_fsname = url;
mntent.mnt_dir = mpoint; mntent.mnt_dir = mpoint;
mntent.mnt_type = DAV_FS_TYPE; mntent.mnt_type = DAV_FS_TYPE;
mntent.mnt_opts = xasprintf("%s%s%s%s%s%s,uid=%i,gid=%i%s%s", if (asprintf(&mntent.mnt_opts,
(args->mopts & MS_RDONLY) ? "ro" : "rw", "%s%s%s%s%s%s,uid=%i,gid=%i%s%s",
(args->mopts & MS_NOSUID) ? ",nosuid" : "", (args->mopts & MS_RDONLY) ? "ro" : "rw",
(args->mopts & MS_NOEXEC) ? ",noexec" : "", (args->mopts & MS_NOSUID) ? ",nosuid" : "",
(args->mopts & MS_NODEV) ? ",nodev" : "", (args->mopts & MS_NOEXEC) ? ",noexec" : "",
(args->grpid) ? ",grpid" : "", (args->mopts & MS_NODEV) ? ",nodev" : "",
(args->netdev) ? ",_netdev" : "", (args->grpid) ? ",grpid" : "",
args->fsuid, args->fsgid, (args->netdev) ? ",_netdev" : "",
(!args->privileged) ? ",user=" : "", args->fsuid, args->fsgid,
(!args->privileged) ? args->uid_name : ""); (!args->privileged) ? ",user=" : "",
(!args->privileged) ? args->uid_name : "") < 0) abort();
mntent. mnt_freq = 0; mntent. mnt_freq = 0;
mntent. mnt_passno = 0; mntent. mnt_passno = 0;
tab_file = xstrdup(_PATH_MOUNTED); tab_file = ne_strdup(_PATH_MOUNTED);
lock_file = xasprintf("%s~", tab_file); if (asprintf(&lock_file, "%s~", tab_file) < 0) abort();
} }


sigset_t oldset; sigset_t oldset;
@ -1502,7 +1513,8 @@ expand_home(char **dir, const dav_args *args)
if (*p != '/') if (*p != '/')
return; return;


char *new_dir = xasprintf("%s%s", args->home, p); char *new_dir;
if (asprintf(&new_dir, "%s%s", args->home, p) < 0) abort();
free(*dir); free(*dir);
*dir = new_dir; *dir = new_dir;
} }
@ -1597,12 +1609,12 @@ get_options(dav_args *args, char *option)
case CONF: case CONF:
if (args->conf) if (args->conf)
free(args->conf); free(args->conf);
args->conf = xstrdup(argument); args->conf = ne_strdup(argument);
break; break;
case USERNAME: case USERNAME:
if (args->cl_username) if (args->cl_username)
free(args->cl_username); free(args->cl_username);
args->cl_username = xstrdup(argument); args->cl_username = ne_strdup(argument);
break; break;
case UID: case UID:
pwd = getpwnam(argument); pwd = getpwnam(argument);
@ -1698,7 +1710,7 @@ get_options(dav_args *args, char *option)
static dav_args * static dav_args *
new_args(void) new_args(void)
{ {
dav_args *args = (dav_args *) xcalloc(1, sizeof(dav_args)); dav_args *args = (dav_args *) ne_calloc(sizeof(dav_args));


args->netdev = DAV_NETDEV; args->netdev = DAV_NETDEV;
args->grpid = DAV_GRPID; args->grpid = DAV_GRPID;
@ -2055,14 +2067,14 @@ read_cert(char **filename, dav_args *args)
} else { } else {
char *f = NULL; char *f = NULL;
if (!args->privileged) { if (!args->privileged) {
f = xasprintf("%s/.%s/%s/%s", args->home, PACKAGE, if (asprintf(&f, "%s/.%s/%s/%s", args->home, PACKAGE,
DAV_CERTS_DIR, *filename); DAV_CERTS_DIR, *filename) < 0) abort();
cert = ne_ssl_cert_read(f); cert = ne_ssl_cert_read(f);
} }
if (!cert) { if (!cert) {
if (f) free(f); if (f) free(f);
f = xasprintf("%s/%s/%s", DAV_SYS_CONF_DIR, DAV_CERTS_DIR, if (asprintf(&f, "%s/%s/%s", DAV_SYS_CONF_DIR, DAV_CERTS_DIR,
*filename); *filename) < 0) abort();
cert = ne_ssl_cert_read(f); cert = ne_ssl_cert_read(f);
} }
if (cert) { if (cert) {
@ -2091,11 +2103,11 @@ read_client_cert(char **filename, dav_args *args, int system)
if (**filename != '/') { if (**filename != '/') {
char *f = NULL; char *f = NULL;
if (!system) { if (!system) {
f = xasprintf("%s/.%s/%s/%s/%s", args->home, PACKAGE, if (asprintf(&f, "%s/.%s/%s/%s/%s", args->home, PACKAGE,
DAV_CERTS_DIR, DAV_CLICERTS_DIR, *filename); DAV_CERTS_DIR, DAV_CLICERTS_DIR, *filename) < 0) abort();
} else { } else {
f = xasprintf("%s/%s/%s/%s", DAV_SYS_CONF_DIR, DAV_CERTS_DIR, if (asprintf(&f, "%s/%s/%s/%s", DAV_SYS_CONF_DIR, DAV_CERTS_DIR,
DAV_CLICERTS_DIR, *filename); DAV_CLICERTS_DIR, *filename) < 0) abort();
} }
free(*filename); free(*filename);
*filename = f; *filename = f;
@ -2169,33 +2181,33 @@ read_config(dav_args *args, const char * filename, int system)
if (system && strcmp(parmv[0], "dav_user") == 0) { if (system && strcmp(parmv[0], "dav_user") == 0) {
if (args->dav_user) if (args->dav_user)
free(args->dav_user); free(args->dav_user);
args->dav_user = xstrdup(parmv[1]); args->dav_user = ne_strdup(parmv[1]);
} else if (system && strcmp(parmv[0], "dav_group") == 0) { } else if (system && strcmp(parmv[0], "dav_group") == 0) {
if (args->dav_group) if (args->dav_group)
free(args->dav_group); free(args->dav_group);
args->dav_group = xstrdup(parmv[1]); args->dav_group = ne_strdup(parmv[1]);
} else if (strcmp(parmv[0], "buf_size") == 0) { } else if (strcmp(parmv[0], "buf_size") == 0) {
args->buf_size = arg_to_int(parmv[1], 10, parmv[0]); args->buf_size = arg_to_int(parmv[1], 10, parmv[0]);
} else if (strcmp(parmv[0], "trust_ca_cert") == 0) { } else if (strcmp(parmv[0], "trust_ca_cert") == 0) {
if (args->trust_ca_cert) if (args->trust_ca_cert)
free(args->trust_ca_cert); free(args->trust_ca_cert);
args->trust_ca_cert = xstrdup(parmv[1]); args->trust_ca_cert = ne_strdup(parmv[1]);
} else if (strcmp(parmv[0], "trust_server_cert") == 0) { } else if (strcmp(parmv[0], "trust_server_cert") == 0) {
if (args->trust_server_cert) if (args->trust_server_cert)
free(args->trust_server_cert); free(args->trust_server_cert);
args->trust_server_cert = xstrdup(parmv[1]); args->trust_server_cert = ne_strdup(parmv[1]);
} else if (!system && strcmp(parmv[0], "secrets") == 0) { } else if (!system && strcmp(parmv[0], "secrets") == 0) {
if (args->secrets) if (args->secrets)
free(args->secrets); free(args->secrets);
args->secrets = xstrdup(parmv[1]); args->secrets = ne_strdup(parmv[1]);
} else if (!system && strcmp(parmv[0], "clientcert") == 0) { } else if (!system && strcmp(parmv[0], "clientcert") == 0) {
if (args->clicert) if (args->clicert)
free(args->clicert); free(args->clicert);
args->clicert = xstrdup(parmv[1]); args->clicert = ne_strdup(parmv[1]);
} else if (system && strcmp(parmv[0], "clientcert") == 0) { } else if (system && strcmp(parmv[0], "clientcert") == 0) {
if (args->sys_clicert) if (args->sys_clicert)
free(args->sys_clicert); free(args->sys_clicert);
args->sys_clicert = xstrdup(parmv[1]); args->sys_clicert = ne_strdup(parmv[1]);
} else if (system && strcmp(parmv[0], "proxy") == 0) { } else if (system && strcmp(parmv[0], "proxy") == 0) {
if (split_uri(NULL, &args->p_host, &args->p_port, NULL, if (split_uri(NULL, &args->p_host, &args->p_port, NULL,
parmv[1]) != 0) parmv[1]) != 0)
@ -2210,7 +2222,7 @@ read_config(dav_args *args, const char * filename, int system)
} else if (strcmp(parmv[0], "lock_owner") == 0) { } else if (strcmp(parmv[0], "lock_owner") == 0) {
if (args->lock_owner) if (args->lock_owner)
free(args->lock_owner); free(args->lock_owner);
args->lock_owner = xstrdup(parmv[1]); args->lock_owner = ne_strdup(parmv[1]);
} else if (strcmp(parmv[0], "lock_timeout") == 0) { } else if (strcmp(parmv[0], "lock_timeout") == 0) {
args->lock_timeout = arg_to_int(parmv[1], 10, parmv[0]); args->lock_timeout = arg_to_int(parmv[1], 10, parmv[0]);
} else if (strcmp(parmv[0], "lock_refresh") == 0) { } else if (strcmp(parmv[0], "lock_refresh") == 0) {
@ -2251,19 +2263,19 @@ read_config(dav_args *args, const char * filename, int system)
} else if (strcmp(parmv[0], "server_charset") == 0) { } else if (strcmp(parmv[0], "server_charset") == 0) {
if (args->s_charset) if (args->s_charset)
free(args->s_charset); free(args->s_charset);
args->s_charset = xstrdup(parmv[1]); args->s_charset = ne_strdup(parmv[1]);
} else if (system && strcmp(parmv[0], "cache_dir") == 0) { } else if (system && strcmp(parmv[0], "cache_dir") == 0) {
if (args->sys_cache) if (args->sys_cache)
free(args->sys_cache); free(args->sys_cache);
args->sys_cache = xstrdup(parmv[1]); args->sys_cache = ne_strdup(parmv[1]);
} else if (!system && strcmp(parmv[0], "cache_dir") == 0) { } else if (!system && strcmp(parmv[0], "cache_dir") == 0) {
if (args->cache_dir != NULL) if (args->cache_dir != NULL)
free(args->cache_dir); free(args->cache_dir);
args->cache_dir = xstrdup(parmv[1]); args->cache_dir = ne_strdup(parmv[1]);
} else if (strcmp(parmv[0], "backup_dir") == 0) { } else if (strcmp(parmv[0], "backup_dir") == 0) {
if (args->backup_dir) if (args->backup_dir)
free(args->backup_dir); free(args->backup_dir);
args->backup_dir = xstrdup(parmv[1]); args->backup_dir = ne_strdup(parmv[1]);
} else if (strcmp(parmv[0], "cache_size") == 0) { } else if (strcmp(parmv[0], "cache_size") == 0) {
args->cache_size = arg_to_int(parmv[1], 10, parmv[0]); args->cache_size = arg_to_int(parmv[1], 10, parmv[0]);
} else if (strcmp(parmv[0], "table_size") == 0) { } else if (strcmp(parmv[0], "table_size") == 0) {
@ -2291,11 +2303,12 @@ read_config(dav_args *args, const char * filename, int system)
if (strcmp(parmv[0], "add_header") == 0) { if (strcmp(parmv[0], "add_header") == 0) {
if (args->header) { if (args->header) {
char *tmp = args->header; char *tmp = args->header;
args->header = xasprintf("%s: %s\r\n%s", parmv[1], if (asprintf(&args->header, "%s: %s\r\n%s", parmv[1],
parmv[2], tmp); parmv[2], tmp) < 0) abort();
if (tmp) free(tmp); if (tmp) free(tmp);
} else { } else {
args->header = xasprintf("%s: %s\r\n", parmv[1], parmv[2]); if (asprintf(&args->header, "%s: %s\r\n", parmv[1],
parmv[2]) < 0) abort();
} }
} else { } else {
error_at_line(EXIT_FAILURE, 0, filename, lineno, error_at_line(EXIT_FAILURE, 0, filename, lineno,
@ -2336,15 +2349,15 @@ read_no_proxy_list(dav_args *args)
return; return;
} }


char *noproxy_list = xstrdup(env); char *noproxy_list = ne_strdup(env);
char *np = strtok(noproxy_list, ", "); char *np = strtok(noproxy_list, ", ");
while (np && args->p_host) { while (np && args->p_host) {


char *host = NULL; char *host = NULL;
if (strchr(np, ':')) { if (strchr(np, ':')) {
host = xasprintf("%s:%d", args->host, args->port); if (asprintf(&host, "%s:%d", args->host, args->port) < 0) abort();
} else { } else {
host = xstrdup(args->host); host = ne_strdup(args->host);
} }


if (*np == '.') { if (*np == '.') {
@ -2433,9 +2446,9 @@ read_secrets(dav_args *args, const char *filename, int system)
memset(args->password, '\0', strlen(args->password)); memset(args->password, '\0', strlen(args->password));
free(args->password); free(args->password);
} }
args->username = xstrdup(parmv[1]); args->username = ne_strdup(parmv[1]);
if (count == 3) if (count == 3)
args->password = xstrdup(parmv[2]); args->password = ne_strdup(parmv[2]);


} else if (strcmp(parmv[0], "proxy") == 0 } else if (strcmp(parmv[0], "proxy") == 0
|| (host && args->p_host || (host && args->p_host
@ -2450,9 +2463,9 @@ read_secrets(dav_args *args, const char *filename, int system)
memset(args->p_passwd, '\0', strlen(args->p_passwd)); memset(args->p_passwd, '\0', strlen(args->p_passwd));
free(args->p_passwd); free(args->p_passwd);
} }
args->p_user = xstrdup(parmv[1]); args->p_user = ne_strdup(parmv[1]);
if (count == 3) if (count == 3)
args->p_passwd = xstrdup(parmv[2]); args->p_passwd = ne_strdup(parmv[2]);


} else if (!system && args->clicert } else if (!system && args->clicert
&& (strcmp(parmv[0], args->clicert) == 0 && (strcmp(parmv[0], args->clicert) == 0
@ -2465,7 +2478,7 @@ read_secrets(dav_args *args, const char *filename, int system)
memset(args->clicert_pw, '\0', strlen(args->clicert_pw)); memset(args->clicert_pw, '\0', strlen(args->clicert_pw));
free(args->clicert_pw); free(args->clicert_pw);
} }
args->clicert_pw = xstrdup(parmv[1]); args->clicert_pw = ne_strdup(parmv[1]);


} else if (system && args->sys_clicert } else if (system && args->sys_clicert
&& (strcmp(parmv[0], args->sys_clicert) == 0 && (strcmp(parmv[0], args->sys_clicert) == 0
@ -2478,7 +2491,7 @@ read_secrets(dav_args *args, const char *filename, int system)
memset(args->clicert_pw, '\0', strlen(args->clicert_pw)); memset(args->clicert_pw, '\0', strlen(args->clicert_pw));
free(args->clicert_pw); free(args->clicert_pw);
} }
args->clicert_pw = xstrdup(parmv[1]); args->clicert_pw = ne_strdup(parmv[1]);
} }


if (scheme) free(scheme); if (scheme) free(scheme);
@ -2561,9 +2574,9 @@ split_uri(char **scheme, char **host, int *port,char **path, const char *uri)
if (scheme) { if (scheme) {
if (*scheme) free(*scheme); if (*scheme) free(*scheme);
if (sch) { if (sch) {
*scheme = xstrdup(sch); *scheme = ne_strdup(sch);
} else { } else {
*scheme = xstrdup("http"); *scheme = ne_strdup("http");
} }
} }


@ -2572,7 +2585,7 @@ split_uri(char **scheme, char **host, int *port,char **path, const char *uri)


if (host) { if (host) {
if (*host) free(*host); if (*host) free(*host);
*host = xmalloc(end - ho + 1); *host = ne_malloc(end - ho + 1);
int i; int i;
for (i = 0; i < (end - ho); i++) { for (i = 0; i < (end - ho); i++) {
if (*ho == '[') { if (*ho == '[') {
@ -2589,11 +2602,11 @@ split_uri(char **scheme, char **host, int *port,char **path, const char *uri)
if (path) { if (path) {
if (*path) free(*path); if (*path) free(*path);
if (!*pa) { if (!*pa) {
*path = xstrdup("/"); *path = ne_strdup("/");
} else if (*(pa + strlen(pa) - 1) == '/') { } else if (*(pa + strlen(pa) - 1) == '/') {
*path = xstrdup(pa); *path = ne_strdup(pa);
} else { } else {
*path = xasprintf("%s/", pa); if (asprintf(path, "%s/", pa) < 0) abort();
} }
} }



View File

@ -40,11 +40,9 @@
#include <unistd.h> #include <unistd.h>
#endif #endif


#include "xalloc.h" #include <ne_alloc.h>
#include "xvasprintf.h"


#include "defaults.h" #include "defaults.h"
#include "canonicalize.h"


#ifdef ENABLE_NLS #ifdef ENABLE_NLS
#define _(String) gettext(String) #define _(String) gettext(String)
@ -126,9 +124,9 @@ main(int argc, char *argv[])


char *umount_command = NULL; char *umount_command = NULL;
if (mpoint) { if (mpoint) {
umount_command = xasprintf("umount -i '%s'", mpoint); if (asprintf(&umount_command, "umount -i '%s'", mpoint) < 0) abort();
} else { } else {
umount_command = xasprintf("umount -i '%s'", argv[optind]); if (asprintf(&umount_command, "umount -i '%s'", argv[optind]) < 0) abort();
error(0, 0, error(0, 0,
_("\n" _("\n"
" can't evaluate PID file name;\n" " can't evaluate PID file name;\n"
@ -140,13 +138,14 @@ main(int argc, char *argv[])
char *m = mpoint; char *m = mpoint;
while (*m == '/') while (*m == '/')
m++; m++;
char *mp = xstrdup(m); char *mp = ne_strdup(m);
m = strchr(mp, '/'); m = strchr(mp, '/');
while (m) { while (m) {
*m = '-'; *m = '-';
m = strchr(mp, '/'); m = strchr(mp, '/');
} }
char *pidfile = xasprintf("%s/%s.pid", DAV_SYS_RUN, mp); char *pidfile;
if (asprintf(&pidfile, "%s/%s.pid", DAV_SYS_RUN, mp) < 0) abort();
free(mp); free(mp);


char *pid = NULL; char *pid = NULL;
@ -161,7 +160,8 @@ main(int argc, char *argv[])
} }
fclose(file); fclose(file);


char *ps_command = xasprintf("ps -p %s", pid); char *ps_command;
if (asprintf(&ps_command, "ps -p %s", pid) < 0) abort();
FILE *ps_in = popen(ps_command, "r"); FILE *ps_in = popen(ps_command, "r");
if (!ps_in) { if (!ps_in) {
error(0, 0, error(0, 0,

View File

@ -1,5 +1,5 @@
/* webdav.c: send requests to the WebDAV server. /* webdav.c: send requests to the WebDAV server.
Copyright (C) 2006, 2007, 2008, 2009 Werner Baumann Copyright (C) 2006, 2007, 2008, 2009, 2020 Werner Baumann


This file is part of davfs2. This file is part of davfs2.


@ -59,10 +59,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#endif #endif


#include "xalloc.h" #include <ne_alloc.h>
#include "xstrndup.h"
#include "xvasprintf.h"

#include <ne_auth.h> #include <ne_auth.h>
#include <ne_basic.h> #include <ne_basic.h>
#include <ne_compress.h> #include <ne_compress.h>
@ -356,8 +353,8 @@ dav_init_webdav(dav_args *args)
error(EXIT_FAILURE, errno, _("socket library initialization failed")); error(EXIT_FAILURE, errno, _("socket library initialization failed"));


if (args->neon_debug & ~NE_DBG_HTTPPLAIN) { if (args->neon_debug & ~NE_DBG_HTTPPLAIN) {
char *buf = xmalloc(log_bufsize); char *buf = ne_malloc(log_bufsize);
cookie_io_functions_t *log_func = xmalloc(sizeof(cookie_io_functions_t)); cookie_io_functions_t *log_func = ne_malloc(sizeof(cookie_io_functions_t));
log_func->read = NULL; log_func->read = NULL;
log_func->write = log_writer; log_func->write = log_writer;
log_func->seek = NULL; log_func->seek = NULL;
@ -375,7 +372,9 @@ dav_init_webdav(dav_args *args)


ne_set_connect_timeout(session, args->connect_timeout); ne_set_connect_timeout(session, args->connect_timeout);


char *useragent = xasprintf("%s/%s", PACKAGE_TARNAME, PACKAGE_VERSION); char *useragent = NULL;
if (asprintf(&useragent, "%s/%s", PACKAGE_TARNAME, PACKAGE_VERSION) < 0)
abort();
ne_set_useragent(session, useragent); ne_set_useragent(session, useragent);
free(useragent); free(useragent);


@ -385,17 +384,17 @@ dav_init_webdav(dav_args *args)
#endif #endif


if (args->username) if (args->username)
username = xstrdup(args->username); username = ne_strdup(args->username);
if (args->password) if (args->password)
password = xstrdup(args->password); password = ne_strdup(args->password);
ne_add_server_auth(session, NE_AUTH_ALL, auth, "server"); ne_add_server_auth(session, NE_AUTH_ALL, auth, "server");


if (args->useproxy && args->p_host) { if (args->useproxy && args->p_host) {
ne_session_proxy(session, args->p_host, args->p_port); ne_session_proxy(session, args->p_host, args->p_port);
if (args->p_user) if (args->p_user)
p_username = xstrdup(args->p_user); p_username = ne_strdup(args->p_user);
if (args->p_passwd) if (args->p_passwd)
p_password = xstrdup(args->p_passwd); p_password = ne_strdup(args->p_passwd);
ne_add_proxy_auth(session, NE_AUTH_ALL, auth, "proxy"); ne_add_proxy_auth(session, NE_AUTH_ALL, auth, "proxy");
} }


@ -423,23 +422,23 @@ dav_init_webdav(dav_args *args)
locks = ne_lockstore_create(); locks = ne_lockstore_create();
if (!args->lock_owner) { if (!args->lock_owner) {
if (!args->username) { if (!args->username) {
owner = xstrdup(PACKAGE_STRING); owner = ne_strdup(PACKAGE_STRING);
} else { } else {
owner = xstrdup(args->username); owner = ne_strdup(args->username);
} }
} else { } else {
owner = xstrdup(args->lock_owner); owner = ne_strdup(args->lock_owner);
} }
lock_timeout = args->lock_timeout; lock_timeout = args->lock_timeout;
} }


if (args->header) { if (args->header) {
custom_header = xstrdup(args->header); custom_header = ne_strdup(args->header);
} }


if (args->n_cookies) { if (args->n_cookies) {
n_cookies = args->n_cookies; n_cookies = args->n_cookies;
cookie_list = (char **) xcalloc(n_cookies, sizeof(char *)); cookie_list = (char **) ne_calloc(n_cookies * sizeof(char *));
ne_hook_post_headers(session, get_cookies, NULL); ne_hook_post_headers(session, get_cookies, NULL);
} }


@ -526,7 +525,7 @@ dav_close_webdav(void)
char * char *
dav_conv_from_utf_8(const char *s) dav_conv_from_utf_8(const char *s)
{ {
char *new = xstrdup(s); char *new = ne_strdup(s);
#if defined DAV_USE_ICONV && defined HAVE_ICONV_H #if defined DAV_USE_ICONV && defined HAVE_ICONV_H
if (from_utf_8) if (from_utf_8)
convert(&new, from_utf_8); convert(&new, from_utf_8);
@ -538,7 +537,7 @@ dav_conv_from_utf_8(const char *s)
char * char *
dav_conv_to_utf_8(const char *s) dav_conv_to_utf_8(const char *s)
{ {
char *new = xstrdup(s); char *new = ne_strdup(s);
#if defined DAV_USE_ICONV && defined HAVE_ICONV_H #if defined DAV_USE_ICONV && defined HAVE_ICONV_H
if (to_utf_8) if (to_utf_8)
convert(&new, to_utf_8); convert(&new, to_utf_8);
@ -550,7 +549,7 @@ dav_conv_to_utf_8(const char *s)
char * char *
dav_conv_from_server_enc(const char *s) dav_conv_from_server_enc(const char *s)
{ {
char *new = xstrdup(s); char *new = ne_strdup(s);
#if defined DAV_USE_ICONV && defined HAVE_ICONV_H #if defined DAV_USE_ICONV && defined HAVE_ICONV_H
if (from_server_enc) if (from_server_enc)
convert(&new, from_server_enc); convert(&new, from_server_enc);
@ -562,7 +561,7 @@ dav_conv_from_server_enc(const char *s)
char * char *
dav_conv_to_server_enc(const char *s) dav_conv_to_server_enc(const char *s)
{ {
char *new = xstrdup(s); char *new = ne_strdup(s);
#if defined DAV_USE_ICONV && defined HAVE_ICONV_H #if defined DAV_USE_ICONV && defined HAVE_ICONV_H
if (to_server_enc) if (to_server_enc)
convert(&new, to_server_enc); convert(&new, to_server_enc);
@ -827,7 +826,7 @@ dav_lock(const char *path, time_t *expire, int *exists)
lock = ne_lock_create(); lock = ne_lock_create();
ne_fill_server_uri(session, &lock->uri); ne_fill_server_uri(session, &lock->uri);
lock->uri.path = spath; lock->uri.path = spath;
lock->owner = xstrdup(owner); lock->owner = ne_strdup(owner);
lock->timeout = lock_timeout; lock->timeout = lock_timeout;


if (!has_if_match_bug && !*exists) if (!has_if_match_bug && !*exists)
@ -1160,7 +1159,7 @@ convert(char **s, iconv_t conv)
size_t insize = strlen(*s); size_t insize = strlen(*s);
char *in = *s; char *in = *s;
size_t outsize = MB_LEN_MAX * (insize + 1); size_t outsize = MB_LEN_MAX * (insize + 1);
char *buf = xcalloc(outsize, 1); char *buf = ne_calloc(outsize);
char *out = buf; char *out = buf;


iconv(conv, NULL, NULL, &out, &outsize); iconv(conv, NULL, NULL, &out, &outsize);
@ -1168,7 +1167,7 @@ convert(char **s, iconv_t conv)
&& insize == 0 && outsize >= MB_LEN_MAX) { && insize == 0 && outsize >= MB_LEN_MAX) {
memset(out, 0, MB_LEN_MAX); memset(out, 0, MB_LEN_MAX);
free(*s); free(*s);
*s = xstrndup(buf, out - buf + MB_LEN_MAX); *s = ne_strndup(buf, out - buf + MB_LEN_MAX);
} }


free(buf); free(buf);
@ -1441,11 +1440,11 @@ replace_slashes(char **name)
char *nn; char *nn;
*slash = '\0'; *slash = '\0';
if (slash == *name) { if (slash == *name) {
nn = xasprintf("slash-%s", slash + 1); if (asprintf(&nn, "slash-%s", slash + 1) < 0) abort();
} else if (slash == end) { } else if (slash == end) {
nn = xasprintf("%s-slash", *name); if (asprintf(&nn, "%s-slash", *name) < 0) abort();
} else { } else {
nn = xasprintf("%s-slash-%s", *name, slash + 1); if (asprintf(&nn, "%s-slash-%s", *name, slash + 1) < 0) abort();
} }
free(*name); free(*name);
*name = nn; *name = nn;
@ -1577,9 +1576,9 @@ get_cookies(ne_request *req, void *userdata, const ne_status *status)
char *s; char *s;
const char *end = strchr(value, ';'); const char *end = strchr(value, ';');
if (end) { if (end) {
s = xstrndup(value, end - value); s = ne_strndup(value, end - value);
} else { } else {
s = xstrdup(value); s = ne_strdup(value);
} }
char *es = strchr(s, '='); char *es = strchr(s, '=');
if (!es) { if (!es) {
@ -1598,12 +1597,12 @@ get_cookies(ne_request *req, void *userdata, const ne_status *status)
int i = 0; int i = 0;
for (i = 0; i < n_cookies; i++) { for (i = 0; i < n_cookies; i++) {
if (!cookie_list[i]) { if (!cookie_list[i]) {
cookie_list[i] = xstrdup(cookie); cookie_list[i] = ne_strdup(cookie);
break; break;
} }
if (strncmp(cookie_list[i], cookie, nl) == 0) { if (strncmp(cookie_list[i], cookie, nl) == 0) {
free(cookie_list[i]); free(cookie_list[i]);
cookie_list[i] = xstrdup(cookie); cookie_list[i] = ne_strdup(cookie);
break; break;
} }
} }
@ -1664,7 +1663,7 @@ prop_result(void *userdata, const ne_uri *uri, const ne_prop_result_set *set)
if (!ctx || !uri || !uri->path || !set) if (!ctx || !uri || !uri->path || !set)
return; return;


char *tmp_path = (char *) xmalloc(strlen(uri->path) + 1); char *tmp_path = (char *) ne_malloc(strlen(uri->path) + 1);
const char *from = uri->path; const char *from = uri->path;
char *to = tmp_path; char *to = tmp_path;
while (*from) { while (*from) {
@ -1673,7 +1672,7 @@ prop_result(void *userdata, const ne_uri *uri, const ne_prop_result_set *set)
*to++ = *from++; *to++ = *from++;
} }
*to = 0; *to = 0;
dav_props *result = xcalloc(1, sizeof(dav_props)); dav_props *result = ne_calloc(sizeof(dav_props));
result->path = ne_path_unescape(tmp_path); result->path = ne_path_unescape(tmp_path);
free (tmp_path); free (tmp_path);


@ -1695,7 +1694,8 @@ prop_result(void *userdata, const ne_uri *uri, const ne_prop_result_set *set)
*(result->path + strlen(result->path) - 1) = '\0'; *(result->path + strlen(result->path) - 1) = '\0';
} else { } else {
if (result->is_dir) { if (result->is_dir) {
char *tmp = xasprintf("%s/", result->path); char *tmp = NULL;
if (asprintf(&tmp, "%s/", result->path) < 0) abort();
free(result->path); free(result->path);
result->path = tmp; result->path = tmp;
} }
@ -1707,13 +1707,13 @@ prop_result(void *userdata, const ne_uri *uri, const ne_prop_result_set *set)
} }


if (strcasecmp(result->path, ctx->path) == 0) { if (strcasecmp(result->path, ctx->path) == 0) {
result->name = xstrdup(""); result->name = ne_strdup("");
} else { } else {
if (strlen(result->path) < (strlen(ctx->path) + result->is_dir + 1)) { if (strlen(result->path) < (strlen(ctx->path) + result->is_dir + 1)) {
dav_delete_props(result); dav_delete_props(result);
return; return;
} }
result->name = xstrndup(result->path + strlen(ctx->path), result->name = ne_strndup(result->path + strlen(ctx->path),
strlen(result->path) - strlen(ctx->path) strlen(result->path) - strlen(ctx->path)
- result->is_dir); - result->is_dir);
replace_slashes(&result->name); replace_slashes(&result->name);
@ -1810,7 +1810,7 @@ ssl_verify(void *userdata, int failures, const ne_ssl_certificate *cert)


char *issuer = ne_ssl_readable_dname(ne_ssl_cert_issuer(cert)); char *issuer = ne_ssl_readable_dname(ne_ssl_cert_issuer(cert));
char *subject = ne_ssl_readable_dname(ne_ssl_cert_subject(cert)); char *subject = ne_ssl_readable_dname(ne_ssl_cert_subject(cert));
char *digest = xcalloc(1, NE_SSL_DIGESTLEN); char *digest = ne_calloc(NE_SSL_DIGESTLEN);
if (!issuer || !subject || ne_ssl_cert_digest(cert, digest) != 0) { if (!issuer || !subject || ne_ssl_cert_digest(cert, digest) != 0) {
if (have_terminal) { if (have_terminal) {
error(0, 0, _("error processing server certificate")); error(0, 0, _("error processing server certificate"));