@@ -48,7 +48,8 @@ typedef enum
4848 CUPSD_VARTYPE_STRING , /* String option */
4949 CUPSD_VARTYPE_BOOLEAN , /* Boolean option */
5050 CUPSD_VARTYPE_PATHNAME , /* File/directory name option */
51- CUPSD_VARTYPE_PERM /* File/directory permissions */
51+ CUPSD_VARTYPE_PERM , /* File/directory permissions */
52+ CUPSD_VARTYPE_NICE /* Values for nice() - 0 to 19 */
5253} cupsd_vartype_t ;
5354
5455typedef struct
@@ -81,7 +82,7 @@ static const cupsd_var_t cupsd_vars[] =
8182 { "DNSSDHostName" , & DNSSDHostName , CUPSD_VARTYPE_STRING },
8283 { "ErrorPolicy" , & ErrorPolicy , CUPSD_VARTYPE_STRING },
8384 { "FilterLimit" , & FilterLimit , CUPSD_VARTYPE_INTEGER },
84- { "FilterNice" , & FilterNice , CUPSD_VARTYPE_INTEGER },
85+ { "FilterNice" , & FilterNice , CUPSD_VARTYPE_NICE },
8586#ifdef HAVE_GSSAPI
8687 { "GSSServiceName" , & GSSServiceName , CUPSD_VARTYPE_STRING },
8788#endif /* HAVE_GSSAPI */
@@ -3017,6 +3018,37 @@ parse_variable(
30173018
30183019 cupsdSetString ((char * * )var -> ptr , value );
30193020 break ;
3021+
3022+ case CUPSD_VARTYPE_NICE :
3023+ if (!value )
3024+ {
3025+ cupsdLogMessage (CUPSD_LOG_ERROR , "Missing value for %s on line %d of %s." , line , linenum , filename );
3026+ return (0 );
3027+ }
3028+
3029+ while (* value )
3030+ {
3031+ if (!isdigit (* value ++ ))
3032+ {
3033+ cupsdLogMessage (CUPSD_LOG_ERROR ,
3034+ "Bad integer value for %s on line %d of %s." ,
3035+ line , linenum , filename );
3036+ return (0 );
3037+ }
3038+ }
3039+
3040+ int n = (int )strtol (value , NULL , 10 );
3041+
3042+ if (n < 0 || n > 19 )
3043+ {
3044+ cupsdLogMessage (CUPSD_LOG_ERROR , "Bad integer value for %s on line %d of %s. Supported values are 0-19." ,
3045+ line , linenum , filename );
3046+ return (0 );
3047+ }
3048+
3049+ * ((int * )var -> ptr ) = n ;
3050+
3051+ break ;
30203052 }
30213053
30223054 return (1 );
0 commit comments