diff options
-rw-r--r-- | figures/Makefile | 35 | ||||
-rw-r--r-- | figures/ldap.tex (renamed from schemas/ldap.tex) | 10 | ||||
-rw-r--r-- | figures/network.tex | 291 | ||||
-rw-r--r-- | schemas/Makefile | 33 | ||||
-rw-r--r-- | schemas/network.tex | 205 |
5 files changed, 332 insertions, 242 deletions
diff --git a/figures/Makefile b/figures/Makefile new file mode 100644 index 0000000..0b2fd5a --- /dev/null +++ b/figures/Makefile @@ -0,0 +1,35 @@ +BUILD=ldap network + +PDF=$(patsubst %,%.pdf,$(BUILD)) +SVG=$(patsubst %,%.svg,$(BUILD)) +PNG=$(patsubst %,%.png,$(BUILD)) + +.PHONY: all force clean cleanall +# let rubber take care of the pdf dependencies +.PHONY: $(BUILD) all dvi ps pdf svg png clean wc + +all: pdf + +dvi: pdf +ps: pdf +pdf: $(PDF) +svg: $(SVG) +png: $(PNG) + + +%.svg: %.pdf + inkscape $*-cropped.pdf --export-plain-svg=$@ + +%.png: %.pdf +# inkscape $^ --export-area-drawing --export-png=$@ + convert -density 120 -quality 85 $*-cropped.pdf $@ + +%.pdf: %.tex + pdflatex -shell-escape $^ + +clean: + rm -rf *.aux *.log *.auxlock network-cropped* ldap-cropped* $(PDF) $(SVG) $(PNG) + + +wc: $(PDF) + @for I in $^; do echo -n "$$I: "; ps2ascii "$$I" | wc -w; done diff --git a/schemas/ldap.tex b/figures/ldap.tex index d4a681e..123ab83 100644 --- a/schemas/ldap.tex +++ b/figures/ldap.tex @@ -5,7 +5,8 @@ \usepackage{array} \usepackage{ae} \usepackage{tikz} -\usetikzlibrary{trees,calc} +\usetikzlibrary{trees,calc,external} +\tikzexternalize \def\dn#1{\texttt{#1}} @@ -19,9 +20,6 @@ { \end{tabular} \end{minipage}} -\thispagestyle{empty} -\begin{document} - \tikzset{ ldaptree/.style = { grow via three points={one child at (1cm,-1.5\baselineskip) and two children at (1cm,-1.5\baselineskip) and (1cm,-3\baselineskip)}, @@ -32,6 +30,10 @@ dn/.style = {font=\ttfamily} } +\thispagestyle{empty} +\begin{document} + +\tikzsetnextfilename{ldap-cropped} \begin{tikzpicture}[ldaptree] \node[dn] { {o=mailhosting,dc=fripost,dc=org} } child { diff --git a/figures/network.tex b/figures/network.tex new file mode 100644 index 0000000..6cebbf8 --- /dev/null +++ b/figures/network.tex @@ -0,0 +1,291 @@ +\documentclass[10pt,landscape,a4paper]{article} +\usepackage[left=0pt,top=0pt,right=0pt,bottom=0pt]{geometry} +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[utf8x]{inputenc} +\usepackage{ae} +\usepackage{tikz} +\usetikzlibrary{shadows,positioning,calc,fit,fadings,external} + +\tikzset{% + external/optimize command away=\withCurrentBoundingBox +} +\def\withCurrentBoundingBox{\pgfusepath{use as bounding box}} +\tikzexternalize + +\newcommand{\machine}[2][]{ + \begin{pgfonlayer}{background} + \node (machine)[% + fill=yellow!50, opacity=.3, rounded corners, draw, dashed, + fit=#2,inner sep=7pt, + label={[name=machine name]below:\phantom{x}}] {}; + \end{pgfonlayer} + \begin{pgfonlayer}{foreground} + \node at (machine name) {\texttt{#1}}; + \end{pgfonlayer} +} + +\pgfdeclarelayer{background} +\pgfdeclarelayer{foreground} +\pgfsetlayers{background,main,foreground} + +\tikzstyle{service}=[fill=blue!20, + text width=5em, text centered, + minimum height=2.5em, + drop shadow] +\tikzstyle{client}=[fill=green!20, + text width=5em, text centered, + minimum height=2.5em, + drop shadow] +\tikzstyle{what} = [sloped,font=\footnotesize] +\tikzstyle{proto} = [sloped,font=\footnotesize\ttfamily] +\tikzstyle{port} = [sloped,font=\tiny\ttfamily] + +\tikzstyle{route} = [line width=1.5pt,line cap=rect,draw=blue!30] +\tikzstyle{from user} = [draw=green!30] +\tikzstyle{TODO} = [draw=red!30,text=red] + +\pgfdeclarehorizontalshading{shade out}{\paperheight}{ + color(0mm)=(transparent!0); + color(20mm)=(transparent!0); + color(30mm)=(transparent!80); + color(40mm)=(transparent!100); + color(50mm)=(transparent!80); + color(60mm)=(transparent!0); + color(\paperwidth)=(transparent!0) +} +\pgfdeclarefading{fade in}{\pgfuseshading{shade out}} + +\pgfdeclarehorizontalshading{shade in}{\paperheight}{ + color(0mm)=(transparent!100); + color(20mm)=(transparent!100); + color(30mm)=(transparent!20); + color(40mm)=(transparent!0); + color(50mm)=(transparent!20); + color(60mm)=(transparent!100); + color(\paperwidth)=(transparent!100) +} +\pgfdeclarefading{fade out}{\pgfuseshading{shade in}} + + +\thispagestyle{empty} +\begin{document} + +\centering +\vspace*{\fill} +\tikzsetnextfilename{network-cropped} +\begin{tikzpicture} + + \begin{scope}[node distance=5pt] + % The member's machine + \node (IMAP-client)[client] {IMAP client}; + \node (SMTP-client)[client] [above=of IMAP-client] {SMTP client}; + \node (web-browser)[client] [below=of IMAP-client] {Web browser}; + \machine[\textnormal{Your machine}]{ (SMTP-client) (IMAP-client) (web-browser) } + \end{scope} + + \begin{scope}[xshift=10cm, node distance=2cm and 2cm, on grid] + % mistral + \node (o) {}; + \node (LDAP-producer) [service] [above right=of o] {LDAP server}; + \node (SMTP-server-IMAP)[service] [above left=of o] {SMTP server}; + \node (IMAP-server) [service] [below left=of o] {IMAP server}; + \node (mailboxes) [service] [below right=of o] {Mailboxes}; + \machine[mistral]{ (IMAP-server) (LDAP-producer) (mailboxes) } + \end{scope} + + \begin{scope}[xshift=10cm, yshift=-7cm] + % harvey + \node (webmail)[service] {Webmail}; + \machine[harvey]{ (webmail) } + \end{scope} + + \begin{scope}[xshift=10cm, yshift=7cm, node distance=2cm and 2cm, on grid] + % luxemburg, elefant + \node (o) {}; + \node (SMTP-server) [service] [left=of o] {SMTP server}; + \node (LDAP-consumer)[service] [right=of o] {LDAP replicate}; + \machine[luxemburg\textnormal{,} elefant]{ (SMTP-server) (LDAP-consumer) } + \end{scope} + + \begin{scope}[xshift=20cm, node distance=1.25cm, on grid] + % gnu + \node (o) {}; + \node (MSA)[service] [above=of o] {MSA}; + \node (MTA)[service] [below=of o] {MTA}; + \machine[gnu]{ (MSA) (MTA) } + \end{scope} + + \withCurrentBoundingBox + + \begin{pgfonlayer}{background} + \begin{scope} + \pgfsetfading{fade in}{\pgftransformshift{\pgfpoint{14cm}{0}}} +% \fill (-20cm,-10cm) rectangle +(40cm,20cm); + \draw[->, route, from user] + (IMAP-client.east) + .. controls +(2.5cm,0) and +(-2.5cm,0) .. + (IMAP-server.west); + + \draw[->, route, from user] + (web-browser.south) + .. controls +(0,-4cm) and +(-3.5cm,0) .. + (webmail.west); + + \draw[->, route, from user, TODO] + (SMTP-client.north) + .. controls +(0,5cm) and +(-5cm,0) .. + ($0.5*(SMTP-server)+0.5*(LDAP-consumer)+(0,1.5cm)$) + .. controls +(5cm,0) and +(0,5cm) .. + (MSA.north); + \end{scope} + + \begin{scope} + \pgfsetfading{fade out}{\pgftransformshift{\pgfpoint{14cm}{0}}} +% \fill (-20cm,-10cm) rectangle +(40cm,20cm); + \draw[dashed, route, from user] + (IMAP-client.east) + .. controls +(2.5cm,0) and +(-2.5cm,0) .. + (IMAP-server.west); + + \draw[dashed, route, from user] + (web-browser.south) + .. controls +(0,-4cm) and +(-3.5cm,0) .. + (webmail.west); + + \draw[dashed, route, from user, TODO] + (SMTP-client.north) + .. controls +(0,5cm) and +(-5cm,0) .. + ($0.5*(SMTP-server)+0.5*(LDAP-consumer)+(0,1.5cm)$) + .. controls +(5cm,0) and +(0,5cm) .. + (MSA.north); + \end{scope} + + \begin{scope} + \draw[route, from user, draw=none] + (IMAP-client.east) + .. controls +(2.5cm,0) and +(-2.5cm,0) .. + (IMAP-server.west) + node[pos=0.5,above,proto] {IMAPS} + node[pos=0.5,below,what] {\texttt{getmail}} + node[pos=0.96,above,port] {993}; + + \draw[route, from user, draw=none] + (web-browser.south) + .. controls +(0,-4cm) and +(-3.5cm,0) .. + (webmail.west) + node[pos=0.5,above,proto] {HTTPS} + node[pos=0.98,above,port] {443}; + + \draw[route, from user, TODO, draw=none] + (SMTP-client.north) + .. controls +(0,5cm) and +(-5cm,0) .. + ($0.5*(SMTP-server)+0.5*(LDAP-consumer)+(0,1.5cm)$) + node[pos=1,above,proto] {ESMTPSA} + node[pos=1,below,what] {\texttt{sendmail}} + .. controls +(5cm,0) and +(0,5cm) .. + (MSA.north) + node[pos=0.985,above,port] {587}; + \end{scope} + + \draw[->, route] + (IMAP-server) + .. controls +(30:2cm) and +(-120:2cm) .. + (LDAP-producer) + node[pos=0.5,above,proto] {LDAP} + node[pos=0.5,below,what] {auth. bind} + node[pos=0.92,above,port] {389}; + + \draw[->, route] + (webmail.north) + .. controls +(0,1.5cm) and +(0,-1.5cm) .. + (IMAP-server.south) + node[pos=0.5,above,proto] {IMAPS} + node[pos=0.94,above,port] {993}; + + \draw[->, route] + (webmail.30) + .. controls +(30:8cm) and +(0,-2.5cm) .. + (LDAP-producer.south) + node[pos=0.5,above,proto] {LDAP \textnormal{(over \texttt{SSH})}} + node[pos=0.15,above,what] {auth. bind to} + node[pos=0.15,below,what] {mod. password} + node[pos=0.96,above,port] {389}; + + \draw[->,route] (MSA) edge + node[above,proto] {ESMTP} + node[pos=0.9,below,port] {25} + (MTA); + + \draw[->, route] + (MSA.west) + .. controls +(-2.5cm,0) and +(2.5cm,0) .. + (LDAP-producer.east) + node[pos=0.5,above,proto] {LDAP \textnormal{(over \texttt{SSH})}} + node[pos=0.5,below,what] {auth. bind} + node[pos=0.96,below,port] {389}; + + \draw[->,route] (SMTP-server) edge[TODO] + node[above,proto] {LDAPI} + node[below,what] {virtual lookups} + (LDAP-consumer) edge + node[above,proto] {ESMTP \textnormal{(over \texttt{SSH})}} + node[pos=0.96,below,port] {25} + (SMTP-server-IMAP); + + \draw[->,route] (SMTP-server-IMAP) edge + node[above,proto] {LDAP} + node[below,what] {virtual lookups} + node[pos=0.92,above,port] {389} + (LDAP-producer) edge + node[below,what] {\texttt{deliver}} + (IMAP-server); + + \draw[->,route] (IMAP-server) edge + node[below,what] {read,write} + (mailboxes); + + \draw[->,route] (LDAP-consumer) edge + node[above,proto] {LDAP \textnormal{(over \texttt{SSH})}} + node[below,what] {\texttt{syncrepl}} + node[pos=0.95,above,port] {389} + (LDAP-producer); + + \draw[->,route,TODO] + (webmail.east) + .. controls +(3.5cm,0) and +(0,-4cm) .. + (MTA.south) + node[pos=0.5,above,proto] {ESMTPS} + node[pos=0.5,below,what] {\texttt{sendmail}} + node[pos=0.98,above,port] {25}; + \end{pgfonlayer} + + + \begin{pgfonlayer}{background} + \draw[->,route,path fading=north] + ($(SMTP-server.west)+(-5cm,2cm)$) + .. controls +(2cm,0) and +(-2cm,0) .. + (SMTP-server.west); + \end{pgfonlayer} + \path[draw=none] + ($(SMTP-server.west)+(-5cm,2cm)$) + .. controls +(2cm,0) and +(-2cm,0) .. + (SMTP-server.west) + node[pos=0.5,above,proto] {ESMTP} + node[pos=0.97,above,port] {25}; + + \begin{pgfonlayer}{background} + \draw[->,route,TODO,path fading=south] + (MTA.east) + .. controls +(2cm,0) and +(0,2cm) .. + ($(MTA.east)+(2cm,-5cm)$); + \end{pgfonlayer} + \path[TODO,draw=none] + (MTA.east) + .. controls +(2cm,0) and +(0,2cm) .. + ($(MTA.east)+(2cm,-5cm)$) + node[pos=0.5,above,proto] {ESMTP}; +\end{tikzpicture} +\vspace*{\fill} + +\end{document} diff --git a/schemas/Makefile b/schemas/Makefile deleted file mode 100644 index 8e81fda..0000000 --- a/schemas/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -BUILD=ldap network - -RUBBER=rubber --warn boxes --warn refs -PDF=$(patsubst %, %.pdf, $(BUILD)) -SVG=$(patsubst %, %.svg, $(BUILD)) - -.PHONY: all force clean cleanall -# let rubber take care of the pdf dependencies -.PHONY: $(BUILD) all dvi ps pdf force clean wc - -all: pdf - -dvi: pdf -ps: pdf -pdf: $(PDF) -svg: $(SVG) - -%.pdf: %.tex - $(RUBBER) --pdf $< - -%.svg: %.pdf - inkscape $^ --export-plain-svg=$@ - -force: - for I in $(BUILD); do $(RUBBER) --force --pdf "$$I"; done - -clean: - for I in $(BUILD); do $(RUBBER) --clean --ps --pdf "$$I"; done - rm $(SVG) - - -wc: $(PDF) - @for I in $^; do echo -n "$$I: "; ps2ascii "$$I" | wc -w; done diff --git a/schemas/network.tex b/schemas/network.tex deleted file mode 100644 index 3565826..0000000 --- a/schemas/network.tex +++ /dev/null @@ -1,205 +0,0 @@ -\documentclass[10pt,landscape,a4paper]{article} -\usepackage[left=0pt,top=0pt,right=0pt,bottom=0pt]{geometry} -\usepackage[english]{babel} -\usepackage[T1]{fontenc} -\usepackage[utf8x]{inputenc} -\usepackage{ae} -\usepackage{tikz} -\usetikzlibrary{arrows,shadows,positioning,calc,fit,fadings} - -\newcommand{\machine}[2][]{ - \begin{pgfonlayer}{background} - \node[fill=yellow!20, rounded corners, draw=black!50, dashed, - fit=#2,inner sep=7pt, - label=below:\texttt{#1}] {}; - \end{pgfonlayer} -} - - -\thispagestyle{empty} -\begin{document} - -\pgfdeclarelayer{background} -\pgfdeclarelayer{foreground} -\pgfsetlayers{background,main,foreground} - -\tikzstyle{service}=[draw, fill=blue!20, - text width=5em, text centered, - minimum height=2.5em, - drop shadow] -\tikzstyle{what} = [sloped,font=\footnotesize] -\tikzstyle{proto} = [sloped,font=\footnotesize\ttfamily] -\tikzstyle{port} = [sloped,font=\tiny\ttfamily] - -\tikzstyle{TODO} = [draw=red] - -\centering -\vspace*{\fill} -\begin{tikzpicture} - - \begin{scope}[node distance=5pt] - % The member's machine - \node (IMAP-client)[service] {IMAP client}; - \node (SMTP-client)[service] [above=of IMAP-client] {SMTP client}; - \node (web-browser)[service] [below=of IMAP-client] {Web browser}; - \machine[\textnormal{Your machine}]{ (SMTP-client) (IMAP-client) (web-browser) } - \end{scope} - - \begin{scope}[xshift=8cm, node distance=2cm and 2cm, on grid] - % mistral - \node (o) {}; - \node (LDAP-producer) [service] [above right=of o] {LDAP server}; - \node (SMTP-server-IMAP)[service] [above left=of o] {SMTP server}; - \node (IMAP-server) [service] [below left=of o] {IMAP server}; - \node (mailboxes) [service] [below right=of o] {Mailboxes}; - \machine[mistral]{ (IMAP-server) (LDAP-producer) (mailboxes) } - \end{scope} - - \begin{scope}[xshift=8cm, yshift=-7cm] - % harvey - \node (webmail)[service] {Webmail}; - \machine[harvey]{ (webmail) } - \end{scope} - - \begin{scope}[xshift=8cm, yshift=7cm, node distance=2cm and 2cm, on grid] - % luxemburg, elefant - \node (o) {}; - \node (SMTP-server) [service] [left=of o] {SMTP server}; - \node (LDAP-consumer)[service] [right=of o] {LDAP replicate}; - \machine[luxemburg\textnormal{,} elefant]{ (SMTP-server) (LDAP-consumer) } - \end{scope} - - \begin{scope}[xshift=16cm, node distance=1.25cm, on grid] - % gnu - \node (o) {}; - \node (MSA)[service] [above=of o] {MSA}; - \node (MTA)[service] [below=of o] {MTA}; - \machine[gnu]{ (MSA) (MTA) } - \end{scope} - - \path[use as bounding box] - (current bounding box.north east) -- (current bounding box.south west); - - \begin{pgfonlayer}{background} - \draw[->] (IMAP-server) - .. controls +(30:2cm) and +(-120:2cm) .. - (LDAP-producer) - node[pos=0.5,above,proto] {LDAP} - node[pos=0.5,below,what] {auth. bind} - node[pos=0.92,above,port] {389}; - - \draw[->] (IMAP-client.east) - .. controls +(1.5cm,0) and +(-1.5cm,0) .. - (IMAP-server.west) - node[pos=0.5,above,proto] {IMAPS} - node[pos=0.5,below,what] {\texttt{getmail}} - node[pos=0.95,above,port] {993}; - - \draw[->] (web-browser.south) - .. controls +(0,-4cm) and +(-3.5cm,0) .. - (webmail.west) - node[pos=0.5,above,proto] {HTTPS} - node[pos=0.97,above,port] {443}; - - \draw[->] (webmail.north) - .. controls +(0,1.5cm) and +(0,-1.5cm) .. - (IMAP-server.south) - node[pos=0.5,above,proto] {IMAPS} - node[pos=0.94,above,port] {993}; - - \draw[->] (webmail.30) - .. controls +(30:8cm) and +(0,-2.5cm) .. - (LDAP-producer.south) - node[pos=0.5,above,proto] {LDAP \textnormal{(over \texttt{SSH})}} - node[pos=0.15,above,what] {auth. bind to} - node[pos=0.15,below,what] {change password} - node[pos=0.96,above,port] {389}; - - \draw[->] (MSA) edge - node[above,proto] {ESMTP} - node[pos=0.9,below,port] {25} - (MTA); - - \draw[->] (MSA.west) - .. controls +(-2cm,0) and +(2cm,0) .. - (LDAP-producer.east) - node[pos=0.5,above,proto] {LDAP \textnormal{(over \texttt{SSH})}} - node[pos=0.5,below,what] {auth. bind} - node[pos=0.96,below,port] {389}; - - \draw[->,TODO] (SMTP-client.north) - .. controls +(0,5cm) and +(-5cm,0) .. - ($0.5*(SMTP-server)+0.5*(LDAP-consumer)+(0,1.5cm)$) - node[pos=1,above,proto] {ESMTPSA} - node[pos=1,below,what] {\texttt{sendmail}} - .. controls +(5cm,0) and +(0,5cm) .. - (MSA.north) - node[pos=0.99,above,port] {587}; - - \draw[->] (SMTP-server) edge - node[above,proto] {LDAPI} - node[below,what] {virtual lookups} - (LDAP-consumer); - - \draw[->] (SMTP-server-IMAP) edge - node[above,proto] {LDAPI} - node[below,what] {virtual lookups} - (LDAP-producer); - - \draw[->] (SMTP-server) edge - node[above,proto] {ESMTP \textnormal{(over \texttt{SSH})}} - node[pos=0.96,below,port] {25} - (SMTP-server-IMAP); - - \draw[->] (SMTP-server-IMAP) edge - node[below,what] {\texttt{deliver}} - (IMAP-server); - - \draw[->] (IMAP-server) edge - node[below,what] {read, write} - (mailboxes); - - \draw[->] (LDAP-consumer.south) - .. controls +(0,-1.5cm) and +(0,1.5cm) .. - (LDAP-producer.north) - node[pos=0.5,above,proto] {LDAP \textnormal{(over \texttt{SSH})}} - node[pos=0.5,below,what] {\texttt{syncrepl}} - node[pos=0.95,above,port] {389}; - - \draw[->,TODO] (webmail.east) - .. controls +(3.5cm,0) and +(0,-4cm) .. - (MTA.south) - node[pos=0.5,above,proto] {ESMTPS} - node[pos=0.5,below,what] {\texttt{sendmail}} - node[pos=0.97,above,port] {25}; - - \draw[->,path fading=west] - ($(SMTP-server.west)+(-5cm,2cm)$) - .. controls +(2cm,0) and +(-2cm,0) .. - (SMTP-server.west); - \draw[dashed,path fading=east] - ($(SMTP-server.west)+(-5cm,2cm)$) - .. controls +(2cm,0) and +(-2cm,0) .. - (SMTP-server.west); - \path ($(SMTP-server.west)+(-5cm,2cm)$) - .. controls +(2cm,0) and +(-2cm,0) .. - (SMTP-server.west) - node[pos=0.5,above,proto] {ESMTP} - node[pos=0.97,above,port] {25}; - - \draw[path fading=east,TODO] - (MTA.east) - .. controls +(2cm,0) and +(0,2cm) .. - ($(MTA.east)+(2cm,-5cm)$); - \draw[->,dashed,path fading=west,TODO] - (MTA.east) - .. controls +(2cm,0) and +(0,2cm) .. - ($(MTA.east)+(2cm,-5cm)$) - node[pos=0.5,above,proto] {ESMTP} - node[pos=0.97,above,port] {25}; - \end{pgfonlayer} - -\end{tikzpicture} -\vspace*{\fill} - -\end{document} |