Made read_arg_from_pipe() handle EINTR.
[rsync/rsync.git] / loadparm.c
index b7974bc..0915000 100644 (file)
@@ -50,6 +50,7 @@
 /* TODO: Parameter to set debug level on server. */
 
 #include "rsync.h"
+#include "ifuncs.h"
 #define PTR_DIFF(p1,p2) ((ptrdiff_t)(((char *)(p1)) - (char *)(p2)))
 #define strequal(a,b) (strcasecmp(a,b)==0)
 #define BOOLSTR(b) ((b) ? "Yes" : "No")
@@ -60,6 +61,9 @@ typedef char pstring[1024];
 #define LOG_DAEMON 0
 #endif
 
+#define DEFAULT_DONT_COMPRESS "*.gz *.zip *.z *.rpm *.deb *.iso *.bz2" \
+       " *.t[gb]z *.7z *.mp[34] *.mov *.avi *.ogg *.jpg *.jpeg"
+
 /* the following are used by loadparm for option lists */
 typedef enum
 {
@@ -153,6 +157,7 @@ typedef struct
        BOOL ignore_errors;
        BOOL ignore_nonreadable;
        BOOL list;
+       BOOL munge_symlinks;
        BOOL read_only;
        BOOL strict_modes;
        BOOL transfer_logging;
@@ -169,7 +174,7 @@ static service sDefault =
 {
  /* auth_users; */             NULL,
  /* comment; */                        NULL,
- /* dont_compress; */          "*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz",
+ /* dont_compress; */          DEFAULT_DONT_COMPRESS,
  /* exclude; */                        NULL,
  /* exclude_from; */           NULL,
  /* filter; */                 NULL,
@@ -201,6 +206,7 @@ static service sDefault =
  /* ignore_errors; */          False,
  /* ignore_nonreadable; */     False,
  /* list; */                   True,
+ /* munge_symlinks; */         (BOOL)-1,
  /* read_only; */              True,
  /* strict_modes; */           True,
  /* transfer_logging; */       False,
@@ -315,6 +321,7 @@ static struct parm_struct parm_table[] =
  {"log format",        P_STRING, P_LOCAL, &sDefault.log_format,        NULL,0},
  {"max connections",   P_INTEGER,P_LOCAL, &sDefault.max_connections,   NULL,0},
  {"max verbosity",     P_INTEGER,P_LOCAL, &sDefault.max_verbosity,     NULL,0},
+ {"munge symlinks",    P_BOOL,   P_LOCAL, &sDefault.munge_symlinks,    NULL,0},
  {"name",              P_STRING, P_LOCAL, &sDefault.name,              NULL,0},
  {"outgoing chmod",    P_STRING, P_LOCAL, &sDefault.outgoing_chmod,    NULL,0},
  {"path",              P_PATH,   P_LOCAL, &sDefault.path,              NULL,0},
@@ -418,6 +425,7 @@ FN_LOCAL_BOOL(lp_fake_super, fake_super)
 FN_LOCAL_BOOL(lp_ignore_errors, ignore_errors)
 FN_LOCAL_BOOL(lp_ignore_nonreadable, ignore_nonreadable)
 FN_LOCAL_BOOL(lp_list, list)
+FN_LOCAL_BOOL(lp_munge_symlinks, munge_symlinks)
 FN_LOCAL_BOOL(lp_read_only, read_only)
 FN_LOCAL_BOOL(lp_strict_modes, strict_modes)
 FN_LOCAL_BOOL(lp_transfer_logging, transfer_logging)
@@ -554,7 +562,7 @@ static int map_parameter(char *parmname)
       if (strwicmp(parm_table[iIndex].label, parmname) == 0)
          return(iIndex);
 
-   rprintf(FERROR, "Unknown Parameter encountered: \"%s\"\n", parmname);
+   rprintf(FLOG, "Unknown Parameter encountered: \"%s\"\n", parmname);
    return(-1);
 }
 
@@ -580,7 +588,7 @@ static BOOL set_boolean(BOOL *pb, char *parmvalue)
          *pb = False;
       else
       {
-         rprintf(FERROR, "Badly formed boolean in configuration file: \"%s\".\n",
+         rprintf(FLOG, "Badly formed boolean in configuration file: \"%s\".\n",
                parmvalue);
          bRetval = False;
       }
@@ -667,7 +675,7 @@ static BOOL lp_do_parameter(int snum, char *parmname, char *parmvalue)
 
    if (parmnum < 0)
      {
-       rprintf(FERROR, "IGNORING unknown parameter \"%s\"\n", parmname);
+       rprintf(FLOG, "IGNORING unknown parameter \"%s\"\n", parmname);
        return(True);
      }
 
@@ -678,7 +686,7 @@ static BOOL lp_do_parameter(int snum, char *parmname, char *parmvalue)
      parm_ptr = def_ptr;
    } else {
        if (parm_table[parmnum].class == P_GLOBAL) {
-          rprintf(FERROR, "Global parameter %s found in service section!\n",parmname);
+          rprintf(FLOG, "Global parameter %s found in service section!\n",parmname);
           return(True);
         }
        parm_ptr = ((char *)pSERVICE(snum)) + PTR_DIFF(def_ptr,&sDefault);
@@ -790,7 +798,7 @@ static BOOL do_section(char *sectionname)
 
        if ((iServiceIndex=add_a_service(&sDefault,sectionname)) < 0)
         {
-          rprintf(FERROR,"Failed to add a new service\n");
+          rprintf(FLOG, "Failed to add a new service\n");
           return(False);
         }
      }
@@ -805,8 +813,6 @@ static BOOL do_section(char *sectionname)
 ***************************************************************************/
 BOOL lp_load(char *pszFname, int globals_only)
 {
-       extern int am_server;
-       extern int am_root;
        pstring n2;
        BOOL bRetval;
 
@@ -816,12 +822,7 @@ BOOL lp_load(char *pszFname, int globals_only)
 
        init_globals();
 
-       if (pszFname)
-           pstrcpy(n2,pszFname);
-       else if (am_server && am_root <= 0)
-           pstrcpy(n2,RSYNCD_USERCONF);
-       else
-           pstrcpy(n2,RSYNCD_SYSCONF);
+       pstrcpy(n2, pszFname);
 
        /* We get sections first, so have to start 'behind' to make up */
        iServiceIndex = -1;