| File: | /home/mik/work/module/Tivoli/AccessManager/Admin/AuthzRule.pm |
| Coverage: | 99.2% |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | package Tivoli::AccessManager::Admin::AuthzRule; | ||||||
| 2 | 15 15 15 | 168 78 209 | use strict; | ||||
| 3 | 15 15 15 | 242 65 211 | use warnings; | ||||
| 4 | 15 15 15 | 197 64 266 | use Carp; | ||||
| 5 | 15 15 15 | 413 97 203 | use Devel::Peek; | ||||
| 6 | |||||||
| 7 | 15 15 15 | 269 59 260 | use Tivoli::AccessManager::Admin::Response; | ||||
| 8 | |||||||
| 9 | #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||||||
| 10 | # $Id: ACL.pm 189 2005-12-15 05:39:43Z mik $ | ||||||
| 11 | #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||||||
| 12 | $Tivoli::AccessManager::Admin::AuthzRule::VERSION = "0.04"; | ||||||
| 13 | 15 | 212 | use Inline( C => 'DATA', | ||||
| 14 | INC => '-I/opt/PolicyDirector/include', | ||||||
| 15 | LIBS => ' -lpthread -lpdadminapi -lstdc++', | ||||||
| 16 | CCFLAGS => '-Wall', | ||||||
| 17 | # VERSION => '0.04', | ||||||
| 18 | 15 15 | 194 66 | NAME => 'Tivoli::AccessManager::Admin::AuthzRule'); | ||||
| 19 | |||||||
| 20 | sub new { | ||||||
| 21 | 16 | 1 | 92 | my $class = shift; | |||
| 22 | 16 | 84 | my $cont = shift; | ||||
| 23 | 16 | 211 | my $resp = Tivoli::AccessManager::Admin::Response->new(); | ||||
| 24 | 16 | 93 | my $name = ''; | ||||
| 25 | |||||||
| 26 | 16 | 446 | unless ( defined($cont) and UNIVERSAL::isa($cont,'Tivoli::AccessManager::Admin::Context' ) ) { | ||||
| 27 | 3 | 29 | return undef; | ||||
| 28 | } | ||||||
| 29 | |||||||
| 30 | 13 | 158 | if ( @_ == 1 ) { | ||||
| 31 | 1 | 15 | $name = shift; | ||||
| 32 | } | ||||||
| 33 | elsif ( @_ % 2 ) { | ||||||
| 34 | 1 | 55 | warn "Invalid syntax for new"; | ||||
| 35 | 1 | 10 | return undef; | ||||
| 36 | } | ||||||
| 37 | elsif ( @_ ) { | ||||||
| 38 | 10 | 101 | my %opts = @_; | ||||
| 39 | 10 | 141 | $name = $opts{name} || ''; | ||||
| 40 | } | ||||||
| 41 | |||||||
| 42 | 12 | 100 | my $self = bless {}, $class; | ||||
| 43 | 12 | 75 | $self->{exist} = 0; | ||||
| 44 | 12 | 130 | $self->_authzrule_stash(); | ||||
| 45 | 12 | 60 | $self->{context} = $cont; | ||||
| 46 | 12 | 70 | $self->{name} = $name; | ||||
| 47 | |||||||
| 48 | 12 | 74 | if ( $self->{name} ) { | ||||
| 49 | 10 | 521972 | my $rc = $self->authzrule_get( $resp ); | ||||
| 50 | 10 | 284 | $self->{exist} = 1 if $rc; | ||||
| 51 | } | ||||||
| 52 | |||||||
| 53 | 12 | 162 | return $self; | ||||
| 54 | } | ||||||
| 55 | |||||||
| 56 | sub list { | ||||||
| 57 | 6 | 1 | 56 | my $class = shift; | |||
| 58 | 6 | 37 | my ($pd,@rules); | ||||
| 59 | 6 | 94 | my $resp = Tivoli::AccessManager::Admin::Response->new(); | ||||
| 60 | |||||||
| 61 | 6 | 60 | if ( ref($class) ) { | ||||
| 62 | 1 | 9 | $pd = $class->{context}; | ||||
| 63 | } | ||||||
| 64 | else { | ||||||
| 65 | 5 | 29 | $pd = shift; | ||||
| 66 | 5 | 140 | unless ( defined($pd) and UNIVERSAL::isa($pd,'Tivoli::AccessManager::Admin::Context' ) ) { | ||||
| 67 | 2 | 34 | $resp->set_message("Incorrect syntax -- did you forget the context?"); | ||||
| 68 | 2 | 31 | $resp->set_isok(0); | ||||
| 69 | 2 | 21 | return $resp; | ||||
| 70 | } | ||||||
| 71 | } | ||||||
| 72 | |||||||
| 73 | 4 | 45 | if ( @_ % 2 ) { | ||||
| 74 | 1 | 35 | $resp->set_message("Invalid syntax"); | ||||
| 75 | 1 | 21 | $resp->set_isok(0); | ||||
| 76 | 1 | 14 | return $resp; | ||||
| 77 | } | ||||||
| 78 | 3 | 24 | my %opts = @_; | ||||
| 79 | 3 | 138692 | my @temp = authzrule_list($pd,$resp); | ||||
| 80 | |||||||
| 81 | 3 | 49 | @rules = (); | ||||
| 82 | 3 | 86 | if ( $resp->isok() ) { | ||||
| 83 | 3 | 34 | if ( defined($opts{pattern}) ) { | ||||
| 84 | 1 | 34 | $opts{pattern} =~ s/\*/.*/g; | ||||
| 85 | 1 | 11 | $opts{pattern} =~ s/\?/.?/g; | ||||
| 86 | 1 | 124 | @rules = sort grep /^$opts{pattern}/, @temp; | ||||
| 87 | } | ||||||
| 88 | else { | ||||||
| 89 | 2 | 61 | @rules = sort @temp; | ||||
| 90 | } | ||||||
| 91 | 3 | 51 | $resp->set_value(\@rules); | ||||
| 92 | } | ||||||
| 93 | |||||||
| 94 | 3 | 63 | return $resp; | ||||
| 95 | } | ||||||
| 96 | |||||||
| 97 | sub find { | ||||||
| 98 | 2 | 1 | 12 | my $self = shift; | |||
| 99 | 2 | 16 | my $pd = $self->{context}; | ||||
| 100 | |||||||
| 101 | 2 | 14 | return Tivoli::AccessManager::Admin::ProtObject->find( $pd, authzrule => $self->name ); | ||||
| 102 | } | ||||||
| 103 | |||||||
| 104 | sub attach { | ||||||
| 105 | 4 | 1 | 28 | my $self = shift; | |||
| 106 | 4 | 30 | my @temp = @_; | ||||
| 107 | 4 | 25 | my ($resp,@attach); | ||||
| 108 | |||||||
| 109 | 4 | 48 | unless ( $self->{exist} ) { | ||||
| 110 | 1 | 24 | $resp = Tivoli::AccessManager::Admin::Response->new; | ||||
| 111 | 1 | 19 | $resp->set_message("Cannot attach a non-existant rule"); | ||||
| 112 | 1 | 18 | $resp->set_isok(0); | ||||
| 113 | 1 | 16 | return $resp; | ||||
| 114 | } | ||||||
| 115 | |||||||
| 116 | 3 | 15 | for my $name ( @temp ) { | ||||
| 117 | 3 | 62 | my $obj = Tivoli::AccessManager::Admin::ProtObject->new($self->{context}, name => $name ); | ||||
| 118 | 3 | 93 | $resp = $obj->authzrule( attach => $self->name ); | ||||
| 119 | 3 | 225 | return $resp unless $resp->isok; | ||||
| 120 | 2 | 17 | push @attach, $name; | ||||
| 121 | } | ||||||
| 122 | 2 | 52 | $resp->set_value(\@attach); | ||||
| 123 | 2 | 29 | return $resp; | ||||
| 124 | } | ||||||
| 125 | |||||||
| 126 | sub detach { | ||||||
| 127 | 4 | 1 | 53 | my $self = shift; | |||
| 128 | 4 | 34 | my @temp = @_; | ||||
| 129 | 4 | 28 | my ($resp,@detach); | ||||
| 130 | |||||||
| 131 | 4 | 45 | unless ( $self->{exist} ) { | ||||
| 132 | 1 | 20 | $resp = Tivoli::AccessManager::Admin::Response->new; | ||||
| 133 | 1 | 17 | $resp->set_message("Cannot detach a non-existant rule"); | ||||
| 134 | 1 | 12 | $resp->set_isok(0); | ||||
| 135 | 1 | 18 | return $resp; | ||||
| 136 | } | ||||||
| 137 | |||||||
| 138 | 3 | 27 | unless ( @temp ) { | ||||
| 139 | 1 | 9 | $resp = $self->find; | ||||
| 140 | 1 | 20 | return $resp unless $resp->isok; | ||||
| 141 | 1 | 20 | @temp = $resp->value; | ||||
| 142 | } | ||||||
| 143 | |||||||
| 144 | 3 | 29 | for my $name ( @temp ) { | ||||
| 145 | 3 | 78 | my $obj = Tivoli::AccessManager::Admin::ProtObject->new($self->{context}, name => $name ); | ||||
| 146 | 3 | 98 | $resp = $obj->authzrule( detach => $self->name ); | ||||
| 147 | 3 | 29 | return $resp unless $resp->isok; | ||||
| 148 | 2 | 15 | push @detach, $name; | ||||
| 149 | } | ||||||
| 150 | 2 | 52 | $resp->set_value(\@detach); | ||||
| 151 | 2 | 29 | return $resp; | ||||
| 152 | } | ||||||
| 153 | |||||||
| 154 | sub _readfile { | ||||||
| 155 | 4 | 23 | my $fname = shift; | ||||
| 156 | 4 | 19 | my $resp = shift; | ||||
| 157 | 4 | 15 | my $text = ''; | ||||
| 158 | |||||||
| 159 | 4 | 234 | unless ( open(RULE,$fname) ) { | ||||
| 160 | 2 | 34 | $resp->set_message( $! ); | ||||
| 161 | 2 | 24 | $resp->set_isok(0); | ||||
| 162 | 2 | 23 | return $resp; | ||||
| 163 | } | ||||||
| 164 | 2 | 62 | while (my $line = <RULE>) { | ||||
| 165 | 30 | 193 | $text .= $line; | ||||
| 166 | } | ||||||
| 167 | |||||||
| 168 | 2 | 16 | $resp->set_value($text); | ||||
| 169 | } | ||||||
| 170 | |||||||
| 171 | sub create { | ||||||
| 172 | 16 | 1 | 134 | my $self = shift; | |||
| 173 | 16 | 201 | my $resp = Tivoli::AccessManager::Admin::Response->new(); | ||||
| 174 | 16 | 87 | my $text = ''; | ||||
| 175 | |||||||
| 176 | 16 | 111 | unless ( ref($self) ) { | ||||
| 177 | 7 | 44 | my $pd = shift; | ||||
| 178 | 7 | 65 | $self = $self->new($pd, @_); | ||||
| 179 | } | ||||||
| 180 | |||||||
| 181 | 16 | 319 | if ( $self->exist ) { | ||||
| 182 | 1 | 29 | $resp->set_message( $self->name . " already exists" ); | ||||
| 183 | 1 | 19 | $resp->set_iswarning(1); | ||||
| 184 | 1 | 14 | $resp->set_value( $self ); | ||||
| 185 | 1 | 15 | return $resp; | ||||
| 186 | } | ||||||
| 187 | |||||||
| 188 | 15 | 149 | if ( @_ % 2 ) { | ||||
| 189 | 1 | 44 | $resp->set_message("Invalid syntax for create: @_"); | ||||
| 190 | 1 | 15 | $resp->set_isok(0); | ||||
| 191 | 1 | 11 | return $resp; | ||||
| 192 | } | ||||||
| 193 | 14 | 180 | my %opts = @_; | ||||
| 194 | |||||||
| 195 | 14 | 153 | if ( defined($opts{file}) ) { | ||||
| 196 | 2 | 18 | _readfile( $opts{file}, $resp ); | ||||
| 197 | 2 | 20 | if ( $resp->isok ) { | ||||
| 198 | 1 | 8 | $text = $resp->value; | ||||
| 199 | } | ||||||
| 200 | else { | ||||||
| 201 | 1 | 13 | return $resp; | ||||
| 202 | } | ||||||
| 203 | } | ||||||
| 204 | elsif ( defined($opts{rule}) ) { | ||||||
| 205 | 11 | 64 | $text = $opts{rule}; | ||||
| 206 | } | ||||||
| 207 | else { | ||||||
| 208 | 1 | 19 | $resp->set_message( "Cannot create an authzrule w/o the rule" ); | ||||
| 209 | 1 | 19 | $resp->set_isok(0); | ||||
| 210 | 1 | 13 | return $resp; | ||||
| 211 | } | ||||||
| 212 | |||||||
| 213 | 12 | 730655 | my $rc = $self->authzrule_create( $resp, | ||||
| 214 | $opts{description} || '', | ||||||
| 215 | $text, | ||||||
| 216 | $opts{failreason} || '', | ||||||
| 217 | ); | ||||||
| 218 | 12 | 333 | $self->{exist} = 1 if $resp->isok; | ||||
| 219 | 12 | 160 | $resp->set_value( $self ); | ||||
| 220 | 12 | 216 | return $resp; | ||||
| 221 | } | ||||||
| 222 | |||||||
| 223 | sub delete { | ||||||
| 224 | 13 | 1 | 126 | my $self = shift; | |||
| 225 | 13 | 206 | my $resp = Tivoli::AccessManager::Admin::Response->new(); | ||||
| 226 | |||||||
| 227 | 13 | 141 | unless ( $self->{exist} ) { | ||||
| 228 | 1 | 16 | $resp->set_message("Cannot delete a non-existant rule"); | ||||
| 229 | 1 | 18 | $resp->set_isok(0); | ||||
| 230 | 1 | 11 | return $resp; | ||||
| 231 | } | ||||||
| 232 | |||||||
| 233 | 12 | 567508 | my $rc = $self->authzrule_delete( $resp ); | ||||
| 234 | |||||||
| 235 | 12 | 220 | if ( $rc ) { | ||||
| 236 | 11 | 205 | $self->{exist} = 0; | ||||
| 237 | } | ||||||
| 238 | 12 | 244 | $resp->set_value( $rc ); | ||||
| 239 | 12 | 124 | return $resp; | ||||
| 240 | } | ||||||
| 241 | |||||||
| 242 | sub description { | ||||||
| 243 | 9 | 1 | 56 | my $self = shift; | |||
| 244 | 9 | 44 | my ($rc,$acl,$desc); | ||||
| 245 | 9 | 109 | my $resp = Tivoli::AccessManager::Admin::Response->new(); | ||||
| 246 | |||||||
| 247 | |||||||
| 248 | 9 | 105 | if ( @_ == 1 ) { | ||||
| 249 | 2 | 8 | $desc = shift; | ||||
| 250 | } | ||||||
| 251 | elsif ( @_ % 2 ) { | ||||||
| 252 | 1 | 10 | $resp->set_message("Invalid syntax"); | ||||
| 253 | 1 | 11 | $resp->set_isok(0); | ||||
| 254 | 1 | 9 | return $resp; | ||||
| 255 | } | ||||||
| 256 | elsif ( @_ ) { | ||||||
| 257 | 3 | 33 | my %opts = @_; | ||||
| 258 | 3 | 47 | $desc = $opts{description} || ''; | ||||
| 259 | } | ||||||
| 260 | else { | ||||||
| 261 | 3 | 11 | $desc = ''; | ||||
| 262 | } | ||||||
| 263 | |||||||
| 264 | 8 | 70 | unless ( $self->{exist} ) { | ||||
| 265 | 2 | 35 | $resp->set_message("Cannot describe a non-existant rule"); | ||||
| 266 | 2 | 32 | $resp->set_isok(0); | ||||
| 267 | 2 | 26 | return $resp; | ||||
| 268 | } | ||||||
| 269 | # Set description | ||||||
| 270 | 6 | 30 | if ( $desc ) { | ||||
| 271 | 3 | 132931 | $rc = $self->authzrule_setdescription( $resp, $desc ); | ||||
| 272 | 3 | 74 | $resp->set_value( $rc ); | ||||
| 273 | } | ||||||
| 274 | |||||||
| 275 | 6 | 55 | if ( $resp->isok ) { | ||||
| 276 | 5 | 227323 | $self->authzrule_get($resp); | ||||
| 277 | 5 | 145 | $desc = $self->authzrule_getdescription(); | ||||
| 278 | 5 | 99 | $resp->set_value( $desc || '' ); | ||||
| 279 | } | ||||||
| 280 | 6 | 60 | return $resp; | ||||
| 281 | } | ||||||
| 282 | |||||||
| 283 | sub ruletext { | ||||||
| 284 | 9 | 1 | 50 | my $self = shift; | |||
| 285 | 9 | 46 | my ( $rc, $text, $string ); | ||||
| 286 | 9 | 104 | my $resp = Tivoli::AccessManager::Admin::Response->new(); | ||||
| 287 | |||||||
| 288 | 9 | 87 | if ( @_ % 2 ) { | ||||
| 289 | 1 | 11 | $resp->set_message("Invalid syntax"); | ||||
| 290 | 1 | 14 | $resp->set_isok(0); | ||||
| 291 | 1 | 9 | return $resp; | ||||
| 292 | } | ||||||
| 293 | 8 | 67 | my %opts = @_; | ||||
| 294 | |||||||
| 295 | 8 | 68 | unless ( $self->{exist} ) { | ||||
| 296 | 2 | 27 | $resp->set_message("Cannot add rule text to a non-existant rule"); | ||||
| 297 | 2 | 29 | $resp->set_isok(0); | ||||
| 298 | 2 | 28 | return $resp; | ||||
| 299 | } | ||||||
| 300 | |||||||
| 301 | 6 | 49 | if ( defined($opts{file}) ) { | ||||
| 302 | 2 | 26 | _readfile( $opts{file}, $resp ); | ||||
| 303 | 2 | 25 | if ( $resp->isok ) { | ||||
| 304 | 1 | 10 | $text = $resp->value; | ||||
| 305 | } | ||||||
| 306 | else { | ||||||
| 307 | 1 | 18 | return $resp; | ||||
| 308 | } | ||||||
| 309 | } | ||||||
| 310 | elsif ( defined($opts{rule}) ) { | ||||||
| 311 | 2 | 18 | $text = $opts{rule}; | ||||
| 312 | } | ||||||
| 313 | |||||||
| 314 | 5 | 24 | if ( $text ) { | ||||
| 315 | 3 | 145273 | $rc = $self->authzrule_setruletext( $resp, $text ); | ||||
| 316 | } | ||||||
| 317 | |||||||
| 318 | 5 | 101 | if ( $resp->isok ) { | ||||
| 319 | 4 | 180640 | $rc = $self->authzrule_get($resp); | ||||
| 320 | 4 | 107 | if ( $resp->isok ) { | ||||
| 321 | 4 | 100 | $string = $self->authzrule_getruletext(); | ||||
| 322 | 4 | 47 | $resp->set_value( $string ); | ||||
| 323 | } | ||||||
| 324 | } | ||||||
| 325 | 5 | 82 | return $resp; | ||||
| 326 | } | ||||||
| 327 | |||||||
| 328 | sub failreason { | ||||||
| 329 | 9 | 1 | 61 | my $self = shift; | |||
| 330 | 9 | 42 | my $reason = ''; | ||||
| 331 | 9 | 42 | my $rc; | ||||
| 332 | |||||||
| 333 | 9 | 105 | my $resp = Tivoli::AccessManager::Admin::Response->new(); | ||||
| 334 | |||||||
| 335 | 9 | 117 | if ( @_ == 1 ) { | ||||
| 336 | 2 | 13 | $reason = shift; | ||||
| 337 | } | ||||||
| 338 | elsif ( @_ % 2 ) { | ||||||
| 339 | 1 | 13 | $resp->set_message("Invalid syntax"); | ||||
| 340 | 1 | 17 | $resp->set_isok(0); | ||||
| 341 | 1 | 17 | return $resp; | ||||
| 342 | } | ||||||
| 343 | elsif (@_) { | ||||||
| 344 | 3 | 29 | my %opts = @_; | ||||
| 345 | 3 | 60 | $reason = $opts{reason} || ''; | ||||
| 346 | } | ||||||
| 347 | |||||||
| 348 | 8 | 75 | unless ( $self->{exist} ) { | ||||
| 349 | 2 | 34 | $resp->set_message("Cannot get/set fail reason on a non-existant rule"); | ||||
| 350 | 2 | 24 | $resp->set_isok(0); | ||||
| 351 | 2 | 21 | return $resp; | ||||
| 352 | } | ||||||
| 353 | |||||||
| 354 | # Set the failreason | ||||||
| 355 | 6 | 32 | if ( $reason ) { | ||||
| 356 | 3 | 134529 | $rc = $self->authzrule_setfailreason( $resp, $reason ); | ||||
| 357 | } | ||||||
| 358 | |||||||
| 359 | 6 | 107 | if ( $resp->isok ) { | ||||
| 360 | 5 | 226686 | $self->authzrule_get($resp); | ||||
| 361 | 5 | 155 | $reason = $self->authzrule_getfailreason(); | ||||
| 362 | 5 | 109 | $resp->set_value( $reason || '' ); | ||||
| 363 | } | ||||||
| 364 | 6 | 63 | return $resp; | ||||
| 365 | } | ||||||
| 366 | |||||||
| 367 | sub DESTROY { | ||||||
| 368 | 12 | 132 | my $self = shift; | ||||
| 369 | |||||||
| 370 | 12 | 206 | $self->_authzrulefree; | ||||
| 371 | } | ||||||
| 372 | |||||||
| 373 | 20 | 1 | 264 | sub exist { $_[0]->{exist} } | |||
| 374 | |||||||
| 375 | 10 | 1 | 188 | sub name { $_[0]->{name} } | |||
| 376 | |||||||
| 377 | 1; | ||||||
| 378 | |||||||
| 379 - 700 | =head1 NAME Tivoli::AccessManager::Admin::AuthzRule =head1 SYNOPSIS =head1 DESCRIPTION =head1 CONSTRUCTOR =head2 new( PDADMIN, NAME ) Creates a blessed B<Tivoli::AccessManager::Admin::AuthzRule> object and returns it. =head3 Parameters =over 4 =item PDADMIN An initializæd L<Tivoli::AccessManager::Admin::Context> object. You should note that, once the B<Tivoli::AccessManager::Admin::AuthzRule> object is instantiated, you cannot change the context. =item NAME The name of the authzrule to which the object refers. This is an optional argument. =back =head3 Returns A fully blessed L<Tivoli::AccessManager::Admin::AuthzRule> object. If you forget the L<Tivoli::AccessManager::Admin::Context> object (which I can do with astonishing frequency), L</new> returns undef. =head2 create(PDADMIN, name =E<gt> NAME, rule =E<gt> TEXT | file =E<gt> "/path/to/file"[,description =E<gt> STRING][, failreason =E<gt> REASON]) create can also be used as a constructor. =head3 Parameters =over 4 =item PDADMIN As you would expect, this is a fully blessed L<Tivoli::AccessManager::Admin::Context> object. =item name =E<gt> NAME The name of the authzrule. This is a required parameter when using B<create> as a constructor. =item rule =E<gt> TEXT The text of the rule to be created. You must provide either this parameter or the file parameter. =item file =E<gt> /path/to/file Instead of providing the text as a string, you can specify a path that contains the authzrule. It is important that this file be readable by the userid running the program. =item description =E<gt> STRING Some descriptive text about the authzrule. This is optional. =item failreason =E<gt> REASON The fail reason. I don't understand what this really does. But it seems to take any random text. This too is optional. =back =head3 Returns It returns the fully blessed L<Tivoli::AccessManager::Admin::AuthzRule> object buried in a L<Tivoli::AccessManager::Admin::Response> object. =head1 CLASS METHODS Class methods behave like instance methods -- they return L<Tivoli::AccessManager::Admin::Response> objects. =head2 list(PDADMIN[,pattern =E<gt> STRING]) Lists some subset of the defined authzrules. No export is available for this method -- it must be called with the complete class name. =head3 Parameters =over 4 =item PDADMIN A fully blessed L<Tivoli::AccessManager::Admin::Context> object. Since this is a class method, and L<Tivoli::AccessManager::Admin::Context> objects are stored in the instances, you must provide it. =item pattern =E<gt> STRING The pattern to search on. This will be interpreted as a standard perl regex expression with two differences: * and ? will be translated to .* and .?, respectively. This makes it work a bit more like shell wild cards. =back =head3 Returns The resulting list of authzrules. =head1 METHODS =head2 create(rule =E<gt> TEXT | file =E<gt> "/path/to/file"[,name =E<gt> NAME,description =E<gt> STRING][, failreason =E<gt> REASON]) create as an instance method. =head3 Parameters =over 4 =item rule =E<gt> TEXT The text of the rule to be created. You must provide either this parameter or the file parameter. =item file =E<gt> /path/to/file Instead of providing the text as a string, you can specify a path that contains the authzrule. It is important that this file be readable by the userid running the program. =item name =E<gt> NAME The name of the authzrule. This parameter is optional if object was constructed with the name parameter. =item description =E<gt> STRING Some descriptive text about the authzrule. This is optional. =item failreason =E<gt> REASON The fail reason. I really don't understand what this really does. But it seems to take any random text. This too is optional. =back =head3 Returns A fully blessed L<Tivoli::AccessManager::Admin::AuthzRule> object. =head2 delete Deletes the authzrule. You need to make sure this isn't attached anywhere before calling this method -- see L</find>. =head3 Parameters None. =head3 Returns The success or failure of the operation. =head2 description([STRING]) Gets or sets the authzrule's description. =head3 Parameters =over 4 =item STRING If this parameter is present, the description will be changed to STRING. =back =head3 Returns No matter how it is called, it always returns the current description (possibly an empty string). =head2 ruletext([STRING]) Gets or sets the authzrule's rule text. =head3 Parameters =over 4 =item STRING If this parameter is present, the rule text will be changed to STRING. =back =head3 Returns No matter how it is called, it always returns the current rule text. =head2 failreason([STRING]) Gets or sets the authzrule's fail reason. Still wish I understood this. =head3 Parameters =over 4 =item STRING If this parameter is present, the rule's failreason will be set to STRING. =back =head3 Returns No matter how it is called, it always returns the current failreason. =head2 find Finds where the authzrule is attached. =head3 Parameters None =head3 Returns A list of places in the objectspace to which this authzrule is attached. =head2 attach( STRING[,STRING...] ) Attaches the authzrule to the named places in the object space. =head3 Parameters =over 4 =item STRING[, STRING...] Where in the objectspace to attach the autzrule. It will DWYM if you send it an array. =back =head3 Returns The list of places where the authzrule was attached. This is useful if an error occurs -- you can at least figure out where the work is done. =head2 detach([STRING[,STRING...]]) Detaches the authzrule. =head3 Parameters =over 4 =item STRING[,STRING...] A list of places from which the authzrule is to be detached. If this parameter is empty, the authzrule will be detached from B<every> place it is attached. =back =head3 Returns The list of places from which the authzrule was detached. =head2 exist Returns the existence of the authzrule. =head3 Parameters None =head3 Returns 1 if the object exists, 0 if it doesn't. B<NOTE>: This return value is B<not> buried in a L<Tivoli::AccessManager::Admin::Response> object. =head2 name Returns the name of the authzrule. =head3 Parameters None =head3 Returns The name of the authzrule. B<NOTE>: This return value is B<not> buried in a L<Tivoli::AccessManager::Admin::Response> object. =head1 ACKNOWLEDGEMENTS Please read L<Tivoli::AccessManager::Admin> for the full list of acks. I stand upon the shoulders of giants. =head1 BUGS =head1 AUTHOR Mik Firestone E<lt>mikfire@gmail.comE<gt> =head1 COPYRIGHT Copyright (c) 2005-2012 Mik Firestone. All rights reserved. This program is free software; you can redistibute it and/or modify it under the same terms as Perl itself. All references to TAM, Tivoli Access Manager, etc are copyrighted, trademarked and otherwise patented by IBM. =cut | ||||||
| 701 | |||||||