Compare commits

..

5 Commits

Author SHA1 Message Date
mlan fe6566c427 - [docker](Dockerfile) Update Z-Push package URL.
- [kopano](src/kopano) Now use ubuntu:20.04 in `kopano-webaddr.sh`.
2021-06-26 12:52:24 +02:00
mlan 313d954381 - [docker](ROADMAP.md) Update roadmap. 2021-05-05 17:05:48 +02:00
mlan 08a3e3ec9b - [docker](Dockerfile) Now use ubuntu:20.04 as base image.
- [docker](Makefile) Don't set BLD_ARG in Makefile.
- [kopano](src/kopano/plugin/movetopublicldap.py) Need explicitly to set `allow_no_value=True` due to update in `configparser.3.8.py`.
- [demo](demo) Update to `mta-apk_list` target.
2021-04-26 09:24:39 +02:00
mlan 0fb026a934 - [demo](demo) Minor fix. 2021-01-29 11:47:53 +01:00
mlan bd88becc7c - [kopano](src/kopano) Bug in kopano-dagent out-of-office now fixed.
- [demo](demo) Make demo less dependent on that curl and firefox beeing installed on the host.
- [demo](demo) Don't expose any ports on the host, avoiding potential conflicts.
2021-01-28 21:53:29 +01:00
13 changed files with 214 additions and 125 deletions

View File

@ -1,3 +1,22 @@
# 1.3.1
- [docker](Dockerfile) Update Z-Push package URL.
- [kopano](src/kopano) Now use ubuntu:20.04 in `kopano-webaddr.sh`.
- [docker](ROADMAP.md) Update roadmap.
# 1.3.0
- [docker](Dockerfile) Now use ubuntu:20.04 as base image.
- [docker](Makefile) Don't set BLD_ARG in Makefile.
- [kopano](src/kopano/plugin/movetopublicldap.py) Need explicitly to set `allow_no_value=True` due to update in `configparser.3.8.py`.
- [demo](demo) Update to `mta-apk_list` target.
# 1.2.9
- [kopano](src/kopano) Bug in kopano-dagent out-of-office now fixed.
- [demo](demo) Make demo less dependent on that curl and firefox beeing installed on the host.
- [demo](demo) Don't expose any ports on the host, avoiding potential conflicts.
# 1.2.8 # 1.2.8
- [test](test) Update to use `mlan/openldap:2`. - [test](test) Update to use `mlan/openldap:2`.

View File

@ -2,7 +2,7 @@
# build arguments, amd64 is the default # build arguments, amd64 is the default
# #
ARG DIST=ubuntu ARG DIST=ubuntu
ARG REL=18.04 ARG REL=20.04
ARG ARCH ARG ARCH
FROM ${ARCH:+$ARCH/}$DIST:$REL AS base FROM ${ARCH:+$ARCH/}$DIST:$REL AS base
@ -236,7 +236,7 @@ ENV DEBIAN_FRONTEND=noninteractive \
# #
# Add Z-Push repository and install Z-Push configured to be used with Kopano and Apache # Add Z-Push repository and install Z-Push configured to be used with Kopano and Apache
# #
RUN debaddr="$(kopano-webaddr.sh --deb final http://repo.z-hub.io/z-push: ${DIST} ${REL})" \ RUN debaddr="$(kopano-webaddr.sh --deb final https://download.kopano.io/zhub/z-push: ${DIST} ${REL})" \
&& echo "deb $debaddr/ /" > /etc/apt/sources.list.d/z-push.list \ && echo "deb $debaddr/ /" > /etc/apt/sources.list.d/z-push.list \
&& wget -qO - $debaddr/Release.key | apt-key add - \ && wget -qO - $debaddr/Release.key | apt-key add - \
&& mkdir -p /var/lib/z-push && chown www-data: /var/lib/z-push \ && mkdir -p /var/lib/z-push && chown www-data: /var/lib/z-push \

View File

@ -5,7 +5,7 @@
-include *.mk -include *.mk
BLD_ARG ?= --build-arg DIST=ubuntu --build-arg REL=18.04 #BLD_ARG ?= --build-arg DIST=ubuntu --build-arg REL=20.04
BLD_REPO ?= mlan/kopano BLD_REPO ?= mlan/kopano
BLD_VER ?= latest BLD_VER ?= latest
BLD_TGT ?= full BLD_TGT ?= full

View File

