+  if($data->{'cgi'}->param('confirmed'))
+  {
+   rmtree($physical);
+   return devedit_reload({command => 'show', file => upper_path($virtual)});
+  }
+  else
+  {
+   my $tpl = new Template;
+   $tpl->read_file($config->{'templates'}->{'confirm_rmdir'});
+
+   $tpl->fillin("DIR",$virtual);
+   $tpl->fillin("UPPER_DIR",upper_path($virtual));
+   $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual));
+   $tpl->fillin("SCRIPT",$script);
+
+   my $output = header(-type => "text/html");
+   $output   .= $tpl->get_template;
+
+   return \$output;
+  }
+ }
+ else
+ {
+  # Remove a file
+
+  return error($config->{'errors'}->{'in_use'},upper_path($virtual),{FILE => $virtual}) if($data->{'uselist'}->in_use($virtual));
+
+  if($data->{'cgi'}->param('confirmed'))
+  {
+   unlink($physical) or return error($config->{'errors'}->{'delete_failed'},upper_path($virtual),{FILE => $virtual});
+   return devedit_reload({command => 'show', file => upper_path($virtual)});
+  }
+  else
+  {
+   my $tpl = new Template;
+   $tpl->read_file($config->{'templates'}->{'confirm_rmfile'});
+
+   $tpl->fillin("FILE",$virtual);
+   $tpl->fillin("DIR",upper_path($virtual));
+   $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual));
+   $tpl->fillin("SCRIPT",$script);
+
+   my $output = header(-type => "text/html");
+   $output   .= $tpl->get_template;
+
+   return \$output;
+  }
+ }
+}
+
+# exec_chprop()
+#
+# Change the mode and the group of a file or a directory
+#
+# Params: 1. Reference to user input hash
+#         2. Reference to config hash
+#
+# Return: Output of the command (Scalar Reference)
+
+sub exec_chprop($$)
+{
+ my ($data,$config) = @_;
+ my $physical       = $data->{'physical'};
+ my $virtual        = $data->{'virtual'};
+ my $dir            = upper_path($virtual);
+ my $cgi            = $data->{'cgi'};
+ my $mode           = $cgi->param('mode');
+ my $group          = $cgi->param('group');
+
+ if($users)
+ {
+  if(-o $physical)
+  {
+   if($mode || $group)
+   {
+    if($mode)
+    {
+     my $oct_mode = $mode;
+     $oct_mode    = "0".$oct_mode if(length($oct_mode) == 3);
+     $oct_mode    = oct($oct_mode);
+
+     chmod($oct_mode,$physical);
+    }
+
+    if($group)
+    {
+     return error($config->{'errors'}->{'invalid_group'},$dir,{GROUP => $group}) unless($group =~ /^[a-z0-9_]+[a-z0-9_-]*$/i);
+     system("chgrp",$group,$physical);
+    }
+
+    return devedit_reload({command => 'show', file => $dir});
+   }
+   else
+   {
+    my @stat     = stat($physical);
+
+    my $mode     = $stat[2];
+    my $mode_oct = substr(sprintf("%04o",$mode),-4);
+    my $gid      = $stat[5];
+    my $group    = getgrgid($gid);
+
+    my $tpl = new Template;
+    $tpl->read_file($config->{'templates'}->{'chprop'});
+
+    $tpl->fillin("MODE_OCTAL",$mode_oct);
+    $tpl->fillin("MODE_STRING",mode_string($mode));
+    $tpl->fillin("GID",$gid);
+    $tpl->fillin("GROUP",$group);
+
+    $tpl->fillin("FILE",$virtual);
+    $tpl->fillin("DIR",$dir);
+    $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual));
+    $tpl->fillin("SCRIPT",$script);
+
+    my $output = header(-type => "text/html");
+    $output   .= $tpl->get_template;
+
+    return \$output;
+   }
+  }
+  else
+  {
+   return error($config->{'errors'}->{'not_owner'},$dir,{FILE => $virtual});
+  }
+ }
+ else
+ {
+  return error($config->{'errors'}->{'no_users'},$dir,{FILE => $virtual});
+ }