openship 0.4.4 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/README.md +2 -24
  2. package/dist/bare-2HYDXQEH.js +23 -0
  3. package/dist/{bowser-MFQA6OS4.js → bowser-O3AEA6AN.js} +5 -1
  4. package/dist/{chunk-KD7VO4LG.js → chunk-2ZLR7ULL.js} +255 -65
  5. package/dist/{chunk-YHXCHW7Q.js → chunk-3JQTL4R4.js} +236 -99
  6. package/dist/{chunk-E77LJWJK.js → chunk-4TJC4JZQ.js} +20 -9
  7. package/dist/{chunk-YL67EWYZ.js → chunk-4Z5QO7N6.js} +6 -2
  8. package/dist/{chunk-WJPCBU7Z.js → chunk-5FNIWBFI.js} +10 -6
  9. package/dist/{chunk-Y37KHU7L.js → chunk-5MZ624VX.js} +5 -0
  10. package/dist/{chunk-QKFRZNKN.js → chunk-6APIPIJY.js} +8 -4
  11. package/dist/{chunk-JZLNHGLW.js → chunk-6APULWSU.js} +153 -133
  12. package/dist/{chunk-F4DFVG6Q.js → chunk-6B5YCFFV.js} +8 -4
  13. package/dist/{chunk-XVSAUO2I.js → chunk-AVIB7CT7.js} +5 -1
  14. package/dist/{chunk-TEYJYSMT.js → chunk-C5OHTYEF.js} +12 -6
  15. package/dist/{chunk-7UOB5GGQ.js → chunk-DYPH4HCI.js} +5 -0
  16. package/dist/{chunk-XIFRMKYT.js → chunk-EI575GHN.js} +6 -2
  17. package/dist/{chunk-4CQWT2WL.js → chunk-FPRHYBY2.js} +5 -0
  18. package/dist/chunk-FQGJZ2HS.js +248 -0
  19. package/dist/{chunk-JR2OCMJA.js → chunk-FRNAR33O.js} +6 -2
  20. package/dist/{chunk-JUJBBF5U.js → chunk-FXTBHTWY.js} +362 -42
  21. package/dist/chunk-ILFETZOM.js +131 -0
  22. package/dist/{chunk-5ZCKQ2MI.js → chunk-IXCHURVK.js} +7 -3
  23. package/dist/{chunk-6ERIMTBC.js → chunk-JYGD5WSN.js} +5 -0
  24. package/dist/{chunk-4VNS5WPM.js → chunk-KI2EY3WB.js} +4 -0
  25. package/dist/{chunk-3U4SPZD5.js → chunk-L2VOGB2X.js} +7 -104
  26. package/dist/{chunk-NB2VEIWG.js → chunk-MZ2WEHHY.js} +7 -3
  27. package/dist/{chunk-BUBSSKO6.js → chunk-O6ZZF52V.js} +5 -1
  28. package/dist/{chunk-LBFH7THC.js → chunk-OWED2GRM.js} +5 -1
  29. package/dist/{chunk-4MG3BVHE.js → chunk-OXWDY22G.js} +6 -2
  30. package/dist/{chunk-4FABQGQP.js → chunk-Q2CIRAOK.js} +5 -0
  31. package/dist/{chunk-4LEL3H2Z.js → chunk-RPHRPFEH.js} +5 -0
  32. package/dist/{chunk-46YJFP4S.js → chunk-SQ77DZOI.js} +1728 -1484
  33. package/dist/{chunk-S6DSRLNE.js → chunk-TGIINPVM.js} +15 -2
  34. package/dist/{chunk-U2DPZSXA.js → chunk-TYVME3XD.js} +9 -1
  35. package/dist/{chunk-HFYDYK4D.js → chunk-V6AN6XLZ.js} +18 -6
  36. package/dist/{chunk-ZKJOFWBJ.js → chunk-VDMQJHPI.js} +38 -15
  37. package/dist/{chunk-E6W2JMMU.js → chunk-VFINNTUL.js} +22 -1
  38. package/dist/{chunk-OJE6YWPQ.js → chunk-VWPEKOH6.js} +6 -2
  39. package/dist/{chunk-5N7VUGL6.js → chunk-W73X43R7.js} +6 -2
  40. package/dist/cloud-7QYOGF7F.js +11 -0
  41. package/dist/cloud-ZSKOS4GY.js +30 -0
  42. package/dist/detect-SH4FHFBI.js +36 -0
  43. package/dist/{dist-L3MPOWCA.js → dist-IQJ6H6UZ.js} +6 -2
  44. package/dist/{dist-es-KE56MWYO.js → dist-es-5DY7K32L.js} +9 -5
  45. package/dist/dist-es-JSTDUS7Q.js +26 -0
  46. package/dist/{dist-es-GTAMF674.js → dist-es-OSNJBLXB.js} +8 -4
  47. package/dist/{dist-es-NRZIQY5B.js → dist-es-RYHIPOTN.js} +17 -13
  48. package/dist/{dist-es-XQCOTGC7.js → dist-es-VNKHQVIB.js} +7 -3
  49. package/dist/{dist-es-WZCR7DHQ.js → dist-es-WV4AMOII.js} +11 -7
  50. package/dist/{dist-es-ZW3HFQUM.js → dist-es-X3B5QYKB.js} +9 -5
  51. package/dist/docker-U7AF5PTA.js +16 -0
  52. package/dist/docker-edge-executor-VHW3JPJS.js +13 -0
  53. package/dist/edge-import-V5CBA47C.js +45 -0
  54. package/dist/ensure-container-edge-CMYROUSI.js +33 -0
  55. package/dist/{event-streams-7LGDL56D.js → event-streams-EHRAKL75.js} +7 -3
  56. package/dist/executor-YPT6RH6O.js +30 -0
  57. package/dist/index.d.ts +2 -1
  58. package/dist/index.js +258 -245
  59. package/dist/{loadSso-N273C5I7.js → loadSso-46FQRIZS.js} +13 -9
  60. package/dist/local-executor-V7U5VOZW.js +12 -0
  61. package/dist/nginx-2GTRUIDE.js +24 -0
  62. package/dist/noop-FMMFG2EZ.js +11 -0
  63. package/dist/{openresty-lua-HAO4EUDY.js → openresty-lua-4WLGDSER.js} +13 -3
  64. package/dist/server/engine/ChangeLog +2289 -0
  65. package/dist/server/engine/Documentations +5 -0
  66. package/dist/server/engine/LICENSE +674 -0
  67. package/dist/server/engine/README.md +34 -0
  68. package/dist/server/engine/conf/amavisd +150 -0
  69. package/dist/server/engine/conf/clamav +71 -0
  70. package/dist/server/engine/conf/core +632 -0
  71. package/dist/server/engine/conf/dovecot +151 -0
  72. package/dist/server/engine/conf/fail2ban +72 -0
  73. package/dist/server/engine/conf/global +698 -0
  74. package/dist/server/engine/conf/iredapd +52 -0
  75. package/dist/server/engine/conf/logwatch +28 -0
  76. package/dist/server/engine/conf/postfix +97 -0
  77. package/dist/server/engine/conf/postgresql +93 -0
  78. package/dist/server/engine/conf/spamassassin +39 -0
  79. package/dist/server/engine/dialog/config_via_dialog.sh +258 -0
  80. package/dist/server/engine/dialog/optional_components.sh +122 -0
  81. package/dist/server/engine/dialog/pgsql_config.sh +52 -0
  82. package/dist/server/engine/dialog/virtual_domain_config.sh +94 -0
  83. package/dist/server/engine/functions/amavisd.sh +267 -0
  84. package/dist/server/engine/functions/backend.sh +85 -0
  85. package/dist/server/engine/functions/clamav.sh +100 -0
  86. package/dist/server/engine/functions/cleanup.sh +393 -0
  87. package/dist/server/engine/functions/dovecot.sh +583 -0
  88. package/dist/server/engine/functions/fail2ban.sh +209 -0
  89. package/dist/server/engine/functions/iredapd.sh +356 -0
  90. package/dist/server/engine/functions/optional_components.sh +24 -0
  91. package/dist/server/engine/functions/packages.sh +522 -0
  92. package/dist/server/engine/functions/packages_freebsd.sh +179 -0
  93. package/dist/server/engine/functions/postfix.sh +457 -0
  94. package/dist/server/engine/functions/postgresql.sh +239 -0
  95. package/dist/server/engine/functions/spamassassin.sh +49 -0
  96. package/dist/server/engine/functions/system_accounts.sh +128 -0
  97. package/dist/server/engine/iRedMail.sh +144 -0
  98. package/dist/server/engine/pkgs/get_all.sh +338 -0
  99. package/dist/server/engine/pkgs/pkgs.freebsd.sha256 +3 -0
  100. package/dist/server/engine/pkgs/pkgs.openbsd.sha256 +6 -0
  101. package/dist/server/engine/pkgs/pkgs.sha256 +1 -0
  102. package/dist/server/engine/samples/amavisd/amavisd.conf +677 -0
  103. package/dist/server/engine/samples/amavisd/amavisd.mysql +278 -0
  104. package/dist/server/engine/samples/amavisd/amavisd.pgsql +253 -0
  105. package/dist/server/engine/samples/amavisd/amavisd.schema +942 -0
  106. package/dist/server/engine/samples/amavisd/default_spam_policy.sql +46 -0
  107. package/dist/server/engine/samples/dovecot/dovecot-2.4-mariadb.conf +758 -0
  108. package/dist/server/engine/samples/dovecot/dovecot-2.4-openldap.conf +767 -0
  109. package/dist/server/engine/samples/dovecot/dovecot-2.4-pgsql.conf +762 -0
  110. package/dist/server/engine/samples/dovecot/dovecot-last-login.conf +50 -0
  111. package/dist/server/engine/samples/dovecot/dovecot-ldap.conf +21 -0
  112. package/dist/server/engine/samples/dovecot/dovecot-share-folder.conf +22 -0
  113. package/dist/server/engine/samples/dovecot/dovecot-sql.conf +28 -0
  114. package/dist/server/engine/samples/dovecot/dovecot-used-quota.conf +13 -0
  115. package/dist/server/engine/samples/dovecot/dovecot.conf +484 -0
  116. package/dist/server/engine/samples/dovecot/dovecot.sieve +7 -0
  117. package/dist/server/engine/samples/dovecot/dovecot2-quota-warning.sh +38 -0
  118. package/dist/server/engine/samples/dovecot/sql/imap_share_folder.mysql +16 -0
  119. package/dist/server/engine/samples/dovecot/sql/last_login.mysql +12 -0
  120. package/dist/server/engine/samples/dovecot/sql/used_quota.mysql +26 -0
  121. package/dist/server/engine/samples/dovecot/systemd/override.conf +3 -0
  122. package/dist/server/engine/samples/fail2ban/action.d/banned_db.conf +9 -0
  123. package/dist/server/engine/samples/fail2ban/bin/fail2ban_banned_db +268 -0
  124. package/dist/server/engine/samples/fail2ban/fail2ban.local +17 -0
  125. package/dist/server/engine/samples/fail2ban/filter.d/dovecot.iredmail.conf +5 -0
  126. package/dist/server/engine/samples/fail2ban/filter.d/postfix-pregreet.iredmail.conf +16 -0
  127. package/dist/server/engine/samples/fail2ban/filter.d/postfix.iredmail.conf +18 -0
  128. package/dist/server/engine/samples/fail2ban/filter.d/roundcube.iredmail.conf +9 -0
  129. package/dist/server/engine/samples/fail2ban/jail.d/dovecot.local +8 -0
  130. package/dist/server/engine/samples/fail2ban/jail.d/nginx-http-auth.local +8 -0
  131. package/dist/server/engine/samples/fail2ban/jail.d/postfix-pregreet.local +9 -0
  132. package/dist/server/engine/samples/fail2ban/jail.d/postfix.local +8 -0
  133. package/dist/server/engine/samples/fail2ban/jail.d/roundcube.local +9 -0
  134. package/dist/server/engine/samples/fail2ban/jail.d/sogo.local +8 -0
  135. package/dist/server/engine/samples/fail2ban/jail.d/sshd.local +8 -0
  136. package/dist/server/engine/samples/fail2ban/jail.local +6 -0
  137. package/dist/server/engine/samples/fail2ban/openbsd/rc +27 -0
  138. package/dist/server/engine/samples/fail2ban/sql/fail2ban.mysql +49 -0
  139. package/dist/server/engine/samples/fail2ban/sql/fail2ban.pgsql +48 -0
  140. package/dist/server/engine/samples/firewall/firewalld/services/ssh.xml +6 -0
  141. package/dist/server/engine/samples/firewall/firewalld/zones/iredmail.xml +15 -0
  142. package/dist/server/engine/samples/firewall/iptables/ip6tables.init.debian +362 -0
  143. package/dist/server/engine/samples/firewall/iptables/ip6tables.rules +53 -0
  144. package/dist/server/engine/samples/firewall/iptables/iptables.init.debian +363 -0
  145. package/dist/server/engine/samples/firewall/iptables/iptables.rules +54 -0
  146. package/dist/server/engine/samples/firewall/nftables.conf +58 -0
  147. package/dist/server/engine/samples/freebsd/newsyslog.conf.d/dovecot.conf +3 -0
  148. package/dist/server/engine/samples/freebsd/newsyslog.conf.d/iredapd.conf +1 -0
  149. package/dist/server/engine/samples/freebsd/newsyslog.conf.d/mlmmjadmin.conf +1 -0
  150. package/dist/server/engine/samples/freebsd/newsyslog.conf.d/php-fpm.conf +2 -0
  151. package/dist/server/engine/samples/freebsd/newsyslog.conf.d/slapd.conf +1 -0
  152. package/dist/server/engine/samples/freebsd/syslog.d/dovecot.conf +2 -0
  153. package/dist/server/engine/samples/freebsd/syslog.d/fail2ban.conf +2 -0
  154. package/dist/server/engine/samples/freebsd/syslog.d/iredapd.conf +2 -0
  155. package/dist/server/engine/samples/freebsd/syslog.d/mlmmjadmin.conf +2 -0
  156. package/dist/server/engine/samples/freebsd/syslog.d/php-fpm.conf +2 -0
  157. package/dist/server/engine/samples/freebsd/syslog.d/slapd.conf +2 -0
  158. package/dist/server/engine/samples/iredmail/iredmail.mysql +491 -0
  159. package/dist/server/engine/samples/iredmail/iredmail.pgsql +465 -0
  160. package/dist/server/engine/samples/iredmail/iredmail.schema +456 -0
  161. package/dist/server/engine/samples/iredmail/used_quota_triggers_dovecot_2.3.pgsql +40 -0
  162. package/dist/server/engine/samples/iredmail/used_quota_triggers_dovecot_2.4.pgsql +18 -0
  163. package/dist/server/engine/samples/logrotate/dovecot +13 -0
  164. package/dist/server/engine/samples/logrotate/iredapd +13 -0
  165. package/dist/server/engine/samples/logrotate/mlmmjadmin +13 -0
  166. package/dist/server/engine/samples/logrotate/openldap +19 -0
  167. package/dist/server/engine/samples/logrotate/php-fpm +13 -0
  168. package/dist/server/engine/samples/openbsd/ldapd.conf +58 -0
  169. package/dist/server/engine/samples/openbsd/pf.conf +28 -0
  170. package/dist/server/engine/samples/postfix/command_filter.pcre +3 -0
  171. package/dist/server/engine/samples/postfix/freebsd/mailer.conf +9 -0
  172. package/dist/server/engine/samples/postfix/helo_access.pcre +180 -0
  173. package/dist/server/engine/samples/postfix/ldap/catchall_maps.cf +11 -0
  174. package/dist/server/engine/samples/postfix/ldap/recipient_bcc_maps_domain.cf +11 -0
  175. package/dist/server/engine/samples/postfix/ldap/recipient_bcc_maps_user.cf +11 -0
  176. package/dist/server/engine/samples/postfix/ldap/relay_domains.cf +11 -0
  177. package/dist/server/engine/samples/postfix/ldap/sender_bcc_maps_domain.cf +11 -0
  178. package/dist/server/engine/samples/postfix/ldap/sender_bcc_maps_user.cf +11 -0
  179. package/dist/server/engine/samples/postfix/ldap/sender_dependent_relayhost_maps_domain.cf +11 -0
  180. package/dist/server/engine/samples/postfix/ldap/sender_dependent_relayhost_maps_user.cf +11 -0
  181. package/dist/server/engine/samples/postfix/ldap/sender_login_maps.cf +11 -0
  182. package/dist/server/engine/samples/postfix/ldap/transport_maps_domain.cf +11 -0
  183. package/dist/server/engine/samples/postfix/ldap/transport_maps_user.cf +11 -0
  184. package/dist/server/engine/samples/postfix/ldap/virtual_alias_maps.cf +11 -0
  185. package/dist/server/engine/samples/postfix/ldap/virtual_group_maps.cf +11 -0
  186. package/dist/server/engine/samples/postfix/ldap/virtual_group_members_maps.cf +11 -0
  187. package/dist/server/engine/samples/postfix/ldap/virtual_mailbox_domains.cf +11 -0
  188. package/dist/server/engine/samples/postfix/ldap/virtual_mailbox_maps.cf +12 -0
  189. package/dist/server/engine/samples/postfix/main.cf +282 -0
  190. package/dist/server/engine/samples/postfix/main.cf.amavisd +7 -0
  191. package/dist/server/engine/samples/postfix/main.cf.dovecot +8 -0
  192. package/dist/server/engine/samples/postfix/main.cf.ldap +39 -0
  193. package/dist/server/engine/samples/postfix/main.cf.mlmmj +5 -0
  194. package/dist/server/engine/samples/postfix/main.cf.mysql +39 -0
  195. package/dist/server/engine/samples/postfix/main.cf.pgsql +39 -0
  196. package/dist/server/engine/samples/postfix/main.cf.postscreen +30 -0
  197. package/dist/server/engine/samples/postfix/master.cf +87 -0
  198. package/dist/server/engine/samples/postfix/mysql/catchall_maps.cf +5 -0
  199. package/dist/server/engine/samples/postfix/mysql/domain_alias_catchall_maps.cf +5 -0
  200. package/dist/server/engine/samples/postfix/mysql/domain_alias_maps.cf +5 -0
  201. package/dist/server/engine/samples/postfix/mysql/recipient_bcc_maps_domain.cf +5 -0
  202. package/dist/server/engine/samples/postfix/mysql/recipient_bcc_maps_user.cf +5 -0
  203. package/dist/server/engine/samples/postfix/mysql/relay_domains.cf +5 -0
  204. package/dist/server/engine/samples/postfix/mysql/sender_bcc_maps_domain.cf +5 -0
  205. package/dist/server/engine/samples/postfix/mysql/sender_bcc_maps_user.cf +5 -0
  206. package/dist/server/engine/samples/postfix/mysql/sender_dependent_relayhost_maps.cf +6 -0
  207. package/dist/server/engine/samples/postfix/mysql/sender_login_maps.cf +5 -0
  208. package/dist/server/engine/samples/postfix/mysql/transport_maps_domain.cf +5 -0
  209. package/dist/server/engine/samples/postfix/mysql/transport_maps_maillist.cf +5 -0
  210. package/dist/server/engine/samples/postfix/mysql/transport_maps_user.cf +5 -0
  211. package/dist/server/engine/samples/postfix/mysql/virtual_alias_maps.cf +5 -0
  212. package/dist/server/engine/samples/postfix/mysql/virtual_mailbox_domains.cf +5 -0
  213. package/dist/server/engine/samples/postfix/mysql/virtual_mailbox_maps.cf +5 -0
  214. package/dist/server/engine/samples/postfix/pgsql/catchall_maps.cf +5 -0
  215. package/dist/server/engine/samples/postfix/pgsql/domain_alias_catchall_maps.cf +5 -0
  216. package/dist/server/engine/samples/postfix/pgsql/domain_alias_maps.cf +5 -0
  217. package/dist/server/engine/samples/postfix/pgsql/recipient_bcc_maps_domain.cf +5 -0
  218. package/dist/server/engine/samples/postfix/pgsql/recipient_bcc_maps_user.cf +5 -0
  219. package/dist/server/engine/samples/postfix/pgsql/relay_domains.cf +5 -0
  220. package/dist/server/engine/samples/postfix/pgsql/sender_bcc_maps_domain.cf +5 -0
  221. package/dist/server/engine/samples/postfix/pgsql/sender_bcc_maps_user.cf +5 -0
  222. package/dist/server/engine/samples/postfix/pgsql/sender_dependent_relayhost_maps.cf +6 -0
  223. package/dist/server/engine/samples/postfix/pgsql/sender_login_maps.cf +5 -0
  224. package/dist/server/engine/samples/postfix/pgsql/transport_maps_domain.cf +5 -0
  225. package/dist/server/engine/samples/postfix/pgsql/transport_maps_maillist.cf +5 -0
  226. package/dist/server/engine/samples/postfix/pgsql/transport_maps_user.cf +5 -0
  227. package/dist/server/engine/samples/postfix/pgsql/virtual_alias_maps.cf +5 -0
  228. package/dist/server/engine/samples/postfix/pgsql/virtual_mailbox_domains.cf +5 -0
  229. package/dist/server/engine/samples/postfix/pgsql/virtual_mailbox_maps.cf +5 -0
  230. package/dist/server/engine/samples/postfix/postscreen_access.cidr +6 -0
  231. package/dist/server/engine/samples/postgresql/sql/add_first_domain_and_user.sql +34 -0
  232. package/dist/server/engine/samples/postgresql/sql/grant_permissions.sql +14 -0
  233. package/dist/server/engine/samples/postgresql/sql/init_vmail_db.sql +15 -0
  234. package/dist/server/engine/samples/rsyslog.d/1-iredmail-dovecot.conf +23 -0
  235. package/dist/server/engine/samples/rsyslog.d/1-iredmail-fail2ban.conf +2 -0
  236. package/dist/server/engine/samples/rsyslog.d/1-iredmail-iredapd.conf +12 -0
  237. package/dist/server/engine/samples/rsyslog.d/1-iredmail-mlmmjadmin.conf +12 -0
  238. package/dist/server/engine/samples/rsyslog.d/1-iredmail-openldap.conf +2 -0
  239. package/dist/server/engine/samples/rsyslog.d/1-iredmail-phpfpm.conf +3 -0
  240. package/dist/server/engine/samples/spamassassin/local.cf +186 -0
  241. package/dist/server/engine/samples/spamassassin/razor.conf +1 -0
  242. package/dist/server/engine/samples/systemd/clamd.service.d/override.conf +2 -0
  243. package/dist/server/engine/samples/systemd/mariadb.service.d/override.conf +3 -0
  244. package/dist/server/engine/samples/systemd/slapd.service.d/override.conf +6 -0
  245. package/dist/server/engine/samples/yum/CentOS-Linux-AppStream.repo +6 -0
  246. package/dist/server/engine/samples/yum/CentOS-Linux-PowerTools.repo +6 -0
  247. package/dist/server/engine/samples/yum/CentOS-Stream-AppStream.repo +7 -0
  248. package/dist/server/engine/samples/yum/CentOS-Stream-PowerTools.repo +7 -0
  249. package/dist/server/engine/samples/yum/symas-openldap.repo +6 -0
  250. package/dist/server/engine/tools/add_enabled_service.py +60 -0
  251. package/dist/server/engine/tools/backup_mysql.sh +238 -0
  252. package/dist/server/engine/tools/backup_openldap.sh +230 -0
  253. package/dist/server/engine/tools/backup_pgsql.sh +217 -0
  254. package/dist/server/engine/tools/backup_sogo.sh +156 -0
  255. package/dist/server/engine/tools/create_mail_user_OpenLDAP.py +335 -0
  256. package/dist/server/engine/tools/create_mail_user_OpenLDAP.sh +287 -0
  257. package/dist/server/engine/tools/create_mail_user_SQL.sh +127 -0
  258. package/dist/server/engine/tools/enable_postscreen.sh +144 -0
  259. package/dist/server/engine/tools/fail2ban_unban_ip.sh +39 -0
  260. package/dist/server/engine/tools/find_sasl_login_ip.sh +20 -0
  261. package/dist/server/engine/tools/find_top_sasl_usernames.sh +28 -0
  262. package/dist/server/engine/tools/generate_ssl_keys.sh +85 -0
  263. package/dist/server/engine/tools/kill_high_cpu_sogo_process.sh +32 -0
  264. package/dist/server/engine/tools/ldap_assign_user_to_groups.py +151 -0
  265. package/dist/server/engine/tools/ldap_move_members_to_another_group.py +129 -0
  266. package/dist/server/engine/tools/migrate_sql_alias_table.py +177 -0
  267. package/dist/server/engine/update/0.9.8/amavisd.mysql +29 -0
  268. package/dist/server/engine/update/0.9.8/amavisd.pgsql +39 -0
  269. package/dist/server/engine/update/0.9.8/iredmail.mysql +53 -0
  270. package/dist/server/engine/update/0.9.8/iredmail.pgsql +61 -0
  271. package/dist/server/engine/update/0.9.9/iredmail.mysql +2 -0
  272. package/dist/server/engine/update/0.9.9/iredmail.pgsql +2 -0
  273. package/dist/server/engine/update/1.0/iredmail.mysql +2 -0
  274. package/dist/server/engine/update/1.0/iredmail.pgsql +2 -0
  275. package/dist/server/engine/update/1.2/last_login.mysql +16 -0
  276. package/dist/server/engine/update/1.4.0/iredmail.mysql +22 -0
  277. package/dist/server/engine/update/1.4.0/iredmail.pgsql +20 -0
  278. package/dist/server/engine/update/1.4.1/iredmail.mysql +3 -0
  279. package/dist/server/engine/update/1.4.1/iredmail.pgsql +3 -0
  280. package/dist/server/engine/update/1.4.1/sogo.mysql +11 -0
  281. package/dist/server/engine/update/1.4.1/sogo.pgsql +30 -0
  282. package/dist/server/engine/update/1.4.1/update-ldap.py +66 -0
  283. package/dist/server/engine/update/1.4.2/iredmail.mysql +9 -0
  284. package/dist/server/engine/update/1.4.2/iredmail.pgsql +9 -0
  285. package/dist/server/engine/update/1.4.2/sogo.pgsql +30 -0
  286. package/dist/server/engine/update/1.6.0/sogo_view.pgsql +27 -0
  287. package/dist/server/engine/update/1.6.3/iredmail.mysql +1 -0
  288. package/dist/server/engine/update/1.7.0/fail2ban.mysql +11 -0
  289. package/dist/server/engine/update/1.7.0/fail2ban.pgsql +12 -0
  290. package/dist/server/engine/update/1.7.1/amavisd.mysql +1 -0
  291. package/dist/server/engine/update/1.7.2/vmail.mysql +30 -0
  292. package/dist/server/engine/update/1.7.3/deleted_mailboxes.mysql +43 -0
  293. package/dist/server/engine/update/1.7.3/iredadmin.mysql +26 -0
  294. package/dist/server/engine/update/1.7.3/vmail.mysql +79 -0
  295. package/dist/server/engine/update/1.7.3/vmail.pgsql +9 -0
  296. package/dist/server/engine/update/README.md +1 -0
  297. package/dist/server/engine/update/ldap/README.md +40 -0
  298. package/dist/server/engine/update/ldap/update-ldap-dovecot-2.3.py +69 -0
  299. package/dist/server/index.js +55574 -53675
  300. package/dist/server/migrations/0071_gh_device_token.sql +3 -0
  301. package/dist/server/migrations/0072_gh_device_token_method.sql +1 -0
  302. package/dist/server/migrations/meta/_journal.json +14 -0
  303. package/dist/setup-HQIZLUOJ.js +20 -0
  304. package/dist/{signin-DR462ERO.js → signin-ITOPKKUB.js} +13 -9
  305. package/dist/{sso-oidc-VBZLJUK5.js → sso-oidc-NON2PD7Y.js} +13 -9
  306. package/dist/{sts-EJLZ4Z77.js → sts-HHFFSAY2.js} +12 -8
  307. package/package.json +1 -1
  308. package/dist/bare-ITM45QBX.js +0 -18
  309. package/dist/cloud-JMPHO3CW.js +0 -7
  310. package/dist/cloud-W5G6YXAY.js +0 -24
  311. package/dist/dist-es-4C322O5D.js +0 -22
  312. package/dist/docker-3FVJMFC3.js +0 -12
  313. package/dist/docker-edge-executor-ZIWAZWPL.js +0 -9
  314. package/dist/edge-import-Y34YL6JK.js +0 -39
  315. package/dist/executor-J7BHW5HF.js +0 -26
  316. package/dist/nginx-YZWKYKQU.js +0 -16
  317. package/dist/noop-RRNCIUI5.js +0 -7
  318. package/dist/setup-5X3WEEHA.js +0 -14
