Net-OpenNebula

 view release on metacpan or  search on metacpan

lib/Net/OpenNebula/RPC.pm  view on Meta::CPAN



# Chown
# options
#    uid : uid to use
#    gid : gid to use
#    one : Net::OpenNebula instance to use for user/groupname lookup
#          (i.e. when uid/gid is not a integer)
#          It wil use $one->get_users and/or $one->get_groups methods.

sub chown
{
    my ($self, %opts) = @_;

    $self->has_id("chown") || return;

    my $uid = $self->_lookup('user', $opts{uid}, $opts{one});
    return if ! defined($uid);

    my $gid = $self->_lookup('group', $opts{gid}, $opts{one});
    return if ! defined($gid);

    return $self->_onerpc("chown",
                          [ int => $self->id ],
                          [ int => $uid ],
                          [ int => $gid ]
                          );
}


# Mode can be
#   an integer, typical in octal mode 0664, but can be decimal or whatever
sub chmod
{
    my ($self, $mode) = @_;

    $self->has_id("chmod") || return;

    my @bits;
    if ($mode =~ m/^\d+/) {
        my $bin = sprintf("%b", $mode & oct("777"));
        @bits = split('', $bin);
    } else {
        $self->error("chown cannot handle mode $mode");
        return;
    };

    if((scalar @bits) == 9) {
        my @allargs = qw(chmod);
        push(@allargs, [ int => $self->id ], map {[ int => $_ ]} @bits);
        return $self->_onerpc(@allargs);
    } else {
        $self->error("9 permissions bits required, got ".join(",", @bits));
        return;



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