PostfixAdmin - web based virtual user administration interface for Postfix mail servers https://postfixadmin.github.io/postfixadmin/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

197 lines
5.6 KiB

  1. <?php
  2. /**
  3. * Postfix Admin
  4. *
  5. * LICENSE
  6. * This source file is subject to the GPL license that is bundled with
  7. * this package in the file LICENSE.TXT.
  8. *
  9. * Further details on the project are available at :
  10. * http://www.postfixadmin.com or http://postfixadmin.sf.net
  11. *
  12. * @version $Id$
  13. * @license GNU GPL v2 or later.
  14. *
  15. * File: delete.php
  16. * Used to delete admins, domains, mailboxes and aliases.
  17. * Note: if a domain is deleted, all mailboxes and aliases belonging
  18. * to the domain are also removed.
  19. *
  20. * Template File: message.php
  21. *
  22. * Template Variables:
  23. *
  24. * tMessage
  25. *
  26. * Form POST \ GET Variables:
  27. *
  28. * fTable
  29. * fDelete
  30. * fDomain
  31. */
  32. require_once('common.php');
  33. authentication_require_role('admin');
  34. $SESSID_USERNAME = authentication_get_username();
  35. $error = 0;
  36. $fTable = escape_string (safeget('table') ); # see the if blocks below for valid values
  37. $fDelete = escape_string (safeget('delete'));
  38. $fDomain = escape_string (safeget('domain'));
  39. $error=0;
  40. if ($fTable == "admin")
  41. {
  42. authentication_require_role('global-admin');
  43. $fWhere = 'username';
  44. $result_admin = db_delete ($table_admin,$fWhere,$fDelete);
  45. $result_domain_admins = db_delete ($table_domain_admins,$fWhere,$fDelete);
  46. if (!($result_admin == 1) and ($result_domain_admins >= 0))
  47. {
  48. $error = 1;
  49. $tMessage = $PALANG['pAdminDelete_admin_error'];
  50. }
  51. else
  52. {
  53. $url = "list-admin.php";
  54. header ("Location: $url");
  55. }
  56. } # ($fTable == "admin")
  57. elseif ($fTable == "domain")
  58. {
  59. authentication_require_role('global-admin');
  60. $fWhere = 'domain';
  61. $result_domain_admins = db_delete ($table_domain_admins,$fWhere,$fDelete);
  62. $result_alias = db_delete ($table_alias,$fWhere,$fDelete);
  63. $result_mailbox = db_delete ($table_mailbox,$fWhere,$fDelete);
  64. $result_log = db_delete ($table_log,$fWhere,$fDelete);
  65. $result_alias_domain = db_delete ($table_alias_domain,'alias_domain',$fDelete);
  66. $result_target_domain = db_delete ($table_alias_domain,'target_domain',$fDelete);
  67. if ($CONF['vacation'] == "YES")
  68. {
  69. $result_vacation = db_delete ($table_vacation,$fWhere,$fDelete);
  70. }
  71. $result_domain = db_delete ($table_domain,$fWhere,$fDelete);
  72. if (!$result_domain || !domain_postdeletion($fDelete))
  73. {
  74. $error = 1;
  75. $tMessage = $PALANG['pAdminDelete_domain_error'];
  76. }
  77. else
  78. {
  79. $url = "list-domain.php";
  80. header ("Location: $url");
  81. }
  82. } # ($fTable == "domain")
  83. elseif ($fTable == "alias_domain")
  84. {
  85. if (!check_owner ($SESSID_USERNAME, $fDelete))
  86. {
  87. $error = 1;
  88. $tMessage = $PALANG['pDelete_domain_alias_error'] . "<b>$fDelete</b>!</span>";
  89. }
  90. $result = db_delete ($table_alias_domain,'alias_domain',$fDelete);
  91. if (!$result || !alias_domain_postdeletion($fDelete))
  92. {
  93. $error = 1;
  94. $tMessage = $PALANG['pAdminDelete_alias_domain_error'];
  95. }
  96. else
  97. {
  98. db_log ($SESSID_USERNAME, $fDelete, 'delete_alias_domain', $fDelete);
  99. $url = "list-virtual.php?domain=" . urlencode($_REQUEST['domain']);
  100. header ("Location: $url");
  101. }
  102. } # ($fTable == "alias_domain")
  103. elseif ($fTable == "alias" or $fTable == "mailbox")
  104. {
  105. if (!check_owner ($SESSID_USERNAME, $fDomain))
  106. {
  107. $error = 1;
  108. $tMessage = $PALANG['pDelete_domain_error'] . "<b>$fDomain</b>!</span>";
  109. }
  110. elseif (!check_alias_owner ($SESSID_USERNAME, $fDelete))
  111. {
  112. $error = 1;
  113. $tMessage = $PALANG['pDelete_alias_error'] . "<b>$fDelete</b>!</span>";
  114. }
  115. else
  116. {
  117. if ($CONF['database_type'] == "pgsql") db_query('BEGIN');
  118. $result = db_query ("DELETE FROM $table_alias WHERE address='$fDelete' AND domain='$fDomain'");
  119. if ($result['rows'] != 1)
  120. {
  121. $error = 1;
  122. $tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (alias)!</span>";
  123. }
  124. else
  125. {
  126. db_log ($SESSID_USERNAME, $fDomain, 'delete_alias', $fDelete);
  127. }
  128. if (!$error)
  129. {
  130. $result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fDelete' AND domain='$fDomain'");
  131. if ($result['rows'] == 1)
  132. {
  133. $result = db_query ("DELETE FROM $table_mailbox WHERE username='$fDelete' AND domain='$fDomain'");
  134. $postdel_res=mailbox_postdeletion($fDelete,$fDomain);
  135. if ($result['rows'] != 1 || !$postdel_res)
  136. {
  137. $error = 1;
  138. $tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (";
  139. if ($result['rows']!=1)
  140. {
  141. $tMessage.='mailbox';
  142. if (!$postdel_res) $tMessage.=', ';
  143. }
  144. if (!$postdel_res)
  145. {
  146. $tMessage.='post-deletion';
  147. }
  148. $tMessage.=')</span>';
  149. }
  150. else
  151. {
  152. db_query ("DELETE FROM $table_vacation WHERE email='$fDelete' AND domain='$fDomain'");
  153. db_log ($SESSID_USERNAME, $fDomain, 'delete_mailbox', $fDelete);
  154. }
  155. }
  156. }
  157. }
  158. if ($error != 1)
  159. {
  160. if ($CONF['database_type'] == "pgsql") db_query('COMMIT');
  161. header ("Location: list-virtual.php?domain=$fDomain");
  162. exit;
  163. } else {
  164. $tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (physical mail)!</span>";
  165. if ($CONF['database_type'] == "pgsql") db_query('ROLLBACK');
  166. }
  167. } # ($fTable == "alias" or $fTable == "mailbox")
  168. else
  169. {
  170. # unknown $fTable value
  171. flash_error($PALANG['invalid_parameter']);
  172. }
  173. include ("templates/header.php");
  174. include ("templates/menu.php");
  175. include ("templates/message.php");
  176. include ("templates/footer.php");
  177. /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
  178. ?>