@ -67,14 +67,14 @@ services:
image: mlan/kopano image: mlan/kopano
networks: networks:
- backend - backend
ports: ports: # Expose ports to host interfaces
- "127.0.0.1:8008:80" # WebApp & EAS (alt. HTTP) - "80:80" # WebApp & EAS (alt. HTTP)
- "127.0.0.1:143:143" # IMAP (not needed if all devices can use EAS) - "143:143" # IMAP (not needed if all devices can use EAS)
- "127.0.0.1:110:110" # POP3 (not needed if all devices can use EAS) - "110:110" # POP3 (not needed if all devices can use EAS)
- "127.0.0.1:8080:8080" # ICAL (not needed if all devices can use EAS) - "8080:8080" # ICAL (not needed if all devices can use EAS)
- "127.0.0.1:993:993" # IMAPS (not needed if all devices can use EAS) - "993:993" # IMAPS (not needed if all devices can use EAS)
- "127.0.0.1:995:995" # POP3S (not needed if all devices can use EAS) - "995:995" # POP3S (not needed if all devices can use EAS)
- "127.0.0.1:8443:8443" # ICALS (not needed if all devices can use EAS) - "8443:8443" # ICALS (not needed if all devices can use EAS)
depends_on: depends_on:
- auth - auth
- db - db
@ -84,10 +84,12 @@ services:
- LDAP_URI=ldap://auth:389/ - LDAP_URI=ldap://auth:389/
- MYSQL_HOST=db - MYSQL_HOST=db
- SMTP_SERVER=mta - SMTP_SERVER=mta
- LDAP_SEARCH_BASE=${LDAP_BASE-dc=example,dc=com} - LDAP_SEARCH_BASE=${AD_BASE-dc=example,dc=com}
- LDAP_USER_TYPE_ATTRIBUTE_VALUE=${LDAP_USEROBJ-posixAccount} - LDAP_USER_TYPE_ATTRIBUTE_VALUE=${AD_USR_OB-kopano-user}
- LDAP_GROUP_TYPE_ATTRIBUTE_VALUE=${LDAP_GROUPOBJ-posixGroup} - LDAP_GROUP_TYPE_ATTRIBUTE_VALUE=${AD_GRP_OB-kopano-group}
- LDAP_GROUPMEMBERS_ATTRIBUTE_TYPE=dn
- LDAP_PROPMAP= - LDAP_PROPMAP=
- DAGENT_PLUGINS=movetopublicldap
- MYSQL_DATABASE=${MYSQL_DATABASE-kopano} - MYSQL_DATABASE=${MYSQL_DATABASE-kopano}
- MYSQL_USER=${MYSQL_USER-kopano} - MYSQL_USER=${MYSQL_USER-kopano}
- MYSQL_PASSWORD=${MYSQL_PASSWORD-secret} - MYSQL_PASSWORD=${MYSQL_PASSWORD-secret}
@ -97,8 +99,9 @@ services:
- IMAPS_LISTEN=*:993 # enable TLS - IMAPS_LISTEN=*:993 # enable TLS
- POP3S_LISTEN=*:995 # enable TLS - POP3S_LISTEN=*:995 # enable TLS
- ICALS_LISTEN=*:8443 # enable TLS - ICALS_LISTEN=*:8443 # enable TLS
- DISABLED_FEATURES=${DISABLED_FEATURES-} # also enable IMAP and POP3 - PLUGIN_SMIME_USER_DEFAULT_ENABLE_SMIME=true
- SYSLOG_LEVEL=${SYSLOG_LEVEL-3} - SYSLOG_LEVEL=${SYSLOG_LEVEL-3}
- LOG_LEVEL=${LOG_LEVEL-3}
volumes: volumes:
- app-conf:/etc/kopano - app-conf:/etc/kopano
- app-atch:/var/lib/kopano/attachments - app-atch:/var/lib/kopano/attachments
@ -113,16 +116,16 @@ services:
hostname: ${MAIL_SRV-mx}.${MAIL_DOMAIN-example.com} hostname: ${MAIL_SRV-mx}.${MAIL_DOMAIN-example.com}
networks: networks:
- backend - backend
ports: ports: # Expose ports to host interfaces
- "127.0.0.1:25:25" # SMTP - "25:25" # SMTP
- "127.0.0.1:465:465" # SMTPS authentication required - "465:465" # SMTPS authentication required
depends_on: depends_on:
- auth - auth
environment: # Virgin config, ignored on restarts unless FORCE_CONFIG given. environment: # Virgin config, ignored on restarts unless FORCE_CONFIG given.
- LDAP_HOST=auth - LDAP_HOST=auth
- VIRTUAL_TRANSPORT=lmtp:app:2003 - VIRTUAL_TRANSPORT=lmtp:app:2003
- LDAP_USER_BASE=ou=${LDAP_USEROU-users},${LDAP_BASE-dc=example,dc=com} - LDAP_USER_BASE=ou=${AD_USR_OU-users},${AD_BASE-dc=example,dc=com}
- LDAP_QUERY_FILTER_USER=(&(objectclass=${LDAP_USEROBJ-posixAccount})(mail=%s)) - LDAP_QUERY_FILTER_USER=(&(objectclass=${AD_USR_OB-kopano-user})(mail=%s))
volumes: volumes:
- mta:/srv - mta:/srv
- app-spam:/var/lib/kopano/spamd # kopano-spamd integration - app-spam:/var/lib/kopano/spamd # kopano-spamd integration
@ -149,8 +152,10 @@ services:
image: mlan/openldap image: mlan/openldap
networks: networks:
- backend - backend
command: --root-cn ${AD_ROOT_CN-admin} --root-pw ${AD_ROOT_PW-secret}
environment: environment:
- LDAP_LOGLEVEL=parse - LDAPBASE=${AD_BASE-dc=example,dc=com}
- LDAPDEBUG=${AD_DEBUG-parse}
volumes: volumes:
- auth:/srv - auth:/srv
- /etc/localtime:/etc/localtime:ro # Use host timezone - /etc/localtime:/etc/localtime:ro # Use host timezone
@ -170,7 +175,7 @@ volumes:
## Demo ## Demo
This repository contains a [demo](demo) directory which hold the [docker-compose.yml](demo/docker-compose.yml) file as well as a [Makefile](demo/Makefile) which might come handy. Start with cloning the [github](https://github.com/mlan/docker-kopano) repository. This repository contains a [demo](demo) directory which hold the [docker-compose.yml](demo/docker-compose.yml) file as well as a [Makefile](demo/Makefile) which might come handy. To run the demo you need [docker-compose](https://docs.docker.com/compose/install/) installed. By default `curl` and `firefox` is expected to be installed, but if not, run `make utils-container` within the [demo](demo) directory once the repository has been cloned. The `make` utility works nicely with [bash-completion](https://github.com/scop/bash-completion) so it can be worth considering having it installed too. Once the dependencies are met, start with cloning the [github](https://github.com/mlan/docker-kopano) repository.
```bash ```bash
git clone https://github.com/mlan/docker-kopano.git git clone https://github.com/mlan/docker-kopano.git
@ -182,7 +187,7 @@ From within the [demo](demo) directory you can start the containers by typing:
make init make init
``` ```
Then you can assess WebApp on the URL [`http://localhost:8008`](http://localhost:8008) and log in with the user name `demo` and password `demo` . You can send yourself a test email by typing: Now you can assess WebApp on the custom docker network at URL `http://app` and log in with the user name `demo` and password `demo`.
```bash ```bash
make web make web
@ -194,7 +199,7 @@ You can send yourself a test email by typing:
make test make test
``` ```
When you are done testing you can destroy the test containers by typing When you are done testing you can destroy the test containers and their volumes by typing:
```bash ```bash
make destroy make destroy

View File

@ -1,22 +1,33 @@
# Road map # Road map
## demo
- check mta-test_imap
## kDAV
Consider integrating support for kDAV which provides CalDAV and CardDAV.
## Revisit Persistent Data ## Revisit Persistent Data
Consider consolidating directories which are candidates for persistence under `/srv`. Consider consolidating directories which are candidates for persistence under `/srv`.
- /etc/kopano
- /var/lib/kopano
- /var/lib/z-push
### Kopano Search ### Kopano Search
The kopano-search module keeps its database here, /var/lib/kopano/search. The kopano-search module keeps its database here, /var/lib/kopano/search.
Consider to also consolidating it under /srv to simplify making it persistent? Consider to also consolidating it under /srv to simplify making it persistent?
## kDAV
Consider integrating support for kDAV which provides CalDAV and CardDAV.
## webapp-passwd ## webapp-passwd
Integrate [webapp-passwd](https://github.com/silentsakky/zarafa-webapp-passwd)? Integrate [webapp-passwd](https://github.com/silentsakky/zarafa-webapp-passwd)?
## kopano-spamd and kopano-search logs
In [KC-1858](https://github.com/Kopano-dev/kopano-core/commit/4a7f833e170167ebfa4f4c55835f8760ce7617f3) we find:
> The syslog log method does not work correctly and thus this change
> disables it. Until it is fixed, Python services do not support
> the syslog log_method. Additionally an environment variable is
> added, which allow to lift this restriction for testing when it
> it set.

1
demo/.gitignore vendored
View File

@ -1 +1,2 @@
ssl ssl
utils-container.mk

View File

@ -1,3 +1,8 @@
# Makefile
#
# demo
#
-include *.mk .env .init.env -include *.mk .env .init.env
SRV_LIST ?= auth app db mta SRV_LIST ?= auth app db mta
@ -10,14 +15,32 @@ SSL_MAIL = auto
SSL_PASS = $(AD_USR_PW) SSL_PASS = $(AD_USR_PW)
#SSL_TRST = $(SSL_SMIME) #SSL_TRST = $(SSL_SMIME)
CURL_DBG ?= -v -s NET_NAME ?= $(COMPOSE_PROJECT_NAME)_backend
CURL_OPT ?= -s -v
TSSL_CMD ?= docker run -i --rm --network $(NET_NAME) drwetter/testssl.sh
CURL_CMD ?= curl
webb_cmd ?= firefox $(1) &
APP_NAME = app
AUT_NAME = auth
AUW_NAME = auth-web
DB_NAME = db
DBW_NAME = db-web
MTA_NAME = mta
APP_FQDN ?= $(call dkr_srv_ip,$(APP_NAME))
AUT_FQDN ?= $(call dkr_srv_ip,$(AUT_NAME))
AUW_FQDN ?= $(call dkr_cnt_ip,$(AUW_NAME))
DB_FQDN ?= $(call dkr_srv_ip,$(DB_NAME))
DBW_FQDN ?= $(call dkr_cnt_ip,$(DBW_NAME))
MTA_FQDN ?= $(call dkr_srv_ip,$(MTA_NAME))
MAIL_FROM ?= test@my-domain.biz
variables: variables:
make -pn | grep -A1 "^# makefile"| grep -v "^#\|^--" | sort | uniq make -pn | grep -A1 "^# makefile"| grep -v "^#\|^--" | sort | uniq
test: all-test_quiet mta-test_smtp test: all-test_quiet mta-test_smtp
init: up auth-init db-init app-down app-up mta-init app-init init: up auth-init db-init app-restart mta-init app-init
ps: ps:
docker-compose ps docker-compose ps
@ -28,7 +51,7 @@ up:
down: down:
docker-compose down docker-compose down
destroy: auth-gui-down all-destroy_smime destroy: auth-web-down db-web-down all-destroy_smime
docker-compose down -v docker-compose down -v
config: config:
@ -74,14 +97,10 @@ $(addsuffix -sv,$(SRV_LIST)):
$(addsuffix -diff,$(SRV_LIST)): $(addsuffix -diff,$(SRV_LIST)):
docker container diff $(COMPOSE_PROJECT_NAME)_$(patsubst %-diff,%,$@)_1 docker container diff $(COMPOSE_PROJECT_NAME)_$(patsubst %-diff,%,$@)_1
$(addsuffix -hostaddr,$(SRV_LIST)):
$(eval myhost := $(call dkr_srv_ip,$(patsubst %-hostaddr,%,$@)))
wait_%: wait_%:
sleep $* sleep $*
web: web: app-web
browse http://localhost:8008 &
auth-init: wait_3 auth-mod_conf auth-add_schema auth-add_data auth-init: wait_3 auth-mod_conf auth-add_schema auth-add_data
@ -180,6 +199,39 @@ kopanoSharedStoreOnly: 1
kopanoResourceType: publicFolder:Public Stores/public kopanoResourceType: publicFolder:Public Stores/public
endef endef
define smtp_mail
@printf "From: <$(2)>\nTo: <$(3)>\nDate: $$(date -R)\nSubject: $(4)\
\n\nGreat news! You can receive email.\n" | tee /dev/tty \
| $(CURL_CMD) $(1) -T - --mail-from $(2) --mail-rcpt $(3) $(CURL_OPT)
endef
define lmtp_mail
printf "LHLO mx\nMAIL FROM: <$(2)>\nRCPT TO: <$(3)>\nDATA\
\nFrom: <$(2)>\nTo: <$(3)>\nDate: $$(date -R)\nSubject: $(4)\
\n\nGreat news! You can receive email.\n.\nQUIT\n" | tee /dev/tty \
| $(CURL_CMD) $(1) -T - $(CURL_OPT)
endef
export define MAKE_UTILS_CONTAINER
CURL_CMD ?= docker run -i --rm --network $(NET_NAME) curlimages/curl
webb_cmd ?= docker run -d --rm --network $(NET_NAME) \
-e DISPLAY=$$$$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \
-v /etc/localtime:/etc/localtime:ro -v $$$$(pwd)/ssl:/ssl \
kennethkl/firefox $$(1)
APP_FQDN ?= $(APP_NAME)
AUT_FQDN ?= $(AUT_NAME)
AUW_FQDN ?= $(AUW_NAME)
DB_FQDN ?= $(DB_NAME)
DBW_FQDN ?= $(DBW_NAME)
MTA_FQDN ?= $(MTA_NAME)
endef
utils-container:
echo "$$MAKE_UTILS_CONTAINER" > utils-container.mk
utils-default:
rm -f utils-container.mk
auth-mod_conf: auth-mod_conf:
echo "$$LDIF_MOD_CONF" | docker-compose exec -T auth ldapmodify -Q echo "$$LDIF_MOD_CONF" | docker-compose exec -T auth ldapmodify -Q
@ -204,15 +256,17 @@ auth-show_cat0:
auth-show_cat1: auth-show_cat1:
docker-compose exec auth slapcat -n1 docker-compose exec auth slapcat -n1
auth-gui-up: auth-web: auth-web-up
docker run -d --name auth-gui --network demo_backend \
-p 127.0.0.1:8001:80 -e PHPLDAPADMIN_LDAP_HOSTS=auth \
-e PHPLDAPADMIN_HTTPS=false osixia/phpldapadmin || true
sleep 2 sleep 2
firefox localhost:8001 & $(call webb_cmd,http://$(AUW_FQDN))
auth-gui-down: auth-web-up:
docker rm -f auth-gui || true docker run -d --name $(AUW_NAME) --network $(NET_NAME) \
-e PHPLDAPADMIN_LDAP_HOSTS=auth -e PHPLDAPADMIN_HTTPS=false \
osixia/phpldapadmin || true
auth-web-down:
docker rm -f $(AUW_NAME) || true
mta-init: mta-init:
@ -220,36 +274,26 @@ mta-bayes:
docker-compose exec mta sh -c 'rm -f bayesian.database.gz && wget http://artinvoice.hu/spams/bayesian.database.gz && gunzip bayesian.database.gz && sa-learn --restore bayesian.database && chown -R amavis: /var/amavis/.spamassassin && rm -rf bayesian.database' docker-compose exec mta sh -c 'rm -f bayesian.database.gz && wget http://artinvoice.hu/spams/bayesian.database.gz && gunzip bayesian.database.gz && sa-learn --restore bayesian.database && chown -R amavis: /var/amavis/.spamassassin && rm -rf bayesian.database'
mta-test_smtp: mta-test_smtp:
printf "From: A tester <test@example.biz>\nTo: <$(AD_USR_CN)@$(MAIL_DOMAIN)>\nDate: $$(date)\nSubject: A SMTP test message\n\nGreat news! You can receive email.\n" \ $(call smtp_mail,smtp://$(MTA_FQDN),$(MAIL_FROM),$(AD_USR_CN)@$(MAIL_DOMAIN),A SMTP test message.)
| curl smtp://localhost -T - --mail-from test@example.biz \
--mail-rcpt $(AD_USR_CN)@$(MAIL_DOMAIN) $(CURL_DBG) mta-test_regexp:
$(call smtp_mail,smtp://$(MTA_FQDN),$(MAIL_FROM),$(AD_USR_CN)+info@$(MAIL_DOMAIN),A regexp SMTP test message.)
mta-test_smtps: mta-test_smtps:
printf "From: A tester <test@example.biz>\nTo: <$(AD_USR_CN)@$(MAIL_DOMAIN)>\nDate: $$(date)\nSubject: A SMTPS test message\n\nGreat news! You can receive secure email.\n" \ $(call smtp_mail,smtps://$(MTA_FQDN),$(MAIL_FROM),$(AD_USR_CN)@$(MAIL_DOMAIN),A secure SMTPS test message.) \
| curl smtps://localhost -T - --mail-from test@example.biz -k \ -k -u $(AD_USR_CN):$(AD_USR_PW)
-u $(AD_USR_CN):$(AD_USR_PW) \
--mail-rcpt $(AD_USR_CN)@$(MAIL_DOMAIN) $(CURL_DBG)
mta-test_smtp2:
printf "From: A info tester <test-info@example.biz>\nTo: <$(AD_USR_CN)-info@$(MAIL_DOMAIN)>\nDate: $$(date)\nSubject: A SMTP test message \n\nGreat news! $(AD_USR_CN)-info@$(MAIL_DOMAIN) can also receive email.\n" \
| curl smtp://localhost -T - --mail-from test@example.biz \
--mail-rcpt $(AD_USR_CN)@$(MAIL_DOMAIN) $(CURL_DBG)
mta-test_shared: all-test_quiet mta-test_shared: all-test_quiet
printf "From: A tester <test@example.biz>\nTo: <$(AD_SHR_CN)@$(MAIL_DOMAIN)>\nDate: $$(date)\nSubject: A SMTP test message\n\nGreat news! A shared store can receive email.\n" \ $(call smtp_mail,smtp://$(MTA_FQDN),$(MAIL_FROM),$(AD_SHR_CN)@$(MAIL_DOMAIN),A shared SMTP test message.)
| curl smtp://localhost -T - --mail-from test@example.biz \
--mail-rcpt $(AD_SHR_CN)@$(MAIL_DOMAIN) $(CURL_DBG)
mta-test_public: all-test_quiet mta-test_public: all-test_quiet
printf "From: A tester <test@example.biz>\nTo: <$(AD_PUB_CN)@$(MAIL_DOMAIN)>\nDate: $$(date)\nSubject: A SMTP test message\n\nGreat news! A public store can receive email.\n" \ $(call smtp_mail,smtp://$(MTA_FQDN),$(MAIL_FROM),$(AD_PUB_CN)@$(MAIL_DOMAIN),A public SMTP test message.)
| curl smtp://localhost -T - --mail-from test@example.biz \
--mail-rcpt $(AD_PUB_CN)@$(MAIL_DOMAIN) $(CURL_DBG)
mta-razor: mta-razor:
docker-compose exec mta run amavis_register_razor docker-compose exec mta run amavis_register_razor
mta-apk_list: mta-apk_list:
docker-compose exec mta /bin/sh -c 'for pkg in $$(apk info 2>/dev/null); do printf "%9s %s\n" $$(apk info -s $$pkg 2>/dev/null | sed -n "2{p;q}") $$pkg; done | sort' docker-compose exec mta /bin/sh -c 'for pkg in $$(apk info 2>/dev/null); do printf "%9s %3s %s\n" $$(apk info -s $$pkg 2>/dev/null | sed -n "2{p;q}") $$pkg; done | sort | sort -k 2,2'
mta-quarantine_list: mta-quarantine_list:
docker-compose exec mta amavis-ls docker-compose exec mta amavis-ls
@ -260,11 +304,11 @@ mta-freshclam_nodns:
mta-clamdtop: mta-clamdtop:
docker-compose exec mta clamdtop docker-compose exec mta clamdtop
mta-debugtools: mta-tools:
docker-compose exec mta apk --no-cache --update add \ docker-compose exec mta apk --no-cache --update add \
nano less lsof htop openldap-clients bind-tools iputils strace nano less lsof htop openldap-clients bind-tools iputils strace iproute2
mta-htop: mta-debugtools mta-htop: mta-tools
docker-compose exec mta htop docker-compose exec mta htop
mta-encrypt: mta-encrypt:
@ -286,62 +330,70 @@ mta-flush_mailq:
mta-test_auth: mta-test_auth:
docker-compose exec mta doveadm auth test $(AD_USR_CN) $(AD_USR_PW) docker-compose exec mta doveadm auth test $(AD_USR_CN) $(AD_USR_PW)
mta-test_imap: mta-hostaddr mta-test_imaps:
curl imaps://$(myhost)/inbox -s --ssl --anyauth -k -X "fetch 1 all" \ $(CURL_CMD) imaps://$(MTA_FQDN)//inbox -X "fetch 1 all" \
-u $(AD_USR_CN):$(AD_USR_PW) --ssl --anyauth -k -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
mta-man:
docker-compose exec mta apk --no-cache --update add man-db man-pages \
postfix-doc cyrus-sasl-doc dovecot-doc spamassassin-doc clamav-doc razor-doc
db-init: db-init:
db-test: db-test:
docker-compose exec db mysqlshow -u $(MYSQL_USER) $(MYSQL_DATABASE) -p$(MYSQL_PASSWORD) docker-compose exec db mysqlshow -u $(MYSQL_USER) $(MYSQL_DATABASE) -p$(MYSQL_PASSWORD)
db-gui-up: db-web: db-web-up
docker run -d --name db-gui --network demo_backend \
-p 127.0.0.1:8002:80 -e PMA_HOST=db \
phpmyadmin/phpmyadmin || true
sleep 2 sleep 2
firefox localhost:8002 & $(call webb_cmd,http://$(DBW_FQDN))
db-gui-down: db-web-up:
docker rm -f db-gui || true docker run -d --name $(DBW_NAME) --network $(NET_NAME) \
-e PMA_HOST=db phpmyadmin/phpmyadmin || true
db-web-down:
docker rm -f $(DBW_NAME) || true
app-init: app-public_store app-create_smime app-init: app-public_store app-create_smime
app-debugtools: app-tools:
docker-compose exec app apt-get update docker-compose exec app apt-get update
docker-compose exec app apt-get install --yes \ docker-compose exec app apt-get install --yes \
less nano ldap-utils htop net-tools lsof iputils-ping dnsutils strace less nano ldap-utils htop net-tools lsof iputils-ping dnsutils strace
app-htop: app-debugtools app-htop: app-tools
docker-compose exec app htop docker-compose exec app htop
app-test_smtp: mta-test_smtp app-test_smtp: mta-test_smtp
app-test_lmtp: app-hostaddr app-test_lmtp:
printf "LHLO mx\nMAIL FROM: <test@example.biz>\nRCPT TO: <$(AD_USR_CN)@$(MAIL_DOMAIN)>\nDATA\nFrom: A tester <test@example.biz>\nTo: <$(AD_USR_CN)@$(MAIL_DOMAIN)>\nDate: $$(date)\nSubject: A LMTP test message from me to you\n\nDelete me, please \n.\nQUIT\n" | nc -C $(myhost) 2003 $(call lmtp_mail,telnet://$(APP_FQDN):2003,$(MAIL_FROM),$(AD_USR_CN)@$(MAIL_DOMAIN),A LMTP test message.)
app-test_all: all-test_muted app-test_imap app-test_pop3 app-test_ical app-test_imaps app-test_pop3s app-test_icals app-test_all: all-test_muted $(addprefix app-test_,imap pop3 ical imaps pop3s icals)
app-test_imap: app-hostaddr app-test_imap:
curl imap://$(myhost) -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_DBG) $(CURL_CMD) imap://$(APP_FQDN) -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
app-test_imaps: app-hostaddr app-test_imaps:
curl imaps://$(myhost) -k -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_DBG) $(CURL_CMD) imaps://$(APP_FQDN) -k -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
app-test_pop3: app-hostaddr app-test_pop3:
curl pop3://$(myhost) -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_DBG) $(CURL_CMD) pop3://$(APP_FQDN) -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
app-test_pop3s: app-hostaddr app-test_pop3s:
curl pop3s://$(myhost) -k -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_DBG) $(CURL_CMD) pop3s://$(APP_FQDN) -k -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
app-test_ical: app-hostaddr app-test_ical:
curl http://$(myhost):8080 -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_DBG) $(CURL_CMD) http://$(APP_FQDN):8080 -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
app-test_icals: app-hostaddr app-test_icals:
curl https://$(myhost):8443 -k -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_DBG) $(CURL_CMD) https://$(APP_FQDN):8443 -k -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
app-test_tls: app-hostaddr app-test_tls:
docker run --rm -it --network demo_backend drwetter/testssl.sh app:993 || true $(TSSL_CMD) $(APP_FQDN):993 || true
app-web:
$(call webb_cmd,http://$(APP_FQDN))
app-test_oof1: app-test_oof1:
docker-compose exec app kopano-oof -u $(AD_USR_CN) -m 1 -t "Dunno when I return" docker-compose exec app kopano-oof -u $(AD_USR_CN) -m 1 -t "Dunno when I return"
@ -352,7 +404,7 @@ app-test_oof0:
app-show_user1: app-show_user1:
docker-compose exec app kopano-admin --details $(AD_USR_CN) docker-compose exec app kopano-admin --details $(AD_USR_CN)
app-show_user2: app-debugtools app-show_user2: app-tools
docker-compose exec app ldapsearch -H ldap://auth:389 -xLLL -b $(AD_BASE) '*' docker-compose exec app ldapsearch -H ldap://auth:389 -xLLL -b $(AD_BASE) '*'
app-show_sync: app-show_sync:
@ -364,18 +416,22 @@ app-create_store:
app-public_store: app-public_store:
docker-compose exec app kopano-storeadm -P docker-compose exec app kopano-storeadm -P
#app-add_user:
# docker-compose exec app kopano-admin -c $(AD_USR_CN) -p $(AD_USR_PW) \
# -e $(AD_USR_CN)@$(MAIL_DOMAIN) -f $(AD_USR_CN) -a 1
$(addprefix app-parms_,archiver dagent gateway ical ldap search server spamd spooler): $(addprefix app-parms_,archiver dagent gateway ical ldap search server spamd spooler):
docker-compose exec app run list_parms $(patsubst app-parms_%,%,$@) docker-compose exec app run list_parms $(patsubst app-parms_%,%,$@)
app-create_smime: all-create_smime app-create_smime: all-create_smime
docker cp ssl/ca.crt $$(docker-compose ps -q app):/usr/local/share/ca-certificates/$(MAIL_DOMAIN)_CA.crt docker cp ssl/ca.crt $(call dkr_srv_cnt,app):/usr/local/share/ca-certificates/$(MAIL_DOMAIN)_CA.crt
docker-compose exec app update-ca-certificates docker-compose exec app update-ca-certificates
all-test_quiet: all-test_quiet:
$(eval CURL_DBG := -s -S ) $(eval CURL_OPT := -s -S )
all-test_muted: all-test_muted:
$(eval CURL_DBG := -s -S >/dev/null || true) $(eval CURL_OPT := -s -S >/dev/null || true)
all-create_smime: ssl/$(AD_USR_CN).p12 all-create_smime: ssl/$(AD_USR_CN).p12

View File

@ -5,21 +5,21 @@ services:
image: mlan/kopano image: mlan/kopano
networks: networks:
- backend - backend
ports: # ports: # Uncomment to expose ports to host interfaces
- "127.0.0.1:8008:80" # WebApp & EAS (alt. HTTP) # - "80:80" # WebApp & EAS (alt. HTTP)
- "127.0.0.1:143:143" # IMAP (not needed if all devices can use EAS) # - "143:143" # IMAP (not needed if all devices can use EAS)
- "127.0.0.1:110:110" # POP3 (not needed if all devices can use EAS) # - "110:110" # POP3 (not needed if all devices can use EAS)
- "127.0.0.1:8080:8080" # ICAL (not needed if all devices can use EAS) # - "8080:8080" # ICAL (not needed if all devices can use EAS)
- "127.0.0.1:993:993" # IMAPS (not needed if all devices can use EAS) # - "993:993" # IMAPS (not needed if all devices can use EAS)
- "127.0.0.1:995:995" # POP3S (not needed if all devices can use EAS) # - "995:995" # POP3S (not needed if all devices can use EAS)
- "127.0.0.1:8443:8443" # ICALS (not needed if all devices can use EAS) # - "8443:8443" # ICALS (not needed if all devices can use EAS)
depends_on: depends_on:
- auth - auth
- db - db
- mta - mta
environment: # Virgin config, ignored on restarts unless FORCE_CONFIG given. environment: # Virgin config, ignored on restarts unless FORCE_CONFIG given.
- USER_PLUGIN=ldap - USER_PLUGIN=ldap
- LDAP_URI=ldap://auth:389/ - LDAP_URI=ldap://auth/
- MYSQL_HOST=db - MYSQL_HOST=db
- SMTP_SERVER=mta - SMTP_SERVER=mta
- LDAP_SEARCH_BASE=${AD_BASE-dc=example,dc=com} - LDAP_SEARCH_BASE=${AD_BASE-dc=example,dc=com}
@ -54,16 +54,15 @@ services:
hostname: ${MAIL_SRV-mx}.${MAIL_DOMAIN-example.com} hostname: ${MAIL_SRV-mx}.${MAIL_DOMAIN-example.com}
networks: networks:
- backend - backend
ports: # ports: # # Uncomment to expose ports to host interfaces
- "127.0.0.1:25:25" # SMTP # - "25:25" # SMTP
- "127.0.0.1:465:465" # SMTPS authentication required # - "465:465" # SMTPS authentication required
depends_on: depends_on:
- auth - auth
environment: # Virgin config, ignored on restarts unless FORCE_CONFIG given. environment: # Virgin config, ignored on restarts unless FORCE_CONFIG given.
- MESSAGE_SIZE_LIMIT=${MESSAGE_SIZE_LIMIT-25600000} - MESSAGE_SIZE_LIMIT=${MESSAGE_SIZE_LIMIT-25600000}
- LDAP_HOST=auth - LDAP_HOST=auth
- VIRTUAL_TRANSPORT=lmtp:app:2003 - VIRTUAL_TRANSPORT=lmtp:app:2003
# - VIRTUAL_TRANSPORT=lmtp:unix:private/transport
- SMTP_RELAY_HOSTAUTH=${SMTP_RELAY_HOSTAUTH-} - SMTP_RELAY_HOSTAUTH=${SMTP_RELAY_HOSTAUTH-}
- SMTP_TLS_SECURITY_LEVEL=${SMTP_TLS_SECURITY_LEVEL-} - SMTP_TLS_SECURITY_LEVEL=${SMTP_TLS_SECURITY_LEVEL-}
- SMTP_TLS_WRAPPERMODE=${SMTP_TLS_WRAPPERMODE-no} - SMTP_TLS_WRAPPERMODE=${SMTP_TLS_WRAPPERMODE-no}
@ -101,7 +100,7 @@ services:
- /etc/localtime:/etc/localtime:ro # Use host timezone - /etc/localtime:/etc/localtime:ro # Use host timezone
auth: auth:
image: mlan/openldap:2 image: mlan/openldap
networks: networks:
- backend - backend
command: --root-cn ${AD_ROOT_CN-admin} --root-pw ${AD_ROOT_PW-secret} command: --root-cn ${AD_ROOT_CN-admin} --root-pw ${AD_ROOT_PW-secret}

View File

@ -8,8 +8,8 @@ _webroot="https://download.kopano.io/community"
_debroot="http://repo.z-hub.io/z-push:" _debroot="http://repo.z-hub.io/z-push:"
_component="core" _component="core"
_stage="final" _stage="final"
_dist="debian" _dist="ubuntu"
_rel="9" _rel="20.04"
_arch="amd64" _arch="amd64"
# #

View File

@ -9,7 +9,7 @@
# #
# The plugin reads two coniguration files. # The plugin reads two coniguration files.
# First it looks for parameters in '/etc/kopano/ldap.cfg' allowing # First it looks for parameters in '/etc/kopano/ldap.cfg' allowing
# common conifuration parameters to be kep tin on place. # common conifuration parameters to be kept in on place.
# Second it reads '/etc/kopano/movetopublicldap.cfg' # Second it reads '/etc/kopano/movetopublicldap.cfg'
# #

View File

@ -48,7 +48,7 @@ class KConfigParser(ZConfigParser):
Change type addition. """ Change type addition. """
def __init__(self, configfile, defaultconfig={}): def __init__(self, configfile, defaultconfig={}):
self.config = configparser.ConfigParser(defaults=defaultconfig, self.config = configparser.ConfigParser(defaults=defaultconfig,
delimiters=('='), comment_prefixes=('#', '!')) delimiters=('='), comment_prefixes=('#', '!'), allow_no_value=True)
self.readZConfig(configfile) self.readZConfig(configfile)
class MoveToPublic(IMapiDAgentPlugin): class MoveToPublic(IMapiDAgentPlugin):

1
test/.gitignore vendored
View File

@ -1 +0,0 @@
local.*

View File

@ -236,11 +236,11 @@ test-up-net:
docker network create $(NET_NAME) 2>/dev/null || true docker network create $(NET_NAME) 2>/dev/null || true
test-down-net: test-down-net:
docker network rm $(NET_NAME) || true
test-down: test-down_0
docker network rm $(NET_NAME) 2>/dev/null || true docker network rm $(NET_NAME) 2>/dev/null || true
test-down: test-down_0 test-down-net acme-destroy
test-down_%: test-down_%:
@docker rm -fv $(APP_NAME) $(DB_NAME) $(AUT_NAME) $(TAW_NAME) 2>/dev/null || true @docker rm -fv $(APP_NAME) $(DB_NAME) $(AUT_NAME) $(TAW_NAME) 2>/dev/null || true
@if [ $* -ge 0 ]; then sleep $(TST_W8S1); fi @if [ $* -ge 0 ]; then sleep $(TST_W8S1); fi
@ -260,7 +260,6 @@ test-lmtp: test-lmtp_0
test-lmtp_%: test-lmtp_%:
printf "LHLO mx\nMAIL FROM: <test@example.biz>\nRCPT TO: <$(AD_USR_CN)@$(AD_DOM)>\nDATA\nFrom: A tester <test@example.biz>\nTo: <$(AD_USR_CN)@$(AD_DOM)>\nDate: $$(date)\nSubject: $(MAIL_SUB)$*\n$(MAIL_MSG)$*\n.\nQUIT\n"\ printf "LHLO mx\nMAIL FROM: <test@example.biz>\nRCPT TO: <$(AD_USR_CN)@$(AD_DOM)>\nDATA\nFrom: A tester <test@example.biz>\nTo: <$(AD_USR_CN)@$(AD_DOM)>\nDate: $$(date)\nSubject: $(MAIL_SUB)$*\n$(MAIL_MSG)$*\n.\nQUIT\n"\
| nc -C $(call dkr_cnt_ip,$(APP_NAME)) 2003 # > /dev/null | nc -C $(call dkr_cnt_ip,$(APP_NAME)) 2003 # > /dev/null
# | nc -C localhost 2003 # > /dev/null
case $* in [1-3]) sleep $(TST_W8S1);; [4-9]) sleep $(TST_W8S2);; esac case $* in [1-3]) sleep $(TST_W8S1);; [4-9]) sleep $(TST_W8S2);; esac
test-cfg_%: test-cfg_%: