Update of /cvsroot/fink/fink/perlmod/Fink In directory sc8-pr-cvs1:/tmp/cvs-serv29278
Modified Files: Tag: uidgid ChangeLog PkgVersion.pm User.pm Log Message: Lots more code, should almost be working Index: ChangeLog =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/ChangeLog,v retrieving revision 1.310.2.2 retrieving revision 1.310.2.3 diff -u -d -r1.310.2.2 -r1.310.2.3 --- ChangeLog 11 Aug 2003 01:07:07 -0000 1.310.2.2 +++ ChangeLog 11 Aug 2003 16:17:57 -0000 1.310.2.3 @@ -1,5 +1,12 @@ 2003-08-09 Justin F. Hallett <[EMAIL PROTECTED]> + * PkgVersion.pm: moved where the scripts are built to top of + script processing. + * User.pm: getting and setting perms should now work, added a few + new subs, almost functional now. + +2003-08-09 Justin F. Hallett <[EMAIL PROTECTED]> + * PkgVersion.pm: added use User.pm and added call to get_perms which returns a postinstscript to set perms at install. And to make sure user exists. Index: PkgVersion.pm =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/PkgVersion.pm,v retrieving revision 1.128.8.2 retrieving revision 1.128.8.3 diff -u -d -r1.128.8.2 -r1.128.8.3 --- PkgVersion.pm 11 Aug 2003 01:24:21 -0000 1.128.8.2 +++ PkgVersion.pm 11 Aug 2003 16:17:57 -0000 1.128.8.3 @@ -36,7 +36,7 @@ use Fink::Status; use Fink::VirtPackage; use Fink::Bootstrap qw(&get_bsbase); -use Fink::User qw(&get_perms); +use Fink::User qw(&get_perms &add_user_script); use File::Basename qw(&dirname); @@ -1636,6 +1636,49 @@ ### create scripts as neccessary foreach $scriptname (qw(preinst postinst prerm postrm)) { + ### Check for Group/User, if exists then process + if ($self->has_param("Group") || $self->has_param("User")) { + my ($name, $type) = (0, 0); + my ($desc, $pass, $shell, $home, $group, $tmp); + + ### Need to process group first since user might depend on it + if ($self->has_param("Group")) { + $tmp = $self->param("Group"); + $tmp = &expand_percent($tmp, $self->{_expand}); + ($name, $desc, $pass) = split(/:/, $tmp); + $type = "group"; + } elsif ($self->has_param("User")) { + $tmp = $self->param("User"); + $tmp = &expand_percent($tmp, $self->{_expand}); + ($name, $group, $desc, $pass, $shell, $home) = + split(/:/, $tmp); + $type = "user"; + } + ### Add user/group check to preinst if needed + if ($scriptname eq "preinst") { + + my $script = Fink::User->add_user_script($name, $type, + $desc, $pass, $shell, $home, $group); + + if ($script) { + $script .= "\n"; + $scriptbody = $script; + } + } + + ### Add chown script to postinst script if needed + if ($scriptname eq "postinst") { + my $script = Fink::User->get_perms($ddir, $name, $type, + $desc, $pass, $shell, $home, $group); + + if ($script) { + ### Add $script to top of postinstscript + $script .= "\n"; + $scriptbody = $script; + } + } + } + # get script piece from package description if ($self->has_param($scriptname."Script")) { $scriptbody = $self->param($scriptname."Script"); @@ -1807,21 +1850,6 @@ if (&execute("mkdir -p ".$self->get_debpath())) { die "can't create directory for packages\n"; } - } - - my $name = 0; - my $type = 0; - - if ($self->has_param("User")) { - $name = $self->param("User"); - $type = "user"; - } elsif ($self->has_param("Group"); - $name = $self->param("Group"); - $type = "group"; - } - - if (my $script = Fink::User->get_perms($ddir, $name, $type)) { - ### Add $script to top of postinstscript } $cmd = "dpkg-deb -b $ddir ".$self->get_debpath(); if (&execute($cmd)) { Index: User.pm =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/Attic/User.pm,v retrieving revision 1.1.2.8 retrieving revision 1.1.2.9 diff -u -d -r1.1.2.8 -r1.1.2.9 --- User.pm 11 Aug 2003 01:24:21 -0000 1.1.2.8 +++ User.pm 11 Aug 2003 16:17:57 -0000 1.1.2.9 @@ -38,7 +38,7 @@ $VERSION = 1.00; @ISA = qw(Exporter); @EXPORT = qw(); - @EXPORT_OK = qw(&get_perms); + @EXPORT_OK = qw(&get_perms &add_user_script); %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], } our @EXPORT_OK; @@ -56,14 +56,15 @@ sub add_user { my $self = shift; my $user = shift; + my $desc = shift; + my $pass = shift; + my $shell = shift; + my $home = shift; + my $group = shift; - my $comment = $usrgrps{usrname}->{$user}->{desc}; - my $homedir = $usrgrps{usrname}->{$user}->{homedir}; - my $group = $usrgrps{usrname}->{$user}->{group}; - my $shell = $usrgrps{usrname}->{$user}->{shell}; - my $uid = $usrgrps{usrname}->{$user}->{uid}; + my $uid = $self->get_id("user", $user); - my $cmd = "$basepath/sbin/useradd -c $comment -d $homedir -e 0"; + my $cmd = "$basepath/sbin/useradd -c $desc -d $home -e 0"; $cmd .= "-f 0 -g $group -s $shell -u $uid $user"; if (&execute($cmd)) { @@ -91,8 +92,10 @@ sub add_group { my $self = shift; my $group = shift; + my $desc = shift; + my $pass = shift; - my $gid = $usrgrps{grpname}->{$group}->{gid}; + my $gid = $self->get_id("group", $group); my $cmd = "$basepath/sbin/groupadd -g $gid $group"; @@ -216,29 +219,124 @@ my $rootdir = shift; my $name = shift; my $type = shift; + my $desc = shift; + my $pass = shift || ""; + my $shell = shift || "/usr/bin/false"; + my $home = shift || "/tmp"; + my $group = shift || $name; my $script = ""; - if ($name == 0) { - return 0; + unless ($name) { + return $script; } + unless ($pass) { + $pass = $self->mkpasswd(); + } + unless ($self->check_for_name($type, $name)) { - ### add user + ### add user/group + if ($type eq "user") { + $self->add_user($name, $desc, $pass, $shell, $home, $group); + } else { + $self->add_group($name, $desc, $pass); + } } + + my (@filelist, @files, @users, @groups); + my ($wanted, $file, $usr, $grp); + my ($dev, $ino, $mode, $nlink, $uid, $gid); + + $wanted = + sub { + if (-x) { + push @filelist, $File::Find::fullname; + } + }; + find({ wanted => $wanted, follow => 1, no_chdir => 1 }, $rootdir); + + foreach $file (@filelist) { + ### Remove $basepath/src/root-... + $file =~ s/^$basepath\/src\/root-.+$basepath/$basepath/g; + ### Don't add DEBIAN dir + next if ($file =~ /DEBIAN/); + + ($dev, $ino, $mode, $nlink, $uid, $gid) = lstat($file); + + $usr = User::pwent::getpwuid($uid); + $grp = User::grent::getgrgid($gid); + + push(@files, $file); + push(@users, $usr); + push(@groups, $grp); + } - if ($self->set_perms($rootdir)) { - } + $file = join(":", @files); + $usr = join (":", @users); + $grp = join (":", @groups); - $script = $self->build_user_script(); + $self->set_perms($rootdir, $file); + + $script = $self->build_chown_script($file, $usr, $grp); return $script; } ### add check/add user script and then set perms -sub build_user_script { +sub add_user_script { + my $self = shift; + my $name = shift; + my $type = shift; + my $desc = shift; + my $pass = shift || ""; + my $shell = shift || "/usr/bin/false"; + my $home = shift || "/tmp"; + my $group = shift || $name; + + my $script = ""; + + unless ($name) { + return $script; + } + + unless ($pass) { + $pass = $self->mkpasswd(); + } + + ### FIXME + + return $script; +} + +### Return a passwd +sub mkpasswd { + $self = shift; + $pass = ""; + + ### FIXME + + return $pass; +} + +### build script to set user/groups +sub build_chown_script { my $self = shift; + my $files = shift; + my $users = shift; + my $groups = shift; my $script = ""; + my $i = 0; + + ### Build perms script + my @files = split(/:/, $files); + my @users = split(/:/, $users); + my @groups = split(/:/, $groups); + foreach $file (@files) { + $script .= "chown @users[$i]:@groups[$i] $file\n"; + $i++; + } + return $script; } @@ -246,6 +344,15 @@ sub set_perms { my $self = shift; my $rootdir = shift; + my $files = shift; + + my @files = split(/:/, $files); + + foreach $file (@files); + if (&execute("chown root:wheel $file")) { + die "Couldn't change ownershil of $file!\n"; + } + } return 0; } ------------------------------------------------------- This SF.Net email sponsored by: Free pre-built ASP.NET sites including Data Reports, E-commerce, Portals, and Forums are available now. Download today and enter to win an XBOX or Visual Studio .NET. http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01 _______________________________________________ Fink-commits mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/fink-commits