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.

235 lines
7.0 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. /**
  41. * delete_alias
  42. * Action: Delete an alias
  43. * @param String $alias- alias to delete.
  44. * @param String $domain - domain of the alias
  45. * @param boolean $force_delete - deletes the alias from the table if true,
  46. * checks if the alias is real and act accordlying if false.
  47. * Default is false.
  48. * @return String username (e.g. foo@example.com)
  49. */
  50. function delete_alias ($alias, $domain, $force_delete = false)
  51. {
  52. global $table_alias, $table_mailbox;
  53. $real_alias = true;
  54. if (! $force_delete)
  55. {
  56. $result = db_query ("SELECT 1 FROM $table_mailbox
  57. WHERE username='$alias' AND domain='$domain'");
  58. if ($result['rows'] != 0)
  59. {
  60. /* If the alias is a real mailbox as well, remove all its real aliases and keep
  61. * only the address */
  62. $real_alias = false;
  63. }
  64. }
  65. if ($force_delete or $real_alias)
  66. {
  67. $result = db_query ("DELETE FROM $table_alias WHERE address='$alias' AND domain='$domain'");
  68. }
  69. else
  70. {
  71. $result = db_query ("UPDATE $table_alias SET goto='$alias',modified=NOW()
  72. WHERE address='$alias' AND domain='$domain'");
  73. }
  74. if ($result['rows'] != 1)
  75. {
  76. $tMessage = $PALANG['pDelete_delete_error'] . "<b>$alias</b> (alias)!</span>";
  77. return false;
  78. }
  79. else
  80. {
  81. db_log ($SESSID_USERNAME, $fDomain, 'delete_alias', $fDelete);
  82. }
  83. return true;
  84. }
  85. if ($fTable == "admin")
  86. {
  87. authentication_require_role('global-admin');
  88. $fWhere = 'username';
  89. $result_admin = db_delete ($table_admin,$fWhere,$fDelete);
  90. $result_domain_admins = db_delete ($table_domain_admins,$fWhere,$fDelete);
  91. if (!($result_admin == 1) and ($result_domain_admins >= 0))
  92. {
  93. $error = 1;
  94. $tMessage = $PALANG['pAdminDelete_admin_error'];
  95. }
  96. else
  97. {
  98. $url = "list-admin.php";
  99. header ("Location: $url");
  100. }
  101. } # ($fTable == "admin")
  102. elseif ($fTable == "domain")
  103. {
  104. authentication_require_role('global-admin');
  105. $fWhere = 'domain';
  106. $result_domain_admins = db_delete ($table_domain_admins,$fWhere,$fDelete);
  107. $result_alias = db_delete ($table_alias,$fWhere,$fDelete);
  108. $result_mailbox = db_delete ($table_mailbox,$fWhere,$fDelete);
  109. $result_log = db_delete ($table_log,$fWhere,$fDelete);
  110. if ($CONF['vacation'] == "YES")
  111. {
  112. $result_vacation = db_delete ($table_vacation,$fWhere,$fDelete);
  113. }
  114. $result_domain = db_delete ($table_domain,$fWhere,$fDelete);
  115. if (!$result_domain || !domain_postdeletion($fDelete))
  116. {
  117. $error = 1;
  118. $tMessage = $PALANG['pAdminDelete_domain_error'];
  119. }
  120. else
  121. {
  122. $url = "list-domain.php";
  123. header ("Location: $url");
  124. }
  125. } # ($fTable == "domain")
  126. elseif ($fTable == "alias_domain")
  127. {
  128. authentication_require_role('global-admin');
  129. $table_domain_alias = table_by_key('alias_domain');
  130. $fWhere = 'alias_domain';
  131. $fDelete = $fDomain;
  132. if(db_delete($table_domain_alias,$fWhere,$fDelete)) {
  133. $url = "list-domain.php";
  134. header ("Location: $url");
  135. }
  136. } # ($fTable == "alias_domain")
  137. elseif ($fTable == "mailbox")
  138. {
  139. if (!check_owner ($SESSID_USERNAME, $fDomain))
  140. {
  141. $error = 1;
  142. $tMessage = $PALANG['pDelete_domain_error'] . "<b>$fDomain</b>!</span>";
  143. }
  144. elseif (!check_alias_owner ($SESSID_USERNAME, $fDelete))
  145. {
  146. $error = 1;
  147. $tMessage = $PALANG['pDelete_alias_error'] . "<b>$fDelete</b>!</span>";
  148. }
  149. else
  150. {
  151. if ($CONF['database_type'] == "pgsql") db_query('BEGIN');
  152. $error = delete_alias ($fDelete, $fDomain, $force_delete = true) ? 0 : 1;
  153. if (! $error)
  154. {
  155. /* is there a mailbox? if do delete it from orbit; it's the only way to be sure */
  156. $result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fDelete' AND domain='$fDomain'");
  157. if ($result['rows'] == 1)
  158. {
  159. $result = db_query ("DELETE FROM $table_mailbox WHERE username='$fDelete' AND domain='$fDomain'");
  160. $postdel_res=mailbox_postdeletion($fDelete,$fDomain);
  161. if ($result['rows'] != 1 || !$postdel_res)
  162. {
  163. $error = 1;
  164. $tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (";
  165. if ($result['rows']!=1)
  166. {
  167. $tMessage.='mailbox';
  168. if (!$postdel_res) $tMessage.=', ';
  169. }
  170. if (!$postdel_res)
  171. {
  172. $tMessage.='post-deletion';
  173. }
  174. $tMessage.=')</span>';
  175. }
  176. }
  177. $result = db_query("SELECT * FROM $table_vacation WHERE email = '$fDelete' AND domain = '$fDomain'");
  178. if($result['rows'] == 1) {
  179. db_query ("DELETE FROM $table_vacation WHERE email='$fDelete' AND domain='$fDomain'");
  180. db_query ("DELETE FROM $table_vacation_notification WHERE on_vacation ='$fDelete' "); /* should be caught by cascade, if PgSQL */
  181. }
  182. }
  183. if ($error != 1)
  184. {
  185. if ($CONF['database_type'] == "pgsql") db_query('COMMIT');
  186. header ("Location: list-virtual.php?domain=$fDomain");
  187. exit;
  188. } else {
  189. $tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (physical mail)!</span>";
  190. if ($CONF['database_type'] == "pgsql") db_query('ROLLBACK');
  191. }
  192. } # ($fTable == "mailbox")
  193. }
  194. elseif ($fTable == "alias") {
  195. $error = delete_alias ($fDelete, $fDomain) ? 0 : 1;
  196. if ($error != 1)
  197. {
  198. header ("Location: list-virtual.php?domain=$fDomain");
  199. exit;
  200. } else {
  201. $tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (alias)!</span>";
  202. }
  203. }
  204. else
  205. {
  206. flash_error($PALANG['invalid_parameter']);
  207. }
  208. include ("templates/header.php");
  209. include ("templates/menu.php");
  210. include ("templates/message.php");
  211. include ("templates/footer.php");
  212. /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
  213. ?>