667
666
"FINAL_CONTENT_TYPE=%s/%s", filter->dst->super,
668
667
filter->dst->type);
670
snprintf(final_content_type, sizeof(final_content_type),
671
"FINAL_CONTENT_TYPE=printer/%s", job->printer->name);
936
938
IPP_TAG_LANGUAGE);
939
strcpy(apple_language, "APPLE_LANGUAGE=");
941
strlcpy(apple_language, "APPLE_LANGUAGE=", sizeof(apple_language));
940
942
_cupsAppleLanguage(attr->values[0].string.text,
941
943
apple_language + 15, sizeof(apple_language) - 15);
942
944
#endif /* __APPLE__ */
1007
1009
* All of these strcpy's are safe because we allocated the psr string...
1010
strcpy(printer_state_reasons, "PRINTER_STATE_REASONS=");
1012
strlcpy(printer_state_reasons, "PRINTER_STATE_REASONS=", psrlen);
1011
1013
for (psrptr = printer_state_reasons + 22, i = 0;
1012
1014
i < job->printer->num_reasons;
1016
1018
*psrptr++ = ',';
1017
strcpy(psrptr, job->printer->reasons[i]);
1019
strlcpy(psrptr, job->printer->reasons[i],
1020
psrlen - (psrptr - printer_state_reasons));
1018
1021
psrptr += strlen(psrptr);
1126
1129
* Now create processes for all of the filters...
1129
cupsdSetPrinterReasons(job->printer, "-cups-missing-filter-warning,"
1130
"cups-insecure-filter-warning");
1132
1132
for (i = 0, slot = 0, filter = (mime_filter_t *)cupsArrayFirst(filters);
1134
1134
i ++, filter = (mime_filter_t *)cupsArrayNext(filters))
1891
job->compressions = compressions;
1894
job->filetypes = filetypes;
1890
1896
if (!compressions || !filetypes)
1892
1898
cupsdLogMessage(CUPSD_LOG_ERROR,
1921
job->compressions = compressions;
1922
job->filetypes = filetypes;
1923
job->num_files = fileid;
1921
job->num_files = fileid;
1926
1924
job->filetypes[fileid - 1] = mimeFileType(MimeDatabase, jobfile, NULL,
3063
3061
job_state = IPP_JOB_COMPLETED;
3064
3062
message = "Job completed.";
3066
ippSetString(job->attrs, &job->reasons, 0,
3067
"job-completed-successfully");
3065
ippSetString(job->attrs, &job->reasons, 0,
3066
"job-completed-successfully");
3070
3069
case IPP_JOB_STOPPED :
3250
3249
* Hold the job...
3253
cupsdSetJobHoldUntil(job, "indefinite", 1);
3254
ippSetString(job->attrs, &job->reasons, 0,
3255
"job-hold-until-specified");
3257
job_state = IPP_JOB_HELD;
3258
message = "Job held indefinitely due to backend errors; please "
3252
const char *reason = ippGetString(job->reasons, 0, NULL);
3254
cupsdLogJob(job, CUPSD_LOG_DEBUG, "job-state-reasons=\"%s\"",
3257
if (!reason || strncmp(reason, "account-", 8))
3259
cupsdSetJobHoldUntil(job, "indefinite", 1);
3261
ippSetString(job->attrs, &job->reasons, 0,
3262
"job-hold-until-specified");
3263
message = "Job held indefinitely due to backend errors; please "
3259
3264
"consult the error_log file for details.";
3266
else if (!strcmp(reason, "account-info-needed"))
3268
cupsdSetJobHoldUntil(job, "indefinite", 0);
3270
message = "Job held indefinitely - account information is "
3273
else if (!strcmp(reason, "account-closed"))
3275
cupsdSetJobHoldUntil(job, "indefinite", 0);
3277
message = "Job held indefinitely - account has been closed.";
3279
else if (!strcmp(reason, "account-limit-reached"))
3281
cupsdSetJobHoldUntil(job, "indefinite", 0);
3283
message = "Job held indefinitely - account limit has been "
3288
cupsdSetJobHoldUntil(job, "indefinite", 0);
3290
message = "Job held indefinitely - account authorization failed.";
3293
job_state = IPP_JOB_HELD;
3290
3324
job_state = IPP_JOB_HELD;
3291
3325
message = "Job held for authentication.";
3293
ippSetString(job->attrs, &job->reasons, 0,
3294
"cups-held-for-authentication");
3327
if (strncmp(job->reasons->values[0].string.text, "account-", 8))
3328
ippSetString(job->attrs, &job->reasons, 0,
3329
"cups-held-for-authentication");
3475
3510
"com.apple.print.DocumentTicket.PMSpoolFormat",
3476
3511
IPP_TAG_ZERO) &&
3477
3512
!ippFindAttribute(job->attrs, "APPrinterPreset", IPP_TAG_ZERO) &&
3478
(ippFindAttribute(job->attrs, "output-mode", IPP_TAG_ZERO) ||
3479
ippFindAttribute(job->attrs, "print-color-mode", IPP_TAG_ZERO) ||
3513
(ippFindAttribute(job->attrs, "print-color-mode", IPP_TAG_ZERO) ||
3480
3514
ippFindAttribute(job->attrs, "print-quality", IPP_TAG_ZERO)))
3483
* Map output-mode and print-quality to a preset...
3517
* Map print-color-mode and print-quality to a preset...
3486
3520
if ((attr = ippFindAttribute(job->attrs, "print-color-mode",
3487
IPP_TAG_KEYWORD)) == NULL)
3488
attr = ippFindAttribute(job->attrs, "output-mode", IPP_TAG_KEYWORD);
3490
if (attr && !strcmp(attr->values[0].string.text, "monochrome"))
3521
IPP_TAG_KEYWORD)) != NULL &&
3522
!strcmp(attr->values[0].string.text, "monochrome"))
3491
3523
print_color_mode = _PWG_PRINT_COLOR_MODE_MONOCHROME;
3493
3525
print_color_mode = _PWG_PRINT_COLOR_MODE_COLOR;
3674
3706
attr->value_tag == IPP_TAG_MIMETYPE ||
3675
3707
attr->value_tag == IPP_TAG_NAMELANG ||
3676
3708
attr->value_tag == IPP_TAG_TEXTLANG ||
3677
(attr->value_tag == IPP_TAG_URI && strcmp(attr->name, "job-uuid")) ||
3709
(attr->value_tag == IPP_TAG_URI && strcmp(attr->name, "job-uuid") &&
3710
strcmp(attr->name, "job-authorization-uri")) ||
3678
3711
attr->value_tag == IPP_TAG_URISCHEME ||
3679
3712
attr->value_tag == IPP_TAG_BEGIN_COLLECTION) /* Not yet supported */
3691
3724
if (!strncmp(attr->name, "job-", 4) &&
3725
strcmp(attr->name, "job-account-id") &&
3726
strcmp(attr->name, "job-accounting-user-id") &&
3727
strcmp(attr->name, "job-authorization-uri") &&
3692
3728
strcmp(attr->name, "job-billing") &&
3693
3729
strcmp(attr->name, "job-impressions") &&
3694
3730
strcmp(attr->name, "job-originating-host-name") &&
3731
strcmp(attr->name, "job-password") &&
3732
strcmp(attr->name, "job-password-encryption") &&
3695
3733
strcmp(attr->name, "job-uuid") &&
3696
3734
!(job->printer->type & CUPS_PRINTER_REMOTE))
3798
3836
for (i = num_pwgppds, pwgppd = pwgppds; i > 0; i --, pwgppd ++)
3800
3838
*optptr++ = ' ';
3801
strcpy(optptr, pwgppd->name);
3839
strlcpy(optptr, pwgppd->name, optlength - (optptr - options));
3802
3840
optptr += strlen(optptr);
3803
3841
*optptr++ = '=';
3804
strcpy(optptr, pwgppd->value);
3842
strlcpy(optptr, pwgppd->value, optlength - (optptr - options));
3805
3843
optptr += strlen(optptr);
4177
4215
line, linenum);
4220
cupsdLogMessage(CUPSD_LOG_ERROR,
4221
"Missing </Job> directive on line %d.", linenum);
4222
cupsdDeleteJob(job, CUPSD_JOB_PURGE);
4180
4225
cupsFileClose(fp);
4339
4384
snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
4342
cupsdRemoveFile(filename);
4386
cupsdUnlinkOrRemoveFile(filename);
4347
4389
free(job->filetypes);
4373
4415
snprintf(filename, sizeof(filename), "%s/c%05d", RequestRoot,
4376
cupsdRemoveFile(filename);
4417
cupsdUnlinkOrRemoveFile(filename);
4380
4419
LastEvent |= CUPSD_EVENT_PRINTER_STATE_CHANGED;
4435
4474
start_job(cupsd_job_t *job, /* I - Job ID */
4436
4475
cupsd_printer_t *printer) /* I - Printer to print job */
4477
const char *filename; /* Support filename */
4438
4480
cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job(job=%p(%d), printer=%p(%s))",
4439
4481
job, job->id, printer, printer->name);
4489
4531
job->cancel_time = 0;
4534
* Check for support files...
4537
cupsdSetPrinterReasons(job->printer, "-cups-missing-filter-warning,"
4538
"cups-insecure-filter-warning");
4542
for (filename = (const char *)cupsArrayFirst(printer->pc->support_files);
4544
filename = (const char *)cupsArrayNext(printer->pc->support_files))
4546
if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_FILE, !RunUser,
4547
cupsdLogFCMessage, printer))
4492
4553
* Setup the last exit status and security profiles...
4736
4797
cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job,
4737
4798
"Printed %d page(s).", job->sheets->values[0].integer);
4800
else if (loglevel == CUPSD_LOG_JOBSTATE)
4803
* Support "keyword" to set job-state-reasons to the specified keyword.
4804
* This is sufficient for the current paid printing stuff.
4807
cupsdLogJob(job, CUPSD_LOG_DEBUG, "JOBSTATE: %s", message);
4809
ippSetString(job->attrs, &job->reasons, 0, message);
4739
4811
else if (loglevel == CUPSD_LOG_STATE)
4741
4813
cupsdLogJob(job, CUPSD_LOG_DEBUG, "STATE: %s", message);
4776
4848
cups_option_t *attrs; /* Attributes */
4777
4849
const char *attr; /* Attribute */
4780
4851
cupsdLogJob(job, CUPSD_LOG_DEBUG, "ATTR: %s", message);
4782
4853
num_attrs = cupsParseOptions(message, 0, &attrs);
4855
if ((attr = cupsGetOption("auth-info-default", num_attrs,
4858
job->printer->num_options = cupsAddOption("auth-info", attr,
4859
job->printer->num_options,
4860
&(job->printer->options));
4861
cupsdSetPrinterAttrs(job->printer);
4863
cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
4784
4866
if ((attr = cupsGetOption("auth-info-required", num_attrs,
4785
4867
attrs)) != NULL)