Update of /cvsroot/fink/fink/perlmod/Fink
In directory sc8-pr-cvs1:/tmp/cvs-serv14245

Modified Files:
      Tag: uidgid
        ChangeLog PkgVersion.pm User.pm 
Log Message:
More work to commit, getting there just need to make a default filed 
layout...name:homedir:shell:comment ? maybe comma seperated list?

Index: ChangeLog
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/ChangeLog,v
retrieving revision 1.310.2.1
retrieving revision 1.310.2.2
diff -u -d -r1.310.2.1 -r1.310.2.2
--- ChangeLog   9 Aug 2003 02:09:14 -0000       1.310.2.1
+++ ChangeLog   11 Aug 2003 01:07:07 -0000      1.310.2.2
@@ -1,3 +1,13 @@
+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.
+       * PkgVersion.pm: check if need to add user and/or group during build
+       * User.pm: added a few new subs and completing others.  No longer
+         need a db for this will just use User.pm to check the current
+         stuff and can form a list from that if need be.
+
 2003-08-08  Justin F. Hallett  <[EMAIL PROTECTED]>
 
        * User.pm: adding User.pm for all user/group functions, started

Index: PkgVersion.pm
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/PkgVersion.pm,v
retrieving revision 1.128
retrieving revision 1.128.8.1
diff -u -d -r1.128 -r1.128.8.1
--- PkgVersion.pm       10 Jul 2003 02:54:48 -0000      1.128
+++ PkgVersion.pm       11 Aug 2003 01:07:07 -0000      1.128.8.1
@@ -36,6 +36,7 @@
 use Fink::Status;
 use Fink::VirtPackage;
 use Fink::Bootstrap qw(&get_bsbase);
+use Fink::User qw(&get_perms);
 
 use File::Basename qw(&dirname);
 
@@ -1063,6 +1064,9 @@
                        }
                }
 
+               ### Add check for User/Group
+               ### FIXME
+
                # Determine the name of the TarFilesRename in the case of multi 
