aboutsummaryrefslogtreecommitdiffstats
path: root/fripost-searchdomain
diff options
context:
space:
mode:
Diffstat (limited to 'fripost-searchdomain')
-rwxr-xr-xfripost-searchdomain153
1 files changed, 153 insertions, 0 deletions
diff --git a/fripost-searchdomain b/fripost-searchdomain
new file mode 100755
index 0000000..bbd59a3
--- /dev/null
+++ b/fripost-searchdomain
@@ -0,0 +1,153 @@
+#!/usr/bin/perl
+
+use 5.010_000;
+use strict;
+use warnings;
+use utf8;
+
+=head1 NAME
+
+fripost-searchdomain - List matching domains
+
+=head1 SYNOPSIS
+
+B<fripost-searchdomain> [B<--debug>] [I<domain> [I<owner>]]
+
+=head1 DESCRIPTION
+
+B<fripost-seardomain> list virtual domains matching exactly I<domain>,
+and whose owner is I<owner>.
+Wildcards I<*> can appear in I<domain> or I<owner>, to match zero or more
+characters.
+If no I<owner> is given, list all domains I<domain>, regardless of the
+owner; If I<owner> is the empty string I<''>, list only the non
+self-managed domains.
+If neither I<domain> nor I<owner> are given, B<fripost-searchdomain> list
+all existing virtual domains.
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<--server_host=>I<host>
+
+The LDAP URI to connect to.
+The default value is read from the configuration file, see B<CONFIGURATION>.
+
+=item B<--bind_dn=>I<binddn>
+
+The Distinguished Name (DN) to bind to the LDAP directory.
+(If not set, B<fripost-searchdomain> binds anonymously.)
+The default value is read from the configuration file, see B<CONFIGURATION>.
+
+=item B<--bind_pw=>I<password>
+
+The password to to bind with.
+The default value is read from the configuration file, see B<CONFIGURATION>.
+
+=item B<--base_dn=>I<basedn>
+
+The root DN for everything done by B<fripost-searchdomain>.
+The default value is read from the configuration file, see B<CONFIGURATION>.
+
+=item B<--debug>
+
+Debug mode.
+
+=back
+
+=head1 CONFIGURATION
+
+The configuration is read from the file C<$HOME/.fripost.yml>.
+Valid keys include:
+
+=over 4
+
+=item I<server_host>
+
+The LDAP URI to connect to. Defaults to C<ldap://127.0.0.1:389>.
+
+=item I<bind_dn>
+
+The Distinguished Name (DN) to bind to the LDAP directory.
+(If not set, B<fripost-searchdomain> binds anonymously.)
+
+=item I<bind_pw>
+
+The password to to bind with.
+
+=item I<base_dn>
+
+The root DN for everything done by B<fripost-searchdomain>.
+
+=back
+
+=cut
+
+use FindBin qw($Bin);
+use lib "$Bin/lib";
+
+use Env qw /HOME/;
+use File::Spec::Functions;
+
+use Fripost::Schema;
+use Getopt::Long qw /:config noauto_abbrev no_ignore_case
+ gnu_compat bundling permute nogetopt_compat
+ auto_version auto_help/;
+use Pod::Usage;
+use YAML::Syck;
+
+
+## Get command line options
+our $conf = LoadFile( catfile ($HOME, '.fripost.yml') );
+
+GetOptions(
+ 'server_host=s' => \$conf->{server_host},
+ 'base_dn=s' => \$conf->{base_dn},
+ 'bind_dn=s' => \$conf->{bind_dn},
+ 'bind_pw=s' => \$conf->{bind_pw},
+ 'pretend' => \$conf->{pretend},
+ 'debug' => \$conf->{debug},
+ 'man' => sub { pod2usage(-exitstatus => 0,
+ -verbose => 2) }
+) or pod2usage(2);
+
+
+# Connect to the LDAP server
+my $ldap = Fripost::Schema->new( $conf );
+
+my %domain;
+$domain{domain} = $ARGV[0] if defined $ARGV[0];
+$domain{owner} = $ARGV[1] if defined $ARGV[1];
+
+foreach my $domain ($ldap->domain->search( \%domain )->entries) {
+ say "Domain: " . $domain->{domain};
+ print "Owner: ";
+ my $owners = $domain->{owner};
+ if (defined $owners) {
+ say (join ', ', @$owners);
+ }
+ else {
+ say "(none)";
+ }
+ say "IsActive: " . $domain->{isActive};
+ say "--------------------------------"
+}
+
+$ldap->unbind();
+
+
+=head1 AUTHOR
+
+Guilhem Moulin C<< <guilhem at fripost.org> >>
+
+=head1 COPYRIGHT
+
+Copyright 2012 Guilhem Moulin.
+
+=head1 LICENSE
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as perl itself.
+
+=cut