X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/69c6522734897c0b81b184c5ebcc6cd9461f6da3..0f9c48b1d23fbe958544094e97ba8ad2a7d8b8f4:/loadparm.c diff --git a/loadparm.c b/loadparm.c index ddb86635..e383f7b3 100644 --- a/loadparm.c +++ b/loadparm.c @@ -1,6 +1,11 @@ /* This is based on loadparm.c from Samba, written by Andrew Tridgell and Karl Auer */ +/* some fixes + * + * Copyright (C) 2001, 2002 by Martin Pool + */ + /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -43,6 +48,8 @@ * */ +/* TODO: Parameter to set debug level on server. */ + #include "rsync.h" #define PTR_DIFF(p1,p2) ((ptrdiff_t)(((char *)(p1)) - (char *)(p2))) #define strequal(a,b) (strcasecmp(a,b)==0) @@ -77,8 +84,6 @@ struct parm_struct unsigned flags; }; -static BOOL bLoaded = False; - #ifndef GLOBAL_NAME #define GLOBAL_NAME "global" #endif @@ -134,6 +139,7 @@ typedef struct char *dont_compress; int timeout; int max_connections; + BOOL ignore_nonreadable; } service; @@ -150,7 +156,16 @@ static service sDefault = False, /* transfer logging */ False, /* ignore errors */ "nobody",/* uid */ + + /* TODO: This causes problems on Debian, where it is called + * "nogroup". Debian patch this in their version of the + * package, but it would be nice to be consistent. Possibly + * other systems are different again. + * + * What is the best behaviour? Perhaps always using (gid_t) + * -2? */ "nobody",/* gid */ + NULL, /* hosts allow */ NULL, /* hosts deny */ NULL, /* auth users */ @@ -164,7 +179,8 @@ static service sDefault = NULL, /* refuse options */ "*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz", /* dont compress */ 0, /* timeout */ - 0 /* max connections */ + 0, /* max connections */ + False /* ignore nonreadable */ }; @@ -262,6 +278,7 @@ static struct parm_struct parm_table[] = {"read only", P_BOOL, P_LOCAL, &sDefault.read_only, NULL, 0}, {"list", P_BOOL, P_LOCAL, &sDefault.list, NULL, 0}, {"use chroot", P_BOOL, P_LOCAL, &sDefault.use_chroot, NULL, 0}, + {"ignore nonreadable",P_BOOL, P_LOCAL, &sDefault.ignore_nonreadable, NULL, 0}, {"uid", P_STRING, P_LOCAL, &sDefault.uid, NULL, 0}, {"gid", P_STRING, P_LOCAL, &sDefault.gid, NULL, 0}, {"hosts allow", P_STRING, P_LOCAL, &sDefault.hosts_allow, NULL, 0}, @@ -340,6 +357,7 @@ FN_LOCAL_BOOL(lp_list, list) FN_LOCAL_BOOL(lp_use_chroot, use_chroot) FN_LOCAL_BOOL(lp_transfer_logging, transfer_logging) FN_LOCAL_BOOL(lp_ignore_errors, ignore_errors) +FN_LOCAL_BOOL(lp_ignore_nonreadable, ignore_nonreadable) FN_LOCAL_STRING(lp_uid, uid) FN_LOCAL_STRING(lp_gid, gid) FN_LOCAL_STRING(lp_hosts_allow, hosts_allow) @@ -377,14 +395,28 @@ static void init_service(service *pservice) copy_service(pservice,&sDefault); } -static void string_set(char **s, char *v) + +/** + * Assign a copy of @p v to @p *s. Handles NULL strings. @p *v must + * be initialized when this is called, either to NULL or a malloc'd + * string. + * + * @fixme There is a small leak here in that sometimes the existing + * value will be dynamically allocated, and the old copy is lost. + * However, we can't always deallocate the old value, because in the + * case of sDefault, it points to a static string. It would be nice + * to have either all-strdup'd values, or to never need to free + * memory. + **/ +static void string_set(char **s, const char *v) { if (!v) { *s = NULL; return; } *s = strdup(v); - if (!*s) exit_cleanup(RERR_MALLOC); + if (!*s) + exit_cleanup(RERR_MALLOC); } @@ -730,8 +762,6 @@ BOOL lp_load(char *pszFname, int globals_only) iServiceIndex = -1; bRetval = pm_process(n2, globals_only?NULL:do_section, do_parameter); - bLoaded = True; - return (bRetval); }