672
671
"FINAL_CONTENT_TYPE=%s/%s", filter->dst->super,
673
672
filter->dst->type);
675
snprintf(final_content_type, sizeof(final_content_type),
676
"FINAL_CONTENT_TYPE=printer/%s", job->printer->name);
941
943
IPP_TAG_LANGUAGE);
944
strcpy(apple_language, "APPLE_LANGUAGE=");
946
strlcpy(apple_language, "APPLE_LANGUAGE=", sizeof(apple_language));
945
947
_cupsAppleLanguage(attr->values[0].string.text,
946
948
apple_language + 15, sizeof(apple_language) - 15);
947
949
#endif /* __APPLE__ */
1012
1014
* All of these strcpy's are safe because we allocated the psr string...
1015
strcpy(printer_state_reasons, "PRINTER_STATE_REASONS=");
1017
strlcpy(printer_state_reasons, "PRINTER_STATE_REASONS=", psrlen);
1016
1018
for (psrptr = printer_state_reasons + 22, i = 0;
1017
1019
i < job->printer->num_reasons;
1021
1023
*psrptr++ = ',';
1022
strcpy(psrptr, job->printer->reasons[i]);
1024
strlcpy(psrptr, job->printer->reasons[i],
1025
psrlen - (psrptr - printer_state_reasons));
1023
1026
psrptr += strlen(psrptr);
1131
1134
* Now create processes for all of the filters...
1134
cupsdSetPrinterReasons(job->printer, "-cups-missing-filter-warning,"
1135
"cups-insecure-filter-warning");
1137
1137
for (i = 0, slot = 0, filter = (mime_filter_t *)cupsArrayFirst(filters);
1139
1139
i ++, filter = (mime_filter_t *)cupsArrayNext(filters))
1896
job->compressions = compressions;
1899
job->filetypes = filetypes;
1895
1901
if (!compressions || !filetypes)
1897
1903
cupsdLogMessage(CUPSD_LOG_ERROR,
1926
job->compressions = compressions;
1927
job->filetypes = filetypes;
1928
job->num_files = fileid;
1926
job->num_files = fileid;
1931
1929
job->filetypes[fileid - 1] = mimeFileType(MimeDatabase, jobfile, NULL,
3068
3066
job_state = IPP_JOB_COMPLETED;
3069
3067
message = "Job completed.";
3071
ippSetString(job->attrs, &job->reasons, 0,
3072
"job-completed-successfully");
3070
ippSetString(job->attrs, &job->reasons, 0,
3071
"job-completed-successfully");
3075
3074
case IPP_JOB_STOPPED :
3255
3254
* 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 "
3257
const char *reason = ippGetString(job->reasons, 0, NULL);
3259
cupsdLogJob(job, CUPSD_LOG_DEBUG, "job-state-reasons=\"%s\"",
3262
if (!reason || strncmp(reason, "account-", 8))
3264
cupsdSetJobHoldUntil(job, "indefinite", 1);
3266
ippSetString(job->attrs, &job->reasons, 0,
3267
"job-hold-until-specified");
3268
message = "Job held indefinitely due to backend errors; please "
3264
3269
"consult the error_log file for details.";
3271
else if (!strcmp(reason, "account-info-needed"))
3273
cupsdSetJobHoldUntil(job, "indefinite", 0);
3275
message = "Job held indefinitely - account information is "
3278
else if (!strcmp(reason, "account-closed"))
3280
cupsdSetJobHoldUntil(job, "indefinite", 0);
3282
message = "Job held indefinitely - account has been closed.";
3284
else if (!strcmp(reason, "account-limit-reached"))
3286
cupsdSetJobHoldUntil(job, "indefinite", 0);
3288
message = "Job held indefinitely - account limit has been "
3293
cupsdSetJobHoldUntil(job, "indefinite", 0);
3295
message = "Job held indefinitely - account authorization failed.";
3298
job_state = IPP_JOB_HELD;
3295
3329
job_state = IPP_JOB_HELD;
3296
3330
message = "Job held for authentication.";
3298
ippSetString(job->attrs, &job->reasons, 0,
3299
"cups-held-for-authentication");
3332
if (strncmp(job->reasons->values[0].string.text, "account-", 8))
3333
ippSetString(job->attrs, &job->reasons, 0,
3334
"cups-held-for-authentication");
3480
3515
"com.apple.print.DocumentTicket.PMSpoolFormat",
3481
3516
IPP_TAG_ZERO) &&
3482
3517
!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) ||
3518
(ippFindAttribute(job->attrs, "print-color-mode", IPP_TAG_ZERO) ||
3485
3519
ippFindAttribute(job->attrs, "print-quality", IPP_TAG_ZERO)))
3488
* Map output-mode and print-quality to a preset...
3522
* Map print-color-mode and print-quality to a preset...
3491
3525
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"))
3526
IPP_TAG_KEYWORD)) != NULL &&
3527
!strcmp(attr->values[0].string.text, "monochrome"))
3496
3528
print_color_mode = _PWG_PRINT_COLOR_MODE_MONOCHROME;
3498
3530
print_color_mode = _PWG_PRINT_COLOR_MODE_COLOR;
3679
3711
attr->value_tag == IPP_TAG_MIMETYPE ||
3680
3712
attr->value_tag == IPP_TAG_NAMELANG ||
3681
3713
attr->value_tag == IPP_TAG_TEXTLANG ||
3682
(attr->value_tag == IPP_TAG_URI && strcmp(attr->name, "job-uuid")) ||
3714
(attr->value_tag == IPP_TAG_URI && strcmp(attr->name, "job-uuid") &&
3715
strcmp(attr->name, "job-authorization-uri")) ||
3683
3716
attr->value_tag == IPP_TAG_URISCHEME ||
3684
3717
attr->value_tag == IPP_TAG_BEGIN_COLLECTION) /* Not yet supported */
3696
3729
if (!strncmp(attr->name, "job-", 4) &&
3730
strcmp(attr->name, "job-account-id") &&
3731
strcmp(attr->name, "job-accounting-user-id") &&
3732
strcmp(attr->name, "job-authorization-uri") &&
3697
3733
strcmp(attr->name, "job-billing") &&
3698
3734
strcmp(attr->name, "job-impressions") &&
3699
3735
strcmp(attr->name, "job-originating-host-name") &&
3736
strcmp(attr->name, "job-password") &&
3737
strcmp(attr->name, "job-password-encryption") &&
3700
3738
strcmp(attr->name, "job-uuid") &&
3701
3739
!(job->printer->type & CUPS_PRINTER_REMOTE))
3803
3841
for (i = num_pwgppds, pwgppd = pwgppds; i > 0; i --, pwgppd ++)
3805
3843
*optptr++ = ' ';
3806
strcpy(optptr, pwgppd->name);
3844
strlcpy(optptr, pwgppd->name, optlength - (optptr - options));
3807
3845
optptr += strlen(optptr);
3808
3846
*optptr++ = '=';
3809
strcpy(optptr, pwgppd->value);
3847
strlcpy(optptr, pwgppd->value, optlength - (optptr - options));
3810
3848
optptr += strlen(optptr);
4182
4220
line, linenum);
4225
cupsdLogMessage(CUPSD_LOG_ERROR,
4226
"Missing </Job> directive on line %d.", linenum);
4227
cupsdDeleteJob(job, CUPSD_JOB_PURGE);
4185
4230
cupsFileClose(fp);
4344
4389
snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
4347
cupsdRemoveFile(filename);
4391
cupsdUnlinkOrRemoveFile(filename);
4352
4394
free(job->filetypes);
4378
4420
snprintf(filename, sizeof(filename), "%s/c%05d", RequestRoot,
4381
cupsdRemoveFile(filename);
4422
cupsdUnlinkOrRemoveFile(filename);
4385
4424
LastEvent |= CUPSD_EVENT_PRINTER_STATE_CHANGED;
4440
4479
start_job(cupsd_job_t *job, /* I - Job ID */
4441
4480
cupsd_printer_t *printer) /* I - Printer to print job */
4482
const char *filename; /* Support filename */
4443
4485
cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job(job=%p(%d), printer=%p(%s))",
4444
4486
job, job->id, printer, printer->name);
4494
4536
job->cancel_time = 0;
4539
* Check for support files...
4542
cupsdSetPrinterReasons(job->printer, "-cups-missing-filter-warning,"
4543
"cups-insecure-filter-warning");
4547
for (filename = (const char *)cupsArrayFirst(printer->pc->support_files);
4549
filename = (const char *)cupsArrayNext(printer->pc->support_files))
4551
if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_FILE, !RunUser,
4552
cupsdLogFCMessage, printer))
4497
4558
* Setup the last exit status and security profiles...
4741
4802
cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job,
4742
4803
"Printed %d page(s).", job->sheets->values[0].integer);
4805
else if (loglevel == CUPSD_LOG_JOBSTATE)
4808
* Support "keyword" to set job-state-reasons to the specified keyword.
4809
* This is sufficient for the current paid printing stuff.
4812
cupsdLogJob(job, CUPSD_LOG_DEBUG, "JOBSTATE: %s", message);
4814
ippSetString(job->attrs, &job->reasons, 0, message);
4744
4816
else if (loglevel == CUPSD_LOG_STATE)
4746
4818
cupsdLogJob(job, CUPSD_LOG_DEBUG, "STATE: %s", message);
4781
4853
cups_option_t *attrs; /* Attributes */
4782
4854
const char *attr; /* Attribute */
4785
4856
cupsdLogJob(job, CUPSD_LOG_DEBUG, "ATTR: %s", message);
4787
4858
num_attrs = cupsParseOptions(message, 0, &attrs);
4860
if ((attr = cupsGetOption("auth-info-default", num_attrs,
4863
job->printer->num_options = cupsAddOption("auth-info", attr,
4864
job->printer->num_options,
4865
&(job->printer->options));
4866
cupsdSetPrinterAttrs(job->printer);
4868
cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
4789
4871
if ((attr = cupsGetOption("auth-info-required", num_attrs,
4790
4872
attrs)) != NULL)