Files @ r21:8da9767de359
Branch filter:

Location: public/ws-vacation/doc/README.html

ws
index.php: Recover extra forward user from X-WSV-Forward-To header.
Validate extra forward user. Produce valid XHTML output.
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>Wiedenmann Vacation</title>
<link rel="stylesheet" href="../css/basic.css" type="text/css" />
<link rel="stylesheet" href="../css/pygments.css" type="text/css" />
<link rel="stylesheet" href="../css/ws-project.css" type="text/css" />
</head>
<body>
<div class="document" id="wiedenmann-vacation">
<h1 class="title">Wiedenmann Vacation</h1>
<h2 class="subtitle" id="web-front-end-to-manage-vacation-1-settings">Web Front-End to Manage vacation(1) Settings</h2>
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr class="field"><th class="docinfo-name">Author:</th><td class="field-body"><a class="reference external" href="mailto:sw&#37;&#52;&#48;wiedenmann-seile&#46;de">Wolfgang Scherer</a></td>
</tr>
</tbody>
</table>
<!-- -*- coding: utf-8 -*- -->
<!-- \||<-snip->|| start -->
<!-- Copyright (C) 2012, Wolfgang Scherer, <Wolfgang.Scherer at gmx.de> -->
<!-- Sponsored by WIEDENMANN SEILE GMBH, http://www.wiedenmannseile.de -->
<!--  -->
<!-- This file is part of Wiedenmann Vacation. -->
<!--  -->
<!-- Permission is granted to copy, distribute and/or modify this -->
<!-- document under the terms of the GNU Free Documentation License, -->
<!-- Version 1.3 or any later version published by the Free Software -->
<!-- Foundation; with no Invariant Sections, no Front-Cover Texts, and -->
<!-- no Back-Cover Texts.  A copy of the license is included in the main -->
<!-- documentation of Wiedenmann Vacation. -->
<!-- (progn (forward-line 1)(snip-insert-mode "rst_t.inline-comments" t)) -->
<!-- inline comments (with ws_docutils) -->
<!-- \||<-snap->|| skip -->
<div class="contents topic" id="inhalt">
<p class="topic-title first">Inhalt</p>
<ul class="simple">
<li><a class="reference internal" href="#installation" id="id1">Installation</a></li>
<li><a class="reference internal" href="#user-management" id="id2">User Management</a></li>
<li><a class="reference internal" href="#configuration" id="id3">Configuration</a></li>
</ul>
</div>
<!-- \||<-snap->|| skip -->
<!-- \||<-snap->|| include ^index-header.snip$ -->
<div class="section" id="installation">
<h1><a class="toc-backref" href="#id1">Installation</a></h1>
<ol class="arabic">
<li><p class="first">Copy the program anywhere on your harddrive.</p>
</li>
<li><p class="first">Change alias <cite>/vacation</cite> in <cite>lib/ws-vacation.conf.in</cite>, if desired.</p>
</li>
<li><p class="first">Execute the following commands (as user) to create the run-time files:</p>
<pre class="doctest-block">
&gt;&gt;&gt; make clean
&gt;&gt;&gt; make
</pre>
<p>This substitutes the installation directory in the necessary places.</p>
</li>
<li><p class="first">Copy <cite>lib/ws-vacation.conf</cite> to <cite>/etc/apache2/conf.d/</cite>.</p>
</li>
<li><p class="first">Reload the Apache server:</p>
<pre class="doctest-block">
&gt;&gt;&gt; rcapache2 reload.
</pre>
</li>
<li><p class="first">The sudo(1) setup allows the apache server to execute vacation(1)
as any user (except root) without a password. This is activated by
copying the file <cite>lib/ws-vacation-sudo</cite> into the directory
<cite>/etc/sudoers.d</cite> (ubuntu):</p>
<pre class="doctest-block">
&gt;&gt;&gt; cp lib/ws-vacation-sudo /etc/sudoers.d/ws-vacation-sudo
&gt;&gt;&gt; chmod 0440 /etc/sudoers.d/ws-vacation-sudo
</pre>
<p>or by appending it to the file <cite>/etc/sudoers</cite> (older SuSE):</p>
<pre class="doctest-block">
&gt;&gt;&gt; cat lib/ws-vacation-sudo &gt;&gt;/etc/sudoers
</pre>
</li>
</ol>
</div>
<div class="section" id="user-management">
<h1><a class="toc-backref" href="#id2">User Management</a></h1>
<p>The file <cite>lib/.htpasswd</cite> can be created by the regular means.</p>
<p>An automated script is available that creates the password database
from the system shadow(8) database. Just change into directory <cite>lib</cite>
and execute (as <cite>root</cite>):</p>
<pre class="doctest-block">
&gt;&gt;&gt; php gen_htpasswd.php
</pre>
<div class="note">
<p class="first admonition-title">Bemerkung</p>
<p class="last">If new users are created in the system, this step must be
repeated to update the <cite>.htpasswd</cite> file.</p>
</div>
<p></p>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id3">Configuration</a></h1>
<p>The file <cite>lib/config.php</cite> contains the basic configuration data.</p>
<p>It is possible to fine-tune the standard user selection with:</p>
<ul class="simple">
<li>$ALLOWED_USERS: users who are always accepted (if present in <cite>/etc/passwd</cite>).</li>
<li>$INVALID_USERS: invalid users, which are always ignored.</li>
<li>$ADMIN_USERS: administrators.</li>
</ul>
<p>The file <cite>lib/language.php</cite> contains language specific translation and
also the default vacation(1) message text.</p>
<p>The HTML header and footer can be modified in <cite>lib/templates.php</cite>.</p>
<!-- ================================================== -->
<!-- :rem:`|||:sec:|||`\ Footnotes -->
<!-- ================================================== -->
<p></p>
<!-- \[#] -->
<!-- ================================================== -->
<!-- :rem:`|||:sec:|||`\ References -->
<!-- ================================================== -->
<!-- \||<-snap->|| include ^index-footer.snip$ -->
<p><strong>Copyright</strong></p>
<p>Copyright (C) 2012, Wolfgang Scherer, &lt;<a class="reference external" href="mailto:sw&#37;&#52;&#48;wiedenmann-seile&#46;de">sw<span>&#64;</span>wiedenmann-seile<span>&#46;</span>de</a>&gt;.
Sponsored by <a class="reference external" href="http://www.wiedenmannseile.de">Wiedenmann-Seile GmbH</a>.</p>
<p>See section <a class="reference external" href="README-GFDL.html">GNU Free Documentation License</a> for license conditions for the documentation.</p>
<p>See section <a class="reference external" href="README-COPYING.html">GNU General Public License</a> for license conditions for the program.</p>
<!-- \||<-snip->|| stop -->
<!-- ================================================== -->
<!-- :rem:`|||:sec:|||`\ END -->
<!-- ================================================== -->
<!--  -->
<!-- :ide-menu: Emacs IDE Main Menu - Buffer @BUFFER@ -->
<!-- . M-x `eIDE-menu' ()(eIDE-menu "z") -->
<!-- :ide: DELIM: SNIPPETS (ABOUT)       |q|<- SYM ->||,   ||<- SYM ->||,  @| SYM @ -->
<!-- . (let nil (symbol-tag-normalize-delimiter (cons (cons nil "||<-") (cons "->||" nil)) t) (symbol-tag-switch-delimiter-sets) (symbol-tag-normalize-delimiter (cons (cons nil "||<-") (cons "->||" nil)) t) (setq symbol-tag-match-rx "sn[i]p") (setq symbol-tag-enclose-delimiter-set (symbol-tag-normalize-delimiter (cons (cons nil "@|") (cons "@" nil))))) -->
<!-- :ide: DELIM: SNIPPETS (DOC)          ||<- SYM ->||,     |: SYM :|,     ` SYM ` -->
<!-- . (let nil (symbol-tag-normalize-delimiter (cons (cons nil "|:") (cons ":|" nil)) t) (symbol-tag-switch-delimiter-sets) (symbol-tag-normalize-delimiter (cons (cons nil "||<-") (cons "->||" nil)) t) (setq symbol-tag-match-rx "sn[i]p") (setq symbol-tag-enclose-delimiter-set (symbol-tag-normalize-delimiter (cons (cons "\\(\\`\\|[^\\]\\)" "`") (cons "`" nil))))) -->
<!-- :ide: DELIM: SNIPPETS (SNIP DOC)     ||<- SYM ->||,     |: SYM :|,     @ SYM @ -->
<!-- . (let nil (symbol-tag-normalize-delimiter (cons (cons nil "|:") (cons ":|" nil)) t) (symbol-tag-switch-delimiter-sets) (symbol-tag-normalize-delimiter (cons (cons nil "||<-") (cons "->||" nil)) t) (setq symbol-tag-match-rx "sn[i]p") (setq symbol-tag-enclose-delimiter-set (symbol-tag-normalize-delimiter (cons (cons nil "@") (cons "@" nil))))) -->
<!-- :ide: DELIM: SNIPPETS (FILLME)       ||<- SYM ->||,     :: SYM ::,     @ SYM @ -->
<!-- . (let nil (symbol-tag-normalize-delimiter (cons (cons nil "::") (cons "::" nil)) t) (symbol-tag-switch-delimiter-sets) (symbol-tag-normalize-delimiter (cons (cons nil "||<-") (cons "->||" nil)) t) (setq symbol-tag-match-rx "sn[i]p") (setq symbol-tag-enclose-delimiter-set (symbol-tag-normalize-delimiter (cons (cons nil "@") (cons "@" nil))))) -->
<!-- :ide: DELIM: SNIPPETS (SUBST)        ||<- SYM ->||,      @ SYM @,      @ SYM @ -->
<!-- . (let nil (symbol-tag-normalize-delimiter (cons (cons nil "@") (cons "@" nil)) t) (symbol-tag-switch-delimiter-sets) (symbol-tag-normalize-delimiter (cons (cons nil "||<-") (cons "->||" nil)) t) (setq symbol-tag-match-rx "sn[i]p") (setq symbol-tag-enclose-delimiter-set (symbol-tag-normalize-delimiter (cons (cons "[^\\]" "`") (cons "`" nil))))) -->
<!-- :ide: +#- -->
<!-- . Snippet Delimiter Sets () -->
<!-- :ide: DELIM: ReST (links)              ` SYM `_,    .. _` SYM `,      ` SYM ` -->
<!-- . (let nil (symbol-tag-normalize-delimiter (cons (cons "[^\\]" "`") (cons "`_" nil)) t) (symbol-tag-switch-delimiter-sets) (symbol-tag-normalize-delimiter (cons (cons nil ".. _`") (cons "`:" nil)) t) (setq symbol-tag-enclose-delimiter-set (symbol-tag-normalize-delimiter (cons (cons "\\(\\`\\|[^\\]\\)" "`") (cons "`" nil))))) -->
<!-- :ide: DELIM: STANDARD (GNU quoting)    |: SYM :|,       :: SYM ::,     ` SYM ' -->
<!-- . (let nil (symbol-tag-normalize-delimiter (cons (cons nil "::") (cons "::" nil)) t) (symbol-tag-switch-delimiter-sets) (symbol-tag-normalize-delimiter (cons (cons nil "|:") (cons ":|" nil)) t) (setq symbol-tag-enclose-delimiter-set (symbol-tag-normalize-delimiter (cons (cons nil "`") (cons "'" nil))))) -->
<!-- :ide: DELIM: STANDARD (ReST quoting)   |: SYM :|,       :: SYM ::,     ` SYM ` -->
<!-- . (let nil (symbol-tag-normalize-delimiter (cons (cons nil "::") (cons "::" nil)) t) (symbol-tag-switch-delimiter-sets) (symbol-tag-normalize-delimiter (cons (cons nil "|:") (cons ":|" nil)) t) (setq symbol-tag-enclose-delimiter-set (symbol-tag-normalize-delimiter (cons (cons "[^\\]" "`") (cons "`" nil))))) -->
<!-- :ide: +#- -->
<!-- . Delimiter Sets () -->
<!-- :ide: COMPILE: render reST as LaTeX -->
<!-- . (let* ((fp (buffer-file-name)) (fn (file-name-nondirectory fp))) (save-match-data (if (string-match-t "[.][^.]*$" fn) (setq fn (replace-match "" nil t fn)))) (let ((args (concat " " fp " | ws_rst2latex.py - -traceback | tee " fn ".tex"))) (save-buffer) (compile (concat "PATH=\".:$PATH\"; cat " args)))) -->
<!-- :ide: COMPILE: render reST as MAN -->
<!-- . (let* ((fp (buffer-file-name)) (fn (file-name-nondirectory fp))) (save-match-data (if (string-match-t "[.][^.]*$" fn) (setq fn (replace-match "" nil t fn)))) (let ((args (concat " " fp " | ws_rst2man.py - -traceback "))) (save-buffer) (compile (concat "PATH=\".:$PATH\"; cat " args)))) -->
<!-- :ide: COMPILE: render reST as TXT (via MAN) -->
<!-- . (let* ((fp (buffer-file-name)) (fn (file-name-nondirectory fp))) (save-match-data (if (string-match-t "[.][^.]*$" fn) (setq fn (replace-match "" nil t fn)))) (let ((args (concat " " fp " | ws_rst2man.py - -traceback | man -l -"))) (save-buffer) (compile (concat "PATH=\".:$PATH\"; cat " args)))) -->
<!-- :ide: COMPILE: render reST as ODT - -strip-comments -->
<!-- . (let* ((fp (buffer-file-name)) (fn (file-name-nondirectory fp))) (save-match-data (if (string-match-t "[.][^.]*$" fn) (setq fn (replace-match "" nil t fn)))) (let ((args (concat " " fp " | ws_rst2odt.py - -traceback - -strip-comments | cat >" fn ".odt "))) (save-buffer) (compile (concat "PATH=\".:$PATH\"; cat " args)))) -->
<!-- :ide: COMPILE: render reST as LaTeX, compile PDF and view with gv -->
<!-- . (let* ((fp (buffer-file-name)) (fn (file-name-nondirectory fp))) (save-match-data (if (string-match-t "[.][^.]*$" fn) (setq fn (replace-match "" nil t fn)))) (let ((args (concat " " fp " | ws_rst2latex.py - -traceback | tee " fn ".tex && pdflatex '\\nonstopmode\\input " fn ".tex' && gv " fn ".pdf"))) (save-buffer) (compile (concat "PATH=\".:$PATH\"; cat " args)))) -->
<!-- :ide: COMPILE: render reST as PDF -->
<!-- . (let* ((fp (buffer-file-name)) (fn (file-name-nondirectory fp))) (save-match-data (if (string-match-t "[.][^.]*$" fn) (setq fn (replace-match "" nil t fn)))) (let ((args (concat " " fp " | ws_rst2pdf -e ws_docutils.raw_role >" fn ".pdf"))) (save-buffer) (compile (concat "PATH=\".:$PATH\"; cat " args)))) -->
<!-- :ide: COMPILE: render reST as HTML -->
<!-- . (let* ((fp (buffer-file-name)) (fn (file-name-nondirectory fp))) (save-match-data (if (string-match-t "[.][^.]*$" fn) (setq fn (replace-match "" nil t fn)))) (let ((args (concat " " fp " | ws_rst2html.py - -traceback - -cloak-email-addresses | tee " fn ".html "))) (save-buffer) (compile (concat "PATH=\".:$PATH\"; cat " args)))) -->
<!-- :ide: COMPILE: render reST as pseudoXML -->
<!-- . (let* ((fp (buffer-file-name)) (fn (file-name-nondirectory fp))) (save-match-data (if (string-match-t "[.][^.]*$" fn) (setq fn (replace-match "" nil t fn)))) (let ((args (concat " - -traceback " fp " 2>&1 #| tee " fn ".pxml"))) (save-buffer) (compile (concat "PATH=\".:$PATH\"; ws_rst2pseudoxml.py " args)))) -->
<!-- :ide: +#- -->
<!-- . Process () -->
<!-- :ide: QUO: ~~ Subsubsection ~~ -->
<!-- . (insert "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\:rem\:`|\:sec\:|`\\ ::fillme\::\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" ) -->
<!-- :ide: QUO: - - Subsection - - -->
<!-- . (insert "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\:rem\:`||\:sec\:||`\\ ::fillme\::\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n" ) -->
<!-- :ide: QUO: == Section == -->
<!-- . (insert "==================================================\n\:rem\:`|||\:sec\:|||`\\ ::fillme\::\n==================================================\n" ) -->
<!-- :ide: +#- -->
<!-- . Sections () -->
<!-- :ide: MENU-OUTLINE:  `|||:section:|||' (default) -->
<!-- . (x-eIDE-menu-outline "sec" '("|:" ":|") (cons (cons "^" ".. ") (cons nil nil)) "\\(_`[^`\n]+`\\|\\[[^]\n]+\\]\\|[|][^|\n]+[|]\\|[^:\n]+::\\)") -->
<!--  -->
<!-- Local Variables: -->
<!-- mode: rst -->
<!-- snip-mode: rst -->
<!-- truncate-lines: t -->
<!-- symbol-tag-symbol-regexp: "[-0-9A-Za-z_#]\\([-0-9A-Za-z_. ]*[-0-9A-Za-z_]\\|\\)" -->
<!-- symbol-tag-auto-comment-mode: nil -->
<!-- symbol-tag-srx-is-safe-with-nil-delimiters: nil -->
<!-- End: -->
</div>
</div>
</body>
</html>