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.

276 lines
8.4 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. * File: create-mailbox.php
  13. * Responsible for allowing for the creation of mail boxes
  14. *
  15. * @version $Id$
  16. * @license GNU GPL v2 or later.
  17. *
  18. * Template Variables:
  19. *
  20. * tMessage
  21. * tUsername
  22. * tName
  23. * tQuota
  24. * tDomain
  25. *
  26. * Form POST \ GET Variables:
  27. *
  28. * fUsername
  29. * fPassword
  30. * fPassword2
  31. * fName
  32. * fQuota
  33. * fDomain
  34. * fActive
  35. * fMail
  36. */
  37. require_once('common.php');
  38. authentication_require_role('admin');
  39. $SESSID_USERNAME = authentication_get_username();
  40. if(authentication_has_role('global-admin')) {
  41. $list_domains = list_domains ();
  42. }
  43. else {
  44. $list_domains = list_domains_for_admin($SESSID_USERNAME);
  45. }
  46. $pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text'];
  47. $pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text'];
  48. if ($_SERVER['REQUEST_METHOD'] == "GET")
  49. {
  50. $fDomain = $list_domains[0];
  51. if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']);
  52. if(!in_array($fDomain, $list_domains)) {
  53. die("Invalid domain name selected, or you tried to select a domain you are not an admin for");
  54. }
  55. $tDomain = $fDomain;
  56. $result = db_query ("SELECT * FROM $table_domain WHERE domain='$fDomain'");
  57. if ($result['rows'] == 1)
  58. {
  59. $row = db_array ($result['result']);
  60. $tQuota = $row['maxquota'];
  61. }
  62. }
  63. if ($_SERVER['REQUEST_METHOD'] == "POST")
  64. {
  65. if (isset ($_POST['fUsername']) && isset ($_POST['fDomain'])) $fUsername = escape_string ($_POST['fUsername']) . "@" . escape_string ($_POST['fDomain']);
  66. $fUsername = strtolower ($fUsername);
  67. if (isset ($_POST['fPassword'])) $fPassword = escape_string ($_POST['fPassword']);
  68. if (isset ($_POST['fPassword2'])) $fPassword2 = escape_string ($_POST['fPassword2']);
  69. isset ($_POST['fName']) ? $fName = escape_string ($_POST['fName']) : $fName = "";
  70. if (isset ($_POST['fDomain'])) $fDomain = escape_string ($_POST['fDomain']);
  71. isset ($_POST['fQuota']) ? $fQuota = intval($_POST['fQuota']) : $fQuota = 0;
  72. isset ($_POST['fActive']) ? $fActive = escape_string ($_POST['fActive']) : $fActive = "1";
  73. if (isset ($_POST['fMail'])) $fMail = escape_string ($_POST['fMail']);
  74. if ( (!check_owner ($SESSID_USERNAME, $fDomain)) && (!authentication_has_role('global-admin')) )
  75. {
  76. $error = 1;
  77. $tUsername = escape_string ($_POST['fUsername']);
  78. $tName = $fName;
  79. $tQuota = $fQuota;
  80. $tDomain = $fDomain;
  81. $pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
  82. }
  83. if (!check_mailbox ($fDomain))
  84. {
  85. $error = 1;
  86. $tUsername = escape_string ($_POST['fUsername']);
  87. $tName = $fName;
  88. $tQuota = $fQuota;
  89. $tDomain = $fDomain;
  90. $pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error3'];
  91. }
  92. if (empty ($fUsername) or !check_email ($fUsername))
  93. {
  94. $error = 1;
  95. $tUsername = escape_string ($_POST['fUsername']);
  96. $tName = $fName;
  97. $tQuota = $fQuota;
  98. $tDomain = $fDomain;
  99. $pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
  100. }
  101. $tPassGenerated = 0;
  102. if (empty ($fPassword) or empty ($fPassword2) or ($fPassword != $fPassword2))
  103. {
  104. if (empty ($fPassword) and empty ($fPassword2) and $CONF['generate_password'] == "YES")
  105. {
  106. $fPassword = generate_password ();
  107. $tPassGenerated = 1;
  108. }
  109. else
  110. {
  111. $error = 1;
  112. $tUsername = escape_string ($_POST['fUsername']);
  113. $tName = $fName;
  114. $tQuota = $fQuota;
  115. $tDomain = $fDomain;
  116. $pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text_error'];
  117. }
  118. }
  119. if ($CONF['quota'] == "YES")
  120. {
  121. if (!check_quota ($fQuota, $fDomain))
  122. {
  123. $error = 1;
  124. $tUsername = escape_string ($_POST['fUsername']);
  125. $tName = $fName;
  126. $tQuota = $fQuota;
  127. $tDomain = $fDomain;
  128. $pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text_error'];
  129. }
  130. }
  131. $result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'");
  132. if ($result['rows'] == 1)
  133. {
  134. $error = 1;
  135. $tUsername = escape_string ($_POST['fUsername']);
  136. $tName = $fName;
  137. $tQuota = $fQuota;
  138. $tDomain = $fDomain;
  139. $pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error2'];
  140. }
  141. if ($error != 1)
  142. {
  143. $password = pacrypt ($fPassword);
  144. if($CONF['maildir_name_hook'] != 'NO' && function_exists($CONF['maildir_name_hook'])) {
  145. $hook_func = $CONF['maildir_name_hook'];
  146. $maildir = $hook_func ($fDomain, $fUsername);
  147. }
  148. else if ($CONF['domain_path'] == "YES")
  149. {
  150. if ($CONF['domain_in_mailbox'] == "YES")
  151. {
  152. $maildir = $fDomain . "/" . $fUsername . "/";
  153. }
  154. else
  155. {
  156. $maildir = $fDomain . "/" . escape_string (strtolower($_POST['fUsername'])) . "/";
  157. }
  158. }
  159. else
  160. {
  161. $maildir = $fUsername . "/";
  162. }
  163. if (!empty ($fQuota))
  164. {
  165. $quota = multiply_quota ($fQuota);
  166. }
  167. else
  168. {
  169. $quota = 0;
  170. }
  171. if ($fActive == "on")
  172. {
  173. $sqlActive = db_get_boolean(True);
  174. }
  175. else
  176. {
  177. $sqlActive = db_get_boolean(False);
  178. }
  179. if ('pgsql'==$CONF['database_type'])
  180. {
  181. db_query('BEGIN');
  182. }
  183. $result = db_query ("INSERT INTO $table_alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$sqlActive')");
  184. if ($result['rows'] != 1)
  185. {
  186. $tDomain = $fDomain;
  187. $tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
  188. }
  189. // apparently uppercase usernames really confuse some IMAP clients.
  190. $fUsername = strtolower($fUsername);
  191. $local_part = '';
  192. if(preg_match('/^(.*)@/', $fUsername, $matches)) {
  193. $local_part = $matches[1];
  194. }
  195. $result = db_query ("INSERT INTO $table_mailbox (username,password,name,maildir,local_part,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$local_part','$quota','$fDomain',NOW(),NOW(),'$sqlActive')");
  196. if ($result['rows'] != 1 || !mailbox_postcreation($fUsername,$fDomain,$maildir, $quota))
  197. {
  198. $tDomain = $fDomain;
  199. $tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
  200. db_query('ROLLBACK');
  201. }
  202. else
  203. {
  204. db_query('COMMIT');
  205. db_log ($fDomain, 'create_mailbox', "$fUsername");
  206. $tDomain = $fDomain;
  207. $tQuota = $CONF['maxquota'];
  208. if ($fMail == "on")
  209. {
  210. $fTo = $fUsername;
  211. $fFrom = $SESSID_USERNAME;
  212. $fSubject = $CONF['pSendmail_subject_text'];
  213. $fBody = $CONF['welcome_text'];
  214. if (!smtp_mail ($fTo, $fFrom, $fSubject, $fBody))
  215. {
  216. $tMessage .= "<br />" . $PALANG['pSendmail_result_error'] . "<br />";
  217. }
  218. else
  219. {
  220. $tMessage .= "<br />" . $PALANG['pSendmail_result_success'] . "<br />";
  221. }
  222. }
  223. $tShowpass = "";
  224. if ( $tPassGenerated == 1 || $CONF['show_password'] == "YES") $tShowpass = " / $fPassword";
  225. if (create_mailbox_subfolders($fUsername,$fPassword))
  226. {
  227. $tMessage .= $PALANG['pCreate_mailbox_result_success'] . "<br />($fUsername$tShowpass)";
  228. } else {
  229. $tMessage .= $PALANG['pCreate_mailbox_result_succes_nosubfolders'] . "<br />($fUsername$tShowpass)";
  230. }
  231. }
  232. }
  233. }
  234. $smarty->assign ('tUsername', $tUsername);
  235. $smarty->assign ('select_options', select_options ($list_domains, array ($tDomain)), false);
  236. $smarty->assign ('pCreate_mailbox_username_text', $pCreate_mailbox_username_text, false);
  237. $smarty->assign ('pCreate_mailbox_password_text', $pCreate_mailbox_password_text, false);
  238. $smarty->assign ('tName', $tName, false);
  239. $smarty->assign ('tQuota', $tQuota);
  240. $smarty->assign ('pCreate_mailbox_quota_text', $pCreate_mailbox_quota_text, false);
  241. $smarty->assign ('tMessage', $tMessage, false);
  242. $smarty->assign ('smarty_template', 'create-mailbox');
  243. $smarty->display ('index.tpl');
  244. /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
  245. ?>