Короче, вот недоделанный интерфейс сделал:
| Код | package GSEC; use IO::Handle; use Win32::Registry;
sub clearPath {my$str=shift;$str=~s{\\$}{}g;+$str} sub registryValue { my($path, $rh, $result)=shift; ${'::'.$path}->Open(shift, $rh) && $rh->QueryValueEx(shift, undef, $result); +$result }
sub new { my($class, $self)=(shift, {@_}); open $self->{gsec}, '|"'.&clearPath(®istryValue('HKEY_LOCAL_MACHINE', 'SOFTWARE\Firebird Project\Firebird Server\Instances', 'DefaultInstance')).'\bin\gsec.exe" -user '.$self->{-user}.' -password '.$self->{-passw} or die; +bless $self, $class }
sub add { my($self, $users)=(shift, {@_}); $self->{gsec}->print( 'add ', $_, ' -pw ', $users->{$_}{-passw}, (exists $users->{$_}{-fname} ? ' -fname '.$users->{$_}{-fname} : ()), (exists $users->{$_}{-mname} ? ' -mname '.$users->{$_}{-mname} : ()), (exists $users->{$_}{-lname} ? ' -lname '.$users->{$_}{-lname} : ()), (exists $users->{$_}{-uid} ? ' -uid '.$users->{$_}{-uid} : ()), (exists $users->{$_}{-gid} ? ' -gid '.$users->{$_}{-gid} : ()), "\n" ) foreach keys %$users; +$self }
sub del { my$self=shift; $self->{gsec}->print('del ', $_, "\n") foreach @_; +$self }
sub DESTROY {shift->{gsec}->close if $_[0] && ref $_[0]{gsec}}
package main;
my$gsec=GSEC->new(-user=>'SYSDBA', -passw=>'masterkey'); $gsec->add( TEST=>{ -passw=>'test' } ); $gsec->del('TEST'); |
|