941
940
IPP_TAG_LANGUAGE);
944
strcpy(apple_language, "APPLE_LANGUAGE=");
943
strlcpy(apple_language, "APPLE_LANGUAGE=", sizeof(apple_language));
945
944
_cupsAppleLanguage(attr->values[0].string.text,
946
945
apple_language + 15, sizeof(apple_language) - 15);
947
946
#endif /* __APPLE__ */
1012
1011
* All of these strcpy's are safe because we allocated the psr string...
1015
strcpy(printer_state_reasons, "PRINTER_STATE_REASONS=");
1014
strlcpy(printer_state_reasons, "PRINTER_STATE_REASONS=", psrlen);
1016
1015
for (psrptr = printer_state_reasons + 22, i = 0;
1017
1016
i < job->printer->num_reasons;
1021
1020
*psrptr++ = ',';
1022
strcpy(psrptr, job->printer->reasons[i]);
1021
strlcpy(psrptr, job->printer->reasons[i],
1022
psrlen - (psrptr - printer_state_reasons));
1023
1023
psrptr += strlen(psrptr);
1131
1131
* Now create processes for all of the filters...
1134
cupsdSetPrinterReasons(job->printer, "-cups-missing-filter-warning,"
1135
"cups-insecure-filter-warning");
1137
1134
for (i = 0, slot = 0, filter = (mime_filter_t *)cupsArrayFirst(filters);
1139
1136
i ++, filter = (mime_filter_t *)cupsArrayNext(filters))
1893
job->compressions = compressions;
1896
job->filetypes = filetypes;
1895
1898
if (!compressions || !filetypes)
1897
1900
cupsdLogMessage(CUPSD_LOG_ERROR,
1926
job->compressions = compressions;
1927
job->filetypes = filetypes;
1928
job->num_files = fileid;
1923
job->num_files = fileid;
1931
1926
job->filetypes[fileid - 1] = mimeFileType(MimeDatabase, jobfile, NULL,
3068
3063
job_state = IPP_JOB_COMPLETED;
3069
3064
message = "Job completed.";
3071
ippSetString(job->attrs, &job->reasons, 0,
3072
"job-completed-successfully");
3067
ippSetString(job->attrs, &job->reasons, 0,
3068
"job-completed-successfully");
3075
3071
case IPP_JOB_STOPPED :
3255
3251
* Hold the job...
3258
cupsdSetJobHoldUntil(job, "indefinite", 1);
3259
ippSetString(job->attrs, &job->reasons, 0,
3260
"job-hold-until-specified");
3262
job_state = IPP_JOB_HELD;
3263
message = "Job held indefinitely due to backend errors; please "
3254
const char *reason = ippGetString(job->reasons, 0, NULL);
3256
cupsdLogJob(job, CUPSD_LOG_DEBUG, "job-state-reasons=\"%s\"",
3259
if (!reason || strncmp(reason, "account-", 8))
3261
cupsdSetJobHoldUntil(job, "indefinite", 1);
3263
ippSetString(job->attrs, &job->reasons, 0,
3264
"job-hold-until-specified");
3265
message = "Job held indefinitely due to backend errors; please "
3264
3266
"consult the error_log file for details.";
3268
else if (!strcmp(reason, "account-info-needed"))
3270
cupsdSetJobHoldUntil(job, "indefinite", 0);
3272
message = "Job held indefinitely - account information is "
3275
else if (!strcmp(reason, "account-closed"))
3277
cupsdSetJobHoldUntil(job, "indefinite", 0);
3279
message = "Job held indefinitely - account has been closed.";
3281
else if (!strcmp(reason, "account-limit-reached"))
3283
cupsdSetJobHoldUntil(job, "indefinite", 0);
3285
message = "Job held indefinitely - account limit has been "
3290
cupsdSetJobHoldUntil(job, "indefinite", 0);
3292
message = "Job held indefinitely - account authorization failed.";
3295
job_state = IPP_JOB_HELD;
3295
3326
job_state = IPP_JOB_HELD;
3296
3327
message = "Job held for authentication.";
3298
ippSetString(job->attrs, &job->reasons, 0,
3299
"cups-held-for-authentication");
3329
if (strncmp(job->reasons->values[0].string.text, "account-", 8))
3330
ippSetString(job->attrs, &job->reasons, 0,
3331
"cups-held-for-authentication");
3480
3512
"com.apple.print.DocumentTicket.PMSpoolFormat",
3481
3513
IPP_TAG_ZERO) &&
3482
3514
!ippFindAttribute(job->attrs, "APPrinterPreset", IPP_TAG_ZERO) &&
3483
(ippFindAttribute(job->attrs, "output-mode", IPP_TAG_ZERO) ||
3484
ippFindAttribute(job->attrs, "print-color-mode", IPP_TAG_ZERO) ||
3515
(ippFindAttribute(job->attrs, "print-color-mode", IPP_TAG_ZERO) ||
3485
3516
ippFindAttribute(job->attrs, "print-quality", IPP_TAG_ZERO)))
3488
* Map output-mode and print-quality to a preset...
3519
* Map print-color-mode and print-quality to a preset...
3491
3522
if ((attr = ippFindAttribute(job->attrs, "print-color-mode",
3492
IPP_TAG_KEYWORD)) == NULL)
3493
attr = ippFindAttribute(job->attrs, "output-mode", IPP_TAG_KEYWORD);
3495
if (attr && !strcmp(attr->values[0].string.text, "monochrome"))
3523
IPP_TAG_KEYWORD)) != NULL &&
3524
!strcmp(attr->values[0].string.text, "monochrome"))
3496
3525
print_color_mode = _PWG_PRINT_COLOR_MODE_MONOCHROME;
3498
3527
print_color_mode = _PWG_PRINT_COLOR_MODE_COLOR;
3679
3708
attr->value_tag == IPP_TAG_MIMETYPE ||
3680
3709
attr->value_tag == IPP_TAG_NAMELANG ||
3681
3710
attr->value_tag == IPP_TAG_TEXTLANG ||
3682
(attr->value_tag == IPP_TAG_URI && strcmp(attr->name, "job-uuid")) ||
3711
(attr->value_tag == IPP_TAG_URI && strcmp(attr->name, "job-uuid") &&
3712
strcmp(attr->name, "job-authorization-uri")) ||
3683
3713
attr->value_tag == IPP_TAG_URISCHEME ||
3684
3714
attr->value_tag == IPP_TAG_BEGIN_COLLECTION) /* Not yet supported */
3696
3726
if (!strncmp(attr->name, "job-", 4) &&
3727
strcmp(attr->name, "job-account-id") &&
3728
strcmp(attr->name, "job-accounting-user-id") &&
3729
strcmp(attr->name, "job-authorization-uri") &&
3697
3730
strcmp(attr->name, "job-billing") &&
3698
3731
strcmp(attr->name, "job-impressions") &&
3699
3732
strcmp(attr->name, "job-originating-host-name") &&
3733
strcmp(attr->name, "job-password") &&
3734
strcmp(attr->name, "job-password-encryption") &&
3700
3735
strcmp(attr->name, "job-uuid") &&
3701
3736
!(job->printer->type & CUPS_PRINTER_REMOTE))
3803
3838
for (i = num_pwgppds, pwgppd = pwgppds; i > 0; i --, pwgppd ++)
3805
3840
*optptr++ = ' ';
3806
strcpy(optptr, pwgppd->name);
3841
strlcpy(optptr, pwgppd->name, optlength - (optptr - options));
3807
3842
optptr += strlen(optptr);
3808
3843
*optptr++ = '=';
3809
strcpy(optptr, pwgppd->value);
3844
strlcpy(optptr, pwgppd->value, optlength - (optptr - options));
3810
3845
optptr += strlen(optptr);
4182
4217
line, linenum);
4222
cupsdLogMessage(CUPSD_LOG_ERROR,
4223
"Missing </Job> directive on line %d.", linenum);
4224
cupsdDeleteJob(job, CUPSD_JOB_PURGE);
4185
4227
cupsFileClose(fp);
4344
4386
snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
4347
cupsdRemoveFile(filename);
4388
cupsdUnlinkOrRemoveFile(filename);
4352
4391
free(job->filetypes);
4378
4417
snprintf(filename, sizeof(filename), "%s/c%05d", RequestRoot,
4381
cupsdRemoveFile(filename);
4419
cupsdUnlinkOrRemoveFile(filename);
4385
4421
LastEvent |= CUPSD_EVENT_PRINTER_STATE_CHANGED;
4440
4476
start_job(cupsd_job_t *job, /* I - Job ID */
4441
4477
cupsd_printer_t *printer) /* I - Printer to print job */
4479
const char *filename; /* Support filename */
4443
4482
cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job(job=%p(%d), printer=%p(%s))",
4444
4483
job, job->id, printer, printer->name);
4494
4533
job->cancel_time = 0;
4536
* Check for support files...
4539
cupsdSetPrinterReasons(job->printer, "-cups-missing-filter-warning,"
4540
"cups-insecure-filter-warning");
4544
for (filename = (const char *)cupsArrayFirst(printer->pc->support_files);
4546
filename = (const char *)cupsArrayNext(printer->pc->support_files))
4548
if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_FILE, !RunUser,
4549
cupsdLogFCMessage, printer))
4497
4555
* Setup the last exit status and security profiles...
4741
4799
cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job,
4742
4800
"Printed %d page(s).", job->sheets->values[0].integer);
4802
else if (loglevel == CUPSD_LOG_JOBSTATE)
4805
* Support "keyword" to set job-state-reasons to the specified keyword.
4806
* This is sufficient for the current paid printing stuff.
4809
cupsdLogJob(job, CUPSD_LOG_DEBUG, "JOBSTATE: %s", message);
4811
ippSetString(job->attrs, &job->reasons, 0, message);
4744
4813
else if (loglevel == CUPSD_LOG_STATE)
4746
4815
cupsdLogJob(job, CUPSD_LOG_DEBUG, "STATE: %s", message);
4781
4850
cups_option_t *attrs; /* Attributes */
4782
4851
const char *attr; /* Attribute */
4785
4853
cupsdLogJob(job, CUPSD_LOG_DEBUG, "ATTR: %s", message);
4787
4855
num_attrs = cupsParseOptions(message, 0, &attrs);
4857
if ((attr = cupsGetOption("auth-info-default", num_attrs,
4860
job->printer->num_options = cupsAddOption("auth-info", attr,
4861
job->printer->num_options,
4862
&(job->printer->options));
4863
cupsdSetPrinterAttrs(job->printer);
4865
cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
4789
4868
if ((attr = cupsGetOption("auth-info-required", num_attrs,
4790
4869
attrs)) != NULL)