preparing for release of 2.0.4
[rsync/rsync.git] / loadparm.c
index f152e26..482b41b 100644 (file)
@@ -123,6 +123,8 @@ typedef struct
        char *hosts_deny;
        char *auth_users;
        char *secrets_file;
+       char *exclude;
+       char *exclude_from;
 } service;
 
 
@@ -140,6 +142,8 @@ static service sDefault =
        NULL,    /* hosts deny */
        NULL,    /* auth users */
        NULL,    /* secrets file */
+       NULL,    /* exclude */
+       NULL,    /* exclude from */
 };
 
 
@@ -226,6 +230,7 @@ static struct parm_struct parm_table[] =
   {"motd file",        P_STRING,  P_GLOBAL, &Globals.motd_file,    NULL,   0},
   {"lock file",        P_STRING,  P_GLOBAL, &Globals.lock_file,    NULL,   0},
   {"syslog facility",  P_ENUM,    P_GLOBAL, &Globals.syslog_facility, enum_facilities,0},
+
   {"name",             P_STRING,  P_LOCAL,  &sDefault.name,        NULL,   0},
   {"comment",          P_STRING,  P_LOCAL,  &sDefault.comment,     NULL,   0},
   {"path",             P_STRING,  P_LOCAL,  &sDefault.path,        NULL,   0},
@@ -237,6 +242,8 @@ static struct parm_struct parm_table[] =
   {"hosts deny",       P_STRING,  P_LOCAL,  &sDefault.hosts_deny,  NULL,   0},
   {"auth users",       P_STRING,  P_LOCAL,  &sDefault.auth_users,  NULL,   0},
   {"secrets file",     P_STRING,  P_LOCAL,  &sDefault.secrets_file,NULL,   0},
+  {"exclude",          P_STRING,  P_LOCAL,  &sDefault.exclude,     NULL,   0},
+  {"exclude from",     P_STRING,  P_LOCAL,  &sDefault.exclude_from,NULL,   0},
   {NULL,               P_BOOL,    P_NONE,   NULL,                  NULL,   0}
 };
 
@@ -246,6 +253,7 @@ Initialise the global parameter structure.
 ***************************************************************************/
 static void init_globals(void)
 {
+       memset(&Globals, 0, sizeof(Globals));
 #ifdef LOG_DAEMON
        Globals.syslog_facility = LOG_DAEMON;
 #endif
@@ -299,6 +307,8 @@ FN_LOCAL_STRING(lp_hosts_allow, hosts_allow)
 FN_LOCAL_STRING(lp_hosts_deny, hosts_deny)
 FN_LOCAL_STRING(lp_auth_users, auth_users)
 FN_LOCAL_STRING(lp_secrets_file, secrets_file)
+FN_LOCAL_STRING(lp_exclude, exclude)
+FN_LOCAL_STRING(lp_exclude_from, exclude_from)
 
 /* local prototypes */
 static int    strwicmp( char *psz1, char *psz2 );
@@ -574,7 +584,7 @@ static BOOL lp_do_parameter(int snum, char *parmname, char *parmvalue)
        break;
 
      case P_GSTRING:
-       strcpy((char *)parm_ptr,parmvalue);
+       strlcpy((char *)parm_ptr,parmvalue,sizeof(pstring)-1);
        break;
 
      case P_ENUM:
@@ -585,7 +595,8 @@ static BOOL lp_do_parameter(int snum, char *parmname, char *parmvalue)
                     }
             }
             if (!parm_table[parmnum].enum_list[i].name) {
-                    *(int *)parm_ptr = atoi(parmvalue);
+                    if (atoi(parmvalue) > 0)
+                            *(int *)parm_ptr = atoi(parmvalue);
             }
             break;
      case P_SEP:
@@ -654,26 +665,26 @@ static BOOL do_section(char *sectionname)
 Load the services array from the services file. Return True on success, 
 False on failure.
 ***************************************************************************/
-BOOL lp_load(char *pszFname)
+BOOL lp_load(char *pszFname, int globals_only)
 {
-  pstring n2;
-  BOOL bRetval;
+       pstring n2;
+       BOOL bRetval;
  
-  bRetval = False;
+       bRetval = False;
 
-  bInGlobalSection = True;
+       bInGlobalSection = True;
   
-  init_globals();
+       init_globals();
 
-  pstrcpy(n2,pszFname);
+       pstrcpy(n2,pszFname);
 
-  /* We get sections first, so have to start 'behind' to make up */
-  iServiceIndex = -1;
-  bRetval = pm_process(n2, do_section, do_parameter);
+       /* We get sections first, so have to start 'behind' to make up */
+       iServiceIndex = -1;
+       bRetval = pm_process(n2, globals_only?NULL:do_section, do_parameter);
   
-  bLoaded = True;
+       bLoaded = True;
 
-  return (bRetval);
+       return (bRetval);
 }