xref: /illumos-gate/usr/src/cmd/svc/profile/listsvcs.pl (revision a38ddfee9c8c6b6c5a2947ff52fd2338362a4444)
1#!/usr/bin/perl
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21
22#
23# ident	"%Z%%M%	%I%	%E% SMI"
24#
25# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
26# Use is subject to license terms.
27#
28
29#
30# listsvcs [-e] profile ...
31#
32# List all service instances in an SMF profile.
33# Options:
34#	-e	List enabled instances only
35#
36
37use XML::Parser;
38use Getopt::Std;
39use strict;
40
41my %opts;
42my $servicename;	# name attribute of the enclosing service element
43my @svcs = ();		# services list under construction
44
45if (!getopts("e", \%opts)) {
46	die "Usage: $0 [-e] profile ...\n";
47}
48my $list_all = !$opts{e};
49
50my $parser = new XML::Parser;
51$parser->setHandlers(Start => \&start_handler, End => \&end_handler);
52
53for my $file (@ARGV) {
54	$parser->parsefile($file);
55}
56print join("\n", sort(@svcs)), "\n";
57
58sub start_handler
59{
60	my ($p, $el, %attrs) = @_;
61	my $name;
62
63	return unless ($attrs{"name"});
64	$name = $attrs{"name"};
65
66	if ($el eq "service") {
67		$servicename = $name;
68	} elsif ($el eq "instance" && defined $servicename) {
69		push(@svcs, "$servicename:$name")
70			if ($list_all || $attrs{"enabled"} eq "true");
71	}
72}
73
74sub end_handler
75{
76	my ($p, $el) = @_;
77
78	if ($el eq "service") {
79		$servicename = undef;
80	}
81}
82