X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/3d2e458a4d66ad09932cc350359e5f273de072eb..d5c973ccb7da1bc87c5caa5d5ac594bc217016f7:/loadparm.c diff --git a/loadparm.c b/loadparm.c index 92b01488..20326621 100644 --- a/loadparm.c +++ b/loadparm.c @@ -3,7 +3,7 @@ /* some fixes * - * Copyright (C) 2001 by Martin Pool + * Copyright (C) 2001, 2002 by Martin Pool */ /* @@ -48,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) @@ -154,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 */ @@ -386,9 +397,16 @@ static void init_service(service *pservice) /** - * Assign a copy of @p v to @p *s, freeing any existing values and - * handling NULL strings. @p *v must be initialized when this is - * called, either to NULL or a malloc'd string. + * 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) { @@ -396,8 +414,6 @@ static void string_set(char **s, const char *v) *s = NULL; return; } - if (*s) - free(*s); *s = strdup(v); if (!*s) exit_cleanup(RERR_MALLOC); @@ -463,11 +479,12 @@ static int strwicmp(char *psz1, char *psz2) /* sync the strings on first non-whitespace */ while (1) { - while (isspace(*psz1)) + while (isspace(* (unsigned char *) psz1)) psz1++; - while (isspace(*psz2)) + while (isspace(* (unsigned char *) psz2)) psz2++; - if (toupper(*psz1) != toupper(*psz2) || *psz1 == '\0' || *psz2 == '\0') + if (toupper(* (unsigned char *) psz1) != toupper(* (unsigned char *) psz2) + || *psz1 == '\0' || *psz2 == '\0') break; psz1++; psz2++; @@ -731,6 +748,9 @@ False on failure. ***************************************************************************/ BOOL lp_load(char *pszFname, int globals_only) { + extern int am_server; + extern int am_daemon; + extern int am_root; pstring n2; BOOL bRetval; @@ -740,7 +760,12 @@ BOOL lp_load(char *pszFname, int globals_only) init_globals(); - pstrcpy(n2,pszFname); + if (pszFname) + pstrcpy(n2,pszFname); + else if (am_server && am_daemon && !am_root) + pstrcpy(n2,RSYNCD_USERCONF); + else + pstrcpy(n2,RSYNCD_SYSCONF); /* We get sections first, so have to start 'behind' to make up */ iServiceIndex = -1;