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

Last change on this file since e9f3e38 was e9f3e38, checked in by Pweaver (Paul Weaver) <paul@mordor.org>, 7 years ago
renew command implemented :renew in barnowl prompts for a password, and then runs kinit -l7d with that password renew was implemented using IPC::Open3 and AnyEvent libraries
  • Property mode set to 100644
File size: 2.2 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 withing 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 $w;
68
69my $a_hdlerr;
70my $a;
71
72sub do_renew {
73
74    my $password = shift;
75    my($stdin, $stdout, $stderr);
76    use Symbol 'gensym'; $stderr = gensym;
77    my $pid = open3($stdin, $stdout, $stderr, 'kinit', '-l7d') or die("Failed to run kinit");
78
79    $hdlerr = new AnyEvent::Handle(fh => $stderr);
80    $hdlin = new AnyEvent::Handle(fh => $stdin);
81
82    my $output = "";
83
84    $hdlin->push_write($password .  "\n");
85    $hdlerr->push_read (line => sub {
86        my ($hdl, $line) = @_;
87        $output .= $line;
88                     });
89    close $stdout;
90    $w = AnyEvent->child (pid => $pid, cb => sub {
91        my ($pid, $status) = @_;
92        if ($status != 0){
93            BarnOwl::error($output);
94        }
95        else{
96            if(BarnOwl::getvar("aklog") == 'on'){
97                my $status = system('aklog');
98                if ($status != 0){
99                    BarnOwl::error('Aklog Failed');
100                }
101            }
102        }
103    });
104
105}
106
107
1081;
Note: See TracBrowser for help on using the repository browser.