File Coverage

blib/lib/App/Milter/Limit/Util.pm
Criterion Covered Total %
statement 19 45 42.2
branch 2 20 10.0
condition n/a
subroutine 6 9 66.6
pod 4 4 100.0
total 31 78 39.7


line stmt bran cond sub pod time code
1             #
2             # This file is part of App-Milter-Limit
3             #
4             # This software is copyright (c) 2010 by Michael Schout.
5             #
6             # This is free software; you can redistribute it and/or modify it under
7             # the same terms as the Perl 5 programming language system itself.
8             #
9              
10             package App::Milter::Limit::Util;
11             $App::Milter::Limit::Util::VERSION = '0.53';
12             # ABSTRACT: utility functions for App::Milter::Limit
13              
14              
15 5     5   34 use strict;
  5         11  
  5         161  
16 5     5   33 use warnings;
  5         8  
  5         249  
17              
18 5     5   30 use POSIX qw(setsid);
  5         14  
  5         34  
19 5     5   355 use File::Path 2.0 ();
  5         180  
  5         147  
20 5     5   34 use App::Milter::Limit::Config;
  5         12  
  5         42  
21              
22              
23             sub daemonize {
24 0 0   0 1 0 my $pid = fork and exit 0;
25              
26 0         0 my $sid = setsid();
27              
28             # detach from controlling TTY
29 0         0 $SIG{HUP} = 'IGNORE';
30 0 0       0 $pid = fork and exit 0;
31              
32             # reset umask
33 0         0 umask 027;
34              
35 0 0       0 chdir '/' or die "can't chdir: $!";
36              
37 0         0 open STDIN, '+>/dev/null';
38 0         0 open STDOUT, '+>&STDIN';
39 0         0 open STDERR, '+>&STDIN';
40              
41 0         0 return $sid;
42             }
43              
44              
45             sub get_uid {
46 0     0 1 0 my $user = shift;
47              
48 0 0       0 unless ($user =~ /^\d+$/) {
49 0         0 my $uid = getpwnam($user);
50 0 0       0 unless (defined $uid) {
51 0         0 die qq{no such user "$user"\n};
52             }
53              
54 0         0 return $uid;
55             }
56             else {
57 0         0 return $user;
58             }
59             }
60              
61              
62             sub get_gid {
63 0     0 1 0 my $group = shift;
64              
65 0 0       0 unless ($group =~ /^\d+$/) {
66 0         0 my $gid = getgrnam($group);
67 0 0       0 unless (defined $gid) {
68 0         0 die qq{no such group "$group"\n};
69             }
70              
71 0         0 return $gid;
72             }
73             else {
74 0         0 return $group;
75             }
76             }
77              
78              
79             sub make_path {
80 4     4 1 12 my $path = shift;
81              
82 4 50       52 unless (-d $path) {
83 0         0 File::Path::make_path($path, { mode => 0755 });
84             }
85              
86 4         20 my $conf = App::Milter::Limit::Config->global;
87              
88 4 50       86 if (defined @$conf{qw(user group)}) {
89 0 0         chown $$conf{user}, $$conf{group}, $path
90             or die "chown($path): $!";
91             }
92             }
93              
94             1;
95              
96             __END__