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.

163 lines
5.1 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: edit-admin.php
  16. * Edits a normal administrator's details.
  17. *
  18. * Template File: admin_edit-admin.tpl
  19. *
  20. * Template Variables:
  21. *
  22. * tAllDomains
  23. * tDomains
  24. * tActive_checked
  25. * tSadmin_checked
  26. *
  27. * Form POST \ GET Variables:
  28. *
  29. * fDescription
  30. * fAliases
  31. * fMailboxes
  32. * fMaxquota
  33. * fActive
  34. */
  35. require_once('common.php');
  36. authentication_require_role('global-admin');
  37. $error = 1;
  38. if(isset($_GET['username'])) {
  39. $username = escape_string ($_GET['username']);
  40. $result = db_query("SELECT * FROM $table_admin WHERE username = '$username'");
  41. if($result['rows'] == 1) {
  42. $admin_details = db_array($result['result']);
  43. $error = 0;
  44. }
  45. }
  46. if($error == 1){
  47. flash_error($PALANG['pAdminEdit_admin_result_error']);
  48. header("Location: list-admin.php");
  49. exit(0);
  50. }
  51. // we aren't ensuring the password is longer than x characters, should we?
  52. if ($_SERVER['REQUEST_METHOD'] == "POST")
  53. {
  54. $fPassword = '';
  55. $fPassword2 = '';
  56. if(isset ($_POST['fPassword'])) $fPassword = escape_string ($_POST['fPassword']);
  57. if(isset ($_POST['fPassword2'])) $fPassword2 = escape_string ($_POST['fPassword2']);
  58. $fActive=(isset($_POST['fActive'])) ? escape_string ($_POST['fActive']) : FALSE;
  59. $fSadmin=(isset($_POST['fSadmin'])) ? escape_string ($_POST['fSadmin']) : FALSE;
  60. $fDomains = false;
  61. if (isset ($_POST['fDomains'])) $fDomains = $_POST['fDomains'];
  62. $tAllDomains = list_domains ();
  63. // has the password changed?
  64. $originalPassword = $admin_details['password'];
  65. if($fPassword != '') {
  66. if($fPassword != $originalPassword) {
  67. // if it has, ensure both fields are the same...
  68. if ($fPassword == $fPassword2)
  69. {
  70. if(strlen($fPassword) >= $CONF['min_password_length']) {
  71. $fPassword = pacrypt($fPassword);
  72. }
  73. else {
  74. $error = 1;
  75. flash_error(sprintf($PALANG['pPasswordTooShort'], $CONF['min_password_length']));
  76. }
  77. }
  78. else {
  79. $error = 1;
  80. $pAdminEdit_admin_password_text = $PALANG['pAdminEdit_admin_password_text_error'];
  81. }
  82. }
  83. }
  84. $fDomains = array();
  85. if (array_key_exists('fDomains', $_POST)) $fDomains = escape_string ($_POST['fDomains']);
  86. if ($error != 1)
  87. {
  88. if ($fActive == "on") {
  89. $sqlActive = db_get_boolean(True);
  90. }
  91. else {
  92. $sqlActive = db_get_boolean(False);
  93. }
  94. $password_query = '';
  95. if ($fPassword != '') { # do not change password to empty one
  96. $password_query = ", password='$fPassword'";
  97. }
  98. $result = db_query ("UPDATE $table_admin SET modified=NOW(),active='$sqlActive' $password_query WHERE username='$username'");
  99. if ($fSadmin == "on") $fSadmin = 'ALL';
  100. // delete everything, and put it back later on..
  101. db_query("DELETE FROM $table_domain_admins WHERE username = '$username'");
  102. if($fSadmin == 'ALL') {
  103. $fDomains = array('ALL');
  104. }
  105. foreach($fDomains as $domain)
  106. {
  107. $result = db_query ("INSERT INTO $table_domain_admins (username,domain,created) VALUES ('$username','$domain',NOW())");
  108. }
  109. flash_info($PALANG['pAdminEdit_admin_result_success']);
  110. header("Location: list-admin.php");
  111. exit(0);
  112. }
  113. else {
  114. flash_error($PALANG['pAdminEdit_admin_result_error']);
  115. }
  116. }
  117. if (isset($_GET['username'])) $username = escape_string ($_GET['username']);
  118. $tAllDomains = list_domains();
  119. $tDomains = list_domains_for_admin ($username);
  120. $tActive_checked = '';
  121. $tPassword = $admin_details['password'];
  122. if($admin_details['active'] == 't' || $admin_details['active'] == 1) {
  123. $tActive_checked = ' checked="checked"';
  124. }
  125. $tSadmin_checked = '';
  126. $result = db_query ("SELECT * FROM $table_domain_admins WHERE username='$username'");
  127. // could/should be multiple matches to query;
  128. if ($result['rows'] >= 1) {
  129. $result = $result['result'];
  130. while($row = db_array($result)) {
  131. if ($row['domain'] == 'ALL') {
  132. $tSadmin_checked = ' checked="checked"';
  133. $tDomains = array(); /* empty the list, they're an admin */
  134. }
  135. }
  136. }
  137. $smarty->assign ('username', $username);
  138. $smarty->assign ('pAdminEdit_admin_password_text', $pAdminEdit_admin_password_text, false);
  139. $smarty->assign ('tActive_checked', $tActive_checked);
  140. $smarty->assign ('tSadmin_checked', $tSadmin_checked);
  141. $smarty->assign ('select_options', select_options ($tAllDomains, $tDomains), false);
  142. $smarty->assign ('tMessage', $tMessage, false);
  143. $smarty->assign ('smarty_template', 'admin_edit-admin');
  144. $smarty->display ('index.tpl');
  145. /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
  146. ?>