1 # Copyright (C) 2002 Stanislav Sinyagin
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
17 # $Id: Import.pm,v 1.1 2010-12-27 00:03:59 ivan Exp $
18 # Stanislav Sinyagin <ssinyagin@yahoo.com>
21 package Torrus::ACL::Import;
24 use Torrus::ACL::Edit;
30 my %formatsSupported = ('1.0' => 1,
39 my $parser = new XML::LibXML;
41 eval { $doc = $parser->parse_file( $filename ); };
44 Error("Failed to parse $filename: $@");
48 my $root = $doc->documentElement();
49 if( $root->nodeName() ne 'aclexport' )
51 Error('XML root element is not "aclexport" in ' . $filename);
56 (($root->getElementsByTagName('file-info'))[0]->
57 getElementsByTagName('format-version'))[0]->textContent();
58 if( not $format_version or not $formatsSupported{$format_version} )
60 Error('Invalid format or format version not supported: ' . $filename);
64 foreach my $groupnode ( ($root->getElementsByTagName('groups'))[0]->
65 getElementsByTagName('group') )
67 my $group = $groupnode->getAttribute('name');
68 Debug('Importing group: ' . $group);
69 if( not $self->groupExists( $group ) )
71 $ok = $self->addGroups( $group ) ? $ok:0;
75 Debug('Group already exists: ' . $group);
78 foreach my $privnode ( $groupnode->getElementsByTagName('privilege') )
80 my $object = $privnode->getAttribute('object');
81 my $priv = $privnode->getAttribute('name');
82 Debug('Setting privilege ' . $priv . ' for ' . $object .
83 ' to group ' . $group);
84 $ok = $self->setPrivilege( $group, $object, $priv ) ? $ok:0;
87 foreach my $attrnode ( $groupnode->getElementsByTagName('attribute') )
89 my $attr = $attrnode->getAttribute('name');
90 if( $attr ne 'modified' )
92 my $value = $attrnode->getAttribute('value');
93 Debug('Setting attribute ' . $attr . ' for group ' . $group .
95 $ok = $self->setGroupAttribute( $group, $attr, $value )
101 foreach my $usernode ( ($root->getElementsByTagName('users'))[0]->
102 getElementsByTagName('user') )
104 my $uid = $usernode->getAttribute('uid');
105 Debug('Importing user: ' . $uid);
107 if( not $self->userExists( $uid ) )
109 $ok = $self->addUser( $uid ) ? $ok:0;
113 Debug('User already exists: ' . $uid);
116 foreach my $membernode ( $usernode->getElementsByTagName('member-of') )
118 my $group = $membernode->getAttribute('group');
119 Debug('Adding ' . $uid . ' to group ' . $group);
121 if( not grep {$group eq $_} $self->memberOf( $uid ) )
123 $ok = $self->addUserToGroups( $uid, $group ) ? $ok:0;
127 Debug('User ' . $uid . ' is already in group ' . $group);
131 foreach my $attrnode ( $usernode->getElementsByTagName('attribute') )
133 my $attr = $attrnode->getAttribute('name');
134 if( $attr ne 'modified' )
136 my $value = $attrnode->getAttribute('value');
137 Debug('Setting attribute ' . $attr . ' for user ' . $uid .
139 $ok = $self->setUserAttribute( $uid, $attr, $value ) ? $ok:0;
143 Debug('Import finished');
155 # indent-tabs-mode: nil
156 # perl-indent-level: 4