9622934a862fa39a8e90c816c4136e293d75629djacobs#!/usr/perl5/bin/perl
9622934a862fa39a8e90c816c4136e293d75629djacobs#
9622934a862fa39a8e90c816c4136e293d75629djacobs# CDDL HEADER START
9622934a862fa39a8e90c816c4136e293d75629djacobs#
9622934a862fa39a8e90c816c4136e293d75629djacobs# The contents of this file are subject to the terms of the
9622934a862fa39a8e90c816c4136e293d75629djacobs# Common Development and Distribution License (the "License").
9622934a862fa39a8e90c816c4136e293d75629djacobs# You may not use this file except in compliance with the License.
9622934a862fa39a8e90c816c4136e293d75629djacobs#
9622934a862fa39a8e90c816c4136e293d75629djacobs# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9622934a862fa39a8e90c816c4136e293d75629djacobs# or http://www.opensolaris.org/os/licensing.
9622934a862fa39a8e90c816c4136e293d75629djacobs# See the License for the specific language governing permissions
9622934a862fa39a8e90c816c4136e293d75629djacobs# and limitations under the License.
9622934a862fa39a8e90c816c4136e293d75629djacobs#
9622934a862fa39a8e90c816c4136e293d75629djacobs# When distributing Covered Code, include this CDDL HEADER in each
9622934a862fa39a8e90c816c4136e293d75629djacobs# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
9622934a862fa39a8e90c816c4136e293d75629djacobs# If applicable, add the following below this CDDL HEADER, with the
9622934a862fa39a8e90c816c4136e293d75629djacobs# fields enclosed by brackets "[]" replaced with your own identifying
9622934a862fa39a8e90c816c4136e293d75629djacobs# information: Portions Copyright [yyyy] [name of copyright owner]
9622934a862fa39a8e90c816c4136e293d75629djacobs#
9622934a862fa39a8e90c816c4136e293d75629djacobs# CDDL HEADER END
9622934a862fa39a8e90c816c4136e293d75629djacobs#
6124874e2cec65f2e7a974b3833b05dbf2a7d905Ghee Teo# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
9622934a862fa39a8e90c816c4136e293d75629djacobs# Use is subject to license terms.
9622934a862fa39a8e90c816c4136e293d75629djacobs#
9622934a862fa39a8e90c816c4136e293d75629djacobs#
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs#
9622934a862fa39a8e90c816c4136e293d75629djacobs# This program manages the "active" print service selection.
9622934a862fa39a8e90c816c4136e293d75629djacobs# If called as 'print-service', it takes one of four options.
9622934a862fa39a8e90c816c4136e293d75629djacobs# Options:
9622934a862fa39a8e90c816c4136e293d75629djacobs# [-s[et] service [-m]] Select the "active" print service, optionally
9622934a862fa39a8e90c816c4136e293d75629djacobs# migrating basic print queue configuration.
9622934a862fa39a8e90c816c4136e293d75629djacobs# [-q[uery]] Display the "active" print service.
9622934a862fa39a8e90c816c4136e293d75629djacobs# [-e[xport] file] Export basic print queue configuration to
9622934a862fa39a8e90c816c4136e293d75629djacobs# a file.
9622934a862fa39a8e90c816c4136e293d75629djacobs# [-i[mport] file] Import basic print queue configuration from
9622934a862fa39a8e90c816c4136e293d75629djacobs# a file.
9622934a862fa39a8e90c816c4136e293d75629djacobs#
9622934a862fa39a8e90c816c4136e293d75629djacobs# If called by any other name, it will look for a corresponding command
9622934a862fa39a8e90c816c4136e293d75629djacobs# under /usr/lib/{active-service}/bin/{command} and execute that program
9622934a862fa39a8e90c816c4136e293d75629djacobs# with the original arguments.
9622934a862fa39a8e90c816c4136e293d75629djacobs#
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobsuse Getopt::Long;
9622934a862fa39a8e90c816c4136e293d75629djacobsuse File::Basename;
9622934a862fa39a8e90c816c4136e293d75629djacobsuse File::Copy;
9622934a862fa39a8e90c816c4136e293d75629djacobsuse File::Temp qw/ :POSIX /;
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $cmd = basename($0);
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $LPSTAT = '/usr/bin/lpstat';
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $LPADMIN = '/usr/sbin/lpadmin';
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $ENABLE = '/usr/bin/enable';
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $ACCEPT = '/usr/sbin/accept';
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $SVCADM = '/usr/sbin/svcadm';
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $SVCPROP = '/usr/bin/svcprop';
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $SVCCFG = '/usr/sbin/svccfg';
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $SVC_LP_SCHEDULER = 'print/server';
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $SVC_LP_LPD = 'print/rfc1179';
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $SVC_LP_IPP = 'print/ipp-listener';
36615d24946b849e48cedbbafa9adfb4a02b590cjacobsmy $SVC_LP_PPD = 'print/ppd-cache-update';
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $SVC_CUPS_SCHEDULER = 'cups/scheduler';
9622934a862fa39a8e90c816c4136e293d75629djacobsmy $SVC_CUPS_LPD = 'cups/in-lpd';
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub fatal {
c1ecd8b9404ee0d96d93f02e82c441b9bb149a3djacobs ($ENV{"DESKTOP_LAUNCHED"}) &&
c1ecd8b9404ee0d96d93f02e82c441b9bb149a3djacobs exec("/bin/zenity", "--error", "--text=@_");
9622934a862fa39a8e90c816c4136e293d75629djacobs print STDERR @_;
9622934a862fa39a8e90c816c4136e293d75629djacobs exit(1);
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub usage {
9622934a862fa39a8e90c816c4136e293d75629djacobs print STDERR <<EOF ;
9622934a862fa39a8e90c816c4136e293d75629djacobsUsage:
9622934a862fa39a8e90c816c4136e293d75629djacobs $cmd [-s[et] service [-m]] Select the \"active\" print service,
9622934a862fa39a8e90c816c4136e293d75629djacobs optionally migrating basic print queue
9622934a862fa39a8e90c816c4136e293d75629djacobs configuration.
9622934a862fa39a8e90c816c4136e293d75629djacobs $cmd [-q[uery]] Display the "active" print service.
9622934a862fa39a8e90c816c4136e293d75629djacobs $cmd [-e[xport] file] Export basic print queue configuration
9622934a862fa39a8e90c816c4136e293d75629djacobs to a file.
9622934a862fa39a8e90c816c4136e293d75629djacobs $cmd [-i[mport] file] Import basic print queue configuration
9622934a862fa39a8e90c816c4136e293d75629djacobs from a file.
9622934a862fa39a8e90c816c4136e293d75629djacobsEOF
9622934a862fa39a8e90c816c4136e293d75629djacobs exit(1);
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub svcprop {
9622934a862fa39a8e90c816c4136e293d75629djacobs local ($fmri, $property) = @_;
9622934a862fa39a8e90c816c4136e293d75629djacobs my $FH;
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs open($FH, "$SVCPROP -C -p $property $fmri 2>/dev/null |");
9622934a862fa39a8e90c816c4136e293d75629djacobs $result = <$FH>;
9622934a862fa39a8e90c816c4136e293d75629djacobs close($FH);
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs return ($result);
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub svccfg {
9622934a862fa39a8e90c816c4136e293d75629djacobs local ($fmri, $operation) = @_;
9622934a862fa39a8e90c816c4136e293d75629djacobs my $FH;
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs open($FH, "$SVCCFG -s $fmri \"$operation\" 2>/dev/null |");
9622934a862fa39a8e90c816c4136e293d75629djacobs $result = <$FH>;
9622934a862fa39a8e90c816c4136e293d75629djacobs close($FH);
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs return ($result);
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub svcadm {
9622934a862fa39a8e90c816c4136e293d75629djacobs local ($operation, @fmris) = @_;
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs system("$SVCADM $operation -s @fmris");
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub print_service {
9622934a862fa39a8e90c816c4136e293d75629djacobs my $service;
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs $service = svcprop("$SVC_CUPS_SCHEDULER:default", "general/active");
9622934a862fa39a8e90c816c4136e293d75629djacobs ($service =~ /true/) && ($service = 'cups') || ($service = 'lp');
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs return ($service);
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub print_command {
9622934a862fa39a8e90c816c4136e293d75629djacobs local($command, @av) = @_;
9622934a862fa39a8e90c816c4136e293d75629djacobs my $service = print_service();
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs if (!defined($service)) {
9622934a862fa39a8e90c816c4136e293d75629djacobs fatal("failed to detect active print service: $!\n");
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs if (! -d "/usr/lib/$service/bin") {
9622934a862fa39a8e90c816c4136e293d75629djacobs fatal("print service: $service is not installed\n");
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs my $executable = "/usr/lib/$service/bin/$command";
9622934a862fa39a8e90c816c4136e293d75629djacobs # CUPS has it's own names for enable and disable
9622934a862fa39a8e90c816c4136e293d75629djacobs ($command =~ /(en|dis)able/) && ($service eq 'cups') &&
9622934a862fa39a8e90c816c4136e293d75629djacobs (! -x $executable) &&
9622934a862fa39a8e90c816c4136e293d75629djacobs ($executable = "/usr/lib/$service/bin/$service$command");
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs if (! -x $executable) {
9622934a862fa39a8e90c816c4136e293d75629djacobs fatal("$command is not available from $service print service\n");
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs exec($executable, @ARGV);
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub export_print_queues {
9622934a862fa39a8e90c816c4136e293d75629djacobs local ($path) = @_;
9622934a862fa39a8e90c816c4136e293d75629djacobs my $service = print_service();
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs if ($service eq 'lp') {
9622934a862fa39a8e90c816c4136e293d75629djacobs my $FH, $DFH;
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs open($FH, ">$path");
9622934a862fa39a8e90c816c4136e293d75629djacobs open($DFH, "$LPSTAT -v|");
9622934a862fa39a8e90c816c4136e293d75629djacobs while (<$DFH>) {
9622934a862fa39a8e90c816c4136e293d75629djacobs if (/device for (.+): (.+)/) {
9622934a862fa39a8e90c816c4136e293d75629djacobs my $EFH;
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs print $FH "<Printer $1>\nDeviceURI $2\n";
9622934a862fa39a8e90c816c4136e293d75629djacobs open($EFH, "$LPSTAT -p $1 -l |");
9622934a862fa39a8e90c816c4136e293d75629djacobs while (<$EFH>) {
9622934a862fa39a8e90c816c4136e293d75629djacobs (/Description: (.+)/) &&
9622934a862fa39a8e90c816c4136e293d75629djacobs print $FH "Info $1\n";
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs close($EFH);
9622934a862fa39a8e90c816c4136e293d75629djacobs print $FH "</Printer>\n";
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs close($DFH);
9622934a862fa39a8e90c816c4136e293d75629djacobs close($FH);
9622934a862fa39a8e90c816c4136e293d75629djacobs } else {
9622934a862fa39a8e90c816c4136e293d75629djacobs copy('/etc/cups/printers.conf', $path);
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub psystem {
9622934a862fa39a8e90c816c4136e293d75629djacobs print " @_\n";
9622934a862fa39a8e90c816c4136e293d75629djacobs system(@_);
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub import_print_queues {
9622934a862fa39a8e90c816c4136e293d75629djacobs local ($path) = @_;
9622934a862fa39a8e90c816c4136e293d75629djacobs my $service = print_service();
9622934a862fa39a8e90c816c4136e293d75629djacobs my $FH, %printer, @options;
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs # store queue info in the 'active' print service
9622934a862fa39a8e90c816c4136e293d75629djacobs open($FH, "<$path");
9622934a862fa39a8e90c816c4136e293d75629djacobs while (<$FH>) {
9622934a862fa39a8e90c816c4136e293d75629djacobs if (/<Printer (.+)>/) {
9622934a862fa39a8e90c816c4136e293d75629djacobs $printer{'Printer'} = $1;
9622934a862fa39a8e90c816c4136e293d75629djacobs @options = ();
9622934a862fa39a8e90c816c4136e293d75629djacobs push(@options, "-p", $1);
9622934a862fa39a8e90c816c4136e293d75629djacobs } elsif (/([^\s]+)\s(.+)/) {
9622934a862fa39a8e90c816c4136e293d75629djacobs $printer{$1} = $2;
9622934a862fa39a8e90c816c4136e293d75629djacobs my $value = $2;
9622934a862fa39a8e90c816c4136e293d75629djacobs ($1 eq 'DeviceURI') &&
9622934a862fa39a8e90c816c4136e293d75629djacobs push(@options, "-v", $value);
9622934a862fa39a8e90c816c4136e293d75629djacobs ($1 eq 'Info') &&
9622934a862fa39a8e90c816c4136e293d75629djacobs push(@options, "-D", $value);
9622934a862fa39a8e90c816c4136e293d75629djacobs } elsif (/<\/Printer>/) {
9622934a862fa39a8e90c816c4136e293d75629djacobs ($service eq 'lp') &&
9622934a862fa39a8e90c816c4136e293d75629djacobs push(@options, "-m", "uri");
9622934a862fa39a8e90c816c4136e293d75629djacobs print "importing $printer{'Printer'}...\n";
9622934a862fa39a8e90c816c4136e293d75629djacobs # create a queue
9622934a862fa39a8e90c816c4136e293d75629djacobs psystem($LPADMIN, @options);
9622934a862fa39a8e90c816c4136e293d75629djacobs psystem($ENABLE, $printer{'Printer'});
9622934a862fa39a8e90c816c4136e293d75629djacobs ($printer{'Accepting'} eq 'Yes') &&
9622934a862fa39a8e90c816c4136e293d75629djacobs psystem($ACCEPT, $printer{'Printer'});
9622934a862fa39a8e90c816c4136e293d75629djacobs $printer = ();
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs close($FH);
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub select_service {
9622934a862fa39a8e90c816c4136e293d75629djacobs my ($service, $migrate) = @_;
9622934a862fa39a8e90c816c4136e293d75629djacobs my $FH, $queues;
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs if (! -d "/usr/lib/$service/bin") {
9622934a862fa39a8e90c816c4136e293d75629djacobs fatal("print service: $service is not installed\n");
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs if ($migrate == 1) {
9622934a862fa39a8e90c816c4136e293d75629djacobs # export old print queue configuration (if migrating)
9622934a862fa39a8e90c816c4136e293d75629djacobs $queues = tmpnam();
9622934a862fa39a8e90c816c4136e293d75629djacobs export_print_queues($queues);
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs # enable/disable the services
9622934a862fa39a8e90c816c4136e293d75629djacobs if ($service eq 'cups') {
36615d24946b849e48cedbbafa9adfb4a02b590cjacobs (-f '/etc/printers.conf') && (! -f '/etc/lp/printers.conf') &&
36615d24946b849e48cedbbafa9adfb4a02b590cjacobs rename('/etc/printers.conf', '/etc/lp/printers.conf');
9622934a862fa39a8e90c816c4136e293d75629djacobs print("disabling LP services...\n");
36615d24946b849e48cedbbafa9adfb4a02b590cjacobs svcadm("disable", $SVC_LP_SCHEDULER, $SVC_LP_IPP, $SVC_LP_LPD,
36615d24946b849e48cedbbafa9adfb4a02b590cjacobs $SVC_LP_PPD);
9622934a862fa39a8e90c816c4136e293d75629djacobs print("enabling CUPS services...\n");
9622934a862fa39a8e90c816c4136e293d75629djacobs svcadm("enable", $SVC_CUPS_SCHEDULER, $SVC_CUPS_LPD);
9622934a862fa39a8e90c816c4136e293d75629djacobs svccfg("cups/scheduler:default",
9622934a862fa39a8e90c816c4136e293d75629djacobs "setprop general/active = boolean: true");
6124874e2cec65f2e7a974b3833b05dbf2a7d905Ghee Teo system("pkill -USR1 -f '/desktop-print-management-applet'");
9622934a862fa39a8e90c816c4136e293d75629djacobs } else {
9622934a862fa39a8e90c816c4136e293d75629djacobs print("disabling CUPS services...\n");
9622934a862fa39a8e90c816c4136e293d75629djacobs svcadm("disable", $SVC_CUPS_SCHEDULER, $SVC_CUPS_LPD);
9622934a862fa39a8e90c816c4136e293d75629djacobs print("enabling LP services...\n");
36615d24946b849e48cedbbafa9adfb4a02b590cjacobs svcadm("enable", $SVC_LP_SCHEDULER, $SVC_LP_IPP, $SVC_LP_LPD,
36615d24946b849e48cedbbafa9adfb4a02b590cjacobs $SVC_LP_PPD);
36615d24946b849e48cedbbafa9adfb4a02b590cjacobs (-f '/etc/lp/printers.conf') &&
36615d24946b849e48cedbbafa9adfb4a02b590cjacobs rename('/etc/lp/printers.conf', '/etc/printers.conf');
9622934a862fa39a8e90c816c4136e293d75629djacobs svccfg("cups/scheduler:default", "delprop general/active");
6124874e2cec65f2e7a974b3833b05dbf2a7d905Ghee Teo system("pkill -USR1 -f '/desktop-print-management-applet'");
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs # import the new print queue configuration (if migrating)
9622934a862fa39a8e90c816c4136e293d75629djacobs defined($queues) && import_print_queues($queues);
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobssub query_service {
9622934a862fa39a8e90c816c4136e293d75629djacobs my $service = print_service();
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs if (!defined($service)) {
9622934a862fa39a8e90c816c4136e293d75629djacobs fatal("failed to detect active print service: $!\n");
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs print "active print service: $service\n";
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobsif ($cmd eq 'print-service') {
9622934a862fa39a8e90c816c4136e293d75629djacobs my ($import_path, $export_path, $svc_name, $query, $migrate) = ();
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs my $res = GetOptions('q|query' => \$query, 's|set=s' => \$service,
9622934a862fa39a8e90c816c4136e293d75629djacobs 'm|migrate' => \$migrate, 'e|export=s' => \$export_path,
9622934a862fa39a8e90c816c4136e293d75629djacobs 'i|import=s' => \$import_path);
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs ($res) || usage();
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobs if (defined($import_path) && !defined($export_path) &&
9622934a862fa39a8e90c816c4136e293d75629djacobs !defined($query) && !defined($service) && !defined($migrate)) {
9622934a862fa39a8e90c816c4136e293d75629djacobs import_print_queues($import_path);
9622934a862fa39a8e90c816c4136e293d75629djacobs } elsif (!defined($import_path) && defined($export_path) &&
9622934a862fa39a8e90c816c4136e293d75629djacobs !defined($query) && !defined($service) && !defined($migrate)) {
9622934a862fa39a8e90c816c4136e293d75629djacobs export_print_queues($export_path);
9622934a862fa39a8e90c816c4136e293d75629djacobs } elsif (!defined($import_path) && !defined($export_path) &&
9622934a862fa39a8e90c816c4136e293d75629djacobs defined($query) && !defined($service) && !defined($migrate)) {
9622934a862fa39a8e90c816c4136e293d75629djacobs query_service();
9622934a862fa39a8e90c816c4136e293d75629djacobs } elsif (!defined($import_path) && !defined($export_path) &&
9622934a862fa39a8e90c816c4136e293d75629djacobs !defined($query) && defined($service)) {
9622934a862fa39a8e90c816c4136e293d75629djacobs select_service($service, $migrate);
9622934a862fa39a8e90c816c4136e293d75629djacobs } else {
9622934a862fa39a8e90c816c4136e293d75629djacobs usage();
9622934a862fa39a8e90c816c4136e293d75629djacobs }
9622934a862fa39a8e90c816c4136e293d75629djacobs} else {
9622934a862fa39a8e90c816c4136e293d75629djacobs print_command($cmd, @ARGV);
9622934a862fa39a8e90c816c4136e293d75629djacobs}
9622934a862fa39a8e90c816c4136e293d75629djacobs
9622934a862fa39a8e90c816c4136e293d75629djacobsexit(0);