/* This is based on loadparm.c from Samba, written by Andrew Tridgell
and Karl Auer */
+/* some fixes
+ *
+ * Copyright (C) 2001, 2002 by Martin Pool <mbp@samba.org>
+ */
+
/*
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
*
*/
+/* 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)
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 */
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);
}
/* 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++;
***************************************************************************/
BOOL lp_load(char *pszFname, int globals_only)
{
+ extern int am_server;
+ extern int am_daemon;
+ extern int am_root;
pstring n2;
BOOL bRetval;
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;