[Netpass-devel] NetPass/lib/NetPass DB.pm,1.35,1.36
Brought to you by:
jeffmurphy
From: jeff m. <jef...@us...> - 2005-04-29 00:30:18
|
Update of /cvsroot/netpass/NetPass/lib/NetPass In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4093/lib/NetPass Modified Files: DB.pm Log Message: user/group work Index: DB.pm =================================================================== RCS file: /cvsroot/netpass/NetPass/lib/NetPass/DB.pm,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- DB.pm 27 Apr 2005 03:54:07 -0000 1.35 +++ DB.pm 29 Apr 2005 00:30:07 -0000 1.36 @@ -1398,7 +1398,7 @@ if(defined($u)) { $self->reconnect() || return undef; - my $sql = qq{SELECT groups FROM users WHERE username = '$u'}; + my $sql = qq{SELECT groups FROM users WHERE username = }.$self->dbh->quote($u); my $a = $self->{'dbh'}->selectrow_arrayref($sql); return $self->decomposeGroupMembership($a->[0]); } @@ -1474,7 +1474,7 @@ return "" unless (ref($gh) eq "HASH"); my $gstring = ""; - foreach my $g (keys %$gh) { + foreach my $g (sort keys %$gh) { if (ref($gh->{$g}) eq "ARRAY") { $gstring .= "$g+".join('+', @{$gh->{$g}}).";"; } else { @@ -1545,41 +1545,59 @@ foreach my $u (keys %$uh) { my $groups = $self->composeGroupMembership($uh->{$u}); - _log ("DEBUG", "u $u g $groups\n"); + my $sql = ''; $self->reconnect() || return "db failure database down"; # if groups contains no ACLs, then delete the user. if ($groups !~ /\+/) { - my $sql = qq{DELETE FROM users WHERE username = '$u'}; + $sql = qq{DELETE FROM users WHERE username = '$u'}; if (!$self->{'dbh'}->do($sql)) { - _log("ERROR", "failed to delete user $u ".$self->{'dbh'}->errstr."\n"); + _log("ERROR", "$whoami failed to delete user $u ".$self->{'dbh'}->errstr."\n"); return "db failure ".$self->{'dbh'}->errstr; } else { - _log("INFO", "user $u deleted\n"); + _log("INFO", "$whoami deleted user $u\n"); $self->deletePasswd($u); $self->audit(-ip => $myip, -user => $whoami, -severity => 'ALERT', -msg => [ qq{user $u deleted} ]); } } else { - my $sql = qq{INSERT INTO users (username, groups) VALUES (}; - my $msg = "user added."; - $sql .= $self->dbh->quote($u). ","; - $sql .= $self->dbh->quote($groups). ")"; - if (!$self->dbh->do($sql)) { - $sql = qq{UPDATE users SET groups = }; - $sql .= $self->dbh->quote($groups); - $sql .= " WHERE username = ".$self->dbh->quote($u); - if (!$self->{'dbh'}->do($sql)) { - _log("ERROR", - "failed to change groups to ($groups) for $u ".$self->{'dbh'}->errstr."\n"); - return "db failure ".$self->{'dbh'}->errstr; - } + my $ugh = $self->getUserGroups($u); + if (!defined($ugh)) { + # user doesnt exist + $sql = "NSERT INTO users (username, groups) VALUES ("; + $sql .= $self->dbh->quote($u). ","; + $sql .= $self->dbh->quote($groups). ")"; + if (!$self->dbh->do($sql)) { + _log("ERROR", "failed to add user: $u sql=$sql err=".$self->dbh->errstr); + return "db failured ".$self->dbh->errstr; + } + _log ("INFO", qq{$whoami added user $u groups "$groups"}); + $self->audit(-ip => $myip, -user => $whoami, -severity => 'ALERT', + "user added: $u groups: $groups"); + } + + else { + # user already exists + + my $groups_orig = $self->composeGroupMembership($ugh); + if ($groups ne $groups_orig) { + $sql = qq{UPDATE users SET groups = }; + $sql .= $self->dbh->quote($groups); + $sql .= " WHERE username = ".$self->dbh->quote($u); + if (!$self->{'dbh'}->do($sql)) { + _log("ERROR", + "failed to change groups to ($groups) for $u ".$self->{'dbh'}->errstr."\n"); + return "db failure ".$self->{'dbh'}->errstr; + } + _log ("INFO", qq{$whoami modified user $u groups "$groups_orig" to "$groups"}); + $self->audit(-ip => $myip, -user => $whoami, -severity => 'ALERT', + "groups for $u changed from: $groups_orig to: $groups"); + } } - $self->audit(-ip => $myip, -user => $whoami, -severity => 'ALERT', - "$msg groups for $u changed to: $groups"); } } + return 0; } |