tarball packages
                if ($i < 2) {
                        $renamefield = "TarFilesRename";
@@ -1803,6 +1807,23 @@
                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)) {
+               if ($script) {
+                       ### 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.6
retrieving revision 1.1.2.7
diff -u -d -r1.1.2.6 -r1.1.2.7
--- User.pm     9 Aug 2003 22:00:45 -0000       1.1.2.6
+++ User.pm     11 Aug 2003 01:07:07 -0000      1.1.2.7
@@ -38,12 +38,11 @@
        $VERSION         = 1.00;
        @ISA             = qw(Exporter);
        @EXPORT          = qw();
-       @EXPORT_OK       = qw();        # eg: qw($Var1 %Hashit &func3);
+       @EXPORT_OK       = qw(&get_perms);
        %EXPORT_TAGS = ( );             # eg: TAG => [ qw!name1 name2! ],
 }
 our @EXPORT_OK;
 
-our ($usrgrps, @users, @groups, $db_outdated);
 our ($lowUID, $highUID, $lowGID, $highGID);
 
 $lowUID = $config->param("lowUID") || 250;
@@ -51,25 +50,8 @@
 $lowGID = $config->param("lowGID") || 250;
 $highGID = $config->param("highGID") || 299;
 
[EMAIL PROTECTED] = ();
[EMAIL PROTECTED] = ();
-%usrgrps = ();
-$db_outdated = 1;
-
 END { }                                # module clean-up code here (global destructor)
 
-### %usrgrps hash/info layout
-### {user} ->
-###   {$usrname}{$uid}      "user id range 250...299 (next avail or ask)"
-###             {$gid}      "group id (primary group, group must be made first)"
-###             {$homedir}  "user home directory (mkdir if need or /dev/null)"
-###             {$shell}    "user shell (default: /usr/bin/false or /dev/null)"
-###             {$desc}     "user description"
-###             [EMAIL PROTECTED] "array of pkgs that need this user, if 0 remove"
-### {group} ->
-###   {$grpname}{$gid}      "group id range 250...299 (next avail or ask)"
-###             [EMAIL PROTECTED] "array of pkgs that need this group, if 0 remove"
-
 ### Create User
 sub add_user {
        my $self = shift;
@@ -145,7 +127,7 @@
        ### ask for uid or gid via type
        while (not $self->is_id_free($type, $id) {
                $id = $self->get_next_avail($type);
-               if ($type == "group") {
+               if ($type eq "group") {
                        $id = &prompt("Please enter a GID for $name ".
                                      "[$lowGID...$highGID] ", $id);
                } else {
@@ -164,7 +146,7 @@
        my $id = shift;
        my ($name);
 
-       if ($type == "user") {
+       if ($type eq "user") {
                while ($name = User::pwent::getpwuid($id)) {
                        return 1 if not $name;
                }
@@ -177,13 +159,39 @@
        return 0;
 }
 
+### check is a user or group exists before adding a user or group
+sub check_for_name {
+       my $self = shift;
+       my $type = shift;
+       my $name = shift;
+       my $id = 0;
+
+       ### find if a user exists
+       while ($name not $currentname) {
+               $id++;
+               if ($type eq "group") {
+                       $currentname = User::grent::getgrgid($id);
+                       if ($name eq $currentname) {
+                               return 1;
+                       }
+               } else {
+                       $currentname = User::pwent::getpwuid($id);
+                       if ($name eq $currentname) {
+                               return 1;
+                       }
+               }
+       }
+
+       return 0;
+}
+
 ### Get next available id
 sub get_next_avail {
        my $self = shift;
        my $type = shift;
        my ($id, $user, $uid, $group, $gid, $pass);
 
-       if ($type == "user") {
+       if ($type eq "user") {
                while (($user,$pass,$uid) = User::pwent::getpwent) {
                        next if ($uid < $lowUID) || ($uid > $highUID);
                        $id++;
@@ -201,53 +209,45 @@
        return $id;
 }
 
-### Forget users and groups and reload via debs or info of installed pkgs
-sub forget_ids {
-       $self = shift;
-
-       @users = ();
-       @groups = ();
-       %usrgrps = ();
-       db_outdated = 1;
-}
-
-### get list of users and groups, either from cache or files
-sub get_all_ids {
+### Get a list of uid:gid for all files in a pkg, this is per pkg not just
+### parent pkgs, return a postinstscript to set them, include it in the deb
+sub get_perms {
        my $self = shift;
-       my $db = "$basepath/var/db/ids.db";
-       my ($group, $user);
-
-       $self->forget_ids();
+       my $rootdir = shift;
+       my $name = shift;
+       my $type = shift;
+       my $script = "";
 
-       # If we have the Storable perl module, try to use the ids index
-       if (-e $db) {
-               eval {
-                       require Storable; 
+       if ($name == 0) {
+               return $script;
+       }
 
-                       # We assume the DB is up-to-date unless told otherwise
-                       $db_outdated = 0;
-               
-                       %usrgrps = %{Storable::retrieve($db)};
-                       foreach $group (keys %$usrgrps{group}) {
-                               push($group, @groups);
-                       }
-                       foreach $user (keys %$usrgrps{user}) {
-                               push($user, @users);
-                       }
-               }
+       unless ($self->check_for_name($type, $name)) {
+               ### add user
        }
-       
-       # Regenerate the DB if it is outdated
-       if ($db_outdated) {
-               $self->update_id_db();
+
+       if ($self->set_perms($rootdir)) {
        }
 
+       $script = $self->build_user_script();
+
+       return $script;
 }
 
-### read the infofiles and update the database, if needed and we are root
-### need list of installed pkgs, only scan installed pkgs
-sub update_id_db {
+### add check/add user script and then set perms
+sub build_user_script {
        my $self = shift;
+       my $script = "";
+
+       return $script;
+}
+
+### Set everything to root:wheel before packaging to keep all debs the same
+sub set_perms {
+       my $self = shift;
+       my $rootdir = shift;
+
+       return 0;
 }
 
 ### EOF




-------------------------------------------------------
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