f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * CDDL HEADER START
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * The contents of this file are subject to the terms of the
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * Common Development and Distribution License (the "License").
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * You may not use this file except in compliance with the License.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * See the License for the specific language governing permissions
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * and limitations under the License.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * When distributing Covered Code, include this CDDL HEADER in each
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * If applicable, add the following below this CDDL HEADER, with the
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * fields enclosed by brackets "[]" replaced with your own identifying
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * information: Portions Copyright [yyyy] [name of copyright owner]
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * CDDL HEADER END
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * Use is subject to license terms.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica#pragma ident "%Z%%M% %I% %E% SMI"
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * Add TSOL banner, trailer, page header/footers to a print job
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica/* system header files */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica/* typedefs */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica/* constants */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica/* external variables */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica/* prototypes for static functions */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void Usage(void);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void ParseUsername(char *input, char *user, char *host);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void EmitJobData(void);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void EmitPrologue(void);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void EmitCommandLineInfo(void);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void EmitClockBasedInfo(void);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void EmitLabelInfo(void);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void CopyStdin(void);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica/* static variables */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * Run immune from typical interruptions, so that
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * we stand a chance to get the fault message.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * EOF (or startup error) is the only way out.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica#if !defined(TEXT_DOMAIN)
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * If the job was submitted via remotely, the label of the
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * remote peer will be set in the SLABEL environment variable
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * by copying it out of the SECURE structure.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * If there is no SLABEL value, the job was submitted locally
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * via the named pipe, and the file label can be determined
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * from its pathname.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* All of these functions exit if they encounter an error */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (0);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* Emit ending PostScript code */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) printf("%%%% End of code generated by lp.tsol_separator\n\n");
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* Emit preliminary PostScript code */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) printf("%%%% Begin code generated by lp.tsol_separator\n\n");
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) printf("%%%% Create JobDict if it doesn't exist\n");
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) printf("%%%% Define job parameters, including TSOL security "
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica "info\n");
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica/* Emit parameters obtained from command line options */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) printf("\t/Job_Printer (%s) def\n", ArgPrinter);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica/* Emit parameters generated from the system clock */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) printf("\t/Job_Hash (%ld) def\n", clockval.tv_usec % 100000L);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica/* Emit parameters derived from the SL and IL of the file being printed. */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica if (label_to_str(FileLabel, &header, PRINTER_TOP_BOTTOM,
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica if (label_to_str(FileLabel, &channels, PRINTER_CHANNELS,
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) printf("\t/Job_Classification (%s) def\n", header);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) printf("\t/Job_SL_Internal (%s) def\n", page_label);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* Free memory allocated label_to_str */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * Parse input "host!user" to separate host and user names.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* user@host */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* host!user */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* user */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica gettext("%s: Error opening PostScript file %s. %s.\n"),
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica "%s: Error copying PostScript file %s to stdout.\n"),
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* set default values for arguments */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* read switch arguments once to get error log file */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica while ((option_letter = getopt(argc, argv, options_string)) != EOF) {
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (-1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (-1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* re-read switch arguments */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica while ((option_letter = getopt(argc, argv, options_string)) != EOF) {
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* This was handled in earlier pass through args */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (-1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* Adjust arguments to skip over options */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica argc -= optind; /* Number of remaining(non-switch) args */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica argv += optind; /* argv[0] is first(non-switch) args */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (-1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) fprintf(ArgLogFile, gettext("Arguments processed\n"));
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) fprintf(ArgLogFile, gettext("Job ID: %s\n"), ArgJobID);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) fprintf(ArgLogFile, gettext("User: %s\n"), ArgUser);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) fprintf(ArgLogFile, gettext("Title: %s\n"), ArgTitle);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) fprintf(ArgLogFile, gettext("File: %s\n"), ArgFile);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (0);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricastatic void
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) fprintf(ArgLogFile, OPTFMT, "-r", gettext("Reverse"),
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) fprintf(ArgLogFile, OPTFMT, "-l", gettext("Labels"),
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica gettext("PostScript program for banner (default tsol_banner.ps)"));
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica "(default tsol_separator.ps)"));
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica "(default tsol_trailer.ps)"));
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica gettext("Directory to search for PostScript programs"));
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) fprintf(ArgLogFile, OPTFMT, gettext("-d N"), gettext("Debug"),