NAME

SVN::Access - Perl extension to manipulate SVN Access files

SYNOPSIS

use SVN::Access;
my $acl = SVN::Access->new(acl_file   =>  '/usr/local/svn/conf/my_first_dot_com.conf');

# add a group to the config
$acl->add_group('stooges', qw/larry curly moe shemp/);

# write out the acl (thanks Gil)
$acl->write_acl;

# give the stooges commit access to the production version of 
# our prized intellectual property, the free car giver-awayer.. 
# (thats how we get users to the site.)
$acl->add_resource(
    # resource path
    '/free_car_giver_awayer/branches/prod_1.21-sammy_hagar',

    # permissions
    '@stooges' => 'rw',
);

$acl->write_pretty; # with the equals signs all lined up.

DESCRIPTION

SVN::Access includes both an object oriented interface for manipulating SVN access files (AuthzSVNAccessFile files), as well as a command line interface to that object oriented programming interface (svnaclmgr.pl) in the examples/ directory.

METHODS

new

the constructor, takes key / value pairs. only one is required.. in fact only one is used right now. acl_file.

Example:

my $acl = SVN::Access->new(acl_file   =>  '/path/to/my/acl.conf');
add_resource

adds a resource to the current acl object structure. note: the changes are only to the object structure in memory, and one must call the write_acl method, or the write_pretty method to commit them.

Example:

$acl->add_resource('/',
  rick    =>  'rw',
  steve   =>  'rw',
  gibb    =>  'r',
);
remove_resource

removes a resource from the current acl object structure. as with add_resource these changes are only to the object structure in memory, and must be commited with a write_ method.

Example:

$acl->remove_resource('/');
resources

returns an array of resource objects, takes no arguments.

Example:

for($acl->resources) {
    print $_->name . "\n";
}
resource

resolves a resource name to its SVN::Access::Resource object.

Example:

my $resource = $acl->resource('/');
add_group

adds a group to the current acl object structure. these changes are only to the object structure in memory, and must be written out with write_acl or write_pretty.

Example:

$acl->add_group('stooges', 'larry', 'curly', 'moe', 'shemp');
remove_group

removes a group from the current acl object structure. these changes are only to the object structure in memory, and must be written out with write_acl or write_pretty.

Example:

$acl->remove_group('stooges');
groups

returns an array of group objects, takes no arguments.

Example:

for($acl->groups) {
    print $_->name . "\n";
}
group

resolves a group name to its SVN::Access::Group object.

Example:

$acl->group('pants_wearers')->add_member('ralph');
write_acl

takes no arguments, writes out the current acl object structure to the acl_file specified in the constructor.

Example:

$acl->write_acl;
write_pretty

the same as write_acl, but does it with extra whitespace to line things up.

Example:

$acl->write_pretty;
verify_acl

does a pre-flight check of the acl, and returns any errors found delimited by new lines. this routine is called by write_acl and write_pretty, where these errors will be considered fatal. be sure to either call this before $acl->write_*, OR use eval { } to capture the return of verify_acl into $@.

Example:

if (my $error = $acl->verify_acl) {
  print "Problem found in your ACL: $error\n";
} else {
  $acl->write_acl;
}
add_alias

adds an alias to [aliases], takes 2 arguments: the alias name and the aliased user.

Example: $acl->add_alias('mikey', 'uid=mgregorowicz,ou=people,dc=mg2,dc=org');

remove_alias

removes an alias by name, takes the alias name as an argument.

Example: $acl->remove_alias('mikey');

alias

returns the value of an alias, uses exists() first so it will not autovivify the key in the hash.

Example: print $acl->alias('mikey') . "\n";

aliases

returns a hashref that contains the aliases. editing this hashref will edit the data inside the $acl object.

Example: foreach my $alias (keys %{$acl->aliases}) { print "$alias: " . $acl->aliases->{$alias} . "\n"; }

resolve

Returns a fully resolved list of users part of the given groups and/or aliases. Groups must be specified with a leading "@" and aliases with a leading "&", all else will be returned verbatim. This recurses through all definitions to get actual user names (so groups within groups will be handled properly).

SEE ALSO

subversion (http://subversion.tigris.org/), SVN::ACL, svnserve.conf

AUTHOR

Michael Gregorowicz, <mike@mg2.org>

COPYRIGHT AND LICENSE

Copyright (C) 2012-2017 by Michael Gregorowicz

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.