mirror of
https://github.com/webmin/webmin.git
synced 2025-08-16 14:51:18 +00:00
120 lines
2.6 KiB
Perl
Executable File
120 lines
2.6 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
# disable-twofactor - Disable two-factor authentication for a user.
|
|
use strict;
|
|
use warnings;
|
|
|
|
BEGIN { $Pod::Usage::Formatter = 'Pod::Text::Color'; }
|
|
use 5.010; # Version in CentOS 6
|
|
|
|
use Getopt::Long;
|
|
use Pod::Usage;
|
|
use Term::ANSIColor qw(:constants);
|
|
|
|
sub main {
|
|
my %opt;
|
|
GetOptions(
|
|
'help|h' => \$opt{'help'},
|
|
'config|c=s' => \$opt{'config'},
|
|
'user|u=s' => \$opt{'user'}
|
|
);
|
|
pod2usage(0) if ( $opt{'help'} );
|
|
|
|
$opt{'config'} ||= "/etc/webmin";
|
|
|
|
# Boilerplate, boilerplate, boilerplate...
|
|
$ENV{'WEBMIN_CONFIG'} = $opt{'config'};
|
|
$ENV{'WEBMIN_VAR'} ||= "/var/webmin";
|
|
$ENV{'MINISERV_CONFIG'} = $ENV{'WEBMIN_CONFIG'} . "/miniserv.conf";
|
|
|
|
my $root = root($opt{'config'});
|
|
chdir($root);
|
|
$0 = "$root/bin/webmin";
|
|
push(@INC, $root);
|
|
eval 'use WebminCore'; ## no critic
|
|
init_config();
|
|
foreign_require('acl', 'acl-lib.pl');
|
|
our (%config);
|
|
|
|
# Get the user
|
|
my @users = acl::list_users();
|
|
my $user;
|
|
($user) = grep { $_->{'name'} eq $opt{'user'} } @users;
|
|
|
|
# Cancel twofactor authentication
|
|
$user->{'twofactor_provider'} = undef;
|
|
$user->{'twofactor_id'} = undef;
|
|
$user->{'twofactor_apikey'} = undef;
|
|
acl::modify_user($user->{'name'}, $user);
|
|
reload_miniserv();
|
|
webmin_log("onefactor", "user", $user->{'name'});
|
|
|
|
exit 0;
|
|
}
|
|
exit main( \@ARGV ) if !caller(0);
|
|
|
|
sub root {
|
|
my ($config) = @_;
|
|
open(my $CONF, "<", "$config/miniserv.conf") || die RED,
|
|
"Failed to open $config/miniserv.conf", RESET;
|
|
my $root;
|
|
while (<$CONF>) {
|
|
if (/^root=(.*)/) {
|
|
$root = $1;
|
|
}
|
|
}
|
|
close($CONF);
|
|
# Does the Webmin root exist?
|
|
if ( $root ) {
|
|
die "$root is not a directory. Is --config correct?" unless (-d $root);
|
|
} else {
|
|
die "Unable to determine Webmin installation directory from $ENV{'WEBMIN_CONFIG'}";
|
|
}
|
|
|
|
return $root;
|
|
}
|
|
|
|
1;
|
|
|
|
=pod
|
|
|
|
=head1 NAME
|
|
|
|
disable-twofactor
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
Disable two factor authentication for a given user. Useful in cases where the
|
|
second factor (e.g. phone or USB key) has been lost.
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
webmin disable-twofactor --user username
|
|
|
|
=head1 OPTIONS
|
|
|
|
=over
|
|
|
|
=item --help, -h
|
|
|
|
Print this usage summary and exit.
|
|
|
|
=item --config, -c
|
|
|
|
Specify the full path to the Webmin configuration directory. Defaults to
|
|
C</etc/webmin>
|
|
|
|
=item --user, -u
|
|
|
|
Name of the user to disable two-factor authentication for.
|
|
|
|
|
|
|
|
=back
|
|
|
|
=head1 LICENSE AND COPYRIGHT
|
|
|
|
|
|
Copyright 2018 Jamie Cameron <jcameron@webmin.com>
|
|
Joe Cooper <joe@virtualmin.com>
|
|
Ilia Rostovtsev <ilia@virtualmin.com>
|