diff options
Diffstat (limited to 'src/extras/rh-upload')
-rwxr-xr-x | src/extras/rh-upload | 283 |
1 files changed, 0 insertions, 283 deletions
diff --git a/src/extras/rh-upload b/src/extras/rh-upload deleted file mode 100755 index 75a86f43..00000000 --- a/src/extras/rh-upload +++ /dev/null @@ -1,283 +0,0 @@ -#!/bin/bash - -################################################################################# -# # -# rh-upload # -# Version - 0.3 # -# Copyright (c) 2007 Red Hat, Inc. All rights reserved. # -# # -# # -# Written by David Mair # -# Cleanup and generalized for any kind of file by Olivier Arsac # -# Idea stolen from Chris Snook :-) # -# # -# Purpose - To help in the automatic upload of files. # -# Specifically, this script will compress, encrypt, md5sum, # -# and upload the file automatically when invoked. # -# Items are optional and specified by command line switch. # -# ############################################################################### - - -## Global directives -umask 0077 - -## Declare some variables -Date=`/bin/date -u +%G%m%d%k%M%S | /usr/bin/tr -d ' '` -Destination="dropbox.redhat.com" - -function usage { -cat <<EOF -rh-upload [-cehnNq] [-s size of hunks in MB] -f filename - rh-upload automates the upload of files to the Red Hat ftp. - The script helps the user to compress, checksum, encrypt and upload a file. - -c|--checksum : perform an md5 checksum on the file - -e|--encrypt : encrypt the file - -f|--file : file to act on (required) - -h|--help : show this usage help - -z|--compress : compress the file - -n|--noupload : Do NOT upload - -q|--quiet : Do everything I ask and do it quietly - -s|--split : split file into small hunks - -EOF -} - - -# echo to stderr -function echoe(){ - echo -e "$@" 1>&2 -} - -# echo unless in verbosity is too low -function echov(){ - local level="$1" - shift - if [[ $Verbose -ge "$level" ]]; then echo -e "$@"; fi -} - -# Parse command line options (and perform some checks) -function parse(){ - if [ $# == 0 ]; then - usage - exit 0 - fi - - TEMP=`getopt -o heuczqs:f:n --long help,encrypt,quiet,noupload,checksum,compress,split:,file: -n 'rh-upload' -- "$@"` - - if [ $? != 0 ]; then - echo "Options error -- Terminating..." >&2 - usage - exit 1 - fi - - eval set -- "$TEMP" - Upload=1 - Split=0 - Verbose=1 - Compress=0 - Encrypt=0 - Force=0 - while true; do - case "$1" in - -h|--help) usage; exit 0;; - -e|--encrypt) Encrypt=1; shift;; - -N|--noupload) Upload=0; shift;; - -c|--checksum) Checksum=1; shift;; - -q|--quiet) Verbose=0; shift;; - -z|--compress) Compress=1; shift;; - -s|--split) - case $2 in - "") echoe "You must specify a hunk size."; exit 1 ;; - *) Split=$2; shift 2;; - esac ;; - -F|--force) Force=1; shift;; - -f|--file) - case "$2" in - "") echoe "You must specify a file name."; exit 1 ;; - *) File=$2; shift 2;; - esac ;; - --) shift; break ;; - *) echoe "Wrong options or flag specified"; usage; exit 1;; - esac - done - - # Ensure the -f||--file flag was passed or die - if [ -z "$File" ]; then - echoe "The -f or --file flag is required! Terminating." - usage - exit 1 - fi - - # Validate the file exists or die - if [ ! -f "$File" ]; then - echoe "Invalid filename or file not found. Terminating." - exit 1 - fi - File_dirname=${File%/*} - File_basename=${File##*/} - File_ext=${File_basename##*.} - Src_file="$File" - Dst_file="$File_basename" -} - -function ticket(){ - echov 1 - echov 1 "We'll need to use your issue-tracker ticket number for a couple of things." - echo -n "Please enter ticket number: " - read Ticket_number - Dst_file="${Ticket_number}-${Date}-${File_basename}" -} - -# Compress the file -function compress(){ - if [ "$Compress" != 0 ]; then - echov 1 "Starting file compression. This may take some time." - # Begin compression of file - if [ ! -x /usr/bin/gzip ]; then - echoe "Cannot find gzip in /usr/bin/. Terminating." - exit 1 - else - /usr/bin/gzip --fast "$Src_file" - fi - Src_file="${Src_file}.gz" - Dst_file="${Dst_file}.gz" - fi -} - -# Encrypt the file -function encrypt(){ - if [ "$Encrypt" != 0 ]; then - echov 1 "Encrypting file. This should only take a few minutes." - if [ ! -x /usr/bin/openssl ]; then - echoe "Cannot find openssl in /usr/bin. Terminating." - exit 1 - fi - # Use the ticket number as the ssl keyfile name - Key_file="${Ticket_number}-${Date}.key" - /usr/bin/openssl rand -out "$Key_file" -base64 48 - echov 1 "You have chosen to encrypt your file. Your passkey file is: $Key_file" - echov 1 "Please attach this key to your ticket." - /usr/bin/openssl aes-128-cbc -in $Src_file -out $Src_file.aes -pass file:"$Key_file" - Src_file="$Src_file.aes" - Dst_file="$Dst_file.aes" - fi -} - -function checksum(){ - if [ "$Checksum" != 0 ]; then - echov 1 "Cheksuming $Src_file... (This should only take a few minutes)" - if [ ! -x /usr/bin/md5sum ]; then - echoe "Cannot find md5sum in /usr/bin. Terminating." - exit 1 - fi - MD5_file="${Ticket_number}-${Date}-checksum.out" - MD5_result=`/usr/bin/md5sum "$Src_file" | awk '{print $1}'` - echo "$MD5_result" > "$MD5_file" - echov 1 "The MD5 checksum is $MD5_result (in $MD5_file)." - fi -} - -function split(){ - if [ "$Split" -eq 0 ]; then - return - fi - local hunk_size="$Split" - if [[ "$hunk_size" -gt 0 ]] && [[ "$hunk_size" -lt 1001 ]]; then - if [ ! -x /usr/bin/split ]; then - echoe "Cannot find split in /usr/bin. Terminating." - exit 1 - fi - Split_dir="${Ticket_number}-${Date}" - # We need to make a directory to keep things sane - echov 1 "Creating directory $Split_dir to house file hunks..." - /bin/mkdir "$Split_dir" - echov 1 "Splitting $Src_file..." - /usr/bin/split -b "$hunk_size"m -d "$Src_file" "${Split_dir}/${Dst_file}" - else - echoe "Invalid hunk size argument. Please enter a number greater than 0 and less than 1001. Terminating." - exit 1 - fi -} - -function upload(){ - if [ "$Upload" -eq 0 ]; then - echov 1 "All file operations are complete. The file(s) is ready to upload at your convenience." - return - fi - echov 1 "The file(s) will now be uploaded." - echo -n "Please enter the destination host (default is $Destination): " - local destination_input - read destination_input - if [ "$destination_input" != "" ]; then - Destination=$destination_input - fi - echov 1 - echov 1 "Uploading to $Destination... (This could take quite a while)." - if [ ! -x /usr/bin/lftp ]; then - # No lftp installed - echov 1 "lftp could not be found in /usr/bin. The file(s) will need to be uploaded manually." - Ftp_res=255 - else - # Make the lftp script first - local script="/tmp/rh-upload-lftp.$$" - echo "lftp $Destination <<EOF" > $script - echo "cd incoming" >> $script - if [ "$Split" != 0 ]; then - echo "lcd $Split_dir" >> $script - echo "mirror -R" >> $script - else - echo "put $Src_file -o $Dst_file" >> $script - fi - echo "exit" >> $script - echo "EOF" >> $script - /usr/bin/lftp -f $script - Ftp_res=$? - fi -} - -function closure(){ - if [ "$Encrypt" != 0 ]; then - echov 1 "## File was encrypted with key $Key_file." - echov 1 "Please upload this key file to Issue Tracker or send it to your support representative for decryption after upload." - fi - - if [ "$Checksum" != 0 ]; then - echov 1 "## A checksum was performed on your file." - echov 1 "The MD5 checksum is $MD5_result (in $MD5_file)." - echov 1 "Please include this when updating your ticket so your support representative can verify the copy uploaded." - fi - - if [ "$Split" != 0 ]; then - echov 1 "## Your file was split and the hunks are in: $Split_dir/ " - fi - - if [ -n "$Ftp_res" ] && [ "$Ftp_res" -eq 0 ]; then - echov 1 "This script has completed successfully the upload." - if [ "$Compress" != 0 ] || [ "$Split" != 0 ]; then - echov 1 "You performed file encryption and/or file splitting." - echov 1 "You may consider removing those temporary files." - fi - else - echoe "Sorry unable to upload the files to $Destination. You may want to retry or do it manually." - fi - - if [ "$Compress" != 0 ]; then - echov 1 "It is NOT recommended to remove the gzipped copy of the file." - echov 1 "This is the only remaining copy of the file on your system." - echov 1 "It is recommended to retain the file until your support representative indicates that the problem has been identified and/or resolved." - fi -} - -function main(){ - # Run through the functions - parse $@ - ticket - compress - encrypt - checksum - split - upload - closure -} - -main $@ |