From 25866f7509da2b024ba2f50d4b44c895c3974fc7 Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Tue, 8 May 2012 02:53:41 +0200 Subject: Diagrams. --- schemas/Makefile | 33 +++++++++ schemas/ldap.tex | 158 ++++++++++++++++++++++++++++++++++++++++ schemas/network.tex | 205 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 396 insertions(+) create mode 100644 schemas/Makefile create mode 100644 schemas/ldap.tex create mode 100644 schemas/network.tex diff --git a/schemas/Makefile b/schemas/Makefile new file mode 100644 index 0000000..8e81fda --- /dev/null +++ b/schemas/Makefile @@ -0,0 +1,33 @@ +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/ldap.tex b/schemas/ldap.tex new file mode 100644 index 0000000..d4a681e --- /dev/null +++ b/schemas/ldap.tex @@ -0,0 +1,158 @@ +\documentclass[10pt,a4paper]{article} +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[utf8x]{inputenc} +\usepackage{array} +\usepackage{ae} +\usepackage{tikz} +\usetikzlibrary{trees,calc} + +\def\dn#1{\texttt{#1}} + +\newenvironment{entry}[1] + {\begin{minipage}[t][0pt][t]{10cm} + \texttt{#1} + \\[.1\baselineskip] \phantom{cn=}% + \begin{tabular}[!t]{@{}>{\ttfamily\bgroup}l<{\egroup}@{:~}% + >{\sffamily\bgroup}l<{\egroup}@{}}% + } + { \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)}, + growth parent anchor=south west, + edge from parent path={($(\tikzparentnode.south west)+(2.5ex,0)$) |- (\tikzchildnode.west)}, + }, + every node/.style = {anchor=west}, + dn/.style = {font=\ttfamily} +} + +\begin{tikzpicture}[ldaptree] + \node[dn] { {o=mailhosting,dc=fripost,dc=org} } + child { + node[dn] { ou=managers } + child { + node { + \begin{entry}{cn=gustav} + userPassword & \{SSHA\}xxxxxx + \end{entry} + } + } + child [missing] {} + child[dn] { + node { + \begin{entry}{cn=ljo} + userPassword & \dots + \end{entry} + } + } + } + child [missing] {} + child [missing] {} + child [missing] {} + child [missing] {} + child { + node[dn] { ou=services } + child { + node { + \begin{entry}{cn=SMTP} + userPassword & \{SSHA\}xxxxxx + \end{entry} + } + } + child [missing] {} + child { + node { + \begin{entry}{cn=SASLauth} + userPassword & \dots + \end{entry} + } + } + } + child [missing] {} + child [missing] {} + child [missing] {} + child [missing] {} + child { + node[dn] { ou=virtual } + child { + node { + \begin{entry}{dc=fripost.org} + isActive & TRUE + \end{entry} + } + child [missing] {} + child + { + node { + \begin{entry}{mailTarget=user@fripost.org} + mailLocalAddress & user-alias \\ + isActive & TRUE + \end{entry} + } + } + child [missing] {} + child [missing] {} + child + { node { \dn{mailTarget=\dots} } + } + child + { + node { + \begin{entry}{uid=user} + userPassword & \{SSHA\}xxxxxx \\ + isactive & TRUE + \end{entry} + } + } + child [missing] {} + child [missing] {} + child + { node { \dn{uid=\dots} } + } + } + child [missing] {} + child [missing] {} + child [missing] {} + child [missing] {} + child [missing] {} + child [missing] {} + child [missing] {} + child [missing] {} + child [missing] {} + child [missing] {} + child { + node { + \begin{entry}{dc=example.org} + owner & \texttt{uid=user,dc=fripost.org,ou=virtual,\dots} \\ + isActive & TRUE + \end{entry} + } + child [missing] {} + child + { + node { + \begin{entry}{mailTarget=user@fripost.org} + mailLocalAddress & user \\ + isActive & TRUE + \end{entry} + } + } + child [missing] {} + child [missing] {} + child + { node { \dn{mailTarget=\dots} } + } + child + { node { \dn{uid=\dots} } + } + } + }; +\end{tikzpicture} + +\end{document} diff --git a/schemas/network.tex b/schemas/network.tex new file mode 100644 index 0000000..3565826 --- /dev/null +++ b/schemas/network.tex @@ -0,0 +1,205 @@ +\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} -- cgit v1.2.3