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