source: perl/modules/Kerberos/lib/BarnOwl/Module/Kerberos.pm @ 76d6db1

Last change on this file since 76d6db1 was 76d6db1, checked in by Pweaver (Paul Weaver) <paul@mordor.org>, 7 years ago
Use eq not == for string comparison in Kerberos.pm
  • Property mode set to 100644
File size: 2.1 KB
Line 
1use strict;
2use warnings;
3
4package BarnOwl::Module::Kerberos;
5
6=head1 NAME
7
8BarnOwl::Module::Kerberos
9
10=head1 DESCRIPTION
11
12This module allows someone to renew tickets within BarnOwl
13
14=cut
15
16use BarnOwl;
17use AnyEvent;
18use AnyEvent::Handle;
19use IPC::Open3;
20
21use Data::Dumper;
22
23our $VERSION = 1.0;
24
25BarnOwl::new_variable_bool(
26    'aklog',
27    {
28        default => 1,
29        summary => 'Enable running aklog on renew',
30        description => "If set, aklog will be run during the renew command."
31     }
32 );
33
34sub startup {
35    register_commands();
36}
37
38sub register_commands {
39    BarnOwl::new_command(
40        'renew' => \&cmd_renew,
41        {
42            summary => 'Renew Kerberos Tickets',
43            usage => 'renew',
44            description => <<END_DESCR
45Renews Kerberos Ticket
46END_DESCR
47        }
48    );
49}
50
51
52$BarnOwl::Hooks::startup->add('BarnOwl::Module::Kerberos::startup');
53
54################################################################################
55######################## Owl command handlers ##################################
56################################################################################
57
58
59sub cmd_renew {
60    BarnOwl::start_password("Password: ", \&do_renew );
61    return "";
62}
63
64
65my $hdlin;
66my $hdlerr;
67my $kinit_watcher;
68
69sub do_renew {
70
71    my $password = shift;
72    my ($stdin, $stdout, $stderr);
73    use Symbol 'gensym'; $stderr = gensym;
74    my $pid = open3($stdin, $stdout, $stderr, 'kinit', '-l7d') or die("Failed to run kinit");
75
76    $hdlerr = new AnyEvent::Handle(fh => $stderr);
77    $hdlin = new AnyEvent::Handle(fh => $stdin);
78
79    my $output = "";
80
81    $hdlin->push_write($password .  "\n");
82    $hdlerr->push_read(line => sub {
83        my ($hdl, $line) = @_;
84        $output .= $line;
85                     });
86    close $stdout;
87    $kinit_watcher = AnyEvent->child (pid => $pid, cb => sub {
88        my ($pid, $status) = @_;
89        if ($status != 0) {
90            BarnOwl::error($output);
91        } else {
92            if (BarnOwl::getvar("aklog") eq 'on') {
93                my $status = system('aklog');
94                if ($status != 0) {
95                    BarnOwl::error('Aklog Failed');
96                }
97            }
98        }
99    });
100
101}
102
103
1041;
Note: See TracBrowser for help on using the repository browser.