#define BOOL int
#define False 0
#define True 1
-#define Realloc realloc
#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")
char *lock_file;
int syslog_facility;
int max_connections;
+ char *socket_options;
} global;
static global Globals;
char *hosts_deny;
char *auth_users;
char *secrets_file;
+ char *exclude;
+ char *exclude_from;
} service;
NULL, /* hosts deny */
NULL, /* auth users */
NULL, /* secrets file */
+ NULL, /* exclude */
+ NULL, /* exclude from */
};
{"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},
+ {"socket options", P_STRING, P_GLOBAL, &Globals.socket_options,NULL, 0},
{"name", P_STRING, P_LOCAL, &sDefault.name, NULL, 0},
{"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, 0},
{"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}
};
***************************************************************************/
static void init_globals(void)
{
+ memset(&Globals, 0, sizeof(Globals));
#ifdef LOG_DAEMON
Globals.syslog_facility = LOG_DAEMON;
#endif
FN_GLOBAL_STRING(lp_motd_file, &Globals.motd_file)
FN_GLOBAL_STRING(lp_lock_file, &Globals.lock_file)
+FN_GLOBAL_STRING(lp_socket_options, &Globals.socket_options)
FN_GLOBAL_INTEGER(lp_max_connections, &Globals.max_connections)
FN_GLOBAL_INTEGER(lp_syslog_facility, &Globals.syslog_facility)
+
FN_LOCAL_STRING(lp_name, name)
FN_LOCAL_STRING(lp_comment, comment)
FN_LOCAL_STRING(lp_path, path)
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 );
***************************************************************************/
static void init_service(service *pservice)
{
- bzero((char *)pservice,sizeof(service));
+ memset((char *)pservice,0,sizeof(service));
copy_service(pservice,&sDefault);
}
i = iNumServices;
ServicePtrs = (service **)Realloc(ServicePtrs,sizeof(service *)*num_to_alloc);
+
if (ServicePtrs)
pSERVICE(iNumServices) = (service *)malloc(sizeof(service));
break;
case P_GSTRING:
- strcpy((char *)parm_ptr,parmvalue);
+ strlcpy((char *)parm_ptr,parmvalue,sizeof(pstring)-1);
break;
case P_ENUM:
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);
}