Adding initial script.

This commit is contained in:
sergiotarxz 2022-04-20 02:02:57 +02:00
parent 24db3ede8b
commit 656429a7a7
2 changed files with 88 additions and 0 deletions

19
Build.PL Normal file
View File

@ -0,0 +1,19 @@
use Module::Build;
my $home = $ENV{HOME};
my $build = Module::Build->new(
module_name => 'QuotaUsers',
license => 'GPLv3',
dist_author => 'Sergio Iglesias <sergiotarxz@posteo.net>',
dist_abstract => 'Creates users limited in quota.',
requires => {
'Getopt::Long::Descriptive' => '0',
'Const::Fast' => '0',
'Text::CSV' => 0,
'Crypt::URandom' => 0,
},
install_path => {
}
);
$build->create_build_script;

69
bin/quotausers Normal file
View File

@ -0,0 +1,69 @@
#!/usr/bin/env perl
use v5.30.0;
use strict;
use warnings;
use Getopt::Long::Descriptive;
use Const::Fast;
use Text::CSV qw/csv/;
use Crypt::URandom;
const my @CHARACTERS => ( 'a' .. 'z', 'A' .. 'Z' );
my ( $opt, $usage ) = describe_options(
'quotausers %o',
[ 'csv|c=s', 'The csv with the emails and usernames', { required => 1 } ],
[ 'size|c=s', 'Assigned size for all users.', { required => 1 } ],
[ 'help|h=s', 'Show help', { shortcircuit => 1 } ],
);
print( $usage->text ), exit if $opt->help;
my $size = $opt->size;
my $users = csv( in => $opt->csv, headers => 'auto' );
for my $user (@$users) {
my $username = $user->{username};
my $email = $user->{email};
my $passwd = get_passwd();
my $errorno = system qw/sudo useradd -m/, $username, qw{-s /bin/bash};
my $full_size = 1024**2 * $size;
my $size_softlimit = 1024**2 * ( $size - 1 );
if ($errorno) {
die 'Cannot create user. Are you admin?';
}
execute_chpasswd( $username, $passwd );
system qw/sudo setquota -u/, $username, $size_softlimit, $full_size, 0, 0,
'/';
system qw/sudo gpasswd -a/, $username, 'video';
system qw/sudo gpasswd -a/, $username, 'plugdev';
system qw/sudo gpasswd -a/, $username, 'storage';
system qw/sudo gpasswd -a/, $username, 'audio';
system qw/sudo -u/, $username,
qw{flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo};
say "$username <$email> -- $passwd";
}
sub execute_chpasswd {
my $username = shift;
my $passwd = shift;
open my $fh, '|-', qw/sudo chpasswd/ or die "Unable to change passwd.";
say $fh "$username:$passwd";
close $fh;
}
sub get_passwd {
my $passwd = '';
for ( 0 .. 11 ) {
$passwd .=
$CHARACTERS[ get_safe_random_64_bits_number() % scalar @CHARACTERS ];
}
return $passwd;
}
sub get_safe_random_64_bits_number {
return unpack 'Q', Crypt::URandom::urandom(8);
}