@@ -0,0 +1,238 @@
1
+ #!/usr/bin/env bash
2
+ # Author: Zhang Huangbin (zhb@iredmail.org)
3
+ # Date: 16/09/2007
4
+ # Purpose: Backup specified mysql databases with command 'mysqldump'.
5
+ # License: This shell script is part of iRedMail project, released under
6
+ # GPL v2.
7
+
8
+ ###########################
9
+ # REQUIREMENTS
10
+ ###########################
11
+ #
12
+ # * Required commands:
13
+ # + mysqldump
14
+ # + du
15
+ # + bzip2 # If bzip2 is not available, change 'CMD_COMPRESS'
16
+ # # to use 'gzip'.
17
+ #
18
+
19
+ ###########################
20
+ # USAGE
21
+ ###########################
22
+ #
23
+ # * It stores all backup copies in directory '/var/vmail/backup' by default,
24
+ # You can change it in variable $BACKUP_ROOTDIR below.
25
+ #
26
+ # * Set correct values for below variables:
27
+ #
28
+ # BACKUP_ROOTDIR
29
+ # MYSQL_ROOT_USER
30
+ # DATABASES
31
+ # DB_CHARACTER_SET
32
+ #
33
+ # * Add crontab job for root user (or whatever user you want):
34
+ #
35
+ # # crontab -e -u root
36
+ # 1 4 * * * bash /path/to/backup_mysql.sh
37
+ #
38
+ # * Make sure 'crond' service is running, and will start automatically when
39
+ # system startup:
40
+ #
41
+ # # ---- On RHEL/CentOS ----
42
+ # # chkconfig --level 345 crond on
43
+ # # /etc/init.d/crond status
44
+ #
45
+ # # ---- On Debian/Ubuntu ----
46
+ # # update-rc.d cron defaults
47
+ # # /etc/init.d/cron status
48
+ #
49
+
50
+ #########################################################
51
+ # Modify below variables to fit your need ----
52
+ #########################################################
53
+ # Keep backup for how many days. Default is 90 days.
54
+ KEEP_DAYS='90'
55
+
56
+ # Where to store backup copies.
57
+ export BACKUP_ROOTDIR='/var/vmail/backup'
58
+
59
+ # MySQL username. Root user is required to dump all databases.
60
+ export MYSQL_ROOT_USER='root'
61
+
62
+ # ~/.my.cnf
63
+ export MYSQL_DOT_MY_CNF='/root/.my.cnf'
64
+
65
+ # Databases we should backup.
66
+ # Multiple databases MUST be seperated by SPACE.
67
+ export DATABASES='mysql vmail roundcubemail amavisd iredadmin sogo iredapd sa_bayes'
68
+
69
+ # Database character set for ALL databases.
70
+ # Note: Currently, it doesn't support to specify character set for each databases.
71
+ export DB_CHARACTER_SET="utf8"
72
+
73
+ #########################################################
74
+ # You do *NOT* need to modify below lines.
75
+ #########################################################
76
+ export PATH='/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin'
77
+
78
+ # Commands.
79
+ export CMD_DATE='/bin/date'
80
+ export CMD_DU='du -sh'
81
+ export CMD_COMPRESS='bzip2 -9'
82
+ export COMPRESS_SUFFIX='bz2'
83
+ export CMD_MYSQL="mysql --defaults-file=${MYSQL_DOT_MY_CNF} -u${MYSQL_ROOT_USER}"
84
+ export CMD_MYSQLDUMP="mysqldump --defaults-file=${MYSQL_DOT_MY_CNF} -u${MYSQL_ROOT_USER} --events --ignore-table=mysql.event --default-character-set=${DB_CHARACTER_SET} --skip-comments"
85
+
86
+ # Date.
87
+ export YEAR="$(${CMD_DATE} +%Y)"
88
+ export MONTH="$(${CMD_DATE} +%m)"
89
+ export DAY="$(${CMD_DATE} +%d)"
90
+ export TIME="$(${CMD_DATE} +%H-%M-%S)"
91
+ export TIMESTAMP="${YEAR}-${MONTH}-${DAY}-${TIME}"
92
+
93
+ # Pre-defined backup status
94
+ export BACKUP_SUCCESS='YES'
95
+
96
+ # Define, check, create directories.
97
+ export BACKUP_DIR="${BACKUP_ROOTDIR}/mysql/${YEAR}/${MONTH}/${DAY}"
98
+
99
+ # Find the old backup which should be removed.
100
+ export REMOVE_OLD_BACKUP='YES'
101
+
102
+ export KERNEL="$(uname -s)"
103
+ if [[ X"${KERNEL}" == X'Linux' ]]; then
104
+ shift_year=$(date --date="${KEEP_DAYS} days ago" "+%Y")
105
+ shift_month=$(date --date="${KEEP_DAYS} days ago" "+%m")
106
+ shift_day=$(date --date="${KEEP_DAYS} days ago" "+%d")
107
+ elif [[ X"${KERNEL}" == X'FreeBSD' ]]; then
108
+ shift_year=$(date -j -v-${KEEP_DAYS}d "+%Y")
109
+ shift_month=$(date -j -v-${KEEP_DAYS}d "+%m")
110
+ shift_day=$(date -j -v-${KEEP_DAYS}d "+%d")
111
+ elif [[ X"${KERNEL}" == X'OpenBSD' ]]; then
112
+ epoch_seconds_now="$(date +%s)"
113
+ epoch_shift="$((${KEEP_DAYS} * 86400))"
114
+ epoch_seconds_old="$((epoch_seconds_now - epoch_shift))"
115
+
116
+ shift_year=$(date -r ${epoch_seconds_old} "+%Y")
117
+ shift_month=$(date -r ${epoch_seconds_old} "+%m")
118
+ shift_day=$(date -r ${epoch_seconds_old} "+%d")
119
+ else
120
+ export REMOVE_OLD_BACKUP='NO'
121
+ fi
122
+
123
+ export REMOVED_BACKUP_DIR="${BACKUP_ROOTDIR}/mysql/${shift_year}/${shift_month}/${shift_day}"
124
+ export REMOVED_BACKUP_MONTH_DIR="${BACKUP_ROOTDIR}/mysql/${shift_year}/${shift_month}"
125
+ export REMOVED_BACKUP_YEAR_DIR="${BACKUP_ROOTDIR}/mysql/${shift_year}"
126
+
127
+ # Log file
128
+ export LOGFILE="${BACKUP_DIR}/${TIMESTAMP}.log"
129
+
130
+ # Verify MySQL connection.
131
+ ${CMD_MYSQL} -e "show databases" &>/dev/null
132
+ if [ X"$?" != X"0" ]; then
133
+ echo "[ERROR] MySQL username or password is incorrect in file ${0}." 1>&2
134
+ echo "Please fix them first." 1>&2
135
+
136
+ exit 255
137
+ fi
138
+
139
+ # Check and create directories.
140
+ [ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR} 2>/dev/null
141
+ chown root ${BACKUP_DIR}
142
+ chmod 0400 ${BACKUP_DIR}
143
+
144
+ # Initialize log file.
145
+ echo "* Starting backup: ${TIMESTAMP}." >${LOGFILE}
146
+ echo "* Backup directory: ${BACKUP_DIR}." >>${LOGFILE}
147
+ chmod 0400 ${LOGFILE}
148
+
149
+ # Check whether iredadmin database exists.
150
+ # Used for logging backup status in iredadmin database.
151
+ export has_iredadmin="NO"
152
+ if echo ${DATABASES} | grep 'iredadmin' &>/dev/null; then
153
+ has_iredadmin="YES"
154
+ fi
155
+
156
+ # Backup.
157
+ echo "* Backing up databases: ${DATABASES}." >> ${LOGFILE}
158
+ for db in ${DATABASES}; do
159
+ #backup_db ${db} >>${LOGFILE}
160
+
161
+ #if [ X"$?" == X"0" ]; then
162
+ # echo " - ${db} [DONE]" >> ${LOGFILE}
163
+ #else
164
+ # [ X"${BACKUP_SUCCESS}" == X'YES' ] && export BACKUP_SUCCESS='NO'
165
+ #fi
166
+ output_sql="${BACKUP_DIR}/${db}-${TIMESTAMP}.sql"
167
+
168
+ # Check database existence
169
+ ${CMD_MYSQL} -e "USE ${db}" &>/dev/null
170
+
171
+ if [ X"$?" == X'0' ]; then
172
+ # Dump
173
+ ${CMD_MYSQLDUMP} ${db} > ${output_sql}
174
+ chmod 0400 ${output_sql}
175
+
176
+ if [ X"$?" == X'0' ]; then
177
+ # Get original SQL file size
178
+ original_size="$(${CMD_DU} ${output_sql} | awk '{print $1}')"
179
+
180
+ # Compress
181
+ ${CMD_COMPRESS} ${output_sql} >>${LOGFILE}
182
+ chmod 0400 ${output_sql}.*
183
+
184
+ if [ X"$?" == X'0' ]; then
185
+ rm -f ${output_sql} >> ${LOGFILE}
186
+ fi
187
+
188
+ # Get compressed file size
189
+ compressed_file_name="${output_sql}.${COMPRESS_SUFFIX}"
190
+ compressed_size="$(${CMD_DU} ${compressed_file_name} | awk '{print $1}')"
191
+
192
+ sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Database: ${db}, size: ${compressed_size} (original: ${original_size})', 'cron_backup_sql', '127.0.0.1', UTC_TIMESTAMP());"
193
+ else
194
+ # backup failed
195
+ export BACKUP_SUCCESS='NO'
196
+ sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Database backup failed: ${db}. Log: $(cat ${LOGFILE})', 'cron_backup_sql', '127.0.0.1', UTC_TIMESTAMP());"
197
+ fi
198
+
199
+ # Log to SQL table `iredadmin.log`, so that global domain admins can
200
+ # check backup status (System -> Admin Log)
201
+ if [[ ${has_iredadmin} == "YES" ]]; then
202
+ ${CMD_MYSQL} iredadmin -e "${sql_log_msg}"
203
+ fi
204
+ fi
205
+ done
206
+
207
+ # Append file size of backup files.
208
+ echo -e "* File size:\n----" >>${LOGFILE}
209
+ cd ${BACKUP_DIR} && \
210
+ ${CMD_DU} *${TIMESTAMP}*sql* >>${LOGFILE}
211
+ echo "----" >>${LOGFILE}
212
+
213
+ echo "* Backup completed (Success? ${BACKUP_SUCCESS})." >>${LOGFILE}
214
+
215
+ if [ X"${BACKUP_SUCCESS}" == X'YES' ]; then
216
+ echo "==> Backup completed successfully."
217
+ else
218
+ echo -e "==> Backup completed with !!!ERRORS!!!.\n" 1>&2
219
+ fi
220
+
221
+ if [[ X"${REMOVE_OLD_BACKUP}" == X'YES' ]] && [[ -d "${REMOVED_BACKUP_DIR}" ]]; then
222
+ echo -e "* Old backup found. Deleting: ${REMOVED_BACKUP_DIR}." >>${LOGFILE}
223
+ rm -rf ${REMOVED_BACKUP_DIR} >> ${LOGFILE} 2>&1
224
+
225
+ # Try to remove empty directory.
226
+ rmdir ${REMOVED_BACKUP_MONTH_DIR} 2>/dev/null
227
+ rmdir ${REMOVED_BACKUP_YEAR_DIR} 2>/dev/null
228
+
229
+ sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Remove old backup: ${REMOVED_BACKUP_DIR}.', 'cron_backup_sql', '127.0.0.1', UTC_TIMESTAMP());"
230
+
231
+ if [[ ${has_iredadmin} == "YES" ]]; then
232
+ ${CMD_MYSQL} iredadmin -e "${sql_log_msg}"
233
+ fi
234
+ fi
235
+
236
+ echo "==> Detailed log (${LOGFILE}):"
237
+ echo "========================="
238
+ cat ${LOGFILE}
@@ -0,0 +1,230 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Author: Zhang Huangbin (zhb@iredmail.org)
4
+ # Date: Mar 15, 2012
5
+ # Purpose: Dump whole LDAP tree with command 'slapcat'.
6
+ # License: This shell script is part of iRedMail project, released under
7
+ # GPL v2.
8
+
9
+ ###########################
10
+ # REQUIREMENTS
11
+ ###########################
12
+ #
13
+ # * Required commands:
14
+ # + slapcat
15
+ # + du
16
+ # + bzip2 # If bzip2 is not available, change 'CMD_COMPRESS' to use 'gzip'.
17
+ #
18
+
19
+ ###########################
20
+ # USAGE
21
+ ###########################
22
+ #
23
+ # * It stores all backup copies in directory '/var/vmail/backup' by default,
24
+ # You can change it with variable $BACKUP_ROOTDIR below.
25
+ #
26
+ # * Set correct values for below variables:
27
+ #
28
+ # BACKUP_ROOTDIR
29
+ #
30
+ # * Add crontab job for root user (or whatever user you want):
31
+ #
32
+ # # crontab -e -u root
33
+ # 1 4 * * * bash /path/to/backup_openldap.sh
34
+ #
35
+ # * Make sure 'crond' service is running, and will start automatically when
36
+ # system startup:
37
+ #
38
+ # # ---- On RHEL/CentOS ----
39
+ # # chkconfig --level 345 crond on
40
+ # # /etc/init.d/crond status
41
+ #
42
+ # # ---- On Debian/Ubuntu ----
43
+ # # update-rc.d cron defaults
44
+ # # /etc/init.d/cron status
45
+ #
46
+
47
+ ###############################
48
+ # How to restore backup file:
49
+ ###############################
50
+ # Please refer to wiki tutorial for detail steps:
51
+ # http://www.iredmail.org/docs/backup.restore.html
52
+ #
53
+
54
+ #########################################################
55
+ # Modify below variables to fit your need ----
56
+ #########################################################
57
+ # Where to store backup copies.
58
+ export BACKUP_ROOTDIR='/var/vmail/backup'
59
+
60
+ # Keep backup for how many days. Default is 90 days.
61
+ export KEEP_DAYS='90'
62
+
63
+ #########################################################
64
+ # You do *NOT* need to modify below lines.
65
+ #########################################################
66
+
67
+ export PATH="$PATH:/usr/sbin:/usr/local/sbin/"
68
+
69
+ # Commands.
70
+ export CMD_DATE='/bin/date'
71
+ export CMD_DU='du -sh'
72
+ export CMD_COMPRESS='bzip2 -9'
73
+ export COMPRESS_SUFFIX='bz2'
74
+ export CMD_MYSQL='mysql'
75
+
76
+ # MySQL user and password, used to log backup status to sql table `iredadmin.log`.
77
+ # You can find password of SQL user 'iredadmin' in iRedAdmin config file 'settings.py'.
78
+ #
79
+ # If MYSQL_PASSWD is empty, read password from /root/.my.cnf instead.
80
+ export MYSQL_USER='root'
81
+ export MYSQL_PASSWD=''
82
+ export MYSQL_DOT_MY_CNF='/root/.my.cnf'
83
+
84
+ if [ -f /etc/ldap/slapd.conf ]; then
85
+ export CMD_SLAPCAT='slapcat -f /etc/ldap/slapd.conf'
86
+ elif [ -f /etc/openldap/slapd.conf ]; then
87
+ export CMD_SLAPCAT='slapcat -f /etc/openldap/slapd.conf'
88
+ elif [ -f /usr/local/etc/openldap/slapd.conf ]; then
89
+ export CMD_SLAPCAT='slapcat -f /usr/local/etc/openldap/slapd.conf'
90
+ else
91
+ export CMD_SLAPCAT='slapcat'
92
+ fi
93
+
94
+ # Date.
95
+ export YEAR="$(${CMD_DATE} +%Y)"
96
+ export MONTH="$(${CMD_DATE} +%m)"
97
+ export DAY="$(${CMD_DATE} +%d)"
98
+ export TIME="$(${CMD_DATE} +%H-%M-%S)"
99
+ export TIMESTAMP="${YEAR}-${MONTH}-${DAY}-${TIME}"
100
+
101
+ # Pre-defined backup status
102
+ export BACKUP_SUCCESS='NO'
103
+
104
+ #########
105
+ # Define, check, create directories.
106
+ #
107
+ # Backup directory.
108
+ export BACKUP_DIR="${BACKUP_ROOTDIR}/ldap/${YEAR}/${MONTH}"
109
+ export BACKUP_FILE="${BACKUP_DIR}/${TIMESTAMP}.ldif"
110
+
111
+ # Find the old backup which should be removed.
112
+ export REMOVE_OLD_BACKUP='YES'
113
+
114
+ export KERNEL="$(uname -s)"
115
+ if [[ X"${KERNEL}" == X'Linux' ]]; then
116
+ shift_year=$(date --date="${KEEP_DAYS} days ago" "+%Y")
117
+ shift_month=$(date --date="${KEEP_DAYS} days ago" "+%m")
118
+ shift_day=$(date --date="${KEEP_DAYS} days ago" "+%d")
119
+ elif [[ X"${KERNEL}" == X'FreeBSD' ]]; then
120
+ shift_year=$(date -j -v-${KEEP_DAYS}d "+%Y")
121
+ shift_month=$(date -j -v-${KEEP_DAYS}d "+%m")
122
+ shift_day=$(date -j -v-${KEEP_DAYS}d "+%d")
123
+ elif [[ X"${KERNEL}" == X'OpenBSD' ]]; then
124
+ epoch_seconds_now="$(date +%s)"
125
+ epoch_shift="$((${KEEP_DAYS} * 86400))"
126
+ epoch_seconds_old="$((epoch_seconds_now - epoch_shift))"
127
+
128
+ shift_year=$(date -r ${epoch_seconds_old} "+%Y")
129
+ shift_month=$(date -r ${epoch_seconds_old} "+%m")
130
+ shift_day=$(date -r ${epoch_seconds_old} "+%d")
131
+ else
132
+ export REMOVE_OLD_BACKUP='NO'
133
+ fi
134
+
135
+ export REMOVED_BACKUP_DIR="${BACKUP_ROOTDIR}/ldap/${shift_year}/${shift_month}"
136
+ export REMOVED_BACKUP_MONTH_DIR="${BACKUP_ROOTDIR}/ldap/${shift_year}/${shift_month}"
137
+ export REMOVED_BACKUP_YEAR_DIR="${BACKUP_ROOTDIR}/ldap/${shift_year}"
138
+ export REMOVED_BACKUPS="${BACKUP_ROOTDIR}/ldap/${shift_year}/${shift_month}/${shift_year}-${shift_month}-${shift_day}-*"
139
+
140
+ # Log file
141
+ export LOGFILE="${BACKUP_DIR}/${TIMESTAMP}.log"
142
+
143
+ # Check and create directories.
144
+ [ -d ${BACKUP_DIR} ] || mkdir -p ${BACKUP_DIR}
145
+ chown root ${BACKUP_DIR}
146
+ chmod 0700 ${BACKUP_DIR}
147
+
148
+ # Initialize log file.
149
+ echo "* Starting backup at ${TIMESTAMP}" >> ${LOGFILE}
150
+ echo "* Backup directory: ${BACKUP_DIR}." >> ${LOGFILE}
151
+
152
+ # Backup
153
+ echo "* Dumping LDAP data into file: ${BACKUP_FILE}..." >> ${LOGFILE}
154
+ ${CMD_SLAPCAT} > ${BACKUP_FILE}
155
+
156
+ if [ X"$?" == X"0" ]; then
157
+ export BACKUP_SUCCESS='YES'
158
+
159
+ # Get original backup file size
160
+ original_size="$(${CMD_DU} ${BACKUP_FILE} | awk '{print $1}')"
161
+
162
+ # Compress backup file.
163
+ echo "* Compressing LDIF file with command: '${CMD_COMPRESS}' ..." >> ${LOGFILE}
164
+ ${CMD_COMPRESS} ${BACKUP_FILE} >> ${LOGFILE} 2>&1
165
+
166
+ echo "* [DONE]" >>${LOGFILE}
167
+
168
+ # Get compressed file size
169
+ compressed_file_name="${BACKUP_FILE}.${COMPRESS_SUFFIX}"
170
+ compressed_size="$(${CMD_DU} ${compressed_file_name} | awk '{print $1}')"
171
+
172
+ echo -n "* Removing plain LDIF file: ${BACKUP_FILE}..." >>${LOGFILE}
173
+ rm -f ${BACKUP_FILE} >> ${LOGFILE} 2>&1
174
+ [ X"$?" == X"0" ] && echo -e "\t[DONE]" >>${LOGFILE}
175
+
176
+ sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Backup LDAP data, size: ${original_size}, compressed: ${compressed_size}', 'cron_backup_ldap', '127.0.0.1', UTC_TIMESTAMP());"
177
+ else
178
+ # Log failure
179
+ sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Backup LDAP data failed, check log file ${LOGFILE} for more details.', 'cron_backup_ldap', '127.0.0.1', UTC_TIMESTAMP());"
180
+ fi
181
+
182
+ # Log to SQL table `iredadmin.log`, so that global domain admins can
183
+ # check backup status (System -> Admin Log)
184
+ export LOG_BACKUP_STATUS='YES'
185
+ if [[ -n ${MYSQL_USER} ]]; then
186
+ if [[ -n ${MYSQL_PASSWD} ]]; then
187
+ export CMD_MYSQL_ROOT="${CMD_MYSQL} -u${MYSQL_USER} -p${MYSQL_PASSWD}"
188
+ else
189
+ export CMD_MYSQL_ROOT="${CMD_MYSQL} --defaults-file=${MYSQL_DOT_MY_CNF} -u${MYSQL_USER}"
190
+ fi
191
+
192
+ ${CMD_MYSQL_ROOT} -e "USE iredadmin;" &>/dev/null
193
+ if [[ X"$?" != X'0' ]]; then
194
+ export LOG_BACKUP_STATUS='NO'
195
+ fi
196
+ fi
197
+
198
+ if [[ X"${LOG_BACKUP_STATUS}" == X'YES' ]]; then
199
+ ${CMD_MYSQL_ROOT} iredadmin -e "${sql_log_msg}" >>${LOGFILE} 2>&1
200
+ fi
201
+
202
+ # Append file size of backup files to log file.
203
+ echo "* File size:" >>${LOGFILE}
204
+ echo "=================" >>${LOGFILE}
205
+ ${CMD_DU} ${BACKUP_FILE}* >>${LOGFILE}
206
+ echo "=================" >>${LOGFILE}
207
+
208
+ # Print some message. It will cause cron generates an email to root user.
209
+ if [ X"${BACKUP_SUCCESS}" == X'YES' ]; then
210
+ echo "* [ OK ] Backup completes successfully." >> ${LOGFILE}
211
+ else
212
+ echo "* <<< ERROR >>> Backup not successfully complete." >> ${LOGFILE}
213
+ fi
214
+
215
+ if [ X"${REMOVE_OLD_BACKUP}" == X'YES' -a -d ${REMOVED_BACKUP_DIR} ]; then
216
+ echo -e "* Delete old backup under ${REMOVED_BACKUP_DIR}." >> ${LOGFILE}
217
+ echo -e "* Suppose to delete: ${REMOVED_BACKUPS}" >> ${LOGFILE}
218
+ rm -rf ${REMOVED_BACKUPS} >> ${LOGFILE} 2>&1
219
+
220
+ # Try to remove empty directory.
221
+ rmdir ${REMOVED_BACKUP_MONTH_DIR} 2>/dev/null
222
+ rmdir ${REMOVED_BACKUP_YEAR_DIR} 2>/dev/null
223
+
224
+ if [[ X"${LOG_BACKUP_STATUS}" == X'YES' ]]; then
225
+ sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Remove old backup: ${REMOVED_BACKUPS}.', 'cron_backup_sql', '127.0.0.1', UTC_TIMESTAMP());"
226
+ ${CMD_MYSQL_ROOT} iredadmin -e "${sql_log_msg}"
227
+ fi
228
+ fi
229
+
230
+ cat ${LOGFILE}
@@ -0,0 +1,217 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Author: Zhang Huangbin (zhb _at_ iredmail.org)
4
+ # Date: 2012-09-06
5
+ # Purpose: Backup specified PostgreSQL databases with command 'pg_dump'.
6
+ # License: This shell script is part of iRedMail project, released under GPLv2.
7
+
8
+ ###########################
9
+ # REQUIREMENTS
10
+ ###########################
11
+ #
12
+ # * Required commands:
13
+ # + pg_dump
14
+ # + du
15
+ # + bzip2 # If bzip2 is not available, change 'CMD_COMPRESS'
16
+ # # to use 'gzip'.
17
+ #
18
+
19
+ ###########################
20
+ # USAGE
21
+ ###########################
22
+ #
23
+ # * It stores all backup copies in directory '/var/vmail/backup' by default,
24
+ # You can change it in variable $BACKUP_ROOTDIR below.
25
+ #
26
+ # * Set correct values for below variables:
27
+ #
28
+ # SYS_USER_PGSQL
29
+ # BACKUP_ROOTDIR
30
+ # DATABASES
31
+ #
32
+ # * Add crontab job for root user (or whatever user you want):
33
+ #
34
+ # # crontab -e -u root
35
+ # 1 4 * * * bash /path/to/backup_pgsql.sh
36
+ #
37
+ # * Make sure 'crond' service is running.
38
+ #
39
+
40
+ #########################################################
41
+ # Modify below variables to fit your need ----
42
+ #########################################################
43
+ # Keep backup for how many days. Default is 90 days.
44
+ KEEP_DAYS='90'
45
+
46
+ # System user used to run PostgreSQL daemon.
47
+ # - On Linux, it's postgres.
48
+ # - On FreeBSD, it's pgsql.
49
+ # - On OpenBSD, it's _postgresql.
50
+ export SYS_USER_PGSQL='postgres'
51
+
52
+ # Where to store backup copies.
53
+ export BACKUP_ROOTDIR='/var/vmail/backup'
54
+
55
+ # Databases we should backup.
56
+ # Multiple databases MUST be seperated by SPACE.
57
+ # Your iRedMail server might have below databases:
58
+ # vmail, roundcubemail, cluebringer, amavisd, iredadmin.
59
+ export DATABASES='vmail roundcubemail amavisd iredadmin sogo iredapd sa_bayes'
60
+
61
+ #########################################################
62
+ # You do *NOT* need to modify below lines.
63
+ #########################################################
64
+ export PATH='/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin'
65
+
66
+ # Commands.
67
+ export CMD_DATE='/bin/date'
68
+ export CMD_DU='du -sh'
69
+ export CMD_COMPRESS='bzip2 -9'
70
+ export COMPRESS_SUFFIX='bz2'
71
+ export CMD_PG_DUMP='pg_dump --clean'
72
+
73
+ # Date.
74
+ export YEAR="$(${CMD_DATE} +%Y)"
75
+ export MONTH="$(${CMD_DATE} +%m)"
76
+ export DAY="$(${CMD_DATE} +%d)"
77
+ export TIME="$(${CMD_DATE} +%H-%M-%S)"
78
+ export TIMESTAMP="${YEAR}-${MONTH}-${DAY}-${TIME}"
79
+
80
+ # Pre-defined backup status
81
+ export BACKUP_SUCCESS='YES'
82
+
83
+ # Define, check, create directories.
84
+ export BACKUP_DIR="${BACKUP_ROOTDIR}/pgsql/${YEAR}/${MONTH}/${DAY}"
85
+
86
+ # Find the old backup which should be removed.
87
+ export REMOVE_OLD_BACKUP='YES'
88
+
89
+ export KERNEL="$(uname -s)"
90
+ if [[ X"${KERNEL}" == X'Linux' ]]; then
91
+ shift_year=$(date --date="${KEEP_DAYS} days ago" "+%Y")
92
+ shift_month=$(date --date="${KEEP_DAYS} days ago" "+%m")
93
+ shift_day=$(date --date="${KEEP_DAYS} days ago" "+%d")
94
+ elif [[ X"${KERNEL}" == X'FreeBSD' ]]; then
95
+ shift_year=$(date -j -v-${KEEP_DAYS}d "+%Y")
96
+ shift_month=$(date -j -v-${KEEP_DAYS}d "+%m")
97
+ shift_day=$(date -j -v-${KEEP_DAYS}d "+%d")
98
+ elif [[ X"${KERNEL}" == X'OpenBSD' ]]; then
99
+ epoch_seconds_now="$(date +%s)"
100
+ epoch_shift="$((${KEEP_DAYS} * 86400))"
101
+ epoch_seconds_old="$((epoch_seconds_now - epoch_shift))"
102
+
103
+ shift_year=$(date -r ${epoch_seconds_old} "+%Y")
104
+ shift_month=$(date -r ${epoch_seconds_old} "+%m")
105
+ shift_day=$(date -r ${epoch_seconds_old} "+%d")
106
+ else
107
+ export REMOVE_OLD_BACKUP='NO'
108
+ fi
109
+
110
+ export REMOVED_BACKUP_DIR="${BACKUP_ROOTDIR}/pgsql/${shift_year}/${shift_month}/${shift_day}"
111
+ export REMOVED_BACKUP_MONTH_DIR="${BACKUP_ROOTDIR}/pgsql/${shift_year}/${shift_month}"
112
+ export REMOVED_BACKUP_YEAR_DIR="${BACKUP_ROOTDIR}/pgsql/${shift_year}"
113
+
114
+ # Log file
115
+ export LOGFILE="${BACKUP_DIR}/${TIMESTAMP}.log"
116
+
117
+ # Check and create directories.
118
+ [ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR} 2>/dev/null
119
+ chown root ${BACKUP_DIR}
120
+ chmod 0700 ${BACKUP_DIR}
121
+
122
+ # Get HOME directory of SYS_USER_PGSQL
123
+ export PGSQL_USER_HOMEDIR="$(su - ${SYS_USER_PGSQL} -c 'echo $HOME')"
124
+
125
+ # Initialize log file.
126
+ echo "* Starting at: ${YEAR}-${MONTH}-${DAY}-${TIME}." >${LOGFILE}
127
+ echo "* Backup directory: ${BACKUP_DIR}." >>${LOGFILE}
128
+
129
+ # Check whether iredadmin database exists.
130
+ # Used for logging backup status in iredadmin database.
131
+ export has_iredadmin="NO"
132
+ if echo ${DATABASES} | grep 'iredadmin' &>/dev/null; then
133
+ has_iredadmin="YES"
134
+ fi
135
+
136
+ # Backup.
137
+ echo "* Backing up databases: ${DATABASES}." >> ${LOGFILE}
138
+ for db in ${DATABASES}; do
139
+ output_sql="${db}-${TIMESTAMP}.sql"
140
+
141
+ # Check database existence
142
+ su - "${SYS_USER_PGSQL}" -c "psql -d ${db} -c '\q' >/dev/null 2>&1"
143
+
144
+ # Dump
145
+ if [ X"$?" == X'0' ]; then
146
+ su - "${SYS_USER_PGSQL}" -c "${CMD_PG_DUMP} ${db} > ${PGSQL_USER_HOMEDIR}/${output_sql}"
147
+
148
+ if [ X"$?" == X'0' ]; then
149
+ # Move to backup directory.
150
+ mv ${PGSQL_USER_HOMEDIR}/${output_sql} ${BACKUP_DIR}
151
+
152
+ cd ${BACKUP_DIR}
153
+
154
+ # Get original SQL file size
155
+ original_size="$(${CMD_DU} ${output_sql} | awk '{print $1}')"
156
+
157
+ # Compress
158
+ ${CMD_COMPRESS} ${output_sql} >>${LOGFILE}
159
+
160
+ rm -f ${output_sql} >> ${LOGFILE}
161
+ echo -e " + ${db} [DONE]" >> ${LOGFILE}
162
+
163
+ # Get compressed file size
164
+ compressed_file_name="${output_sql}.${COMPRESS_SUFFIX}"
165
+ compressed_size="$(${CMD_DU} ${compressed_file_name} | awk '{print $1}')"
166
+
167
+ # Log to SQL table `iredadmin.log`, so that global domain admins
168
+ # can check backup status
169
+ sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Database: ${db}, size: ${compressed_size} (original: ${original_size})', 'cron_backup_sql', '127.0.0.1', NOW());"
170
+ else
171
+ export BACKUP_SUCCESS='NO'
172
+ sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Database backup failed: ${db}, check log file ${LOGFILE} for more details.', 'cron_backup_sql', '127.0.0.1', NOW());"
173
+ fi
174
+
175
+ if [[ ${has_iredadmin} == "YES" ]]; then
176
+ su - "${SYS_USER_PGSQL}" >/dev/null <<EOF
177
+ psql -d iredadmin <<EOF2
178
+ ${sql_log_msg}
179
+ EOF2
180
+ EOF
181
+ fi
182
+
183
+ fi
184
+ done
185
+
186
+ # Append file size of backup files.
187
+ echo -e "* File size:\n----" >>${LOGFILE}
188
+ cd ${BACKUP_DIR} && \
189
+ ${CMD_DU} *${TIMESTAMP}*sql* >>${LOGFILE}
190
+ echo "----" >>${LOGFILE}
191
+
192
+ echo "* Backup completed (Success? ${BACKUP_SUCCESS})." >>${LOGFILE}
193
+
194
+ if [ X"${BACKUP_SUCCESS}" == X'YES' ]; then
195
+ echo -e "\n[OK] Backup successfully completed.\n"
196
+ else
197
+ echo -e "\n[ERROR] Backup completed with ERRORS.\n" 1>&2
198
+ fi
199
+
200
+ if [ X"${REMOVE_OLD_BACKUP}" == X'YES' -a -d ${REMOVED_BACKUP_DIR} ]; then
201
+ echo -e "* Old backup found. Deleting: ${REMOVED_BACKUP_DIR}." >>${LOGFILE}
202
+ rm -rf ${REMOVED_BACKUP_DIR} >> ${LOGFILE} 2>&1
203
+
204
+ # Try to remove empty directory.
205
+ rmdir ${REMOVED_BACKUP_MONTH_DIR} 2>/dev/null
206
+ rmdir ${REMOVED_BACKUP_YEAR_DIR} 2>/dev/null
207
+
208
+ if [[ ${has_iredadmin} == "YES" ]]; then
209
+ su - ${SYS_USER_PGSQL} -c "psql -d iredadmin" <<EOF
210
+ INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES
211
+ ('backup', 'info', 'Remove old backup: ${REMOVED_BACKUP_DIR}.', 'cron_backup_sql', '127.0.0.1', NOW());
212
+ EOF
213
+ fi
214
+ fi
215
+
216
+ echo "* Backup log: ${LOGFILE}:"
217
+ cat ${LOGFILE}