diff --git a/account/dumpproject.in b/account/dumpproject.in new file mode 100644 index 0000000000000000000000000000000000000000..a24b5f1f8ea84081d811ddcd5bf984515f932add --- /dev/null +++ b/account/dumpproject.in @@ -0,0 +1,150 @@ +#!/usr/bin/perl -w +# +# EMULAB-COPYRIGHT +# Copyright (c) 2010-2011 University of Utah and the Flux Group. +# All rights reserved. +# +use English; +use strict; +use Getopt::Std; +use CGI; +use Data::Dumper; + +# +# Dump a project in XML format suitable for reading into newproj script. +# +sub usage() +{ + print("Usage: dumpproject [-d] <pid>\n"); + exit(-1); +} +my $optlist = "d"; +my $debug = 0; + +# +# Configure variables +# +my $TB = "@prefix@"; +my $TBOPS = "@TBOPSEMAIL@"; + +# +# Untaint the path +# +$ENV{'PATH'} = "$TB/bin:$TB/sbin:/bin:/usr/bin:/usr/bin:/usr/sbin"; +delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'}; + +# +# Turn off line buffering on output +# +$| = 1; + +# +# Load the Testbed support stuff. +# +use lib "@prefix@/lib"; +use libdb; +use libtestbed; +use User; +use Project; + +# Protos +sub fatal($); +sub DumpProject($); + +# +# Parse command arguments. Once we return from getopts, all that should be +# left are the required arguments. +# +my %options = (); +if (! getopts($optlist, \%options)) { + usage(); +} +if (defined($options{"d"})) { + $debug = 1; +} +if (@ARGV != 1) { + usage(); +} +my $pid = $ARGV[0]; + +# Map invoking user to object. +my $this_user = User->ThisUser(); +if (! defined($this_user)) { + fatal("You ($UID) do not exist!"); +} + +# +# Figure out who called us. Must have admin status to do this. +# +if (!$this_user->IsAdmin()) { + fatal("You must be a TB administrator to run this script!"); +} + +# Map target user to object. +my $project = Project->Lookup($pid); +if (! defined($project)) { + fatal("$pid does not exist!"); +} +DumpProject($project); +exit(0); + +# +# Dump the project in XML. +# +sub DumpProject($) +{ + my ($project) = @_; + + # Array of string values to print. + my %xmlnames = ( + "pid" => {"tag" => "name", + "optional" => 0 }, + "head_uid" => {"tag" => "leader", + "optional" => 0 }, + "description" => {"tag" => "short description", + "optional" => 0 }, + "URL" => {"tag" => "URL", + "optional" => 0 }, + "funders" => {"tag" => "funders", + "optional" => 0 }, + "why" => {"tag" => "long description", + "optional" => 0 }, + "public" => {"tag" => "public", + "optional" => 0 }, + "num_pcs" => {"tag" => "num_pcs", + "optional" => 0 }, + "linked_to_us" => {"tag" => "linkedtous", + "optional" => 0 }, + ); + + print "<project>\n"; + foreach my $key (keys(%xmlnames)) { + my $ref = $xmlnames{$key}; + my $tag = $ref->{'tag'}; + my $optional = $ref->{'optional'}; + my $val = $project->$key(); + + next + if (!defined($val) && $optional); + + $val = "None" + if (!defined($val) && + ($key eq "funders" || $key eq "why")); + + print " <attribute name=\"$tag\">"; + print "<value>" . CGI::escapeHTML($val) . "</value>"; + print "</attribute>\n"; + } + print "</project>\n"; + +} + +sub fatal($) +{ + my ($mesg) = @_; + + print STDERR "*** $0:\n". + " $mesg\n"; + exit(-1); +} + diff --git a/account/dumpuser.in b/account/dumpuser.in new file mode 100644 index 0000000000000000000000000000000000000000..d6da0e6a16d674a95566a4fec76edc6b1e65e3f6 --- /dev/null +++ b/account/dumpuser.in @@ -0,0 +1,178 @@ +#!/usr/bin/perl -w +# +# EMULAB-COPYRIGHT +# Copyright (c) 2010-2011 University of Utah and the Flux Group. +# All rights reserved. +# +use English; +use strict; +use Getopt::Std; +use CGI; +use Data::Dumper; + +# +# Dump a user in XML format suitable for reading into newuser script. +# +sub usage() +{ + print("Usage: dumpuser [-d] [-p] <uid>\n"); + exit(-1); +} +my $optlist = "dp"; +my $debug = 0; +my $nopswd = 0; + +# +# Configure variables +# +my $TB = "@prefix@"; +my $TBOPS = "@TBOPSEMAIL@"; +my $PGENISUPPORT= @PROTOGENI_SUPPORT@; +my $OURDOMAIN = "@OURDOMAIN@"; + +# +# Untaint the path +# +$ENV{'PATH'} = "$TB/bin:$TB/sbin:/bin:/usr/bin:/usr/bin:/usr/sbin"; +delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'}; + +# +# Turn off line buffering on output +# +$| = 1; + +# +# Load the Testbed support stuff. +# +use lib "@prefix@/lib"; +use libdb; +use libtestbed; +use User; +use Project; +if ($PGENISUPPORT) { + require GeniHRN; +} + +# Protos +sub fatal($); +sub DumpUser($); + +# +# Parse command arguments. Once we return from getopts, all that should be +# left are the required arguments. +# +my %options = (); +if (! getopts($optlist, \%options)) { + usage(); +} +if (defined($options{"d"})) { + $debug = 1; +} +if (defined($options{"p"})) { + $nopswd = 1; +} +if (@ARGV != 1) { + usage(); +} +my $user = $ARGV[0]; + +# Map invoking user to object. +my $this_user = User->ThisUser(); +if (! defined($this_user)) { + fatal("You ($UID) do not exist!"); +} + +# Map target user to object. +my $target_user = User->Lookup($user); +if (! defined($target_user)) { + fatal("$user does not exist!"); +} +DumpUser($target_user); +exit(0); + +# +# Dump the user in XML. +# +sub DumpUser($) +{ + my ($user) = @_; + my @keys = (); + + # Array of string values to print. + my %xmlnames = ( + "name" => {"tag" => "name", + "optional" => 0 }, + "email" => {"tag" => "email", + "optional" => 0 }, + "pswd" => {"tag" => "password", + "optional" => 0 }, + "uid" => {"tag" => "uid", + "optional" => 0 }, + "URL" => {"tag" => "URL", + "optional" => 1 }, + "addr" => {"tag" => "address", + "optional" => 0 }, + "addr2" => {"tag" => "address2", + "optional" => 1 }, + "city" => {"tag" => "city", + "optional" => 0 }, + "state" => {"tag" => "state", + "optional" => 0 }, + "zip" => {"tag" => "zip", + "optional" => 0 }, + "country" => {"tag" => "country", + "optional" => 0 }, + "phone" => {"tag" => "phone", + "optional" => 0 }, + "title" => {"tag" => "title", + "optional" => 0 }, + "affil" => {"tag" => "affiliation", + "optional" => 0 }, + "shell" => {"tag" => "shell", + "optional" => 1 }, + "wikiname" => {"tag" => "wikiname", + "optional" => 1 }, + "affil_abbrev" => {"tag" => "affiliation_abbreviation", + "optional" => 0 }, + ); + + $user->GetSSHKeys(\@keys) == 0 + or fatal("Could not net ssh keys"); + + print "<userinfo>\n"; + foreach my $key (keys(%xmlnames)) { + my $ref = $xmlnames{$key}; + my $tag = $ref->{'tag'}; + my $optional = $ref->{'optional'}; + my $val = $user->$key(); + + next + if ($optional && (!defined($val) || $val eq "")); + + $val = "None" + if (!defined($val) && $key eq "affil_abbrev"); + next + if ($nopswd && $key eq "pswd"); + + print " <attribute name=\"$tag\">"; + print "<value>" . CGI::escapeHTML($val) . "</value>"; + print "</attribute>\n"; + } + # Pubkeys are special. + if (@keys) { + foreach my $key (@keys) { + print "<pubkeys>$key</pubkeys>\n"; + } + } + print "</userinfo>\n"; +} + +sub fatal($) +{ + my ($mesg) = @_; + + print STDERR "*** $0:\n". + " $mesg\n"; + exit(-1); +} +