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

Last change on this file since ca52fe9 was ca52fe9, checked in by Jason Gross <jasongross9@gmail.com>, 7 years ago
Remove useless 'use Data::Dumper'
  • 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
21our $VERSION = 1.0;
22
23BarnOwl::new_variable_bool(
24    'aklog',
25    {
26        default => 1,
27        summary => 'Enable running aklog on renew',
28        description => "If set, aklog will be run during the renew command."
29     }
30 );
31
32sub startup {
33    register_commands();
34}
35
36sub register_commands {
37    BarnOwl::new_command(
38        'renew' => \&cmd_renew,
39        {
40            summary => 'Renew Kerberos Tickets',
41            usage => 'renew',
42            description => <<END_DESCR
43Renews Kerberos Ticket
44END_DESCR
45        }
46    );
47}
48
49
50$BarnOwl::Hooks::startup->add('BarnOwl::Module::Kerberos::startup');
51
52################################################################################
53######################## Owl command handlers ##################################
54################################################################################
55
56
57sub cmd_renew {
58    BarnOwl::start_password("Password: ", \&do_renew );
59    return "";
60}
61
62
63my $hdlin;
64my $hdlerr;
65my $kinit_watcher;
66
67sub do_renew {
68
69    my $password = shift;
70    my ($stdin, $stdout, $stderr);
71    use Symbol 'gensym'; $stderr = gensym;
72    my $pid = open3($stdin, $stdout, $stderr, 'kinit', '-l7d') or die("Failed to run kinit");
73
74    $hdlerr = new AnyEvent::Handle(fh => $stderr);
75    $hdlin = new AnyEvent::Handle(fh => $stdin);
76
77    my $output = "";
78
79    $hdlin->push_write($password .  "\n");
80    $hdlerr->push_read(line => sub {
81        my ($hdl, $line) = @_;
82        $output .= $line;
83                     });
84    close $stdout;
85    $kinit_watcher = AnyEvent->child (pid => $pid, cb => sub {
86        my ($pid, $status) = @_;
87        if ($status != 0) {
88            BarnOwl::error($output);
89        } else {
90            if (BarnOwl::getvar("aklog") eq 'on') {
91                my $status = system('aklog');
92                if ($status != 0) {
93                    BarnOwl::error('Aklog Failed');
94                }
95            }
96        }
97    });
98
99}
100
101
1021;
Note: See TracBrowser for help on using the repository browser.