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

Reply via email to