@@ -44,6 +44,7 @@ typedef enum
4444{
4545 CUPSD_VARTYPE_INTEGER , /* Integer option */
4646 CUPSD_VARTYPE_TIME , /* Time interval option */
47+ CUPSD_VARTYPE_NULLSTRING , /* String option or NULL/empty string */
4748 CUPSD_VARTYPE_STRING , /* String option */
4849 CUPSD_VARTYPE_BOOLEAN , /* Boolean option */
4950 CUPSD_VARTYPE_PATHNAME , /* File/directory name option */
@@ -65,7 +66,7 @@ typedef struct
6566static const cupsd_var_t cupsd_vars [] =
6667{
6768 { "AutoPurgeJobs" , & JobAutoPurge , CUPSD_VARTYPE_BOOLEAN },
68- { "BrowseDNSSDSubTypes" , & DNSSDSubTypes , CUPSD_VARTYPE_STRING },
69+ { "BrowseDNSSDSubTypes" , & DNSSDSubTypes , CUPSD_VARTYPE_NULLSTRING },
6970 { "BrowseWebIF" , & BrowseWebIF , CUPSD_VARTYPE_BOOLEAN },
7071 { "Browsing" , & Browsing , CUPSD_VARTYPE_BOOLEAN },
7172 { "Classification" , & Classification , CUPSD_VARTYPE_STRING },
@@ -114,7 +115,7 @@ static const cupsd_var_t cupsd_vars[] =
114115 { "MaxSubscriptionsPerPrinter" ,& MaxSubscriptionsPerPrinter , CUPSD_VARTYPE_INTEGER },
115116 { "MaxSubscriptionsPerUser" , & MaxSubscriptionsPerUser , CUPSD_VARTYPE_INTEGER },
116117 { "MultipleOperationTimeout" , & MultipleOperationTimeout , CUPSD_VARTYPE_TIME },
117- { "PageLogFormat" , & PageLogFormat , CUPSD_VARTYPE_STRING },
118+ { "PageLogFormat" , & PageLogFormat , CUPSD_VARTYPE_NULLSTRING },
118119 { "PreserveJobFiles" , & JobFiles , CUPSD_VARTYPE_TIME },
119120 { "PreserveJobHistory" , & JobHistory , CUPSD_VARTYPE_TIME },
120121 { "ReloadTimeout" , & ReloadTimeout , CUPSD_VARTYPE_TIME },
@@ -811,6 +812,13 @@ cupsdReadConfiguration(void)
811812 IdleExitTimeout = 60 ;
812813#endif /* HAVE_ONDEMAND */
813814
815+ if (!strcmp (CUPS_DEFAULT_PEER_CRED , "off" ))
816+ PeerCred = CUPSD_PEERCRED_OFF ;
817+ else if (!strcmp (CUPS_DEFAULT_PEER_CRED , "root-only" ))
818+ PeerCred = CUPSD_PEERCRED_ROOTONLY ;
819+ else
820+ PeerCred = CUPSD_PEERCRED_ON ;
821+
814822 /*
815823 * Setup environment variables...
816824 */
@@ -1899,7 +1907,7 @@ get_addr_and_mask(const char *value, /* I - String from config file */
18991907
19001908 family = AF_INET6 ;
19011909
1902- for (i = 0 , ptr = value + 1 ; * ptr && i < 8 ; i ++ )
1910+ for (i = 0 , ptr = value + 1 ; * ptr && i >= 0 && i < 8 ; i ++ )
19031911 {
19041912 if (* ptr == ']' )
19051913 break ;
@@ -2045,7 +2053,7 @@ get_addr_and_mask(const char *value, /* I - String from config file */
20452053#ifdef AF_INET6
20462054 if (family == AF_INET6 )
20472055 {
2048- if (i > 128 )
2056+ if (i < 0 || i > 128 )
20492057 return (0 );
20502058
20512059 i = 128 - i ;
@@ -2079,7 +2087,7 @@ get_addr_and_mask(const char *value, /* I - String from config file */
20792087 else
20802088#endif /* AF_INET6 */
20812089 {
2082- if (i > 32 )
2090+ if (i < 0 || i > 32 )
20832091 return (0 );
20842092
20852093 mask [0 ] = 0xffffffff ;
@@ -2996,7 +3004,17 @@ parse_variable(
29963004 cupsdSetString ((char * * )var -> ptr , temp );
29973005 break ;
29983006
3007+ case CUPSD_VARTYPE_NULLSTRING :
3008+ cupsdSetString ((char * * )var -> ptr , value );
3009+ break ;
3010+
29993011 case CUPSD_VARTYPE_STRING :
3012+ if (!value )
3013+ {
3014+ cupsdLogMessage (CUPSD_LOG_ERROR , "Missing value for %s on line %d of %s." , line , linenum , filename );
3015+ return (0 );
3016+ }
3017+
30003018 cupsdSetString ((char * * )var -> ptr , value );
30013019 break ;
30023020 }
@@ -3505,9 +3523,10 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
35053523 line , value ? " " : "" , value ? value : "" , linenum ,
35063524 ConfigurationFile , CupsFilesFile );
35073525 }
3508- else
3509- parse_variable (ConfigurationFile , linenum , line , value ,
3510- sizeof (cupsd_vars ) / sizeof (cupsd_vars [0 ]), cupsd_vars );
3526+ else if (!parse_variable (ConfigurationFile , linenum , line , value ,
3527+ sizeof (cupsd_vars ) / sizeof (cupsd_vars [0 ]), cupsd_vars ) &&
3528+ (FatalErrors & CUPSD_FATAL_CONFIG ))
3529+ return (0 );
35113530 }
35123531
35133532 return (1 );
@@ -3720,6 +3739,31 @@ read_cups_files_conf(cups_file_t *fp) /* I - File to read from */
37203739 break ;
37213740 }
37223741 }
3742+ else if (!_cups_strcasecmp (line , "PeerCred" ) && value )
3743+ {
3744+ /*
3745+ * PeerCred {off,on,root-only}
3746+ */
3747+
3748+ if (!_cups_strcasecmp (value , "off" ))
3749+ {
3750+ PeerCred = CUPSD_PEERCRED_OFF ;
3751+ }
3752+ else if (!_cups_strcasecmp (value , "on" ))
3753+ {
3754+ PeerCred = CUPSD_PEERCRED_ON ;
3755+ }
3756+ else if (!_cups_strcasecmp (value , "root-only" ))
3757+ {
3758+ PeerCred = CUPSD_PEERCRED_ROOTONLY ;
3759+ }
3760+ else
3761+ {
3762+ cupsdLogMessage (CUPSD_LOG_ERROR , "Unknown PeerCred \"%s\" on line %d of %s." , value , linenum , CupsFilesFile );
3763+ if (FatalErrors & CUPSD_FATAL_CONFIG )
3764+ return (0 );
3765+ }
3766+ }
37233767 else if (!_cups_strcasecmp (line , "PrintcapFormat" ) && value )
37243768 {
37253769 /*
0 commit comments