QuadPres

 view release on metacpan or  search on metacpan

lib/QuadPres/FS.pm  view on Meta::CPAN

package QuadPres::FS;
$QuadPres::FS::VERSION = '0.32.0';
use 5.016;
use strict;
use warnings;

use parent 'QuadPres::Base';

__PACKAGE__->mk_acc_ref( [qw( gid group )] );

sub _init
{
    my $self = shift;

    my %args = @_;

    my $group;

    $group = $args{group};
    $self->set_group($group);

    # Set the umask to ensure that other users which are a member of $group
    # can write to the files and directories generated by the program.
    umask(0002);

    return 0;
}

sub set_group
{
    my $self = shift;

    my $group = shift;

    $self->group($group);

    my $gid;

    # Check if the group is not empty.
    if ( defined($group) && ( $group !~ /^\s*$/ ) )
    {
        if ( $group =~ /^\d+$/ )
        {
            $gid = $group;
        }
        else
        {
            my @group_info = getgrnam($group);
            if (@group_info)
            {
                $gid = $group_info[2];
            }
        }

        $self->gid($gid);
    }

    return 0;
}

sub my_chown
{
    my $self = shift;

    my $path = shift;

    if ( !defined( $self->gid ) )
    {
        return;
    }

    chown( -1, $self->gid, $path );

    return;
}

sub make_dest_dir
{
    my $self = shift;

    my $dest_dir = shift;

    # Check if the destination directory exists and if not -
    # create it.
    if ( !-e $dest_dir )
    {
        mkdir($dest_dir);

        # Make it belong to the common group
        $self->my_chown($dest_dir);

        # Make it a SGID directory
        # This means that subsequent files will belong to its group.
        # And that subsequent directories inside will also be SGID.
        chmod( 02775, $dest_dir );
    }

    return;
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

QuadPres::FS - filesystem utils

=head1 VERSION

version 0.32.0

=head1 SYNOPSIS

=head1 DESCRIPTION

=head1 METHODS

=head2 gid

=head2 group

=head2 make_dest_dir($dest_dir)

=head2 my_chown($dest_dir)

=head2 set_group

=head2

=for :stopwords cpan testmatrix url bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan

=head1 SUPPORT

=head2 Websites

The following websites have more information about this module, and may be of help to you. As always,
in addition to those websites please use your favorite search engine to discover more resources.

=over 4

=item *

MetaCPAN

A modern, open-source CPAN search engine, useful to view POD in HTML format.

L<https://metacpan.org/release/QuadPres>

=item *

RT: CPAN's Bug Tracker

The RT ( Request Tracker ) website is the default bug/issue tracking system for CPAN.

L<https://rt.cpan.org/Public/Dist/Display.html?Name=QuadPres>

=item *

CPANTS

The CPANTS is a website that analyzes the Kwalitee ( code metrics ) of a distribution.

L<http://cpants.cpanauthors.org/dist/QuadPres>

=item *

CPAN Testers

The CPAN Testers is a network of smoke testers who run automated tests on uploaded CPAN distributions.

L<http://www.cpantesters.org/distro/Q/QuadPres>

=item *

CPAN Testers Matrix

The CPAN Testers Matrix is a website that provides a visual overview of the test results for a distribution on various Perls/platforms.

L<http://matrix.cpantesters.org/?dist=QuadPres>

=item *

CPAN Testers Dependencies



( run in 1.575 second using v1.01-cache-2.11-cpan-71847e10f99 )