On 07/16/2012 09:30 AM, Jakub Filak wrote:
> * DeleteUploaded config option was added to abrt.conf
> * the default value of this new option is 'no'
> 
> * the option was introduced because /var/spool/abrt-upload is not
>   writable by default
> * for more details see rhbz#836988
> 
> Signed-off-by: Jakub Filak <[email protected]>
> ---
>  doc/abrt.conf.txt             |    6 ++++++
>  src/daemon/abrt-handle-upload |   29 +++++++++++++++++++++--------
>  src/daemon/abrt.conf          |    5 +++++
>  src/daemon/abrtd.c            |   10 ++++++++--
>  src/include/libabrt.h         |    3 +++
>  src/lib/abrt_conf.c           |    8 ++++++++
>  6 files changed, 51 insertions(+), 10 deletions(-)
> 
> diff --git a/doc/abrt.conf.txt b/doc/abrt.conf.txt
> index db7f471..6626596 100644
> --- a/doc/abrt.conf.txt
> +++ b/doc/abrt.conf.txt
> @@ -30,6 +30,12 @@ WatchCrashdumpArchiveDir = 'directory'::
>     via ftp, scp, etc. The directory must exist and be writable for 'abrt'.
>     There is no default.
>  
> +DeleteUploaded = 'yes/no'::
> +   The daemon will delete an uploaded crashdump archive after an atempt to
> +   unpack it. An archive will be delete whether unpacking finishes 
> successfully
> +   or not.
> +   The default value is 'no'.
> +
>  SEE ALSO
>  --------
>  abrtd(8)
> diff --git a/src/daemon/abrt-handle-upload b/src/daemon/abrt-handle-upload
> index a6ab3ae..85123d2 100755
> --- a/src/daemon/abrt-handle-upload
> +++ b/src/daemon/abrt-handle-upload
> @@ -3,7 +3,12 @@
>  # The task of this script is to unpack the file and move
>  # problem data found in it to abrtd spool directory.
>  #
> -# Usage: abrt-handle-upload ABRT_SPOOL_DIR UPLOAD_DIR FILENAME
> +# Usage: abrt-handle-upload [-d] ABRT_SPOOL_DIR UPLOAD_DIR FILENAME
> +#
> +#   -d             - deletes an uploaded archive
> +#   ABRT_SPOOL_DIR - a directory where valid uploaded archives are unpacked 
> to
> +#   UPLOAD_DIR     - a directory where uploaded archives are stored in
> +#   FILENAME       - an uploaded archive file name
>  
>  #echo "Started: $0 $*"
>  
> @@ -18,13 +23,15 @@ print_clean_and_die()
>  die_exitcode=1
>  delete_on_exit=""
>  
> +delete_archive=false
> +if test x"$1" == x"-d"; then delete_archive=true; shift; fi
> +
>  abrt_dir="$1"
>  upload_dir="$2"
>  archive="$3"
>  
>  test -d "$abrt_dir" || print_clean_and_die "Not a directory: '$abrt_dir'"
>  test -d "$upload_dir" || print_clean_and_die "Not a directory: '$upload_dir'"
> -test x"${archive%.working}" != x"$archive" && print_clean_and_die "Skipping: 
> '$archive'"
>  test x"${archive#/}" != x"$archive" && print_clean_and_die "Skipping: 
> '$archive' (starts with slash)"
>  test x"${archive#.}" != x"$archive" && print_clean_and_die "Skipping: 
> '$archive' (starts with dot)"
>  test x"${archive#*..}" != x"$archive" && print_clean_and_die "Skipping: 
> '$archive' (contains ..)"
> @@ -41,17 +48,23 @@ test x"${archive%.tar.xz}" != x"$archive" && 
> unpacker="unxz"
>  
>  test "$unpacker" || print_clean_and_die "Unknown file type: '$archive'"
>  
> -tempdir="remote.`date +%Y-%m-%d-%H:%M:%S.%N`.$$"
> +workingdir=`mktemp -d "abrt_handle_upload.XXXXXXXXXX" --tmpdir=/tmp` || 
> print_clean_and_die "Can't create working directory"
> +delete_on_exit="$workingdir"
> +
> +tempdir="$workingdir/remote.`date +%Y-%m-%d-%H:%M:%S.%N`.$$"
> +working_archive="$workingdir/$archive"
>  
> -mv -- "$archive" "$archive.working" || print_clean_and_die "Can't lock 
> '$archive'"
> +if $delete_archive; then
> +    mv -- "$archive" "$working_archive" || print_clean_and_die "Can't move 
> '$archive' to '$working_archive'"
> +else
> +    cp -- "$archive" "$working_archive" || print_clean_and_die "Can't copy 
> '$archive' to '$working_archive'"
> +fi
>  
> -delete_on_exit="$archive.working"
> -$unpacker -t -- "$archive.working" || print_clean_and_die "Verification 
> error on '$archive'"
> +$unpacker -t -- "$working_archive" || print_clean_and_die "Verification 
> error on '$archive'"
>  
>  echo "Unpacking '$archive'"
>  mkdir "$tempdir" || print_clean_and_die "Can't create '$tempdir' directory"
> -delete_on_exit="$archive.working $tempdir"
> -$unpacker <"$archive.working" | tar xf - -C "$tempdir" || 
> print_clean_and_die "Can't unpack '$archive'"
> +$unpacker <"$working_archive" | tar xf - -C "$tempdir" || 
> print_clean_and_die "Can't unpack '$archive'"
>  
>  # The archive can contain either plain dump files
>  # or one or more complete problem data directories.
> diff --git a/src/daemon/abrt.conf b/src/daemon/abrt.conf
> index 9a35f0c..c7ad417 100644
> --- a/src/daemon/abrt.conf
> +++ b/src/daemon/abrt.conf
> @@ -15,3 +15,8 @@ MaxCrashReportsSize = 1000
>  # Changing dump location could cause problems with SELinux. See man 
> abrt_selinux(8).
>  #
>  #DumpLocation = /var/spool/abrt
> +
> +# If you want to automatically clean the upload directory you have to tweak 
> the
> +# selinux policy.
> +#
> +DeleteUploaded = no
> diff --git a/src/daemon/abrtd.c b/src/daemon/abrtd.c
> index d4efec4..1112591 100644
> --- a/src/daemon/abrtd.c
> +++ b/src/daemon/abrtd.c
> @@ -501,8 +501,14 @@ static gboolean handle_inotify_cb(GIOChannel *gio, 
> GIOCondition condition, gpoin
>                  if (pid == 0)
>                  {
>                      xchdir(dir);
> -                    execlp("abrt-handle-upload", "abrt-handle-upload",
> -                           g_settings_dump_location, dir, name, (char*)NULL);
> +
> +                    if (g_settings_delete_uploaded)
> +                        execlp("abrt-handle-upload", "abrt-handle-upload", 
> "-d",
> +                               g_settings_dump_location, dir, name, 
> (char*)NULL);
> +                    else
> +                        execlp("abrt-handle-upload", "abrt-handle-upload",
> +                               g_settings_dump_location, dir, name, 
> (char*)NULL);
> +
>                      error_msg_and_die("Can't execute '%s'", 
> "abrt-handle-upload");
>                  }
>                  if (pid > 0)
> diff --git a/src/include/libabrt.h b/src/include/libabrt.h
> index fff80ef..48d2ac3 100644
> --- a/src/include/libabrt.h
> +++ b/src/include/libabrt.h
> @@ -56,6 +56,9 @@ extern unsigned int  g_settings_nMaxCrashReportsSize;
>  extern char *        g_settings_sWatchCrashdumpArchiveDir;
>  #define g_settings_dump_location abrt_g_settings_dump_location
>  extern char *        g_settings_dump_location;
> +#define g_settings_delete_uploaded abrt_g_settings_delete_uploaded
> +extern bool          g_settings_delete_uploaded;
> +
>  
>  #define load_abrt_conf abrt_load_abrt_conf
>  int load_abrt_conf();
> diff --git a/src/lib/abrt_conf.c b/src/lib/abrt_conf.c
> index fc8a04f..0b53c21 100644
> --- a/src/lib/abrt_conf.c
> +++ b/src/lib/abrt_conf.c
> @@ -21,6 +21,7 @@
>  char *        g_settings_sWatchCrashdumpArchiveDir = NULL;
>  unsigned int  g_settings_nMaxCrashReportsSize = 1000;
>  char *        g_settings_dump_location = NULL;
> +bool          g_settings_delete_uploaded = 0;
>  
>  void free_abrt_conf_data()
>  {
> @@ -64,6 +65,13 @@ static void ParseCommon(map_string_h *settings, const char 
> *conf_filename)
>      else
>          g_settings_dump_location = xstrdup("/var/spool/abrt");
>  
> +    value = g_hash_table_lookup(settings, "DeleteUploaded");
> +    if (value)
> +    {
> +        g_settings_delete_uploaded = string_to_bool(value);
> +        g_hash_table_remove(settings, "DeleteUploaded");
> +    }
> +
>      GHashTableIter iter;
>      char *name;
>      /*char *value; - already declared */


Looks good to me! :)

-- 
vda

Reply via email to