mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-04-12 15:10:31 +08:00
Remove incompatible contribWare
This commit is contained in:
parent
a22597b2fb
commit
211de31282
1
CHANGES
1
CHANGES
@ -13,6 +13,7 @@ OpenLDAP 2.0.X Engineering
|
||||
Build Environment
|
||||
Added test000-rootdse
|
||||
Fixed Kerberos detection (ITS#717)
|
||||
Remove incompatible contribWare
|
||||
Documentation
|
||||
Fixed ldappasswd(1) user argument usage
|
||||
Fixed ldapmodify(1) (ITS#719)
|
||||
|
@ -4,4 +4,4 @@
|
||||
##
|
||||
## contrib Makefile.in for OpenLDAP
|
||||
|
||||
SUBDIRS= saucer web_ldap
|
||||
SUBDIRS= saucer
|
||||
|
@ -22,24 +22,6 @@ Current contributions:
|
||||
Contributed by Eric Rosenquist. See saucer/README
|
||||
and its man page for more information.
|
||||
|
||||
tweb
|
||||
HTTP gateway derived from web500gw. Contributed
|
||||
by the Universitaet Tuebingen, GERMANY. See
|
||||
tweb/README for more information.
|
||||
|
||||
web_ldap
|
||||
web frontend (in C) from Jens Moller
|
||||
|
||||
web500gw
|
||||
HTTP gateway for X.500, modeled after go500gw.
|
||||
Contributed by Frank Richter. See web500gw/README
|
||||
for more information.
|
||||
|
||||
whois++
|
||||
WHOIS++ gateway to X.500. Contributed by Mark Prior.
|
||||
See whois++/README for more information.
|
||||
|
||||
|
||||
Please submit your contributions using the OpenLDAP Issue
|
||||
Tracking System <http://www.openldap.org/>.
|
||||
|
||||
|
@ -1,200 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* CHANGES *
|
||||
* *
|
||||
* Function:..A short description of the last modifications of TWEB *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* September 14 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* January 15 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
|
||||
|
||||
|
||||
|
||||
Changes of the web-x.500-gateway TWEB
|
||||
=====================================
|
||||
|
||||
Version: tweb-2.3 1998/10/05
|
||||
|
||||
Changes to code
|
||||
|
||||
- dynamic re-sort and re-display based on entries found in the DIT:
|
||||
SORT definitions given by config files can be changed due to
|
||||
local information within a DIT area; that provides for dynamic
|
||||
definitions of sorting groups and/or display of groups with new
|
||||
labels and/or other sorting order;
|
||||
DISPLAY definitions can be replaced or added dynamically, in order
|
||||
to display contents of entries in other than the statically
|
||||
configured way
|
||||
|
||||
|
||||
Version: tweb-2.2 1998/3/20
|
||||
|
||||
Changes in configuration files (please check!)
|
||||
|
||||
- INDEX-URL (new): display hrefs below a certain dit showing special parts
|
||||
of the entry-dn in any sequence
|
||||
|
||||
- DIT-CONFIG (new): get from a specified location the information how to
|
||||
switch to other gateways depending on the given dn.
|
||||
With NOT-BROWSE you can turn of this functionality for browsing.
|
||||
|
||||
- DISP-SEA-RDN (new): with this option you can make search-results to be
|
||||
displayed only by rdn and not by relative dn to the search-base
|
||||
|
||||
- TON-URLS (new): hereby you can reference a given organization/alunit
|
||||
by TONS (special numbers for organizational hirarchies)
|
||||
example: T013307 can mean:
|
||||
computing centre, dept. development of new services
|
||||
|
||||
- INDIRECT-ATTRS (new): attribute-value can be fetched by special keys from
|
||||
other locations and additional be transformed by according
|
||||
functions
|
||||
|
||||
- ALLOW-STRING DENY-STRING GRANT REFUSE : CHANGE IN BEHAVIOUR!!
|
||||
now regular expressions are used. That means you have shorter
|
||||
config strings.
|
||||
|
||||
- ALLOW-MSG (new): by this option you can specify a special file located
|
||||
in the ETCDIRectorie containing a message to be displayed
|
||||
in case of an allowed access to TWEB
|
||||
|
||||
- TABLES (new): triggered by the presence of a special objectclass
|
||||
will be displayed a button in the header of the TWEB-page
|
||||
allowing an eXtended data access such as:
|
||||
a table with names, telephonenumbers and e-mail addresses
|
||||
of the current organization
|
||||
|
||||
or the access to the electronic telephonebook-data
|
||||
of the university of tuebingen generated by TWEB
|
||||
dynamically
|
||||
|
||||
|
||||
Version: tweb-2.0a 1997/1/7
|
||||
|
||||
Changes in configuration files (please check!)
|
||||
|
||||
- PULL-DOWN-MENUS (new): use BUTTONS and PULL-DOWN-MENUS instead of links
|
||||
in order to support: help, language-switch, move-upwards
|
||||
and read-entry functionalities
|
||||
|
||||
- GRANT (new): allow general access to TWEB for specified locations
|
||||
( same syntax as ALLOW-STRING )
|
||||
|
||||
- REFUSE (new): refuse general access to TWEB for specified locations
|
||||
( same syntax as DENY-STRING )
|
||||
|
||||
- INDIRECT-ATTRS (new): Get specified attribute-values from another
|
||||
location
|
||||
|
||||
- CACHING-TERMS (new): specify caching-behaviour for browsers and www-caches
|
||||
|
||||
- CACHE-EXPIRE-DEFAULT (new): set a default caching-time for browsers
|
||||
and www-caches
|
||||
|
||||
- SHOW-DEFOC (new): Show Default Objectclass
|
||||
|
||||
- COMREFUSE (new): prevent engine-access
|
||||
|
||||
- robots.txt (new): supply robots.txt-file functionality with the same
|
||||
behaviour as in www-servers
|
||||
|
||||
|
||||
Version: tweb-1.1b 1996/5/7
|
||||
|
||||
Changes in configuration files (please check!)
|
||||
|
||||
- STRICT-BASEDN (new): Access not below basedn is switched to responsible
|
||||
gateway ( -> gw-switch)
|
||||
|
||||
- ALLOW-PROXY (new): if NO-PROXY is configured access from
|
||||
given domain is allowed
|
||||
|
||||
|
||||
Version: tweb-1.1a, 1996/4/25
|
||||
|
||||
Changes in configuration files (please check!)
|
||||
|
||||
- SORT extensions: fourth parameter RELATED DISPLAY-CLASS:
|
||||
relation to according DISPLAY-entry
|
||||
(default is 'default')
|
||||
see DISPLAY changes
|
||||
|
||||
fifth parameter SORT-ATTRIBUTE:
|
||||
attribute used to sort entries
|
||||
(default is 'sn')
|
||||
|
||||
- DISPLAY changes: The DISPLAY objectClass entry is replaced by the string
|
||||
that is used as fifth attribute with SORT
|
||||
|
||||
- NO-PROXY (new): option for access restrictions via PROXY-servers
|
||||
|
||||
- TWEBHOST (new): option to support a constant tweb-hostname
|
||||
|
||||
- NO-MODIFY (new): option to prevent entries with named objectclasses from
|
||||
modification
|
||||
|
||||
- PGPKEY (new): DISPLAY-TYPE for PGPKeys enabling cut&paste
|
||||
|
||||
|
||||
Changes to code
|
||||
|
||||
- conversion from upper to lowercase characters in:
|
||||
make_oc_to_str(), pick_oc(), init_sort(), init_modify(),
|
||||
attrs in display() and all internal comparison-strings!!!
|
||||
|
||||
- modification with multiline attributes now possible with NETSCAPE
|
||||
|
||||
- pictures in X.500 are shown (only with NETSCAPE)
|
||||
|
||||
- display is denied in do_read() in case of missing default-Display
|
||||
|
||||
- technical entries (gw...) are not shown if using DYNAMIC-GW
|
||||
|
||||
- the tokens to filter proxy-access with NO_PROXY are extended to:
|
||||
" via " & "Proxy gateway"
|
||||
|
||||
- the tweb-version and compilation date is now shown with C & K options
|
||||
|
||||
- many bugfixes
|
||||
|
||||
|
||||
Version: tweb-1.0b, 1996/2/29
|
||||
|
||||
Changes in configuration files (please check!)
|
||||
|
||||
- ALLOW/DENY-String moved from tweb.conf.[01] to tweb.rc
|
||||
- tweb.lang.[01]: string 4 TEXT/HTML --> text/html
|
||||
- tweb.rc : optional parameter TWEBHOST (see FEATURE-LIST)
|
||||
|
||||
Changes to code
|
||||
|
||||
- better behaviour in modify operations
|
||||
BEWARE: modification of inherited attributes still NOT possible (!)
|
||||
|
||||
- logging-option (-l) with facultative parameter: LOCAL[0-7] of syslogd
|
||||
|
||||
-lx --> LOCAL3 (default)
|
||||
|
||||
- simplified metasyntax of GW-switches:
|
||||
|
||||
labeledURI= http://<host>:<port>/ <descriptive string> (gw[-<lang>])
|
||||
|
||||
- use 'aliasedObjectName' in HREF of aliases
|
||||
- always print HTML header
|
||||
- many bugfixes
|
||||
|
||||
|
||||
Version: tweb-1.0a, 1996/2/7
|
||||
|
||||
- base distibution
|
||||
|
@ -1,101 +0,0 @@
|
||||
Copyright (c) 1994 - 1999 University of Tuebingen, Germany.
|
||||
Written by Kurt Spanier and Bernhard Winkler. All rights reserved.
|
||||
|
||||
This software is not subject to any license of the University of
|
||||
Tuebingen, Germany.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose
|
||||
on any computer system, and to alter it and redistribute it, subject
|
||||
to the following restrictions:
|
||||
|
||||
1. The author is not responsible for the consequences of use of this
|
||||
software, no matter how awful, even if they arise from flaws in it.
|
||||
|
||||
2. The origin of this software must not be misrepresented, either by
|
||||
explicit claim or by omission. Since few users ever read sources,
|
||||
credits should appear in the documentation.
|
||||
|
||||
3. Altered versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software. Since few users
|
||||
ever read sources, credits should appear in the documentation.
|
||||
|
||||
4. This notice may not be removed or altered.
|
||||
|
||||
|
||||
|
||||
This work is derived from the Technical University of Chemnitz web500gw
|
||||
by Frank Richter. Information concerning is available at
|
||||
http://www.tu-chemnitz.de/~fri/web500gw.
|
||||
|
||||
web500gw is itself derived from the University of Michigan go500gw
|
||||
by Tim Howes. Information concerning is available at
|
||||
http://www.umich.edu/~dirsvcs/ldap/ldap.html
|
||||
|
||||
This work also contains materials derived from public sources:
|
||||
|
||||
ch_malloc.c, charray.c, dn.c from the University of Michigan LDAPv3.3,
|
||||
with some minor bug fixes.
|
||||
|
||||
regular.c from the University of Toronto regexp by Henry Spencer,
|
||||
with renaming of functions for not colliding with putative
|
||||
build-in regexp functions in the underlying LDAP libraries,
|
||||
as well as minor modifications.
|
||||
The original software can be obtained from
|
||||
ftp://ftp.cs.toronto.edu/pub/regexp.README, and
|
||||
ftp://ftp.cs.toronto.edu/pub/regexp.shar.Z
|
||||
|
||||
|
||||
Additional Information can be obtained by sending e-mail to:
|
||||
tweb-support@mail500.uni-tuebingen.de
|
||||
|
||||
|
||||
---
|
||||
|
||||
Portions Copyright (c) 1994-1998 Chemnitz University of Technology.
|
||||
All rights reserved.
|
||||
|
||||
A LDAP based WWW - X.500 gateway
|
||||
|
||||
written by: Frank Richter, Frank.Richter@hrz.tu-chemnitz.de
|
||||
Chemnitz University of Technology, Germany, 1994-1998
|
||||
|
||||
Redistribution and use in source and binary forms are permitted
|
||||
provided that this notice is preserved and that due credit is given
|
||||
to the Technical University of Chemnitz. The name of the University
|
||||
may not be used to endorse or promote products derived from this
|
||||
software without specific prior written permission. This software
|
||||
is provided ``as is'' without express or implied warranty.
|
||||
|
||||
|
||||
---
|
||||
|
||||
Portions Copyright (c) 1992-1996 Regents of the University of Michigan.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms are permitted
|
||||
provided that this notice is preserved and that due credit is given
|
||||
to the University of Michigan at Ann Arbor. The name of the University
|
||||
may not be used to endorse or promote products derived from this
|
||||
software without specific prior written permission. This software
|
||||
is provided ``as is'' without express or implied warranty.
|
||||
|
||||
|
||||
---
|
||||
|
||||
Portions Copyright (c) 1986 by University of Toronto.
|
||||
Written by Henry Spencer. Not derived from licensed software.
|
||||
|
||||
Permission is granted to anyone to use this software for any
|
||||
purpose on any computer system, and to redistribute it freely,
|
||||
subject to the following restrictions:
|
||||
|
||||
1. The author is not responsible for the consequences of use of
|
||||
this software, no matter how awful, even if they arise
|
||||
from defects in it.
|
||||
|
||||
2. The origin of this software must not be misrepresented, either
|
||||
by explicit claim or by omission.
|
||||
|
||||
3. Altered versions must be plainly marked as such, and must not
|
||||
be misrepresented as being the original software.
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,75 +0,0 @@
|
||||
TWEB WWW-X500 GATEWAY - GETTING STARTED
|
||||
|
||||
With the information provided by this file you should be able to start
|
||||
an initial version of TWEB. Please follow the steps below:
|
||||
|
||||
1. Copy the distribution Makefile onto Makefile:
|
||||
|
||||
> cp Makefile.openldap Makefile
|
||||
|
||||
2. Edit the Makefile. You have to change the variables in the first block of
|
||||
the file to your appropriate settings:
|
||||
|
||||
> vi Makefile
|
||||
|
||||
3. Now type in make:
|
||||
|
||||
> make
|
||||
|
||||
This should make a binary called tweb whithout severe problems
|
||||
|
||||
4. Running the TWEB www-x500 gateway
|
||||
|
||||
4.1. Testing the newly compiled binary
|
||||
|
||||
Copy the tweb binary to the sub-directory TWEB_conFiles and
|
||||
change to that directory:
|
||||
|
||||
> cp tweb TWEB_conFiles
|
||||
> cd TWEB_conFiles
|
||||
|
||||
Copy the config files with extension .dist to their respective
|
||||
basefiles:
|
||||
|
||||
> cp tweb.rc.dist tweb.rc
|
||||
> cp tweb.conf.0.dist tweb.conf.0
|
||||
> cp tweb.conf.1.dist tweb.conf.1
|
||||
> cp tweb.lang.0.dist tweb.lang.0
|
||||
> cp tweb.lang.1.dist tweb.lang.1
|
||||
|
||||
Edit tweb.rc to adjust the variables in the
|
||||
first block to your appropriate settings:
|
||||
|
||||
> vi tweb.rc
|
||||
|
||||
Run TWEB with language 0 and 1 (i.e., german and english)
|
||||
|
||||
> ./tweb -L01
|
||||
|
||||
This will run two TWEB server processes, one for german language, the
|
||||
other for english language, whithout syslog logging;
|
||||
you can assess them with your WWW browser by giving the URL
|
||||
|
||||
http://<your-tweb-host>:<your-tweb-port>/
|
||||
|
||||
4.2. Adapting TWEB to your local requirements
|
||||
|
||||
When you reached this point you have a running TWEB with basic
|
||||
functionality. Have a look to the FEATURE-LIST file for a
|
||||
description of all features, TWEB does provide. The least, you
|
||||
might want to change are the several header and footer files
|
||||
in order to build up your organizational identity with TWEB.
|
||||
But check also the security features, and the performance (i.e.,
|
||||
load balancing) features. By setting the respective parameters,
|
||||
TWEB can provide for a very special appearance with local require-
|
||||
ments enforced as far as possible. Should you want more reasonable
|
||||
features, please don't hesitate to contact the development team.
|
||||
|
||||
|
||||
Have fun,
|
||||
|
||||
TWEB development team, Tuebingen, September, 9th, 1999
|
||||
|
||||
email: tweb-support@mail500.uni-tuebingen.de
|
||||
|
||||
|
@ -1,4 +0,0 @@
|
||||
<strong>Datei: LDAP_etc/allow.msg.0<br>
|
||||
Achtung</strong>: Dies ist eine Meldung, die nur dem authorisierten
|
||||
Nutzer angezeigt wird !!!
|
||||
<hr>
|
@ -1,4 +0,0 @@
|
||||
<strong>File: LDAP_etc/allow.msg.1<br>
|
||||
Attention</strong>: This message will only be shown to the
|
||||
permitted user.
|
||||
<hr>
|
@ -1,86 +0,0 @@
|
||||
# ldap filter file
|
||||
#
|
||||
# lines like this that start with # or empty lines are ignored
|
||||
#
|
||||
# syntax:
|
||||
#
|
||||
# <tag>
|
||||
# <pattern1> <delimiters> <filter1-1> <desc1-1> [<scope>]
|
||||
# <filter1-2> <desc1-2> [<scope>]
|
||||
#
|
||||
# <pattern2> <delimiters> <filter2-1> <desc2-1> [<scope>] ...
|
||||
#
|
||||
# The "desc" should describe the filter and it should correctly complete
|
||||
# both of the following phrases:
|
||||
#
|
||||
# One <desc> match was found for...
|
||||
# Three <desc> matches were found for...
|
||||
#
|
||||
# The scope is optional, and should be one of:
|
||||
# "base"
|
||||
# "onelevel"
|
||||
# "subtree"
|
||||
# if it is included.
|
||||
#
|
||||
|
||||
"finger and go500 and go500gw subtree and rp500 and rcpt500"
|
||||
"=" " " "%v" "arbitrary filter"
|
||||
|
||||
"^[0-9][0-9\-]*$" " " "(telephoneNumber=*%v)" "phone number"
|
||||
|
||||
"@" " " "(mail=%v)" "email address"
|
||||
"(mail=%v*)" "start of email address"
|
||||
|
||||
"^.[\. _].*" ". _" "(cn=%v1* %v2-)" "first initial"
|
||||
|
||||
".*[. _].$" ". _" "(cn=%v1-*)" "last initial"
|
||||
|
||||
"[. _]" ". _" "(|(sn=%v1-)(cn=%v1-))" "exact"
|
||||
"(|(sn~=%v1-)(cn~=%v1-))" "approximate"
|
||||
|
||||
".*" ". " "(|(cn=%v1)(sn=%v1)(uid=%v1))" "exact"
|
||||
"(|(cn~=%v1)(sn~=%v1))" "approximate"
|
||||
|
||||
"web500gw subtree"
|
||||
"=" " " "%v" "arbitrary filter"
|
||||
|
||||
"^[0-9][0-9\-]*$" " " "(|(telephoneNumber=*%v)(facsimileTelephoneNumber=*%v))" "phone number"
|
||||
|
||||
"@" " " "(mail=%v)" "email address"
|
||||
"(mail=%v*)" "start of email address"
|
||||
|
||||
"^.[\. _].*" ". _" "(cn=%v1* %v2-)" "first initial"
|
||||
|
||||
".*[. _].$" ". _" "(cn=%v1-*)" "last initial"
|
||||
############
|
||||
# "[. _]" ". _" "(|(sn=%v1-)(cn=%v1-))" "exact"
|
||||
# "(|(sn~=%v1-)(cn~=%v1-))" "approximate"##
|
||||
#
|
||||
# ".*" ". " "(|(cn=%v1)(sn=%v1))" "exact"
|
||||
# "(|(cn~=%v1)(sn~=%v1))" "approximate"#
|
||||
#
|
||||
# Neue Einstellungen 970127 KPG:
|
||||
"[oO][xX]:.*" ":" "(|(ou=%v2-))" "exact"
|
||||
"[xX][oO]:.*" ":" "(|(ou=%v2-))" "exact"
|
||||
"[oO]:.*" ":" "(|(ou=%v2-))" "exact"
|
||||
"(|(ou~=%v2-))" "approximate"
|
||||
"[xX]:.*[. _].*" ":" "(|(cn=%v2%v3%v4-))" "exact"
|
||||
"[xX]:.*" ":" "(|(sn=%v2-))" "exact"
|
||||
|
||||
"[. _]" ". _" "(|(cn=%v))" "exact"
|
||||
"(|(cn~=%v))" "approximate"
|
||||
|
||||
".*" ". " "(|(sn=%v))" "exact"
|
||||
"(|(sn~=%v))" "approximate"
|
||||
|
||||
"go500gw onelevel and web500gw onelevel"
|
||||
"^..$" " " "(|(o=%v)(c=%v)(l=%v)(co=%v))" "exact"
|
||||
"(|(o~=%v)(c~=%v)(l~=%v)(co~=%v))" "approximate"
|
||||
|
||||
" " " " "(|(o=%v)(l=%v)(co=%v))" "exact"
|
||||
"(|(o~=%v)(l~=%v)(co~=%v))" "approximate"
|
||||
|
||||
"\." " " "(associatedDomain=%v)" "exact"
|
||||
|
||||
".*" " " "(|(o=%v)(l=%v)(co=%v))" "exact"
|
||||
"(|(o~=%v)(l~=%v)(co~=%v))" "approximate"
|
@ -1,40 +0,0 @@
|
||||
AU Australien
|
||||
AR Argentinien
|
||||
AT Österreich
|
||||
BE Belgien
|
||||
BR Brasilien
|
||||
CA Kanada
|
||||
HR Kroatien
|
||||
CS Tschechoslowakei
|
||||
CZ Tschechische Republik
|
||||
DK Dänemark
|
||||
FI Finnland
|
||||
FR Frankreich
|
||||
DE Deutschland
|
||||
EE Estland
|
||||
GB Großbritannien
|
||||
GR Griechenland
|
||||
HK Hong Kong
|
||||
HU Ungarn
|
||||
IS Island
|
||||
IN Indien
|
||||
IE Irland
|
||||
IL Israel
|
||||
IT Italien
|
||||
JP Japan
|
||||
KR Korea
|
||||
LI Liechtenstein
|
||||
LU Luxemburg
|
||||
NL Niederlande
|
||||
NZ Neuseeland
|
||||
NO Norwegen
|
||||
PL Polen
|
||||
PT Portugal
|
||||
ES Spanien
|
||||
SE Schweden
|
||||
CH Schweiz
|
||||
RU Russische Föderation
|
||||
US Vereinigte Staaten von Amerika
|
||||
SI Slowenien
|
||||
SK Slowakei
|
||||
SG Singapur
|
@ -1,40 +0,0 @@
|
||||
AU Australia
|
||||
AR Argentina
|
||||
AT Austria
|
||||
BE Belgium
|
||||
BR Brazil
|
||||
CA Canada
|
||||
HR Croatia
|
||||
CS Czechoslovakia
|
||||
CZ Czech Republic
|
||||
DK Denmark
|
||||
FI Finland
|
||||
FR France
|
||||
DE Germany
|
||||
EE Estonia
|
||||
GB Great Britain
|
||||
GR Greece
|
||||
HK Hong Kong
|
||||
HU Hungary
|
||||
IS Iceland
|
||||
IN India
|
||||
IE Ireland
|
||||
IL Israel
|
||||
IT Italy
|
||||
JP Japan
|
||||
KR Korea
|
||||
LI Liechtenstein
|
||||
LU Luxemburg
|
||||
NL Netherlands
|
||||
NZ New Zealand
|
||||
NO Norway
|
||||
PL Poland
|
||||
PT Portugal
|
||||
ES Spain
|
||||
SE Sweden
|
||||
CH Switzerland
|
||||
RU Russian Federation
|
||||
US United States of America
|
||||
SI Slovenia
|
||||
SK Slovakia
|
||||
SG Singapore
|
@ -1,4 +0,0 @@
|
||||
<hr>
|
||||
<strong>Datei: LDAP_etc/search-only.foot.0<br>
|
||||
Achtung:</strong> Dieser Text wird als Footer einer Search-Only-Seite
|
||||
angezeigt !!!
|
@ -1,4 +0,0 @@
|
||||
<hr>
|
||||
<strong>File: LDAP_etc/search-only.foot.1<br>
|
||||
Attention:</strong> This footer will be display'ed at the end
|
||||
of a search-only page.
|
@ -1,5 +0,0 @@
|
||||
<h1>Search-Only-Seite</h1>
|
||||
<strong>Datei: LDAP_etc/search-only.head.0<br>
|
||||
Achtung:</strong> Dieser Text wird am Beginn einer Search-Only-Seite
|
||||
angezeigt !!!
|
||||
<hr>
|
@ -1,5 +0,0 @@
|
||||
<h1>Search-Only-Page</h1>
|
||||
<strong>File: LDAP_etc/search-only.head.1<br>
|
||||
Attention:</strong> This header will be display'ed at the beginning
|
||||
of a search-only page.
|
||||
<hr>
|
@ -1,4 +0,0 @@
|
||||
<hr>
|
||||
<strong>Datei: LDAP_etc/tweb-base.foot.0<br>
|
||||
Achtung:</strong> Diese Seite wird als Footer auf der BASEDN-Seite
|
||||
angezeigt !!!
|
@ -1,4 +0,0 @@
|
||||
<hr>
|
||||
<strong>File: LDAP_etc/tweb-base.foot.1<br>
|
||||
Attention:</strong> This text will be display'ed at the end of
|
||||
the BASEDN page.
|
@ -1,5 +0,0 @@
|
||||
<h1>BASEDN-Header</h1>
|
||||
<strong>Datei: LDAP_etc/tweb-base.head.0<br>
|
||||
Achtung:</strong> Dieser Header wird am Beginn der BASEDN-Seite
|
||||
angezeigt !!!
|
||||
<hr>
|
@ -1,5 +0,0 @@
|
||||
<h1>BASEDN-Header</h1>
|
||||
<strong>File: LDAP_etc/tweb-base.head.1<br>
|
||||
Attention:</strong> This header will be display'ed at the beginning
|
||||
of the BASEDN page.
|
||||
<hr>
|
@ -1,4 +0,0 @@
|
||||
<hr>
|
||||
<strong>Datei: LDAP_etc/tweb.footer.0<br>
|
||||
Achtung:</strong> Dieser Footer wird am Ende einer normalen
|
||||
Seite unterhalb BASEDN angezeigt !!!
|
@ -1,4 +0,0 @@
|
||||
<hr>
|
||||
<strong>File: LDAP_etc/tweb.footer.1<br>
|
||||
Attention:</strong> This footer will be display'ed at the end of a page
|
||||
below BASEDN.
|
@ -1,5 +0,0 @@
|
||||
<h1>TWEB</h1>
|
||||
<strong>Datei: LDAP_etc/tweb.header.0<br>
|
||||
Achtung:</strong> Dieser Header wird am Beginn einer Seite unterhalb
|
||||
von BASEDN angezeigt !!!
|
||||
<hr>
|
@ -1,5 +0,0 @@
|
||||
<h1>TWEB</h1>
|
||||
<strong>File: LDAP_etc/tweb.header.1<br>
|
||||
Attention:</strong> This header will be display'ed at the beginning of
|
||||
a page below BASEDN.
|
||||
<hr>
|
@ -1,46 +0,0 @@
|
||||
<TITLE>TWEB HILFE</TITLE>
|
||||
<BODY>
|
||||
<H2> Das TWEB WWW2X.500-Gateway </H2>
|
||||
|
||||
Im X.500 sind weltweit viele Personen und Organisationen mit EMail- Adresse,
|
||||
Postanschrift, FAX, Telefonnummer, Aufgabenbereich, etc. zu finden.
|
||||
Zum einfachen Zugriff per WorldWideWeb dient <strong>TWEB</strong> WWW2X.500-Gateway.<P>
|
||||
|
||||
<strong>TWEB</strong> ermöglicht das einfache Browsen, die Suche
|
||||
und die Modifikation des eigenen Eintrages im X.500.<P>
|
||||
Das Gateway enthält folgende Features
|
||||
<ul>
|
||||
|
||||
<li>Für den Administrator bietet <strong>TWEB</strong> umfangreiche Möglichkeiten
|
||||
der Konfiguration mittels Konfigurations-Dateien, ohne Änderungen im
|
||||
Code und ohne erneutes Übersetzen.
|
||||
<li>Zusätzlich sind Datenschutzmechanismen aktivierbar.
|
||||
<li>Andere Sprachen sind durch Ersetzen/Hinzufügen
|
||||
von Sprach-Dateien leicht realisierbar.
|
||||
|
||||
<li>Wie Sie es vom WWW her gewohnt sind, brauchen Sie nur den gewünschten
|
||||
unterstrichenen Eintrag anklicken, und Sie sehen, was darunter angesiedelt ist.
|
||||
|
||||
<li>Mit "Weitere Informationen" wird eine zweite Info-Seite gezeigt.
|
||||
|
||||
<li>Mit Hilfe der SUCH-Box können Sie nach Namen und Teilstrings suchen.
|
||||
|
||||
<li>Ihren eigenen Eintrag können Sie mit Ihrem Passwort in Verbindung
|
||||
mit dem entsprechenden Button ändern.
|
||||
</ul>
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
<strong>TWEB</strong> ist eine Weiterentwicklung vom Web500gw von Frank Richter, Technische
|
||||
Universitaet Chemnitz-Zwickau, basierend auf go500gw von Tim Howes,
|
||||
University of Michigan.
|
||||
|
||||
<hr>
|
||||
|
||||
Bei Fragen, Anregungen, Bug-Reports Mail an:
|
||||
|
||||
<ADDRESS><A HREF="mailto:web500gw-support@mail500.uni-tuebingen.de"> web500gw-support@mail500.uni-tuebingen.de</A> - Stand: 16. Februar 1996</ADDRESS>
|
||||
|
||||
<hr>
|
||||
|
@ -1,47 +0,0 @@
|
||||
<TITLE>TWEB HELP</TITLE>
|
||||
<BODY>
|
||||
<H2> TWEB WWW2X.500-Gateway HELP</H2>
|
||||
|
||||
There are worldwide lots of persons and organizations stored in the X.500-
|
||||
directory with email-address, postal address, fax, telephone-number,
|
||||
working-area, etc. For easy access with WorldWideWeb there is the
|
||||
<strong>TWEB</strong> WWW2X.500-Gateway.<P>
|
||||
|
||||
<strong>TWEB</strong> allows easy browsing, searching and modification of
|
||||
entries in the X.500-directory.<p>
|
||||
Features of the gateway include
|
||||
<ul>
|
||||
<li>For the administrator <strong>TWEB</strong> offers extensive opportunities of
|
||||
configuration by means of configuration-files without change of code
|
||||
and without recompilation.
|
||||
<li>Configurable data-protection-mechanisms are available.
|
||||
<li>Other languages are supported by language-resource-files.
|
||||
|
||||
<li>As with other WWW applications you only have to click on the desired entry
|
||||
to see, what is settled beneath.
|
||||
|
||||
<li>The button "More Information" shows a second page of information.
|
||||
|
||||
<li>By means of the SEARCH-box you can look for persons with exact or substring
|
||||
match.
|
||||
|
||||
<li>You can modify your own entry by typing in your password in combination
|
||||
with the modification button.
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
<strong>TWEB</strong> is based on Web500gw from Frank Richter, Technische
|
||||
Universitaet Chemnitz-Zwickau, that itself is based on go500gw from Tim Howes,
|
||||
University of Michigan.
|
||||
|
||||
<hr>
|
||||
|
||||
For questions, suggestions, bug-reports mail to:
|
||||
|
||||
<ADDRESS><A HREF="mailto:x500-netman@mail500.uni-tuebingen.de"> x500-netman@mail500.uni-tuebingen.de</A> - 27. October 1995</ADDRESS>
|
||||
|
||||
<hr>
|
||||
|
@ -1,106 +0,0 @@
|
||||
#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
# *
|
||||
# Makefile... *
|
||||
# *
|
||||
# Function:..TWEB WWW to X.500-GATEWAY SERVER MAKEFILE *
|
||||
# *
|
||||
# *
|
||||
# *
|
||||
# Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
# Zentrum fuer Datenverarbeitung, *
|
||||
# Bereich Entwicklungneuer Dienste, *
|
||||
# Universitaet Tuebingen, GERMANY *
|
||||
# *
|
||||
# ZZZZZ DDD V V *
|
||||
# Creation date: Z D D V V *
|
||||
# August 16 1995 Z D D V V *
|
||||
# Last modification: Z D D V V *
|
||||
# September 13 1999 ZZZZ DDD V *
|
||||
# *
|
||||
#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
|
||||
#-----------------------------------------------------------------------------
|
||||
#
|
||||
# based on web500gw.c of Frank Richter, TU Chemnitz-Zwickau, DE
|
||||
#
|
||||
# first edition: 95/07/28, /KSp
|
||||
#
|
||||
# $Id: Makefile.openldap,v 1.6 1999/09/10 15:01:15 zrnsk01 Exp $
|
||||
#
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
#########################################################################
|
||||
###
|
||||
### Tailor the following to your local settings
|
||||
###
|
||||
#########################################################################
|
||||
|
||||
# where is your LDAP client library located
|
||||
# WE NEED portable.h AND ldap_log.h, SO POINT TO THE SOURCE TREE
|
||||
LDAP_RUNTIME=../..
|
||||
LDAP_SOURCE =../..
|
||||
|
||||
LIBDIR= $(LDAP_RUNTIME)/libraries
|
||||
INCDIR= $(LDAP_RUNTIME)/include
|
||||
|
||||
# where is some version information for your LDAP client library
|
||||
LDAPDIR= $(LDAP_SOURCE)/build
|
||||
|
||||
# select your compiler (DEFAULT=cc) and uncomment ACFLAGS and/or COPTS
|
||||
# to have options for the linker and/or compiler
|
||||
CC= gcc
|
||||
# ACFLAGS=
|
||||
# COPTS= -Aa -O # cc on a HP box
|
||||
COPTS= -Wall -ansi -pedantic -O2
|
||||
|
||||
# uncomment next line when compiling on SUN
|
||||
# LXNET = -lxnet
|
||||
|
||||
# we don't have any special definitions for the current distribution
|
||||
# DEFINES=
|
||||
|
||||
#########################################################################
|
||||
###
|
||||
### You should leave the following definitions untouched
|
||||
###
|
||||
#########################################################################
|
||||
|
||||
SRCS = tweb.c strng.c init.c queries.c server.c \
|
||||
x500.c html.c support.c checkclient.c \
|
||||
charray.c ch_malloc.c dn.c regular.c
|
||||
OBJS = tweb.o strng.o init.o queries.o server.o \
|
||||
x500.o html.o support.o checkclient.o \
|
||||
charray.o ch_malloc.o dn.o regular.o
|
||||
GWOBJS = $(OBJS) gwversion.o
|
||||
|
||||
CFLAGS = $(COPTS) -I$(INCDIR) $(ACFLAGS) $(DEFINES) $(GWVERS)
|
||||
LIBS = -lldap -llber $(KRBLIBFLAG) $(KRBLIBS) $(LXNET)
|
||||
DLIBS = $(LIBDIR)/libldap.a $(LIBDIR)/liblber.a
|
||||
|
||||
gw: gwversion.o
|
||||
$(CC) $(ALDFLAGS) -o $@ $(GWOBJS) -L$(LIBDIR) $(LIBS)
|
||||
mv $@ tweb
|
||||
|
||||
gwversion.c: $(OBJS) $(DLIBS)
|
||||
rm -f $@
|
||||
(u=$${USER-root} v=`cat $(LDAPDIR)/version` d=`pwd` h=`hostname` t=`date`; \
|
||||
sed -e "s|%WHEN%|$${t}|" \
|
||||
-e "s|%WHOANDWHERE%|$${u}@$${h}:$${d}|" \
|
||||
-e "s|%VERSION%|$${v}|" \
|
||||
< Versiongw.c > $@)
|
||||
|
||||
lint:;
|
||||
lint -I. $(SRCS)
|
||||
|
||||
5lint:;
|
||||
/usr/5bin/lint -I. $(SRCS)
|
||||
|
||||
clean:;
|
||||
rm -f *.o core a.out gwversion.c tweb
|
||||
|
||||
depend:;
|
||||
$(LDAPDIR)/mkdep $(CFLAGS) $(SRCS)
|
||||
|
||||
# DO NOT DELETE THIS LINE -- mkdep uses it.
|
||||
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
|
||||
|
||||
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
|
@ -1,104 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* README *
|
||||
* *
|
||||
* Function:..Introduction to the WWW-X.500 gateway TWEB *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* September 14 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* September 13 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
|
||||
|
||||
|
||||
IMPORTANT HINT FOR UPGRADING TO VERSION 2.3.x:
|
||||
|
||||
the config-syntax of ALLOW-STRING DENY-STRING GRANT REFUSE has changed:
|
||||
now regular expressions are used enabling shorter config strings.
|
||||
|
||||
the language-files have been extended. Please use the newly provided
|
||||
language-files or update your old ones.
|
||||
|
||||
|
||||
|
||||
INTRODUCTION
|
||||
|
||||
TWEB is based on the Web500gw implementation by Frank Richter,
|
||||
Technische Universitaet Chemnitz-Zwickau, which is based on the
|
||||
go500gw implementation by Tim Howes, University of Michigan.
|
||||
|
||||
TWEB was compiled and tested on LINUX with cc, HPUX 9.05 with the
|
||||
HP-ANSI C compiler, as well as SunOS 4.1.2 with the SUN C compiler.
|
||||
TWEB was also compiled with gcc on all platforms.
|
||||
|
||||
The UMICH LDAP client library version 3.0 or 3.3
|
||||
( URL:ftp://terminator.rs.itd.umich.edu/ldap/ldap-3.3.tar.Z )
|
||||
must be installed on the machine (library path and include file
|
||||
path is configured in Makefile). With QUIPU ICR-2.x the ISODE-
|
||||
provided LDAP libraries should be used. As such, TWEB only supports
|
||||
LDAP version 2 with the University of Michigan type C API. TWEB is
|
||||
also adapted for the OpenLDAP LDAP library, release version 1.1.2
|
||||
(http://www.openldap.org).
|
||||
|
||||
An upgrade to LDAP version 3 and a C API standadized by the IETF
|
||||
is planned for a not so far away future, most probably in step
|
||||
with the OpenLDAP package.
|
||||
|
||||
TWEB, as provided here is a fully functional core gateway, which
|
||||
is extended at the author's site by some local features. These
|
||||
extensions are included into the same code base, so that some
|
||||
"#ifdef TUE_TEL" or "#ifdef AMBIX" pre-processor statements can
|
||||
be found throughout the code.
|
||||
|
||||
Have a look at the doc sub-directory to get some further documentation.
|
||||
|
||||
|
||||
INSTALLATION
|
||||
|
||||
The installation and configuration of TWEB is described in the
|
||||
GETTING-STARTED file. After making and testing the basic TWEB
|
||||
you should have a look to file FEATURE-LIST to learn about the
|
||||
several configuration parameters TWEB provides for runtime
|
||||
configuration of the program.
|
||||
|
||||
SINCE THE CODE IS ONLY THE CORE GATEWAY, WITH SOME PRIVATE EXTENSIONS
|
||||
NOT INCLUDED INTO THAT DISTRIBUTION, DO NOT DELETE CODE BETWEEN
|
||||
|
||||
#ifdef TUE_TEL
|
||||
#endif
|
||||
|
||||
AND
|
||||
|
||||
#ifdef AMBIXGW
|
||||
#endif
|
||||
|
||||
IN ANY OF THE SUPPORTED FILES !!!
|
||||
|
||||
|
||||
SUPPORT
|
||||
|
||||
Bug reports and flames (but also critical comments) please send to
|
||||
|
||||
tweb-support@mail500.uni-tuebingen.de.
|
||||
|
||||
For general discussion (e.g., about interesting new features,
|
||||
which should be supported), there is a discussion list at
|
||||
|
||||
tweb-l@mail500.uni-tuebingen.de.
|
||||
|
||||
Send requests for subscription to
|
||||
|
||||
tweb-l-request@mail500.uni-tuebingen.de.
|
||||
|
||||
|
||||
TWEB development team, Tuebingen, September, 9th, 1999
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
# go away
|
||||
User-agent: *
|
||||
Disallow: /
|
@ -1,267 +0,0 @@
|
||||
#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
# *
|
||||
# tweb.conf.0 *
|
||||
# *
|
||||
# Function:..Configuration-file for TWEB *
|
||||
# *
|
||||
# *
|
||||
# *
|
||||
# Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
# Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
# neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
# *
|
||||
# ZZZZZ DDD V V *
|
||||
# Creation date: Z D D V V *
|
||||
# July 26 1996 Z D D V V *
|
||||
# Last modification: Z D D V V *
|
||||
# December 18 1998 ZZZZ DDD V *
|
||||
# *
|
||||
#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
|
||||
#==========================================================================
|
||||
# $Id: tweb.conf.0.dist,v 1.6 1999/09/10 15:01:21 zrnsk01 Exp $
|
||||
|
||||
|
||||
# THE PARAMETERS IN THIS FILE AND THE CORRESPONDING CONFIG-FILE.1
|
||||
# ARE PRE-SET TO PROVIDE A BASIC FUNCTIONALITY.
|
||||
#
|
||||
# IF YOU LIKE, YOU CAN CHECK FOR FURTHER DISPLAY-OBJECTs, SORT,
|
||||
# SEARCH-ONLY AND MODIFY DEFINITIONS IN THE SECOND PART OF THE FILE.
|
||||
#
|
||||
# TO ACTIVATE A CERTAIN FEATURE, THE CORRESPONDING LINES HAVE TO
|
||||
# BE DE-COMMENTED
|
||||
|
||||
|
||||
#########################################################################
|
||||
|
||||
|
||||
###
|
||||
### the description, how to display an object upon read
|
||||
###
|
||||
|
||||
# FIRST-PAGE is the main view, SECOND-PAGE a linked page with more
|
||||
# (e.g., not so important) information
|
||||
#
|
||||
# given is a list of attributes, with labels for each and the method,
|
||||
# how to display the content of the attribute
|
||||
|
||||
DISPLAY-OBJECT pers
|
||||
# 1.Bild
|
||||
FIRST-PAGE cn Name DEFAULT
|
||||
personalTitle Titel DEFAULT
|
||||
organizationalStatus Dienststellung DEFAULT
|
||||
description Arbeitsgebiet DEFAULT
|
||||
telephoneNumber Geschäfts-Telefon DEFAULT
|
||||
facsimileTelephoneNumber Fax DEFAULT
|
||||
mail E-Mail-Adresse MAILTO
|
||||
textEncodedORaddress X400-Adresse DEFAULT
|
||||
postalAddress Anschrift MULTILINE
|
||||
roomNumber Raum DEFAULT
|
||||
labeledURI URL URI
|
||||
# 2.Bild (see more)
|
||||
SECOND-PAGE sn Nachname DEFAULT
|
||||
roleOccupant Funktionsträger HREF
|
||||
memberOfGroup E-Mail-Verteiler DEFAULT
|
||||
homepostalAddress Heimat-Anschrift MULTILINE
|
||||
homePhone Privat-Telefon DEFAULT
|
||||
pager Pager DEFAULT
|
||||
lastModifiedTime "letztmalig geändert" DATE
|
||||
lastModifiedBy "letztmalig geändert von" DEFAULT
|
||||
|
||||
DISPLAY-OBJECT organization
|
||||
# 1.Bild
|
||||
FIRST-PAGE o Name DEFAULT
|
||||
ou Name DEFAULT
|
||||
l Ort DEFAULT
|
||||
description Beschreibung DEFAULT
|
||||
postalAddress Postanschrift MULTILINE
|
||||
telephoneNumber Telefon DEFAULT
|
||||
facsimileTelephoneNumber Fax DEFAULT
|
||||
labeledURI URL URI
|
||||
# 2.Bild (see more)
|
||||
SECOND-PAGE st Bundesland DEFAULT
|
||||
seeAlso "weitere Informationen" MOVETO
|
||||
lastModifiedTime "letztmalig geändert" DATE
|
||||
lastModifiedBy "letztmalig geändert von" DEFAULT
|
||||
|
||||
DISPLAY-OBJECT rfc822MailList
|
||||
# 1. Bild
|
||||
FIRST-PAGE description Beschreibung DEFAULT
|
||||
joinable abonnierbar BOOLEAN
|
||||
associatedDomain E-Mail-Domain DEFAULT
|
||||
rfc822RequestsTo "Anfragen an" MAILTO
|
||||
requestsTo "Anfragen an" HREF
|
||||
owner Eigentümer HREF
|
||||
# 2. Bild
|
||||
SECOND-PAGE lastModifiedTime "letzte Änderung" DATE
|
||||
lastModifiedBy "geändert durch" DEFAULT
|
||||
|
||||
DISPLAY-OBJECT country
|
||||
# 1.Bild
|
||||
FIRST-PAGE friendlyCountryName Ländernamen DEFAULT
|
||||
associatedDomain Domain DEFAULT
|
||||
manager Manager HREF
|
||||
labeledURI URL URI
|
||||
# 2.Bild (see more)
|
||||
SECOND-PAGE masterDSA Master-DSA HREF
|
||||
slaveDSA Slave-DSA HREF
|
||||
lastModifiedTime "letztmalig geändert" DATE
|
||||
lastModifiedBy "letztmalig geändert von" DEFAULT
|
||||
lastUpdateTime "letztmalig geändert" DATE
|
||||
|
||||
DISPLAY-OBJECT default
|
||||
# 1.Bild
|
||||
FIRST-PAGE jpegPhoto Foto JPEG
|
||||
photo Foto BMP
|
||||
cn Name DEFAULT
|
||||
sn Nachname DEFAULT
|
||||
textEncodedMtaName MTA-Name DEFAULT
|
||||
relatedMHSdomain MHS-Domain DEFAULT
|
||||
description Beschreibung DEFAULT
|
||||
multiLineDescription Beschreibung MULTILINE
|
||||
info "Allgemeines" DEFAULT
|
||||
productName Produktname DEFAULT
|
||||
mail Mail-Adresse MAILTO
|
||||
telephoneNumber Telefon DEFAULT
|
||||
facsimileTelephoneNumber Fax DEFAULT
|
||||
labeledURL URL URL
|
||||
memberOfGroup E-Mail-Verteiler DEFAULT
|
||||
member Mitglied HREF
|
||||
owner Eigentümer HREF
|
||||
requestsTo "Anfragen an" HREF
|
||||
errorsTo "Fehler an" HREF
|
||||
krbName Kerberos-Name DEFAULT
|
||||
postalAddress Postanschrift MULTILINE
|
||||
l Ort DEFAULT
|
||||
textEncodedPSAP Netz-Adresse DEFAULT
|
||||
presentationAddress Netz-Adresse DEFAULT
|
||||
supportedApplicationContext Anwendung DEFAULT
|
||||
publicAccess Zugang DEFAULT
|
||||
availability Verfügbarkeit DEFAULT
|
||||
knowledgeInformation Kontakt DEFAULT
|
||||
seeAlso "siehe auch" HREF
|
||||
roleOccupant Stelleninhabr HREF
|
||||
manager Manager HREF
|
||||
administrator Manager HREF
|
||||
secretary Sekretariat HREF
|
||||
associatedName "zugeordneter Name" HREF
|
||||
responsiblePerson Verantwortlicher HREF
|
||||
domainComponent Domain DEFAULT
|
||||
labeledURI URL URI
|
||||
# 2.Bild (see more)
|
||||
SECOND-PAGE source Quelle DEFAULT
|
||||
homePostalAddress Heimat-Anschrift MULTILINE
|
||||
masterDSA Master-DSA HREF
|
||||
slaveDSA Slave-DSA HREF
|
||||
lastModifiedTime "letztmalig geändert" DATE
|
||||
lastModifiedBy "letztmalig geändert von" DEFAULT
|
||||
lastUpdateTime "letztmalig geändert" DATE
|
||||
|
||||
|
||||
###
|
||||
### sorting and display of groups of entries
|
||||
###
|
||||
|
||||
# while browsing and searching, entries below the current position
|
||||
# in the DIT, or the search results, can be grouped according to some
|
||||
# SORT rules; these rules determine,
|
||||
# 1. which objectclass should signal a specific group, and in what
|
||||
# order the entries should be checked for those objectclasses
|
||||
# (the sequential order of the objectclasses given below),
|
||||
# 2. what label should be applied to a group (" " means none),
|
||||
# 3. the order of groups during output,
|
||||
# 4. the display type for an object of the given object class
|
||||
# when display´ing a read result, and
|
||||
# 5. the attribute, that will control sort order of entries
|
||||
# within each group
|
||||
# the last two parameters are optional, and will default to display
|
||||
# type ´default´ (see DISPLAY-OBJECTS), and sort attribute sn (surname)
|
||||
# (if given in the entry, otherwise the RDN itself)
|
||||
#
|
||||
# When an entry has none of the listed object classes, it will NOT be
|
||||
# included into the display !!!
|
||||
|
||||
SORT dNSDomain Domäne 8
|
||||
domain Faxanschlüsse 9
|
||||
rfc822MailList X.500-E-Mail-Verteiler 10 rfc822MailList
|
||||
organizationalPerson Mitarbeiter 1 pers registeredAddress
|
||||
residentialPerson Privat-Personen 2 pers registeredAddress
|
||||
person "sonstige Personen" 3 pers registeredAddress
|
||||
locality Gebiete 7 organization
|
||||
organization Organisationen 5 organization
|
||||
organizationalUnit Unterorganisationen 6 organization
|
||||
alias Verweise 11
|
||||
country Länder 4 country
|
||||
|
||||
|
||||
###
|
||||
### the position of certain language-specific support-files
|
||||
###
|
||||
|
||||
# a help file (accessible via http://host:port/H)
|
||||
HELPFILE tweb.help.0
|
||||
|
||||
# converting certain RDNs to a more user-friendly form)
|
||||
FRIENDLYFILE ldapfriendly.0
|
||||
|
||||
# header and footer beeing attached to every HTML page (not BASEDN)
|
||||
HEADER tweb.header.0
|
||||
FOOTER tweb.footer.0
|
||||
|
||||
# a special message beeing attached to a HTML page when a allowed
|
||||
# user accesses the gateway (see ALLOW-STRING/DENY-STRING in tweb.rc)
|
||||
ALLOW-MSG allow.msg.0
|
||||
|
||||
|
||||
###
|
||||
### some more settings for (language-specific) gateway-switches (see tweb.rc)
|
||||
###
|
||||
|
||||
# GW-SWITCH "ROOT" http://<my-world-relay.my-domain>:<port0>/M
|
||||
# "c=<my-country-ID>" http://<my-country-relay.my-domain>:<port0>/
|
||||
|
||||
|
||||
###
|
||||
### where to prevent listing and provide for searching only
|
||||
###
|
||||
|
||||
# a (list of) DN(s), where no person lists should be display´ed, but
|
||||
# a search box only (e.g., because to many person are contained in
|
||||
# here, so list results would be too long); also, which header and
|
||||
# footer files will be display´ed at that position
|
||||
|
||||
# SEARCH-ONLY "ou=<some-ou>, o=<my-organization>, c=<my-country-ID>" search-only.head.0 search-only.foot.0
|
||||
|
||||
|
||||
###
|
||||
### modifying entries via TWEB
|
||||
###
|
||||
|
||||
# when the user is allowed to modify her own entry, MODIFY/MODATTR will
|
||||
# describe, what can be modified
|
||||
#
|
||||
# BEWARE: this feature is not allowed at the University of Tuebingen,
|
||||
# so the code is not tested very well; usage is on own risc
|
||||
|
||||
# objects of what class can be modified
|
||||
# (for each class a seperate description>)
|
||||
# MODIFY person
|
||||
|
||||
# what attributes can be modified
|
||||
# a label in the HTTP formular is given for each attribute,
|
||||
# together with the maximum count of values, beeing accepted
|
||||
# in the input area
|
||||
|
||||
# MODATTR personalTitle Titel 1
|
||||
# organizationalStatus Dienststellung 1
|
||||
# description Beschreibung 2
|
||||
# telephoneNumber Telefon 2
|
||||
# facsimileTelephoneNumber FAX 2
|
||||
# mail Mail-Adresse 2
|
||||
# roomNumber Raum 1
|
||||
# memberOfGroup Mailgruppe 10
|
||||
# homePostalAddress Heimatanschrift 1
|
||||
# homePhone "privat Telefon" 2
|
||||
# pager Pager 2
|
||||
# info Information 2
|
||||
|
||||
|
@ -1,208 +0,0 @@
|
||||
#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
# *
|
||||
# tweb.conf.1 *
|
||||
# *
|
||||
# Function:..Configuration-File for TWEB-SOFTWARE *
|
||||
# *
|
||||
# *
|
||||
# *
|
||||
# Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
# Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
# neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
# *
|
||||
# ZZZZZ DDD V V *
|
||||
# Creation date: Z D D V V *
|
||||
# July 26 1995 Z D D V V *
|
||||
# Last modification: Z D D V V *
|
||||
# December 18 1998 ZZZZ DDD V *
|
||||
# *
|
||||
#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
|
||||
#==========================================================================
|
||||
# $Id: tweb.conf.1.dist,v 1.6 1999/09/10 15:01:21 zrnsk01 Exp $
|
||||
|
||||
# FOR DESCRIPTION OF THE PARAMETERS SEE THE CONFIG FILE tweb.conf.0(.dist)
|
||||
|
||||
|
||||
###
|
||||
### the description, how to display an object upon read
|
||||
###
|
||||
|
||||
DISPLAY-OBJECT person
|
||||
# main page
|
||||
FIRST-PAGE cn Name DEFAULT
|
||||
personalTitle Title DEFAULT
|
||||
organizationalStatus Status DEFAULT
|
||||
description Working-Area DEFAULT
|
||||
telephoneNumber Telephone DEFAULT
|
||||
facsimileTelephoneNumber Fax DEFAULT
|
||||
mail E-Mail-Address MAILTO
|
||||
textEncodedORaddress X400-Address DEFAULT
|
||||
postalAddress "Postal address" MULTILINE
|
||||
roomNumber Room DEFAULT
|
||||
labeledURI URL URI
|
||||
# additional page
|
||||
SECOND-PAGE sn Surname DEFAULT
|
||||
roleOccupant Role-Occupant HREF
|
||||
memberOfGroup Group-Member DEFAULT
|
||||
homepostalAddress Home-Address MULTILINE
|
||||
homePhone Home-Phone DEFAULT
|
||||
pager Pager DEFAULT
|
||||
lastModifiedTime "Last modified Time" DATE
|
||||
lastModifiedBy "Last modified by" DEFAULT
|
||||
|
||||
DISPLAY-OBJECT organization
|
||||
# main page
|
||||
FIRST-PAGE o Name DEFAULT
|
||||
ou Name DEFAULT
|
||||
l Locality DEFAULT
|
||||
description Description DEFAULT
|
||||
postalAddress "Postal address" MULTILINE
|
||||
telephoneNumber Telephone DEFAULT
|
||||
facsimileTelephoneNumber Fax DEFAULT
|
||||
labeledURI URL URI
|
||||
# additional page
|
||||
SECOND-PAGE st State DEFAULT
|
||||
seeAlso "More Information" MOVETO
|
||||
lastModifiedTime "Last modified Time" DATE
|
||||
lastModifiedBy "Last modified by" DEFAULT
|
||||
|
||||
DISPLAY-OBJECT rfc822MailList
|
||||
# main page
|
||||
FIRST-PAGE description Description DEFAULT
|
||||
joinable Joinable BOOLEAN
|
||||
associatedDomain E-Mail-Domain DEFAULT
|
||||
rfc822RequestsTo "Requests to" MAILTO
|
||||
requestsTo "Requests to" HREF
|
||||
owner Owner HREF
|
||||
# additional page
|
||||
SECOND-PAGE lastModifiedTime "Last modified Time" DATE
|
||||
lastModifiedBy "Last modified by" DEFAULT
|
||||
|
||||
DISPLAY-OBJECT country
|
||||
# main page
|
||||
FIRST-PAGE friendlyCountryName Country-Name DEFAULT
|
||||
associatedDomain Domain DEFAULT
|
||||
manager Manager HREF
|
||||
labeledURI URL URI
|
||||
# additional page
|
||||
SECOND-PAGE masterDSA Master-DSA HREF
|
||||
slaveDSA Slave-DSA HREF
|
||||
lastModifiedTime "Last modified Time" DATE
|
||||
lastModifiedBy "Last modified by" DEFAULT
|
||||
lastUpdateTime "Last update Time" DATE
|
||||
|
||||
DISPLAY-OBJECT default
|
||||
# main page
|
||||
FIRST-PAGE jpegPhoto Photo JPEG
|
||||
photo Photo BMP
|
||||
cn Name DEFAULT
|
||||
sn Surname DEFAULT
|
||||
textEncodedMtaName MTA-Name DEFAULT
|
||||
relatedMHSdomain MHS-Domain DEFAULT
|
||||
description Description DEFAULT
|
||||
multiLineDescription Description MULTILINE
|
||||
info "More Information" DEFAULT
|
||||
productName Productname DEFAULT
|
||||
mail Mail-Address MAILTO
|
||||
telephoneNumber Telephone DEFAULT
|
||||
facsimileTelephoneNumber Fax DEFAULT
|
||||
labeledURL URL URL
|
||||
memberOfGroup "Member of Group" DEFAULT
|
||||
member Member HREF
|
||||
owner Owner HREF
|
||||
requestsTo "Requests to" HREF
|
||||
errorsTo "Errors to" HREF
|
||||
krbName Kerberos-Name DEFAULT
|
||||
postalAddress Postal-Address MULTILINE
|
||||
l Locality DEFAULT
|
||||
textEncodedPSAP "Network address" DEFAULT
|
||||
presentationAddress "Network address" DEFAULT
|
||||
supportedApplicationContext Application DEFAULT
|
||||
publicAccess Access DEFAULT
|
||||
availability Availability DEFAULT
|
||||
knowledgeInformation Contact DEFAULT
|
||||
seeAlso "See also" HREF
|
||||
roleOccupant Role-Occupant HREF
|
||||
manager Manager HREF
|
||||
administrator Manager HREF
|
||||
secretary Secretary HREF
|
||||
associatedName "Associated Name" HREF
|
||||
responsiblePerson "Responsible person" HREF
|
||||
domainComponent Domain DEFAULT
|
||||
labeledURI URL URI
|
||||
# 2.Page (see more)
|
||||
SECOND-PAGE source Source DEFAULT
|
||||
homePostalAddress Home-Address MULTILINE
|
||||
masterDSA Master-DSA HREF
|
||||
slaveDSA Slave-DSA HREF
|
||||
lastModifiedTime "Last modified Time" DATE
|
||||
lastModifiedBy "Last modified by" DEFAULT
|
||||
lastUpdateTime "Last update Time" DATE
|
||||
|
||||
|
||||
|
||||
###
|
||||
### sorting and display of groups of entries
|
||||
###
|
||||
|
||||
SORT dNSDomain Domain 8
|
||||
domain Fax 9
|
||||
rfc822MailList X.500-E-Mail-List 10 rfc822MailList
|
||||
organizationalPerson Staff 1 person registeredAddress
|
||||
residentialPerson Residentials 2 person registeredAddress
|
||||
person Persons 3 person registeredAddress
|
||||
locality Localities 7 organization
|
||||
organization Organizations 5 organization
|
||||
organizationalUnit "Organizational Units" 6 organization
|
||||
alias Aliases 11
|
||||
country Countries 4 country
|
||||
|
||||
|
||||
###
|
||||
### the position of certain language-specific support-files
|
||||
###
|
||||
|
||||
HELPFILE tweb.help.1
|
||||
|
||||
FRIENDLYFILE ldapfriendly.1
|
||||
|
||||
HEADER tweb.header.1
|
||||
FOOTER tweb.footer.1
|
||||
|
||||
ALLOW-MSG allow.msg.1
|
||||
|
||||
|
||||
###
|
||||
### some more settings for (language-specific) gateway-switches (see tweb.rc)
|
||||
###
|
||||
|
||||
# GW-SWITCH "ROOT" http://<my-world-relay.my-domain>:<port1>/M
|
||||
# "c=<my-country-ID>" http://<my-country-relay.my-domain>:<port1>/
|
||||
|
||||
|
||||
###
|
||||
### where to prevent listing and provide for searching only
|
||||
###
|
||||
|
||||
# SEARCH-ONLY "ou=<some-ou>, o=<my-organization>, c=<my-country-ID>" search-only.head.1 search-only.foot.1
|
||||
|
||||
|
||||
###
|
||||
### modifying entries via TWEB
|
||||
###
|
||||
|
||||
# MODIFY person
|
||||
# MODATTR personalTitle Title 1
|
||||
# organizationalStatus Status 1
|
||||
# description Description 2
|
||||
# telephoneNumber Telephone 2
|
||||
# facsimileTelephoneNumber Fax 2
|
||||
# mail "E-Mail address" 2
|
||||
# roomNumber Room 1
|
||||
# memberOfGroup Group-Member 10
|
||||
# homePostalAddress "Home address" 1
|
||||
# homePhone "Home phone" 2
|
||||
# pager Pager 2
|
||||
# info Information 2
|
||||
|
||||
|
@ -1,150 +0,0 @@
|
||||
#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
# *
|
||||
# tweb.lang.0 *
|
||||
# *
|
||||
# Function:..Language-File for TWEB-SOFTWARE *
|
||||
# *
|
||||
# *
|
||||
# *
|
||||
# Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
# Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
# neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
# *
|
||||
# ZZZZZ DDD V V *
|
||||
# Creation date: Z D D V V *
|
||||
# February 14 1996 Z D D V V *
|
||||
# Last modification: Z D D V V *
|
||||
# February 20 1997 ZZZZ DDD V *
|
||||
# *
|
||||
#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
|
||||
#
|
||||
# $Id: tweb.lang.0.dist,v 1.6 1999/09/10 15:01:22 zrnsk01 Exp $
|
||||
|
||||
0 de
|
||||
1 [not used]
|
||||
2 [not used]
|
||||
3 [not used]
|
||||
4 [not used]
|
||||
5 Kommando nicht implementiert!
|
||||
6 Nicht gefunden
|
||||
7 Last-Modified
|
||||
8 Ändere Ergebnisse:
|
||||
9 Änderungs-Ergebnisse für
|
||||
10 Änderungen:
|
||||
11 Fehler während Änderungs-Operation:
|
||||
12 LÖSCHE alten Wert
|
||||
13 von Attribut
|
||||
14 Der Fehler-Kode war
|
||||
15 Änderung
|
||||
16 Erfolgreich ausgeführt
|
||||
17 Lese diesen geänderten Wert
|
||||
18 Benutzer-Passwort
|
||||
19 Ändere diesen Eintrag erneut
|
||||
20 Die angegebene Abfrage war nicht spezifisch genug, wodurch ein Sizelimit
|
||||
überschritten wurde, wobei die ersten paar Übereinstimmungen
|
||||
zurückgegeben wurden. Falls Sie nicht den gesuchten Eintrag
|
||||
gefunden haben, machen Sie bitte eine genauere Abfrage,
|
||||
zum Beispiel mit Vor- und Nachnamen.
|
||||
21 Die Anzahl der gefundenen Einträge hat eine systemseitig
|
||||
vorgegebene Obergrenze überschritten. Falls der gesuchte Eintrag
|
||||
in der dargestellten Liste nicht vorhanden ist, nutzen Sie die
|
||||
<STRONG>Such</STRONG>-Option, um das Gesuchte genauer zu spezifizieren.
|
||||
22 Fehler
|
||||
23 X.500 - WWW Fehler:
|
||||
24 Beim Durchsuchen von X.500 tauchte ein Fehler auf
|
||||
25 Der Fehlercode war
|
||||
26 Es ist keine zusätzliche Information erhältlich.
|
||||
27 Liste unterhalb von
|
||||
28 aktuelle Position:
|
||||
29 About
|
||||
30 Suche:
|
||||
31 Wir haben nicht die entsprechenden Zugriffsrechte, um hier eine globale
|
||||
Suche zu starten, aber wenn Sie wissen, wen Sie suchen, benutzen Sie die
|
||||
<STRONG>Such</STRONG>-Option oben mit dem Namen des
|
||||
gewünschten Eintrages.
|
||||
32 Habe nichts unter diesem Eintrag gefunden. Sie können den Eintrag
|
||||
selbst lesen, oder eine Suche probieren ...
|
||||
33 (eingeschränkte Liste
|
||||
34 siehe Fußnote
|
||||
35 suche in
|
||||
36 Keine Suchergebnisse:
|
||||
37 Habe nichts gefunden ...
|
||||
38 für
|
||||
39 Suchergebnisse:
|
||||
40 Suchergebnisse für
|
||||
41 <H2>X.500 - WWW Fehler:</H2><P>Bei der Darstellung des X.500 Eintrages
|
||||
tauchte ein Fehler auf. <P>Keine bekannte Object-Klasse
|
||||
für diesen Eintrag.<P>
|
||||
42 Weitere Informationen
|
||||
43 VORSICHT: Dies ist noch <B>EXPERIMENTELL</B>!!!
|
||||
44 Geben Sie das Passwort für diesen Eintrag ein
|
||||
45 wenn Sie ihn
|
||||
46 übermitteln wollen
|
||||
47 ÄNDERN
|
||||
48 wollen
|
||||
49 Fehlendes Passwort!
|
||||
50 Unbekanntes Argument
|
||||
51 Ändern
|
||||
52 altes Passwort
|
||||
53 VORSICHT: Dies ist noch EXPERIMENTELL!!!
|
||||
54 Fehler in der Abfrage: Kein Wert
|
||||
55 für
|
||||
56 Fehler in der Abfrage: Kein alter Wert
|
||||
57 <B>Fehler während der Modifikation:</B><P>Neuen Wert HINZUFÜGEN
|
||||
58 zum Attribut
|
||||
59 Der Fehlercode war
|
||||
60 <B>Fataler Fehler:</B><BR>Konnte den alten Wert nicht zurücksetzen
|
||||
61 auf Attribut
|
||||
62 Setze den alten Wert wieder
|
||||
63 auf Attribut
|
||||
64 Mail an:
|
||||
65 Aus datenschutzrechtlichen Gründen werden <strong>keine</strong>
|
||||
umfangreichen Personenlisten ausgegeben. Falls die gesuchte Person
|
||||
in der angezeigten Teilliste nicht vorhanden ist, verwenden Sie die
|
||||
<STRONG>Such</STRONG>-Option, um die gesuchte Person genauer
|
||||
zu spezifizieren.<BR>
|
||||
66 Einstufige Suche
|
||||
67 suche unterhalb nach...
|
||||
68 SUCHEN
|
||||
69 Eingabe löschen
|
||||
70 Eintrag
|
||||
71 Einträge
|
||||
72 Einträge zuruecksetzen
|
||||
73 en
|
||||
74 gelöscht
|
||||
75 ersetzt
|
||||
76 hinzugefügt
|
||||
77 Welt
|
||||
78 Ja
|
||||
79 Nein
|
||||
80 <B>Fataler Fehler:</B><BR>Konnte den Wert nicht modifizieren
|
||||
81 bei Attribut
|
||||
82 http://ambix.uni-tuebingen.de/cgi-bin/selbst
|
||||
83 http://ambix.uni-tuebingen.de/selbstinfo.html
|
||||
84 <FORM METHOD=POST ACTION=%s>Selbsteintrag:
|
||||
85 <INPUT type=hidden name="aloc" value="%s">
|
||||
<INPUT TYPE="submit" name="worker" VALUE="Angestellte">
|
||||
86 <INPUT type=hidden name="sloc" value="%s">
|
||||
<INPUT TYPE="submit" name="studie" VALUE="Studierende">
|
||||
87 </FORM>
|
||||
88 Ungültige Anfrage
|
||||
89 <EM>Fehlender Such-Filter!</EM>
|
||||
90 <EM>Fehlender Scope!</EM>
|
||||
91 [not used]
|
||||
92 <EM>Fehlender Suchbegriff!</EM> <P>Bitte geben Sie einen Suchbegriff an!
|
||||
93 <EM>Fehlender DN!</EM>
|
||||
94 <EM>Fehlendes Passwort!</EM>
|
||||
95 <EM>Unbekannte Abfrage!</EM>
|
||||
96 <H1>ZUGRIFF VERWEIGERT</H1>
|
||||
Die angefragten Daten stehen über diesen Server nicht zur
|
||||
Verfügung!<br>Bitte benutzen Sie folgende URL:
|
||||
97 <H1>ZUGRIFF VERWEIGERT</H1>
|
||||
98 ...lesen
|
||||
99 %s<H6>Daten erstellt durch %s <br>
|
||||
© TWEB: Zentrum für Datenverarbeitung,
|
||||
Universität Tübingen, Deutschland</H6>
|
||||
100 BODY BGCOLOR=#ffffe0 TEXT=#000000 LINK=#0000a0 VLINK=#00a000 font-family="times serif"
|
||||
101 <HR>
|
||||
102 <BR><H1>Der Name Ihres Hosts ist nicht verfuegbar. Sie sehen deshalb nicht alle Daten!</H1><BR>
|
||||
103 [not used]
|
||||
104 Wenn Sie mehr Daten sehen wollen, schalten Sie Ihren Proxy-Server aus !
|
@ -1,136 +0,0 @@
|
||||
#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
# *
|
||||
# tweb.lang.1 *
|
||||
# *
|
||||
# Function:..Language-File for TWEB-SOFTWARE *
|
||||
# *
|
||||
# *
|
||||
# *
|
||||
# Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
# Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
# neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
# *
|
||||
# ZZZZZ DDD V V *
|
||||
# Creation date: Z D D V V *
|
||||
# February 14 1996 Z D D V V *
|
||||
# Last modification: Z D D V V *
|
||||
# February 20 1997 ZZZZ DDD V *
|
||||
# *
|
||||
#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
|
||||
#
|
||||
# $Id: tweb.lang.1.dist,v 1.6 1999/09/10 15:01:22 zrnsk01 Exp $
|
||||
|
||||
0 en
|
||||
1 [not used]
|
||||
2 [not used]
|
||||
3 [not used]
|
||||
4 [not used]
|
||||
5 Command not implemented!
|
||||
6 Not found
|
||||
7 Last-Modified
|
||||
8 Modify results:
|
||||
9 Modify results for
|
||||
10 Changes:
|
||||
11 Error during modify operation:
|
||||
12 DELETE old value
|
||||
13 from attribute
|
||||
14 The error code was
|
||||
15 change
|
||||
16 successfully done
|
||||
17 Read this modified entry
|
||||
18 userPassword
|
||||
19 Modify this entry again
|
||||
20 The query you specified was not specific enough, causing a size limit to be exceeded and the first several matches found to be returned.<br>If you did not find the match you were looking for, try issuing a more specific query, for example one that contains both first and last name.<br>
|
||||
21 Not all entries could be returned because a size limit was exceeded.<br>There is no way to defeat this feature, but if you know who you are looking for, try choosing the <STRONG>Search</STRONG> option listed above and specifying the name of the entry you want.<br>
|
||||
22 Error
|
||||
23 X.500 - WWW Error:
|
||||
24 An error occurred searching X.500
|
||||
25 The error code was
|
||||
26 No additional information is available.
|
||||
27 Move upwards to
|
||||
28 current location:
|
||||
29 About
|
||||
30 search:
|
||||
31 We don't have the access right to do a global search here. If you know who you are looking for, try choosing the <STRONG>Search</STRONG> option listed above and specifying the name of the entry you want.<br>
|
||||
32 Didn't find anything below this entry! You can read the entry itself or try a search ...
|
||||
33 (restricted list
|
||||
34 see below
|
||||
35 search in
|
||||
36 No search results:
|
||||
37 Didn't find anything...
|
||||
38 for
|
||||
39 Search results:
|
||||
40 Search results for
|
||||
41 <H2>X.500 - WWW Error:</H2><P>An error occurred showing X.500 entry. <P>No known object-class for this entry.<P>
|
||||
42 See more attributes
|
||||
43 Beware, this is still <B>EXPERIMENTAL</B>!!!
|
||||
44 Enter the password of this entry
|
||||
45 if you want to
|
||||
46 submit
|
||||
47 MODIFY
|
||||
48 it
|
||||
49 Missing Password!
|
||||
50 Unknown argument
|
||||
51 Modify
|
||||
52 oldPassword
|
||||
53 Beware, this is still EXPERIMENTAL!!!
|
||||
54 Error in query: No value
|
||||
55 for
|
||||
56 Error in query: No oldvalue
|
||||
57 <B>Error during modify operation:</B><P><P>ADD new value
|
||||
58 to attribute
|
||||
59 The error code was
|
||||
60 <B>Fatal Error:</B><BR>Couldn't reset the old value
|
||||
61 to attribute
|
||||
62 Reset the old value
|
||||
63 to attribute
|
||||
64 mailto:
|
||||
65 Due to Legal Rights no extended lists of persons will be displayed.
|
||||
If the requested person is not in the list shown, please use the
|
||||
<STRONG>Search</STRONG>-option with a more significant personal name.
|
||||
<BR>
|
||||
66 Onelevel search
|
||||
67 search below for...
|
||||
68 SEARCH
|
||||
69 DELETE INPUT
|
||||
70 entry
|
||||
71 entries
|
||||
72 RESET Values
|
||||
73 s
|
||||
74 deleted
|
||||
75 replaced
|
||||
76 added
|
||||
77 The World
|
||||
78 Yes
|
||||
79 No
|
||||
80 <B>Fatal Error:</B><BR>Couldn't modify the value
|
||||
81 at attribute
|
||||
82 http://ambix.uni-tuebingen.de/cgi-bin/selbst
|
||||
83 http://ambix.uni-tuebingen.de/selbstinfo.html
|
||||
84 <FORM METHOD=POST ACTION=%s>Self-subscription:
|
||||
85 <INPUT type=hidden name="aloc" value="%s">
|
||||
<INPUT TYPE="submit" name="worker" VALUE="Staff">
|
||||
86 <INPUT type=hidden name="sloc" value="%s">
|
||||
<INPUT TYPE="submit" name="studie" VALUE="Students">
|
||||
87 </FORM>
|
||||
88 Bad request
|
||||
89 <EM>Missing filter!</EM>
|
||||
90 <EM>Missing scope!</EM>
|
||||
91 [not used]
|
||||
92 <EM>Missing search value!</EM> <P>Please specify a search value.
|
||||
93 <EM>Missing DN!</EM>
|
||||
94 <EM>Missing password!</EM>
|
||||
95 <EM>Unknown query!</EM>
|
||||
96 <H1>ACCESS DENIED</H1>
|
||||
The requested data are not delivered via this server!<br>
|
||||
Please use the following URL:
|
||||
97 <H1>ACCESS DENIED</H1>
|
||||
98 ...read it
|
||||
99 %s<H6>Data composed by %s <br>
|
||||
© TWEB: Zentrum fuer Datenverarbeitung,
|
||||
Universitaet Tuebingen, GERMANY</H6>
|
||||
100 BODY BGCOLOR=#ffffe0 TEXT=#000000 LINK=#0000a0 VLINK=#00a000
|
||||
101 <HR>
|
||||
102 <BR><H1>The name of your host is not available. Therefore you don't see the whole database!</H1><BR>
|
||||
103 [not used]
|
||||
104 If you want to see more data, please inactivate your proxy-server !
|
@ -1,233 +0,0 @@
|
||||
#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
# *
|
||||
# tweb.rc.... *
|
||||
# *
|
||||
# Function:..Ressource-File for TWEB *
|
||||
# *
|
||||
# *
|
||||
# *
|
||||
# Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
# Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
# neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
# *
|
||||
# ZZZZZ DDD V V *
|
||||
# Creation date: Z D D V V *
|
||||
# July 26 1995 Z D D V V *
|
||||
# Last modification: Z D D V V *
|
||||
# January 11 1999 ZZZZ DDD V *
|
||||
# *
|
||||
#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
|
||||
#==========================================================================
|
||||
# $Id: tweb.rc.dist,v 1.6 1999/09/10 15:01:22 zrnsk01 Exp $
|
||||
|
||||
|
||||
##########################################################################
|
||||
# #
|
||||
# set the following variables to your local addresses (NEEDED) #
|
||||
# check also for the location of certain help files #
|
||||
# and proper timeout #
|
||||
# #
|
||||
##########################################################################
|
||||
|
||||
# the base port, TWEB is listening on;
|
||||
# indizes for the languages are added to this base port number
|
||||
# (e.g., TWEB with language 1 is listening on port (WEBPORT + 1))
|
||||
WEBPORT <the-base-port-tweb-should-listen-to>
|
||||
|
||||
# the host and port, your x500 server (e.g., UMICH slapd) is listening on
|
||||
LDAPD <the-host-running-your-ldap-server>
|
||||
LDAPPORT <the-port-of-that-ldapserver>
|
||||
|
||||
|
||||
#------------------------------------------------------------------------#
|
||||
|
||||
# the DN, TWEB will consider it´s home, together with header and
|
||||
# footer files to be display´ed at that position
|
||||
#
|
||||
# the BASEDN will be accessed, when NO DN is given (http://host:port/
|
||||
# the BASEDN will be stripped off from hyperlinks beeing display´ed
|
||||
# access to DIT areas NOT below BASEDN will be denied, if STRICT-BASEDN
|
||||
# (see tweb.rc(.dist)) is activ
|
||||
#
|
||||
# BEWARE: HEADER AND FOORTER FILE NAMES ARE ONLY THE BASE NAMES; THE
|
||||
# CORRESPONDING WORKING FILES MUST HAVE EXTENSIONS OF '.x'
|
||||
# WITH x INDICATING THE DESIRED GATEWAY LANGUAGE NUMBER (0-9)
|
||||
|
||||
BASEDN "o=<my-organization>, c=<my-country-ID>" tweb-base.head tweb-base.foot
|
||||
|
||||
|
||||
#------------------------------------------------------------------------#
|
||||
|
||||
# assuming you have copied the binary into the TWEB_conFiles directory,
|
||||
# the ETCDIR directory should be a parallel directory of the current one
|
||||
ETCDIR ../LDAP_etc/
|
||||
|
||||
# the filter file directs the mode, TWEB will search for entries
|
||||
# (e.g., first search input as is in attribute cn, then search
|
||||
# for any one word in attributes cn and/or sn ... )
|
||||
FILTERFILE ldapfilter.conf
|
||||
|
||||
# the time in secs, TWEB will try to get a connection to the x500 server
|
||||
TIMEOUT 240
|
||||
|
||||
|
||||
##########################################################################
|
||||
# #
|
||||
# check the following variables for proper access rights #
|
||||
# and handling of entry lists/legal hints #
|
||||
# (NOT NEEDED FOR FIRST START-UP) #
|
||||
# #
|
||||
##########################################################################
|
||||
|
||||
# DN and password of an x500 entry, TWEB will use, when access of the
|
||||
# user to the servers data is without restrictions
|
||||
#
|
||||
# WEBDN "cn=<TWEB-DN-1>, o=<your-organization>, c=<your-country>"
|
||||
# WEBPW <TWEB-PW-1>
|
||||
|
||||
# DN (and password) of an x500 entry, TWEB will use, when access of the
|
||||
# user to the servers data is restricted (e.g., external users);
|
||||
# a NULL password (by not configuring) will lead to anonymous access,
|
||||
# irrespective, whether the DN is given or not
|
||||
#
|
||||
# WEBDN2 "cn=<TWEB-DN-2>, o=<your-organization>, c=<your-country>"
|
||||
# WEBPW2 <TWEB-PW-2>
|
||||
|
||||
# Refuse/grant service to certain IP hosts/domains names;
|
||||
# both settings will be checked when deciding deniel of service;
|
||||
# the most special definition for the host given will dominate
|
||||
# (settings can be given by using regular expressions, to cover more than
|
||||
# one host/domain with one expression; alternatives, which should be
|
||||
# or'ed must be seperated by '|')
|
||||
# (continuations can be given on follow-up lines, whith no additional
|
||||
# character at the end of the previous line, and an indentation by
|
||||
# TAB or SPACE on the follow-up line)
|
||||
#
|
||||
# REFUSE some-host(\.some-sub-domain)?\.some-domain$|another-domain$|
|
||||
# ^some-initial-char[0-9]+.+\.some-domain$
|
||||
|
||||
# GRANT (host1|host2|host3).*\.another-domain$
|
||||
|
||||
# When service is granted to the requesting host, allow-string/deny-string
|
||||
# decide on full or restricted access to the servers data; in both cases
|
||||
# one of WEBDN1/WEBDN2 (or anonymous if not configured) is used for
|
||||
# accessing the server;
|
||||
# ACLs on the server must be set accourding to the required visibility of
|
||||
# data (see description of ACLs in the servers documentation)
|
||||
# (host/domain names are given as with GRANT/REFUSE)
|
||||
#
|
||||
# ALLOW-STRING my-domain$
|
||||
# DENY-STRING some-special-host/sub-domain-in-my-domain\.my-domain$
|
||||
|
||||
# Consider WWW proxies as not authorized to get un-restricted access
|
||||
# NO-PROXY
|
||||
|
||||
# Consider the explicit list of proxies as authorized to get full access
|
||||
# (the list is as colon-seperated list of host names)
|
||||
# ALLOW-PROXY proxy.in.my.domain:some-proxy.in.another.domain
|
||||
|
||||
# Refuse access to DNs, outside the scope of TWEBs BASEDN
|
||||
# (this is necessary, if no referral mechanism is working on the
|
||||
# x500 server level; e.g., with slapd in the UMICH package)
|
||||
# STRICT-BASEDN
|
||||
|
||||
# Activate anti-hacking code: count access from a range of IP adresses
|
||||
# (IP-Group) to the gateway during a timeslice (randomly selected between
|
||||
# a minimum and maximum number of secs); if the count exceeds a pre-
|
||||
# defined maximum, refuse service for a certain number of timeslices;
|
||||
# after that resume service for the IP-Group
|
||||
# Print statistics for number of accesses from all IP-Groups to file,
|
||||
# at regular intervalls
|
||||
#
|
||||
# COMREFUSE TMIN TMAX MAX_ACCEPT SUSPEND_CYCLE STAT_CYCLE STAT_FILE
|
||||
COMREFUSE 100 200 40 12 43200 /LDAP/ldap-3.0/tweb-1.0/hack-stats
|
||||
|
||||
#------------------------------------------------------------------------#
|
||||
|
||||
# The maximum number of entries display'ed on any one HTML page
|
||||
MAXCOUNT 2000
|
||||
|
||||
# During searching/browsing restrict the number of person entries to the
|
||||
# given number; numbers apply to each of the person groups given by the
|
||||
# SORT parameter
|
||||
# STRICT means, even allowed access will be restricted in numbers
|
||||
# NO-BROWSE means, during browsing no person entries are shown at all
|
||||
# MAX-PERSON 5 STRICT NO-BROWSE
|
||||
|
||||
# List of (parts of ) RDNs, which should not be display'ed
|
||||
# For the current release, strings are seperated by BLANK, with forced
|
||||
# matching to the beginning or end of an RDN signalled by '|';
|
||||
# in a future release, this will be replaced by regular expressions,
|
||||
# very like as in GRANT/REFUSE and beasts
|
||||
NO-SHOW-RDN "|cn=Dummy| netz| LDAP-SAP Mail500|"
|
||||
|
||||
|
||||
# Print a legal message for restricted users;
|
||||
# normally, this message is printed at the end of the HTML page,
|
||||
# with ON-TOP, the message can be printed near the top of the page
|
||||
#
|
||||
# LEGAL ON-TOP
|
||||
|
||||
|
||||
##########################################################################
|
||||
# #
|
||||
# configure TWEB gateway-switching #
|
||||
# #
|
||||
##########################################################################
|
||||
|
||||
# Gateway-switching is an original feature of the TWEB, www-x500-gateway.
|
||||
# Switching enables TWEB to generate hyper-links, that are directed towards
|
||||
# other well-known gateways. Following those hyper-links will lead the
|
||||
# user to those gateways, effectively balancing the load between a net
|
||||
# of gateways. Another benefit is the 'Corporate Identity' each gateway
|
||||
# can implement for an organizations own directory data.
|
||||
#
|
||||
# Gateway-switching can be configured statically, in the config files
|
||||
# tweb.rc and/or tweb.conf.? , or dynamically, via hints in the
|
||||
# directory data to be display'ed.
|
||||
#
|
||||
# Select dynamic gateway-switching: TWEB will look for labeleduri
|
||||
# attributes within each entry to be display'ed as a hyper-link
|
||||
# before constructing the host-part of the hyper-link URL; the
|
||||
# labelleduri attribut must follow the syntax:
|
||||
# <base-url-of-the-other-gateway> <some-label> (gw[-<language-key>])
|
||||
# The DN of the entry will be appended to the base-url, if the language
|
||||
# selection matches, or no specific selection is given (gw)
|
||||
#
|
||||
DYNAMIC-GW
|
||||
|
||||
# Configure static gateway switches; they may be replaced at run-time by
|
||||
# dynamic switches (in tweb.rc, gateways, which only support one language
|
||||
# are given; gatways supporting more languages are defined in the
|
||||
# tweb.conf.? files)
|
||||
GW-SWITCH "l=DFN,c=DE" http://ambix.uni-tuebingen.de:8889/
|
||||
|
||||
|
||||
##########################################################################
|
||||
# #
|
||||
# some miscelleneous configuration parameters #
|
||||
# #
|
||||
##########################################################################
|
||||
|
||||
# the labelling of buttons/links leading to gateways with other languages
|
||||
LANGUAGE Deutsch
|
||||
English
|
||||
|
||||
# the hierarchy above the current DIT position is presented as a
|
||||
# pull down menu and an action button, or as a list of hyperlinks
|
||||
PULL-DOWN-MENUS
|
||||
|
||||
# entries are kept for some time in a WWW browser´s or proxy´s cache,
|
||||
# before expiring
|
||||
CACHE-EXPIRE-DEFAULT 900
|
||||
|
||||
# digits at the end of RDNs (e.g., to make RDNs unique) are stripped
|
||||
# off before displaying; in the config parameter a list of object
|
||||
# classes with stripping in the RDN parts is given
|
||||
# STRIP-PIN |toc_profs|person|toc_primas|toc_cperson|toc_funcs|toc_pextra|
|
||||
|
||||
# when MODIFY is configured (in tweb.conf.x), entries belonging to
|
||||
# the object class(es) given here can NOT be modified
|
||||
# NO-MODIFY |toc_primas|
|
||||
|
||||
|
@ -1,41 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* Versiongw.c *
|
||||
* *
|
||||
* Function:..File for TWEB-SOFTWARE *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* February 13 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* August 26 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: Versiongw.c,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Redistribution and use in source and binary forms are permitted
|
||||
* provided that this notice is preserved and that due credit is given
|
||||
* to the University of Tuebingen, Gremany. The name of the University
|
||||
* may not be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission. This software
|
||||
* is provided ``as is'' without express or implied warranty.
|
||||
*/
|
||||
|
||||
char version[] = "TWEB 2.3.4 (%WHEN%)";
|
||||
char Version[] = " TWEB 2.3.4 (%WHEN%)\t%WHOANDWHERE%";
|
||||
char copyright[] = "TWEB Version 2.3.4";
|
||||
|
||||
char sccsid[] = "@(#) TWEB 2.3.4 - 1995-1999, University of Tuebingen, DE";
|
||||
|
||||
|
@ -1,85 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* ch_malloc.c *
|
||||
* *
|
||||
* Function:..Alloc-Functions with Error-Handling *
|
||||
* *
|
||||
* from LDAP3.2 University of Michigan *
|
||||
* *
|
||||
* Patch: unsigned long --> size_t fuer size-Parameter *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* April 16 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* December 31 1998 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: ch_malloc.c,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#include "tgeneral.h"
|
||||
#include "tglobal.h"
|
||||
|
||||
#include "ch_malloc_exp.h"
|
||||
#include "support_exp.h"
|
||||
|
||||
|
||||
/* ch_malloc.c - malloc routines that test returns from malloc and friends */
|
||||
|
||||
PUBLIC char * ch_malloc( size )
|
||||
size_t size;
|
||||
{
|
||||
char *new;
|
||||
|
||||
if ( (new = (char *) calloc(1, size )) == NULL ) {
|
||||
if (dosyslog) syslog( LOG_INFO, "malloc of %d bytes failed\n", size );
|
||||
exit_tweb( 1 );
|
||||
}
|
||||
|
||||
return( new );
|
||||
}
|
||||
/* end of function: ch_malloc */
|
||||
|
||||
PUBLIC char * ch_realloc( block, size )
|
||||
char *block;
|
||||
size_t size;
|
||||
{
|
||||
char *new;
|
||||
|
||||
if ( block == NULL ) {
|
||||
return( ch_malloc( size ) );
|
||||
}
|
||||
|
||||
if ( (new = (char *) realloc( block, size )) == NULL ) {
|
||||
if (dosyslog) syslog( LOG_INFO, "realloc of %d bytes failed\n", size );
|
||||
exit_tweb( 1 );
|
||||
}
|
||||
|
||||
return( new );
|
||||
}
|
||||
/* end of function: ch_realloc */
|
||||
|
||||
PUBLIC char * ch_calloc( nelem, size )
|
||||
size_t nelem;
|
||||
size_t size;
|
||||
{
|
||||
char *new;
|
||||
|
||||
if ( (new = (char *) calloc( nelem, size )) == NULL ) {
|
||||
if (dosyslog) syslog( LOG_INFO, "calloc of %d elems of %d bytes failed\n",
|
||||
nelem, size );
|
||||
exit_tweb( 1 );
|
||||
}
|
||||
|
||||
return( new );
|
||||
}
|
||||
/* end of function: ch_calloc */
|
@ -1,34 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* ch_malloc_exp.h *
|
||||
* *
|
||||
* Function:..File for TWEB-SOFTWARE *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* April 16 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* November 21 1996 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: ch_malloc_exp.h,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _CH_MALLOC_EXP_
|
||||
#define _CH_MALLOC_EXP_
|
||||
|
||||
PUBLIC char * ch_malloc();
|
||||
PUBLIC char * ch_realloc();
|
||||
PUBLIC char * ch_calloc();
|
||||
|
||||
|
||||
#endif /* _CH_MALLOC_EXP_ */
|
@ -1,179 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* charray.c.. *
|
||||
* *
|
||||
* Function:..Array-Handling-Functions *
|
||||
* *
|
||||
* from LDAP3.2 University of Michigan *
|
||||
* *
|
||||
* Patch: NULL-Pointers are caught in Arrays/Strings *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* April 16 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* December 21 1998 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: charray.c,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#include "tgeneral.h"
|
||||
#include "charray_exp.h"
|
||||
#include "ch_malloc_exp.h"
|
||||
|
||||
/* charray.c - routines for dealing with char * arrays */
|
||||
|
||||
|
||||
PUBLIC void charray_add( a, s )
|
||||
char ***a;
|
||||
char *s;
|
||||
{
|
||||
int n;
|
||||
|
||||
if ( s == NULL )
|
||||
return;
|
||||
|
||||
if ( *a == NULL ) {
|
||||
*a = (char **) ch_malloc( 2 * sizeof(char *) );
|
||||
n = 0;
|
||||
} else {
|
||||
for ( n = 0; *a != NULL && (*a)[n] != NULL; n++ ) {
|
||||
; /* NULL */
|
||||
}
|
||||
|
||||
*a = (char **) ch_realloc( (char *) *a,
|
||||
(n + 2) * sizeof(char *) );
|
||||
}
|
||||
|
||||
(*a)[n++] = strdup(s);
|
||||
(*a)[n] = NULL;
|
||||
}
|
||||
/* end of function: charray_add */
|
||||
|
||||
PUBLIC void charray_merge( a, s )
|
||||
char ***a;
|
||||
char **s;
|
||||
{
|
||||
int i, n, nn;
|
||||
|
||||
if ( s == NULL )
|
||||
return;
|
||||
|
||||
for ( n = 0; *a != NULL && (*a)[n] != NULL; n++ ) {
|
||||
; /* NULL */
|
||||
}
|
||||
|
||||
for ( nn = 0; s[nn] != NULL; nn++ ) {
|
||||
; /* NULL */
|
||||
}
|
||||
|
||||
*a = (char **) ch_realloc( (char *) *a, (n + nn + 1) * sizeof(char *) );
|
||||
|
||||
for ( i = 0; i < nn; i++ ) {
|
||||
(*a)[n + i] = s[i];
|
||||
}
|
||||
(*a)[n + nn] = NULL;
|
||||
}
|
||||
/* end of function: charray_merge */
|
||||
|
||||
PUBLIC void charray_free( array )
|
||||
char **array;
|
||||
{
|
||||
char **a;
|
||||
|
||||
if ( array == NULL ) {
|
||||
return;
|
||||
}
|
||||
|
||||
for ( a = array; *a != NULL; a++ ) {
|
||||
if ( *a != NULL ) {
|
||||
free( *a );
|
||||
}
|
||||
}
|
||||
free( (char *) array );
|
||||
}
|
||||
/* end of function: charray_free */
|
||||
|
||||
PUBLIC int charray_inlist( a, s )
|
||||
char **a;
|
||||
char *s;
|
||||
{
|
||||
int i;
|
||||
|
||||
if (( a == NULL ) || ( s == NULL ))
|
||||
return( 0 );
|
||||
|
||||
for ( i = 0; a[i] != NULL; i++ ) {
|
||||
if ( strcasecmp( s, a[i] ) == 0 ) {
|
||||
return( 1 );
|
||||
}
|
||||
}
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
/* end of function: charray_inlist */
|
||||
|
||||
PUBLIC char ** charray_dup( a )
|
||||
char **a;
|
||||
{
|
||||
int i;
|
||||
char **new;
|
||||
|
||||
if ( a == NULL )
|
||||
return( NULL );
|
||||
|
||||
for ( i = 0; a[i] != NULL; i++ )
|
||||
; /* NULL */
|
||||
|
||||
new = (char **) ch_malloc( (i + 1) * sizeof(char *) );
|
||||
|
||||
for ( i = 0; a[i] != NULL; i++ ) {
|
||||
new[i] = strdup( a[i] );
|
||||
}
|
||||
new[i] = NULL;
|
||||
|
||||
return( new );
|
||||
}
|
||||
/* end of function: charray_dup */
|
||||
|
||||
PUBLIC char ** str2charray( str, brkstr )
|
||||
char *str;
|
||||
char *brkstr;
|
||||
{
|
||||
char **res;
|
||||
char *s;
|
||||
int i;
|
||||
char *str1;
|
||||
|
||||
if (( str == NULL ) || ( brkstr == NULL )) return( (char **) NULL );
|
||||
|
||||
str1 = strdup(str);
|
||||
i = 1;
|
||||
for ( s = str1; *s; s++ ) {
|
||||
if ( strchr( brkstr, *s ) != NULL ) {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
res = (char **) ch_malloc( (i + 1) * sizeof(char *) );
|
||||
i = 0;
|
||||
for ( s = strtok( str1, brkstr ); s != NULL; s = strtok( NULL,
|
||||
brkstr ) ) {
|
||||
res[i++] = strdup( s );
|
||||
}
|
||||
res[i] = NULL;
|
||||
|
||||
free(str1);
|
||||
return( res );
|
||||
}
|
||||
/* end of function: str2charray */
|
@ -1,37 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* charray_exp.h *
|
||||
* *
|
||||
* Function:..File for TWEB-SOFTWARE *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* April 16 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* November 21 1996 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: charray_exp.h,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _CHARRAY_EXP_
|
||||
#define _CHARRAY_EXP_
|
||||
|
||||
PUBLIC void charray_add();
|
||||
PUBLIC void charray_merge();
|
||||
PUBLIC void charray_free();
|
||||
PUBLIC int charray_inlist();
|
||||
PUBLIC char ** charray_dup();
|
||||
PUBLIC char ** str2charray();
|
||||
|
||||
|
||||
#endif /* _CHARRAY_EXP_ */
|
@ -1,258 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* checkclient.c *
|
||||
* *
|
||||
* Function:..Client-Check-Funktions *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* March 7 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* March 19 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: checkclient.c,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#include "tgeneral.h"
|
||||
#include "tglobal.h"
|
||||
#include "init_exp.h"
|
||||
#include "charray_exp.h"
|
||||
#include "checkclient.h"
|
||||
#include "regular_exp.h"
|
||||
|
||||
PRIVATE int check4access (host, glob)
|
||||
char *host;
|
||||
GLOB_STRUCT *glob;
|
||||
/*
|
||||
* check if host ends in a valid domain.
|
||||
* return OK if so, NOTOK otherwise
|
||||
*/
|
||||
{
|
||||
return(
|
||||
(glob->allow_string ? checkad(host, glob->comp_allow, glob) : OK) &&
|
||||
(glob->deny_string ? !checkad(host, glob->comp_deny, glob) : OK));
|
||||
|
||||
}
|
||||
/* end of function: check4access */
|
||||
|
||||
|
||||
PRIVATE int checkad (host, string, glob)
|
||||
char *host;
|
||||
regexp *string;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char nhost[BUFSIZ];
|
||||
|
||||
strcpy(nhost, host ? host : "unknown.xxx");
|
||||
return( tweb_regexec( string, nhost ));
|
||||
|
||||
}
|
||||
/* end of function: checkad */
|
||||
|
||||
/* Analyse Web-Client-Type / proxy + Log-Message */
|
||||
|
||||
PUBLIC void checkwwwclient (fp, ip_addr, ip_port, hp, glob)
|
||||
FILE *fp;
|
||||
char *ip_addr;
|
||||
unsigned int ip_port;
|
||||
struct hostent *hp;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char in[BUFSIZ];
|
||||
char agent[BUFSIZ], via[BUFSIZ];
|
||||
char *host = hp ? hp->h_name : "unknown";
|
||||
|
||||
*via = *agent = '\0';
|
||||
|
||||
if(!((glob->grant ? checkad(host, glob->comp_grant, glob) : OK) &&
|
||||
(glob->refuse ? !checkad(host, glob->comp_refuse, glob) : OK))){
|
||||
|
||||
if (dosyslog)
|
||||
syslog (LOG_INFO, "%s REFUSED <%08d>",
|
||||
glob->server_connection_msg, glob->svc_cnt);
|
||||
fflush(fp);
|
||||
if (http == 1) PRINT_HTML_HEADER;
|
||||
fprintf( fp, HTML_HEAD_TITLE, "ACCESS DENIED", glob->la[100]);
|
||||
disp_file(glob, glob->header, fp);
|
||||
fprintf(fp, "%s", glob->la[97]);
|
||||
disp_file(glob, glob->footer, fp);
|
||||
PRINT_HTML_FOOTER;
|
||||
close_ldap_connections(glob);
|
||||
exit_tweb(0);
|
||||
}
|
||||
|
||||
glob->is_proxy = FALSE;
|
||||
while(fgets( in, BUFSIZ-1, fp ) && *trimright(in, WSPACE) ) {
|
||||
if(strstr(in, "User-Agent:")){
|
||||
strcpy(agent, in);
|
||||
if(strstr(str_tolower(in), PROXY_TOKEN1) ||
|
||||
strstr(in, PROXY_TOKEN2))
|
||||
glob->is_proxy = TRUE;
|
||||
}
|
||||
if(strstr(in, "Via:")){
|
||||
strcpy(via, in);
|
||||
glob->is_proxy = TRUE;
|
||||
}
|
||||
}
|
||||
if (dosyslog){
|
||||
char useragent[BUFSIZ];
|
||||
|
||||
sprintf(useragent, "%s (%s,%u) %s",
|
||||
*agent ? agent : "User-Agent: unknown",
|
||||
ip_addr, ip_port, via);
|
||||
glob->user_agent_msg = strdup(useragent);
|
||||
}
|
||||
|
||||
/* check if access is allowed ... */
|
||||
|
||||
glob->allowed =
|
||||
( hp
|
||||
&& ((check4access(str_tolower(hp->h_name), glob) == OK))
|
||||
&& !( glob->no_proxy && glob->is_proxy
|
||||
&& !charray_inlist(glob->allow_proxy, hp->h_name)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/* end of function: checkwwwclient */
|
||||
|
||||
PUBLIC void decide_access(glob)
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
|
||||
if(!glob->allowed) {
|
||||
/* access from a non allowed computer
|
||||
==> put webdn/webpw on a alternative value (if existant) */
|
||||
glob->webdn = glob->webdn2;
|
||||
glob->webpw = glob->webpw2;
|
||||
glob->noauth = TRUE;
|
||||
|
||||
if (dosyslog) syslog (LOG_INFO, "%s DENIED <%08d>",
|
||||
glob->server_connection_msg, glob->svc_cnt);
|
||||
|
||||
} else {
|
||||
|
||||
/* if allowed and not strict: list persons without limits */
|
||||
if (!glob->strict) glob->max_person = 0;
|
||||
|
||||
if (dosyslog) syslog (LOG_INFO, "%s ALLOWED <%08d>",
|
||||
glob->server_connection_msg, glob->svc_cnt);
|
||||
}
|
||||
if (dosyslog) syslog (LOG_INFO, "%s <%08d>",
|
||||
glob->user_agent_msg, glob->svc_cnt);
|
||||
|
||||
/* non configured max-person means full listing */
|
||||
if (!glob->max_person) glob->max_person = 100000;
|
||||
|
||||
/* if result-lists shall be restricted: configure display of
|
||||
privacy-message */
|
||||
glob->legal = glob->legal && (!glob->allowed || glob->strict);
|
||||
|
||||
/* if browsing should be restricted: configure no_browse-variable */
|
||||
glob->no_browse = glob->no_browse &&
|
||||
(glob->noauth || glob->strict);
|
||||
|
||||
}
|
||||
|
||||
/* end of function: decide_access */
|
||||
|
||||
/* Read ip_refuse dat_file and build up the data structure */
|
||||
|
||||
PUBLIC void get_ip_refuse_clients(glob)
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
if ( glob->ip_refuse ) {
|
||||
|
||||
FILE *rfp;
|
||||
char inLine[BUFSIZ];
|
||||
char *inLineP;
|
||||
size_t buflen = REFU_BUFSIZ;
|
||||
size_t curlen = (size_t) 1;
|
||||
|
||||
if(!(rfp = fopen(glob->ip_refuse->dat_file, "r"))) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( glob->ip_refuse->refu_str ) free( glob->ip_refuse->refu_str );
|
||||
glob->ip_refuse->refu_str = ch_calloc( 1, REFU_BUFSIZ );
|
||||
*glob->ip_refuse->refu_str = '&';
|
||||
|
||||
while(fgets(inLine, BUFSIZ-1, rfp)) {
|
||||
int inLen;
|
||||
|
||||
if ( ( inLineP = strchr( inLine, '#' ) )) *inLineP = '\0';
|
||||
inLineP = trim(inLine, " \t\n");
|
||||
if ( *inLineP == '\0' ) continue;
|
||||
|
||||
inLen = strlen( inLineP );
|
||||
if ( !( curlen + inLen + 1 < buflen )) {
|
||||
|
||||
glob->ip_refuse->refu_str =
|
||||
ch_realloc( glob->ip_refuse->refu_str,
|
||||
buflen + REFU_BUFSIZ );
|
||||
buflen += REFU_BUFSIZ;
|
||||
|
||||
}
|
||||
|
||||
sprintf( glob->ip_refuse->refu_str, "%s%s&",
|
||||
glob->ip_refuse->refu_str, inLineP );
|
||||
|
||||
curlen += inLen;
|
||||
|
||||
}
|
||||
fclose( rfp );
|
||||
|
||||
}
|
||||
} /* get_ip_refuse_clients */
|
||||
|
||||
|
||||
/* Routine needed to initialize structure in init.c */
|
||||
|
||||
/* Test the incomming IP address for denial */
|
||||
|
||||
PUBLIC int
|
||||
check_ip_denial( ip_connection, glob )
|
||||
struct sockaddr_in *ip_connection;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
int res = OK;
|
||||
|
||||
if ( glob->ip_refuse ) {
|
||||
char ip_address[18];
|
||||
|
||||
sprintf( ip_address, "&%s&", inet_ntoa( ip_connection->sin_addr ));
|
||||
if ( strstr( glob->ip_refuse->refu_str, ip_address ))
|
||||
res = NOTOK;
|
||||
|
||||
}
|
||||
|
||||
return( res );
|
||||
|
||||
} /* check_ip_denial */
|
||||
|
||||
|
||||
/* re-read IP-REFUSE file if necessary */
|
||||
|
||||
PUBLIC void
|
||||
re_readIPrefuse( glob )
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
static int ip_refuse_reload = 0;
|
||||
|
||||
if ( glob->ip_refuse &&
|
||||
!( ++ip_refuse_reload % glob->ip_refuse->rereadcycle )) {
|
||||
get_ip_refuse_clients( glob );
|
||||
}
|
||||
|
||||
} /* re_readIPrefuse */
|
||||
|
@ -1,41 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* checkclient.h *
|
||||
* *
|
||||
* Function:..File for TWEB-SOFTWARE *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* March 18 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* March 19 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: checkclient.h,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
#include "checkclient_exp.h"
|
||||
#include "regular_exp.h"
|
||||
#include "support_exp.h"
|
||||
#include "x500_exp.h"
|
||||
#include "charray_exp.h"
|
||||
#include "ch_malloc_exp.h"
|
||||
|
||||
#ifndef _CHECKCLIENT_
|
||||
#define _CHECKCLIENT_
|
||||
|
||||
#define PROXY_TOKEN1 " via "
|
||||
#define PROXY_TOKEN2 "gateway"
|
||||
|
||||
PRIVATE int checkad();
|
||||
PRIVATE int check4access();
|
||||
|
||||
#endif /* _CHECKCLIENT_ */
|
@ -1,35 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* checkclient_exp.h *
|
||||
* *
|
||||
* Function:..File for TWEB-SOFTWARE *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* March 18 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* March 19 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: checkclient_exp.h,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _CHECKCLIENT_EXP_
|
||||
#define _CHECKCLIENT_EXP_
|
||||
|
||||
PUBLIC void checkwwwclient();
|
||||
PUBLIC void decide_access();
|
||||
PUBLIC void get_ip_refuse_clients();
|
||||
PUBLIC int check_ip_denial();
|
||||
PUBLIC void re_readIPrefuse();
|
||||
|
||||
#endif /* _CHECKCLIENT_EXP_ */
|
@ -1,202 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* dn.c....... *
|
||||
* *
|
||||
* Function:..DN-Handling-Functions *
|
||||
* *
|
||||
* from LDAP3.2 University of Michigan *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* April 24 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* September 13 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: dn.c,v 1.8 1999/09/13 13:47:44 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
/* dn.c - routines for dealing with distinguished names */
|
||||
|
||||
#include "tgeneral.h"
|
||||
#include "tglobal.h"
|
||||
#include "strng_exp.h"
|
||||
#include "dn.h"
|
||||
|
||||
#if OL_LDAPV == 2
|
||||
#define LDAP_DEBUG_ANY 0xffff
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* dn_normalize - put dn into a canonical format. the dn is
|
||||
* normalized in place, as well as returned.
|
||||
*/
|
||||
|
||||
PUBLIC char * dn_normalize( dn )
|
||||
char *dn;
|
||||
{
|
||||
char *d, *s;
|
||||
int state, gotesc;
|
||||
|
||||
/* Debug( LDAP_DEBUG_TRACE, "=> dn_normalize \"%s\"\n", dn, 0, 0 ); */
|
||||
|
||||
gotesc = 0;
|
||||
state = B4TYPE;
|
||||
for ( d = s = dn; *s; s++ ) {
|
||||
switch ( state ) {
|
||||
case B4TYPE:
|
||||
if ( ! SPACE( *s ) ) {
|
||||
state = INTYPE;
|
||||
*d++ = *s;
|
||||
}
|
||||
break;
|
||||
case INTYPE:
|
||||
if ( *s == '=' ) {
|
||||
state = B4VALUE;
|
||||
*d++ = *s;
|
||||
} else if ( SPACE( *s ) ) {
|
||||
state = B4EQUAL;
|
||||
} else {
|
||||
*d++ = *s;
|
||||
}
|
||||
break;
|
||||
case B4EQUAL:
|
||||
if ( *s == '=' ) {
|
||||
state = B4VALUE;
|
||||
*d++ = *s;
|
||||
} else if ( ! SPACE( *s ) ) {
|
||||
/* not a valid dn - but what can we do here? */
|
||||
*d++ = *s;
|
||||
}
|
||||
break;
|
||||
case B4VALUE:
|
||||
if ( *s == '"' ) {
|
||||
state = INQUOTEDVALUE;
|
||||
*d++ = *s;
|
||||
} else if ( ! SPACE( *s ) ) {
|
||||
state = INVALUE;
|
||||
*d++ = *s;
|
||||
}
|
||||
break;
|
||||
case INVALUE:
|
||||
if ( !gotesc && SEPARATOR( *s ) ) {
|
||||
while ( SPACE( *(d - 1) ) )
|
||||
d--;
|
||||
state = B4TYPE;
|
||||
if ( *s == '+' ) {
|
||||
*d++ = *s;
|
||||
} else {
|
||||
*d++ = ',';
|
||||
}
|
||||
} else if ( gotesc && !NEEDSESCAPE( *s ) &&
|
||||
!SEPARATOR( *s ) ) {
|
||||
*--d = *s;
|
||||
d++;
|
||||
} else {
|
||||
*d++ = *s;
|
||||
}
|
||||
break;
|
||||
case INQUOTEDVALUE:
|
||||
if ( !gotesc && *s == '"' ) {
|
||||
state = B4SEPARATOR;
|
||||
*d++ = *s;
|
||||
} else if ( gotesc && !NEEDSESCAPE( *s ) ) {
|
||||
*--d = *s;
|
||||
d++;
|
||||
} else {
|
||||
*d++ = *s;
|
||||
}
|
||||
break;
|
||||
case B4SEPARATOR:
|
||||
if ( SEPARATOR( *s ) ) {
|
||||
state = B4TYPE;
|
||||
*d++ = *s;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
#if OL_LDAPV >= 2
|
||||
|
||||
if ( ldap_debug & LDAP_DEBUG_ANY )
|
||||
fprintf( stderr, "dn_normalize - unknown state %d\n", state );
|
||||
|
||||
if ( ldap_syslog & LDAP_DEBUG_ANY )
|
||||
syslog( ldap_syslog_level,
|
||||
"dn_normalize - unknown state %d\n", state );
|
||||
|
||||
#else
|
||||
Debug( LDAP_DEBUG_ANY,
|
||||
"dn_normalize - unknown state %d\n", state, 0, 0 );
|
||||
#endif
|
||||
|
||||
break;
|
||||
}
|
||||
if ( *s == '\\' ) {
|
||||
gotesc = 1;
|
||||
} else {
|
||||
gotesc = 0;
|
||||
}
|
||||
}
|
||||
*d = '\0';
|
||||
|
||||
/* Debug( LDAP_DEBUG_TRACE, "<= dn_normalize \"%s\"\n", dn, 0, 0 ); */
|
||||
return( dn );
|
||||
}
|
||||
/* end of function: dn_normalize */
|
||||
|
||||
/*
|
||||
* dn_normalize_case - put dn into a canonical form suitable for storing
|
||||
* in a hash database. this involves normalizing the case as well as
|
||||
* the format. the dn is normalized in place as well as returned.
|
||||
*/
|
||||
|
||||
PUBLIC char * dn_normalize_case( dn )
|
||||
char *dn;
|
||||
{
|
||||
|
||||
/* normalize format */
|
||||
dn_normalize( dn );
|
||||
|
||||
/* normalize case */
|
||||
str_toupper( dn );
|
||||
|
||||
return( dn );
|
||||
}
|
||||
/* end of function: dn_normalize_case */
|
||||
|
||||
/*
|
||||
* dn_issuffix - tells whether suffix is a suffix of dn. both dn
|
||||
* and suffix must be normalized.
|
||||
*/
|
||||
|
||||
PUBLIC int dn_issuffix( dn, suffix )
|
||||
char *dn;
|
||||
char *suffix;
|
||||
{
|
||||
int dnlen, suffixlen;
|
||||
|
||||
if ( dn == NULL ) {
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
suffixlen = strlen( suffix );
|
||||
dnlen = strlen( dn );
|
||||
|
||||
if ( suffixlen > dnlen ) {
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
return( strcasecmp( dn + dnlen - suffixlen, suffix ) == 0 );
|
||||
}
|
||||
/* end of function: dn_issuffix */
|
||||
|
@ -1,43 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* dn.h....... *
|
||||
* *
|
||||
* Function:..Header-Datei fuer TWEB-Software *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* April 24 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* November 21 1996 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: dn.h,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DN_
|
||||
#define _DN_
|
||||
|
||||
#define DNSEPARATOR(c) (c == ',' || c == ';')
|
||||
#define SEPARATOR(c) (c == ',' || c == ';' || c == '+')
|
||||
#define SPACE(c) (c == ' ' || c == '\n')
|
||||
#define NEEDSESCAPE(c) (c == '\\' || c == '"')
|
||||
#define B4TYPE 0
|
||||
#define INTYPE 1
|
||||
#define B4EQUAL 2
|
||||
#define B4VALUE 3
|
||||
#define INVALUE 4
|
||||
#define INQUOTEDVALUE 5
|
||||
#define B4SEPARATOR 6
|
||||
|
||||
#include "dn_exp.h"
|
||||
|
||||
#endif /* _DN_ */
|
@ -1,33 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* dn_exp.h... *
|
||||
* *
|
||||
* Function:..Header-Datei fuer TWEB-Software *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* April 24 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* November 21 1996 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: dn_exp.h,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DN_EXP_
|
||||
#define _DN_EXP_
|
||||
|
||||
PUBLIC char * dn_normalize();
|
||||
PUBLIC char * dn_normalize_case();
|
||||
PUBLIC int dn_issuffix();
|
||||
|
||||
#endif /* _DN_EXP_ */
|
File diff suppressed because one or more lines are too long
@ -1,12 +0,0 @@
|
||||
doc/Presentation/README
|
||||
=======================
|
||||
|
||||
This directory contains documentation concerning TWEB that was presented
|
||||
at different occasions.
|
||||
|
||||
- DANTE-01-99.ps
|
||||
|
||||
Presentation of the dynamic features of TWEB (i.e., gateway-switching
|
||||
and dynamic re-configuration) at the DANTE NameFlow meeting, January,
|
||||
18th, 1999, in Utrecht, NL.
|
||||
|
@ -1,939 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* html.c..... *
|
||||
* *
|
||||
* Function:..WorldWideWeb-X.500-Gateway - HTML-Procedures *
|
||||
* Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
|
||||
* which is based on go500gw by Tim Howes, University of *
|
||||
* Michigan - All rights reserved *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* August 16 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* May 28 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: html.c,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#include "tgeneral.h"
|
||||
#include "tglobal.h"
|
||||
#include "html.h"
|
||||
#include "init_exp.h"
|
||||
#include "support_exp.h"
|
||||
|
||||
#ifdef TUETEL
|
||||
#include "tueTel_exp.h"
|
||||
#endif
|
||||
|
||||
PUBLIC void print_attr(ld, fp, dn, label, tattr, e, flag, doNotShow, glob)
|
||||
LDAP *ld;
|
||||
FILE *fp;
|
||||
char *dn;
|
||||
char *label;
|
||||
char *tattr;
|
||||
LDAPMessage *e;
|
||||
int flag;
|
||||
char *doNotShow;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char **val;
|
||||
int i, gotone = 0, firstline = TRUE, valid_label = FALSE;
|
||||
static char *nlabel;
|
||||
char imageChar = 'J';
|
||||
char strbuf[BUFSIZ];
|
||||
int first_of_same = TRUE;
|
||||
|
||||
nlabel = ldap_friendly_name(glob->friendlyfile, label, &fm);
|
||||
|
||||
if ( (val = ldap_get_values( ld, e, tattr )) == NULL )
|
||||
return;
|
||||
|
||||
/* check if only 1 value and this one is in "doNotShow"
|
||||
if((doNotShow) && (val[1] == NULL) && (strcmp(val[0],doNotShow) == 0))
|
||||
return;
|
||||
*/
|
||||
|
||||
for ( i = 0; val[i]; i++ ) {
|
||||
|
||||
sprintf(strbuf, "(%s)", glob->la[0]);
|
||||
if(!strncasecmp(val[i], strbuf, 4)) {
|
||||
strcpy(val[i], val[i]+4);
|
||||
}
|
||||
else if(val[i][0] == '(' && val[i][3] == ')' ) {
|
||||
val[i][0] = '\0';
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!doNotShow || strncasecmp (val[i], doNotShow, strlen (val[i])))
|
||||
valid_label = TRUE;
|
||||
else
|
||||
val[i][0] = '\0';
|
||||
}
|
||||
|
||||
if(!valid_label) {
|
||||
|
||||
ldap_value_free (val);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
fprintf( fp, "\n<DT><B>%s</B><DD>", nlabel );
|
||||
|
||||
/* handle photo-requests */
|
||||
if((flag == BMP) || (flag == JPEG2GIF) || (flag == JPEG)) {
|
||||
photof(fp, flag, imageChar, dn, tattr);
|
||||
return;
|
||||
}
|
||||
|
||||
for ( i = 0; val[i] != NULL; i++ ) {
|
||||
|
||||
char *vali;
|
||||
|
||||
if(!*label ) first_of_same = FALSE;
|
||||
|
||||
if(!*val[i]) continue;
|
||||
|
||||
vali = char2html(val[i]);
|
||||
|
||||
if (flag == URL) {
|
||||
urlf(fp, vali);
|
||||
|
||||
#ifdef TUE_TEL
|
||||
} else if (flag == TFUNCPERS) {
|
||||
tfuncpersf(fp, vali, ld, glob);
|
||||
#endif
|
||||
|
||||
} else if (flag == DYNAMICDN) {
|
||||
dynamicdnf(fp, vali, glob);
|
||||
|
||||
} else if (flag == INDEXURL) {
|
||||
indexurlf(fp, vali, dn, glob);
|
||||
|
||||
} else if (flag == URI) {
|
||||
urif(fp, vali, glob);
|
||||
|
||||
} else if (flag == PGPKEY) {
|
||||
pgpkeyf(fp, vali, &firstline);
|
||||
|
||||
} else if ( ( flag == MULTILINE ) || (strchr(vali, '$') &&
|
||||
strncmp(vali, "{T.61}", 6) != 0 )) {
|
||||
multilinef(fp, vali, &first_of_same, &firstline, &gotone, nlabel);
|
||||
|
||||
} else if (flag == BOOLEAN) {
|
||||
booleanf(fp, val[i], glob);
|
||||
|
||||
} else if (flag == DATE) {
|
||||
datef(fp, val[i]);
|
||||
|
||||
} else if (flag == MAILTO) {
|
||||
mailtof(fp, val[i], vali);
|
||||
|
||||
} else if (flag == HREF) {
|
||||
hreff(fp, val[i], vali, glob);
|
||||
|
||||
} else if (flag == MOVETO) {
|
||||
movetof(fp, val[i], vali, glob);
|
||||
|
||||
} else if (flag == PRE) {
|
||||
pref(fp, vali, glob);
|
||||
|
||||
} else if (flag == HEADER) {
|
||||
headerf(fp, vali, glob);
|
||||
|
||||
} else if (flag == REFERRAL) {
|
||||
referralf(fp, vali, glob);
|
||||
|
||||
#ifdef TUE_TEL
|
||||
} else if(flag == FAXTABLE) {
|
||||
faxtablef(fp, val, &firstline);
|
||||
#endif
|
||||
|
||||
} else
|
||||
defaultf(fp, vali, &firstline);
|
||||
}
|
||||
ldap_value_free( val );
|
||||
}
|
||||
/* end of function: print_attr */
|
||||
|
||||
PUBLIC void form_attr(ld, fp, label, tattr, e, multiline, add_empty, glob)
|
||||
LDAP *ld;
|
||||
FILE *fp;
|
||||
char *label;
|
||||
char *tattr;
|
||||
LDAPMessage *e;
|
||||
int multiline;
|
||||
int add_empty;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char **val, *s;
|
||||
char buffer[1024];
|
||||
int i, gotone = 0, line = 0;
|
||||
static char *nlabel;
|
||||
nlabel = ldap_friendly_name(glob->friendlyfile, label, &fm);
|
||||
if ( (val = ldap_get_values( ld, e, tattr )) == NULL ) {
|
||||
if (add_empty > 0)
|
||||
if(multiline)
|
||||
fprintf( fp, "<DT><B>%s</B><DD><TEXTAREA NAME=\"%s=\" ROWS=4 COLS=30></TEXTAREA><BR>\n",
|
||||
nlabel, tattr);
|
||||
else
|
||||
fprintf( fp, "<DT><B>%s</B><DD><INPUT NAME=\"%s=\" SIZE=30 ><BR>\n",
|
||||
nlabel, tattr);
|
||||
return;
|
||||
}
|
||||
fprintf( fp, "\n<DT><B>%s</B><DD>", nlabel );
|
||||
buffer[0] ='\0';
|
||||
for ( i = 0; val[i] != NULL; i++ ) {
|
||||
if ( multiline ) {
|
||||
char *s, *p;
|
||||
buffer[0] ='\0';
|
||||
if ( gotone )
|
||||
fprintf( fp, "<DT><B>%s</B><DD>", nlabel);
|
||||
p = s = val[i];
|
||||
while ( ( s = strchr( s, '$' )) ) {
|
||||
*s++ = '\0';
|
||||
while ( isspace( *s ) )
|
||||
s++;
|
||||
if ( line == 0 ) {
|
||||
sprintf(buffer, "%s", p);
|
||||
line++;
|
||||
} else {
|
||||
sprintf(buffer, "%s\n%s", buffer, p);
|
||||
line++;
|
||||
}
|
||||
p = s;
|
||||
}
|
||||
if (line++ == 0) {
|
||||
sprintf(buffer, "%s", p);
|
||||
} else {
|
||||
sprintf(buffer, "%s\n%s", buffer, p);
|
||||
}
|
||||
s = form_encode(buffer);
|
||||
fprintf( fp,
|
||||
"<TEXTAREA NAME=\"%s=%s\" ROWS=%d COLS=30>%s</TEXTAREA><BR>\n",
|
||||
tattr, s, line + 1, s);
|
||||
/* fprintf( fp, "<INPUT NAME=\"%s=%s\" SIZE=30,%d VALUE=\"%s\"> <BR>\n", tattr, s, line + 1, s); */
|
||||
gotone = 1;
|
||||
line = 0;
|
||||
} else {
|
||||
s = form_encode(val[i]);
|
||||
fprintf( fp, "<INPUT NAME=\"%s=%s\" SIZE=\"%d\" VALUE=\"%s\"><BR>\n", tattr, s,
|
||||
strlen(val[i]) > 30 ? strlen(val[i]) + 3 : 30, s);
|
||||
}
|
||||
}
|
||||
if (add_empty > i)
|
||||
fprintf( fp, "<INPUT NAME=\"%s=\" SIZE=30 ><BR>\n", tattr);
|
||||
ldap_value_free( val );
|
||||
}
|
||||
/* end of function: form_attr */
|
||||
|
||||
PUBLIC void do_pict(ld, fp, dn, type, glob)
|
||||
LDAP *ld;
|
||||
FILE *fp;
|
||||
char *dn;
|
||||
int type;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
int rc, i;
|
||||
struct berval **val;
|
||||
char cmd[128], buffer[1024];
|
||||
char *s;
|
||||
FILE *op, *tp;
|
||||
LDAPMessage *res, *e;
|
||||
struct stat st;
|
||||
char *cPtr, *ptype;
|
||||
char *tattr;
|
||||
|
||||
if ( (rc = ldap_search_s( ld, dn, LDAP_SCOPE_BASE, NULL,
|
||||
NULL, 0, &res )) != LDAP_SUCCESS ) {
|
||||
do_error(fp, rc, NOT_FOUND, glob);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( (e = ldap_first_entry( ld, res )) == NULL ) {
|
||||
do_error(fp, -2, SERVER_ERROR, glob);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* old behaviour: use "photo" or "jpegPhoto" attribute
|
||||
* as indicated by type-argument.
|
||||
*/
|
||||
tattr = (type == 0 ? "photo" : "jpegPhoto");
|
||||
|
||||
/* NEW: if attr is added to URL via "+" use that attribute */
|
||||
if( ( cPtr = strQuoteChr(dn,'+')) )
|
||||
tattr = ++cPtr;
|
||||
|
||||
if ( (val = ldap_get_values_len( ld, e, tattr)) == NULL )
|
||||
return;
|
||||
|
||||
s = tmpnam( NULL );
|
||||
tp = fopen( s, "w+");
|
||||
|
||||
if (type == 0) { /* g3fax photo -> xbm */
|
||||
sprintf(cmd, "%s > %s", G3TOXBM, s);
|
||||
if (debug) fprintf(stderr, "%ld bytes FAX!! %s\n",
|
||||
val[0]->bv_len, cmd);
|
||||
ptype = "x-xbitmap";
|
||||
} else if (type == 1) { /* jpeg -> gif */
|
||||
sprintf(cmd, "%s > %s", JPEGTOGIF, s);
|
||||
if (debug) fprintf(stderr, "%ld bytes JPEG!! %s\n",
|
||||
val[0]->bv_len, cmd);
|
||||
ptype = "gif";
|
||||
} else { /* jpeg direct */
|
||||
sprintf(cmd, "cat > %s", s);
|
||||
if (debug) fprintf(stderr, "%ld bytes JPEG!! %s\n",
|
||||
val[0]->bv_len, cmd);
|
||||
ptype = "jpeg";
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (http == 1) {
|
||||
fprintf(fp, "HTTP/1.0 %d OK<br>MIME-Version: 1.0<br>",
|
||||
DOCUMENT_FOLLOWS );
|
||||
fprintf(fp, "Content-type: image/%s<br>", ptype );
|
||||
}
|
||||
if (request == HEAD) {
|
||||
fflush(fp);
|
||||
exit_tweb (1);
|
||||
}
|
||||
if ((op = popen(cmd, "w")) == NULL )
|
||||
return;
|
||||
fwrite(val[0]->bv_val, val[0]->bv_len, 1, op);
|
||||
pclose(op);
|
||||
if (stat(s, &st) == 0 && http == 1) {
|
||||
fprintf(fp, "Content-length: %lu<br>", st.st_size);
|
||||
if (debug) fprintf(stderr, "Image size: %lu\n", st.st_size);
|
||||
}
|
||||
fprintf(fp, "<br>\n\n");
|
||||
|
||||
while (( i = fread(buffer, 1, 1024, tp))) fwrite(buffer, 1, i, fp);
|
||||
fclose(tp);
|
||||
if (unlink(s) == -1) {
|
||||
if (debug) perror("Couldn't unlink temp image file");
|
||||
}
|
||||
fflush(fp);
|
||||
}
|
||||
/* end of function: do_pict */
|
||||
|
||||
|
||||
|
||||
PUBLIC void do_audio(ld, fp, dn, type, glob)
|
||||
LDAP *ld;
|
||||
FILE *fp;
|
||||
char *dn;
|
||||
int type;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
int rc;
|
||||
struct berval **val;
|
||||
LDAPMessage *res, *e;
|
||||
struct timeval timeout;
|
||||
|
||||
timeout.tv_sec = glob->timeout;
|
||||
timeout.tv_usec = 0;
|
||||
if ( (rc = ldap_search_st( ld, dn, LDAP_SCOPE_BASE, NULL,
|
||||
NULL, 0, &timeout, &res )) != LDAP_SUCCESS ) {
|
||||
do_error(fp, rc, NOT_FOUND, glob);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( (e = ldap_first_entry( ld, res )) == NULL ) {
|
||||
do_error(fp, -2, SERVER_ERROR, glob);
|
||||
return;
|
||||
}
|
||||
if ( (val = ldap_get_values_len( ld, e, "audio" )) == NULL )
|
||||
return;
|
||||
if (http == 1) {
|
||||
fprintf(fp, "HTTP/1.0 %d OK\nMIME-Version: 1.0\nServer: %s\n",
|
||||
DOCUMENT_FOLLOWS, version);
|
||||
fprintf(fp, "Content-type: audio/basic<P>Content-length: %ld\n\n",
|
||||
val[0]->bv_len);
|
||||
}
|
||||
if (request == HEAD) {
|
||||
fflush(fp);
|
||||
exit_tweb (1);
|
||||
}
|
||||
fwrite(val[0]->bv_val, val[0]->bv_len, 1, fp);
|
||||
fflush(fp);
|
||||
}
|
||||
/* end of function: do_audio */
|
||||
|
||||
PUBLIC void do_sizelimit(fp, type, glob)
|
||||
FILE *fp;
|
||||
int type;
|
||||
GLOB_STRUCT *glob;
|
||||
|
||||
{
|
||||
fprintf(fp, type ? glob->la[21] : glob->la[20]);
|
||||
}
|
||||
/* end of function: do_sizelimit */
|
||||
|
||||
PUBLIC void do_error(fp, code, status, glob)
|
||||
FILE *fp;
|
||||
int code;
|
||||
int status;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char *s = "";
|
||||
|
||||
if (http == 1) {
|
||||
switch (status) {
|
||||
case BAD_REQUEST: s = "Bad request"; break;
|
||||
case AUTH_REQUIRED: s = "Authorization required"; break;
|
||||
case FORBIDDEN: s = "Forbidden"; break;
|
||||
case NOT_FOUND: s = "Not found"; break;
|
||||
case SERVER_ERROR: s = "Server error"; break;
|
||||
case NOT_IMPLEMENTED: s = "Not implemented"; break;
|
||||
default: s = "Unknown error";
|
||||
}
|
||||
|
||||
fprintf(fp, "HTTP/1.0 %03d %s\nMIME-Version: 1.0\nContent-Type: text/html\n\n", status, s);
|
||||
}
|
||||
|
||||
if (request == HEAD) {
|
||||
fflush(fp);
|
||||
exit_tweb (1);
|
||||
}
|
||||
|
||||
fprintf( fp, HTML_HEAD_TITLE, glob->la[22], glob->la[100]);
|
||||
fprintf( fp, "\n<H2>%s %s</H2>\n%s <P>%s <EM> %d: %s.</EM><P>%s<br></BODY></HTML>", glob->la[23], s, glob->la[24], glob->la[25], code, ldap_err2string( code ), glob->la[26] );
|
||||
}
|
||||
/* end of function: do_error */
|
||||
|
||||
PUBLIC void explain_error (fp, error, status, glob )
|
||||
FILE *fp;
|
||||
char *error;
|
||||
int status;
|
||||
GLOB_STRUCT *glob;
|
||||
|
||||
{
|
||||
char *s = "Unknown error";
|
||||
if (http == 1) {
|
||||
switch (status) {
|
||||
case BAD_REQUEST: s = "Bad request"; break;
|
||||
case AUTH_REQUIRED: s = "Authorization required"; break;
|
||||
case FORBIDDEN: s = "Forbidden"; break;
|
||||
case NOT_FOUND: s = "Not found"; break;
|
||||
case SERVER_ERROR: s = "Server error"; break;
|
||||
case NOT_IMPLEMENTED: s = "Not implemented"; break;
|
||||
default: s = "Unknown error";
|
||||
}
|
||||
fprintf(fp, "HTTP/1.0 %03d %s\n",status, s);
|
||||
fprintf(fp, "MIME-Version: 1.0\n");
|
||||
fprintf(fp, "Content-Type: text/html\n\n");
|
||||
}
|
||||
if (request == HEAD) {
|
||||
fflush(fp);
|
||||
exit_tweb (1);
|
||||
}
|
||||
fprintf( fp, HTML_HEAD_TITLE, glob->la[22], glob->la[100]);
|
||||
fprintf( fp, "<H2>%s: %s</H2>\n", glob->la[22], s);
|
||||
fprintf( fp, "%s</BODY>\n</HTML>", error);
|
||||
}
|
||||
/* end of function: explain_error */
|
||||
|
||||
/* Make "Move upwards" Header */
|
||||
PUBLIC void make_header (fp, dn, action, glob)
|
||||
FILE *fp;
|
||||
char *dn;
|
||||
int action;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char **s, **t, hrdn[1024];
|
||||
int cnt, i, j;
|
||||
pGW_SWITCH_LINE gw_ptr;
|
||||
char url[BUFSIZ];
|
||||
|
||||
if(glob->pull_down_menus) {
|
||||
make_header_pull_down(fp, dn, action, glob);
|
||||
return;
|
||||
}
|
||||
|
||||
hrdn[0] = '\0';
|
||||
if ( strlen(dn) == 0) /* the root */
|
||||
return;
|
||||
s = ldap_explode_dn( dn, 1 );
|
||||
t = ldap_explode_dn( dn, 0 );
|
||||
|
||||
strcpy(url, "M");
|
||||
for(gw_ptr = glob->gw_switch->list; gw_ptr; gw_ptr = gw_ptr->next)
|
||||
if (!strcasecmp(gw_ptr->dn, "ROOT"))
|
||||
strcpy(url, gw_ptr->url);
|
||||
|
||||
fprintf( fp, "<strong>%s </strong><MENU>\n<LI> <A HREF=\"%s\">%s</A>\n",
|
||||
glob->la[27], url, glob->la[77]);
|
||||
|
||||
|
||||
for (cnt=0; t[cnt]; cnt++);
|
||||
for (i = cnt - 1; i > 0 && s[i]; i--) {
|
||||
strcpy(hrdn, hex_encode(t[i]));
|
||||
for (j = i + 1; j < cnt ; j++) {
|
||||
strcat(hrdn, hex_encode(", "));
|
||||
strcat(hrdn,hex_encode(t[j]));
|
||||
}
|
||||
|
||||
strcpy(url, "/");
|
||||
for(gw_ptr = glob->gw_switch->list; gw_ptr; gw_ptr = gw_ptr->next)
|
||||
if (!dn_cmp(hex_encode (gw_ptr->dn), hrdn))
|
||||
strcpy(url, url_complete(gw_ptr->url, hrdn, "M"));
|
||||
if(strcmp(url, "/"))
|
||||
fprintf( fp, "<LI> <A HREF=\"%s\">%s</A>\n",
|
||||
url, i == cnt - 1 ?
|
||||
ldap_friendly_name( glob->friendlyfile, s[i], &fm ) :
|
||||
s[i]);
|
||||
else
|
||||
fprintf( fp, "<LI> <A HREF=\"%sM%s\">%s</A>\n",
|
||||
url, hrdn, i == cnt - 1 ?
|
||||
ldap_friendly_name( glob->friendlyfile, s[i], &fm ) :
|
||||
s[i]);
|
||||
hrdn[0] = '\0';
|
||||
}
|
||||
fprintf( fp, "</MENU>\n");
|
||||
ldap_value_free(s);
|
||||
ldap_value_free(t);
|
||||
}
|
||||
/* end of function: make_header */
|
||||
|
||||
/* Make "Move upwards" Header with pull-down-menus*/
|
||||
PUBLIC void make_header_pull_down (fp, dn, action, glob)
|
||||
FILE *fp;
|
||||
char *dn;
|
||||
int action;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char **s, **t, hrdn[1024];
|
||||
int cnt, i, j;
|
||||
pGW_SWITCH_LINE gw_ptr;
|
||||
char url[BUFSIZ];
|
||||
|
||||
hrdn[0] = '\0';
|
||||
if ( strlen(dn) == 0) /* the root */
|
||||
return;
|
||||
s = ldap_explode_dn( dn, 1 );
|
||||
t = ldap_explode_dn( dn, 0 );
|
||||
|
||||
strcpy(url, "M");
|
||||
for(gw_ptr = glob->gw_switch->list; gw_ptr; gw_ptr = gw_ptr->next)
|
||||
if (!strcasecmp(gw_ptr->dn, "ROOT"))
|
||||
strcpy(url, gw_ptr->url);
|
||||
|
||||
fprintf( fp, "<FORM ACTION=\"/D\">\n");
|
||||
fprintf( fp,
|
||||
"<INPUT TYPE=submit VALUE=\"%s\"> -> <SELECT NAME=\"H\">\n",
|
||||
glob->la[27]);
|
||||
fprintf( fp, "<OPTION VALUE=\"%s\">%s\n", url, glob->la[77]);
|
||||
|
||||
for (cnt=0; t[cnt]; cnt++);
|
||||
for (i = cnt - 1; i > 0 && s[i]; i--) {
|
||||
strcpy(hrdn, hex_encode(t[i]));
|
||||
for (j = i + 1; j < cnt ; j++) {
|
||||
strcat(hrdn, hex_encode(", "));
|
||||
strcat(hrdn,hex_encode(t[j]));
|
||||
}
|
||||
|
||||
strcpy(url, "/");
|
||||
for(gw_ptr = glob->gw_switch->list; gw_ptr; gw_ptr = gw_ptr->next)
|
||||
if (!dn_cmp(hex_encode (gw_ptr->dn), hrdn))
|
||||
strcpy(url, url_complete(gw_ptr->url, hrdn, "M"));
|
||||
if(strcmp(url, "/"))
|
||||
fprintf( fp, "<OPTION VALUE=\"%s\" %s>%s\n", url,
|
||||
i==1 ? "SELECTED" : "", i == cnt - 1 ?
|
||||
ldap_friendly_name( glob->friendlyfile, s[i], &fm ) :s[i]);
|
||||
else
|
||||
fprintf( fp, "<OPTION VALUE=\"%sM%s\" %s>%s\n",
|
||||
url, hrdn, i==1 ? "SELECTED" : "", i == cnt - 1 ?
|
||||
ldap_friendly_name( glob->friendlyfile, s[i], &fm ) :s[i]);
|
||||
hrdn[0] = '\0';
|
||||
}
|
||||
fprintf( fp, "</SELECT></FORM>\n");
|
||||
|
||||
ldap_value_free(s);
|
||||
ldap_value_free(t);
|
||||
}
|
||||
/* end of function: make_header_pull_down */
|
||||
|
||||
PUBLIC char * url_complete (gwp_url, rdn, separator)
|
||||
char *gwp_url, *rdn, *separator;
|
||||
{
|
||||
static char url[BUFSIZ];
|
||||
char *strptr;
|
||||
|
||||
strcpy(url, gwp_url);
|
||||
|
||||
if(!strchr (gwp_url, '=')) {
|
||||
|
||||
if (!strncasecmp (url, "http://", 7)) {
|
||||
|
||||
if ( ( strptr = strchr (url+7, '/')) ) *(++strptr) = '\0';
|
||||
else strcat (url, "/");
|
||||
|
||||
} else *url = '\0';
|
||||
|
||||
sprintf (url, "%s%s%s", url, separator, rdn);
|
||||
|
||||
}
|
||||
|
||||
return(url);
|
||||
|
||||
}
|
||||
/* end of function: url_complete */
|
||||
|
||||
PRIVATE void photof(fp, flag, imageChar, dn, tattr)
|
||||
FILE *fp;
|
||||
int flag;
|
||||
char imageChar;
|
||||
char *dn;
|
||||
char *tattr;
|
||||
{
|
||||
switch(flag) {
|
||||
case BMP : imageChar = 'G'; break;
|
||||
case JPEG2GIF: imageChar = 'I'; break;
|
||||
case JPEG : imageChar = 'J'; break;
|
||||
}
|
||||
fprintf( fp, "<IMG ALT=\"Photo\" SRC=\"%c%s\"+%s>\n",
|
||||
imageChar, hex_encode(dn), tattr);
|
||||
}
|
||||
/* end of function: photof */
|
||||
|
||||
PRIVATE void urlf(fp, vali)
|
||||
FILE *fp;
|
||||
char *vali;
|
||||
{
|
||||
char *cp;
|
||||
|
||||
if ((cp = strchr(vali, '$')) != NULL) {
|
||||
*cp++ = '\0';
|
||||
fprintf( fp, "%s%c\n", vali,
|
||||
(vali[0] ? ':' : ' '));
|
||||
fprintf(fp," <A HREF=\"%s\"> %s</A><BR>\n",
|
||||
cp, cp);
|
||||
} else
|
||||
fprintf( fp, "%s<BR>\n", vali);
|
||||
}
|
||||
/* end of function: urlf */
|
||||
|
||||
PRIVATE void dynamicdnf(fp, vali, glob)
|
||||
FILE *fp;
|
||||
char *vali;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
fprintf(fp," <A HREF=\"%s/M%s\"> %s</A><BR>\n",
|
||||
|
||||
#ifdef TUE_TEL
|
||||
dn2server(vali, glob),
|
||||
#else
|
||||
"",
|
||||
#endif
|
||||
|
||||
vali, vali);
|
||||
}
|
||||
/* end of function: dynamicdnf */
|
||||
|
||||
/* Allow href dn-lable flexible configuration via INDEXURL */
|
||||
PRIVATE void indexurlf(fp, vali, entrydn, glob)
|
||||
FILE *fp;
|
||||
char *vali;
|
||||
char *entrydn;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char *cp;
|
||||
char dnbuf[BUFSIZ], *strptr, **dn;
|
||||
char rulebuf[BUFSIZ], *disp_item;
|
||||
int arrsize, first;
|
||||
char entrydnbuf[BUFSIZ], dit_dnbuf[BUFSIZ];
|
||||
int index;
|
||||
|
||||
if (((cp = strchr(vali, ' ')) != NULL) && glob->index_url) {
|
||||
|
||||
*cp++ = '\0';
|
||||
index = atoi(cp);
|
||||
|
||||
if ( index < 0 || index >= INDEX_RULE_SIZE )
|
||||
return;
|
||||
if (!glob->index_url->rarr[index].rule) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* case entrydn out of range */
|
||||
strcpy(entrydnbuf, entrydn);
|
||||
strcpy(dit_dnbuf, glob->index_url->rarr[index].dit_dn);
|
||||
dn_normalize(entrydnbuf);
|
||||
dn_normalize(dit_dnbuf);
|
||||
if(!dn_issuffix(entrydnbuf, dit_dnbuf)){
|
||||
fprintf(fp," <A HREF=\"%s\"> %s</A><BR>\n", vali, cp);
|
||||
return;
|
||||
}
|
||||
|
||||
/* return if url doesn't contain cn= ( no dn ) */
|
||||
if(!(strptr = strstr(vali, "cn=")))
|
||||
return;
|
||||
strcpy(dnbuf, strptr);
|
||||
hex_decode(dnbuf);
|
||||
dn = ldap_explode_dn(dnbuf, 1);
|
||||
|
||||
for(arrsize=0; dn[arrsize]; arrsize++)
|
||||
;
|
||||
|
||||
if(arrsize && glob->strip_pin)
|
||||
trimright(dn[0], " 1234567890");
|
||||
|
||||
fprintf(fp," <A HREF=\"%s\">", vali);
|
||||
strcpy(rulebuf, glob->index_url->rarr[index].rule);
|
||||
first = 1;
|
||||
|
||||
for(disp_item = strtok(rulebuf, ","); disp_item;
|
||||
disp_item = strtok(NULL, ",")) {
|
||||
if(abs(atoi(disp_item)) >= arrsize) continue;
|
||||
|
||||
if(*disp_item == '-') {
|
||||
fprintf(fp,"%s%s", !first ? ", " : "",
|
||||
dn[arrsize + atoi(disp_item) - 1]);
|
||||
} else {
|
||||
fprintf(fp,"%s%s", !first ? ", " : "", dn[atoi(disp_item)]);
|
||||
}
|
||||
first = 0;
|
||||
}
|
||||
|
||||
fprintf(fp,"</A><BR>\n");
|
||||
} else
|
||||
fprintf( fp, "%s<BR>\n", vali);
|
||||
}
|
||||
/* end of function: indexurlf */
|
||||
|
||||
PRIVATE void urif(fp, vali, glob)
|
||||
FILE *fp;
|
||||
char *vali;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char *cp;
|
||||
|
||||
if(glob->gw_switch->dynamic && strstr(vali, "(gw"))
|
||||
return;
|
||||
if ((cp = strchr(vali, ' ')) != NULL) {
|
||||
*cp++ = '\0';
|
||||
fprintf(fp," <A HREF=\"%s\"> %s</A><BR>\n", vali, cp);
|
||||
} else
|
||||
fprintf( fp, "%s<BR>\n", vali);
|
||||
}
|
||||
/* end of function: urif */
|
||||
|
||||
/* function for ldap-referrals etc. */
|
||||
PRIVATE void referralf(fp, vali, glob)
|
||||
FILE *fp;
|
||||
char *vali;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char *cp;
|
||||
|
||||
if(glob->gw_switch->dynamic && strstr(vali, "(gw"))
|
||||
return;
|
||||
if ((cp = strchr(vali, ' ')) != NULL) {
|
||||
*cp++ = '\0';
|
||||
fprintf(fp," <A HREF=\"http://%s:%d/W%s\"> %s</A><BR>\n",
|
||||
glob->hostname, glob->webport, vali, cp);
|
||||
} else
|
||||
fprintf(fp," <A HREF=\"http://%s:%d/W%s\"> %s</A><BR>\n",
|
||||
glob->hostname, glob->webport, vali, vali);
|
||||
}
|
||||
/* end of function: referralf */
|
||||
|
||||
PRIVATE void pgpkeyf(fp, vali, firstline)
|
||||
FILE *fp;
|
||||
char *vali;
|
||||
int *firstline;
|
||||
{
|
||||
char *s, *p;
|
||||
|
||||
fprintf( fp, "<TT>\n");
|
||||
p = s = vali;
|
||||
while ( ( s = strstr( s, " $" )) ) {
|
||||
*s++ = '\0'; /* delete BLANK */
|
||||
*s++ = '\0'; /* delete DOLLAR */
|
||||
while ( isspace( *s ) )
|
||||
s++;
|
||||
if ( *firstline == TRUE ) {
|
||||
fprintf( fp, "<DT>%s<BR>\n", p );
|
||||
*firstline = FALSE;
|
||||
} else if (!strncasecmp(p, "Version", 7)) {
|
||||
fprintf( fp, "%s<BR><BR>\n", p );
|
||||
} else {
|
||||
fprintf( fp, "%s<BR>\n", p );
|
||||
}
|
||||
p = s;
|
||||
}
|
||||
if ( *firstline == TRUE ) {
|
||||
fprintf( fp,"<DT>%s<BR>", p );
|
||||
*firstline = FALSE;
|
||||
} else {
|
||||
fprintf( fp, "%s\n", p );
|
||||
}
|
||||
fprintf( fp, "</TT>\n");
|
||||
}
|
||||
/* end of function: pgpkeyf */
|
||||
|
||||
PRIVATE void multilinef(fp, vali, first_of_same, firstline, gotone, nlabel)
|
||||
FILE *fp;
|
||||
char *vali;
|
||||
int *first_of_same;
|
||||
int *firstline;
|
||||
int *gotone;
|
||||
char *nlabel;
|
||||
{
|
||||
char *s, *p;
|
||||
|
||||
if ( !*first_of_same && *gotone)
|
||||
fprintf( fp, "<BR>");
|
||||
if ( *gotone && *first_of_same)
|
||||
fprintf( fp, "<DT><B>%s</B><DD>", nlabel);
|
||||
else if (!*first_of_same)
|
||||
fprintf( fp, "<BR>");
|
||||
p = s = vali;
|
||||
|
||||
/* PATCH to process MULTILINE correctly:
|
||||
replace strstr() instead of strchr(), in order not to missinterpret
|
||||
DOLLAR in Text ; /KSp, 95/06/28
|
||||
*/
|
||||
|
||||
/*
|
||||
while ( s = strchr( s, '$' ) ) {
|
||||
*/
|
||||
while ( ( s = strstr( s, " $" )) ) {
|
||||
*s++ = '\0'; /* delete BLANK */
|
||||
*s++ = '\0'; /* delete DOLLAR */
|
||||
while ( isspace( *s ) )
|
||||
s++;
|
||||
|
||||
/*
|
||||
if (dosyslog)
|
||||
syslog (LOG_INFO, "multiLineAttr: %s", p);
|
||||
*/
|
||||
|
||||
fprintf( fp, "%s<BR>\n", p );
|
||||
if ( *firstline == TRUE )
|
||||
*firstline = FALSE;
|
||||
p = s;
|
||||
}
|
||||
if ( *firstline ) {
|
||||
fprintf( fp, "%s<BR>\n", p );
|
||||
} else {
|
||||
fprintf( fp, "%s", p );
|
||||
}
|
||||
*gotone = 1;
|
||||
*firstline = FALSE;
|
||||
*first_of_same = FALSE;
|
||||
}
|
||||
/* end of function: multilinef */
|
||||
|
||||
PRIVATE void booleanf(fp, val_i, glob)
|
||||
FILE *fp;
|
||||
char *val_i;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
if (!strcmp(val_i, "TRUE")) fprintf( fp, "%s<BR>\n", glob->la[78]);
|
||||
else fprintf( fp, "%s<BR>\n", glob->la[79]);
|
||||
}
|
||||
/* end of function: booleanf */
|
||||
|
||||
PRIVATE void datef(fp, val_i)
|
||||
FILE *fp;
|
||||
char **val_i;
|
||||
{
|
||||
fprintf( fp, "%s<BR>\n", format_date(&val_i, "%A, %d-%h-%y %T GMT"));
|
||||
}
|
||||
/* end of function: datef */
|
||||
|
||||
PRIVATE void mailtof(fp, val_i, vali)
|
||||
FILE *fp;
|
||||
char *val_i;
|
||||
char *vali;
|
||||
{
|
||||
fprintf (fp, "<A HREF=\"mailto:%s\">%s</A><BR>\n", val_i, vali);
|
||||
}
|
||||
/* end of function: mailtof */
|
||||
|
||||
PRIVATE void hreff(fp, val_i, vali, glob)
|
||||
FILE *fp;
|
||||
char *val_i;
|
||||
char *vali;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char *ufn;
|
||||
char op = 'R';
|
||||
|
||||
ufn = friendly_dn( val_i, glob );
|
||||
fprintf( fp, "<A HREF=\"/%c%s\">%s</A><BR>\n", op,
|
||||
hex_encode(val_i), ufn ? ufn : vali);
|
||||
if ( ufn ) {
|
||||
free( ufn );
|
||||
}
|
||||
}
|
||||
/* end of function: hreff */
|
||||
|
||||
PRIVATE void movetof(fp, val_i, vali, glob)
|
||||
FILE *fp;
|
||||
char *val_i;
|
||||
char *vali;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char *ufn;
|
||||
char op = 'M';
|
||||
|
||||
ufn = friendly_dn( val_i, glob );
|
||||
fprintf( fp, "<A HREF=\"/%c%s\">%s</A><BR>\n", op,
|
||||
hex_encode(val_i), ufn ? ufn : vali);
|
||||
if ( ufn ) {
|
||||
free( ufn );
|
||||
}
|
||||
}
|
||||
/* end of function: movetof */
|
||||
|
||||
|
||||
PRIVATE void headerf(fp, vali, firstline)
|
||||
FILE *fp;
|
||||
char *vali;
|
||||
int *firstline;
|
||||
{
|
||||
fprintf( fp, "<DT>");
|
||||
fprintf( fp, "<H1>");
|
||||
fprintf( fp,"%s", vali );
|
||||
fprintf( fp, "</H1>\n");
|
||||
}
|
||||
/* end of function: headerf */
|
||||
|
||||
PRIVATE void pref(fp, vali, firstline)
|
||||
FILE *fp;
|
||||
char *vali;
|
||||
int *firstline;
|
||||
{
|
||||
fprintf( fp, "<DT>");
|
||||
fprintf( fp, "<PRE>");
|
||||
fprintf( fp,"%s", vali );
|
||||
fprintf( fp, "</PRE>\n");
|
||||
}
|
||||
/* end of function: pref */
|
||||
|
||||
PRIVATE void defaultf(fp, vali, firstline)
|
||||
FILE *fp;
|
||||
char *vali;
|
||||
int *firstline;
|
||||
{
|
||||
if ( *firstline == TRUE ) {
|
||||
fprintf( fp,"%s", vali );
|
||||
*firstline = FALSE;
|
||||
} else {
|
||||
fprintf( fp, "<BR>\n%s", vali );
|
||||
}
|
||||
}
|
||||
/* end of function: defaultf */
|
||||
|
@ -1,50 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* html.h..... *
|
||||
* *
|
||||
* Function:..File for TWEB-SOFTWARE *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* April 19 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* May 14 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: html.h,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _HTML_
|
||||
#define _HTML_
|
||||
|
||||
#include "html_exp.h"
|
||||
#include "dn_exp.h"
|
||||
|
||||
PRIVATE void photof();
|
||||
PRIVATE void urlf();
|
||||
PRIVATE void urif();
|
||||
PRIVATE void referralf();
|
||||
PRIVATE void dynamicdnf();
|
||||
PRIVATE void indexurlf();
|
||||
PRIVATE void pgpkeyf();
|
||||
PRIVATE void multilinef();
|
||||
PRIVATE void booleanf();
|
||||
PRIVATE void datef();
|
||||
PRIVATE void mailtof();
|
||||
PRIVATE void hreff();
|
||||
PRIVATE void movetof();
|
||||
PRIVATE void pref();
|
||||
PRIVATE void headerf();
|
||||
PRIVATE void defaultf();
|
||||
PRIVATE void make_header_pull_down();
|
||||
|
||||
#endif /* _HTML_ */
|
@ -1,41 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* html_exp.h. *
|
||||
* *
|
||||
* Function:..File for TWEB-SOFTWARE *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* February 13 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* November 21 1996 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: html_exp.h,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _HTML_EXP_
|
||||
#define _HTML_EXP_
|
||||
|
||||
PUBLIC void print_attr(/*ld, fp, dn, label, tattr, e, flag, doNotShow, glob*/);
|
||||
PUBLIC void form_attr(/*ld, fp, label, tattr, e, multiline, add_empty, glob*/);
|
||||
PUBLIC void do_pict(/*ld, fp, dn, type, glob*/);
|
||||
PUBLIC void do_audio(/*ld, fp, dn, type, glob*/);
|
||||
PUBLIC void do_sizelimit(/*fp, type, glob*/);
|
||||
PUBLIC void do_error(/*fp, code, status, glob*/);
|
||||
PUBLIC void explain_error (/*fp, error, status, glob */);
|
||||
PUBLIC void make_header (/*fp, dn, action, glob*/);
|
||||
PUBLIC char * url_complete (/*gwp_url, rdn, separator*/);
|
||||
|
||||
|
||||
|
||||
#endif /* _HTML_EXP_ */
|
1858
contrib/tweb/init.c
1858
contrib/tweb/init.c
File diff suppressed because it is too large
Load Diff
@ -1,289 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* init.h..... *
|
||||
* *
|
||||
* Function:..File for TWEB-SOFTWARE *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* July 21 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* May 14 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: init.h,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _INIT_
|
||||
#define _INIT_
|
||||
|
||||
#include <getopt.h>
|
||||
#include "strng_exp.h"
|
||||
#include "init_exp.h"
|
||||
#include "charray_exp.h"
|
||||
#include "ch_malloc_exp.h"
|
||||
#include "support_exp.h"
|
||||
|
||||
#ifdef TUE_TEL
|
||||
# include "tueTel_exp.h"
|
||||
#endif
|
||||
|
||||
#ifdef AMBIXGW
|
||||
# include "ambix_exp.h"
|
||||
#endif
|
||||
|
||||
|
||||
/* Usage-Text */
|
||||
#define USAGE "\nUSAGE: %s -Lx[yz..] [-p webport] [-x ldaphost]\
|
||||
\n\t\t[-P ldapport] [-b basedn] [-f filterfile] [-l logger] [-d]\n\
|
||||
\n\
|
||||
A short description of TWEB WWW2X.500-Gateway: \n\n\
|
||||
(does not compensate reading the README files\n\
|
||||
and the correct configuration)\n\
|
||||
\n\
|
||||
Options:\n\n\
|
||||
-L:\ttells TWEB the numbers of the languages that have to be started,\n\
|
||||
\twherewith are also created the language-buttons\n\
|
||||
\tExample: tweb -L01 starts TWEB in german und english\n\
|
||||
-p:\tnames the port on which the gateway is to be reached\n\
|
||||
-x:\tnames the LDAP-Hosts\n\
|
||||
-P:\tnames the port of the LDAP-Server\n\
|
||||
-b:\tnames the DN where the gateway shall start by default\n\
|
||||
-f:\tnames the ldapfilter-file\n\
|
||||
-l:\tswitches on logging for example LOCAL3\n\
|
||||
-d:\tswitches on debugging (no sub-processes!)\n\
|
||||
\n"
|
||||
|
||||
|
||||
/* Funktions in the init-module */
|
||||
PRIVATE int webdn();
|
||||
PRIVATE int webpw();
|
||||
PRIVATE int webdn2();
|
||||
PRIVATE int webpw2();
|
||||
PRIVATE int webport();
|
||||
PRIVATE int timeout();
|
||||
PRIVATE int ldapd();
|
||||
PRIVATE int ldapportf();
|
||||
PRIVATE int hostname();
|
||||
PRIVATE int header();
|
||||
PRIVATE int footer();
|
||||
PRIVATE int index_url();
|
||||
PRIVATE int allow_msg();
|
||||
PRIVATE int helpfilef();
|
||||
PRIVATE int filterfilef();
|
||||
PRIVATE int etcdir();
|
||||
PRIVATE int friendlyfilef();
|
||||
PRIVATE int grant();
|
||||
PRIVATE int refuse();
|
||||
PRIVATE int allow_string();
|
||||
PRIVATE int allow_proxy();
|
||||
PRIVATE int subtree_search();
|
||||
PRIVATE int deny_string();
|
||||
PRIVATE int show_defoc();
|
||||
PRIVATE int display();
|
||||
PRIVATE int basednf();
|
||||
PRIVATE int search_only();
|
||||
PRIVATE int gw_switch();
|
||||
PRIVATE int modify();
|
||||
PRIVATE int ind_attrs();
|
||||
PRIVATE int ind_attribute();
|
||||
PRIVATE int maxcount();
|
||||
PRIVATE int cache_expire();
|
||||
PRIVATE int max_person();
|
||||
PRIVATE int caching_terms();
|
||||
PRIVATE int comrefuse();
|
||||
PRIVATE int language();
|
||||
PRIVATE void f_test();
|
||||
PRIVATE void main_loop();
|
||||
PRIVATE int strip_pin();
|
||||
PRIVATE int prefer_ref_uris();
|
||||
PRIVATE int pull_down_menus();
|
||||
PRIVATE int no_proxy();
|
||||
PRIVATE int disp_sea_rdn();
|
||||
PRIVATE int strict_basedn();
|
||||
PRIVATE int dynamic_gw();
|
||||
PRIVATE int legal();
|
||||
PRIVATE int no_show_rdn();
|
||||
PRIVATE int no_modify();
|
||||
PRIVATE int sort();
|
||||
PRIVATE int firstPage();
|
||||
PRIVATE int secondPage();
|
||||
PRIVATE int modattr();
|
||||
PRIVATE void usage();
|
||||
PRIVATE int parse();
|
||||
PRIVATE int parse2();
|
||||
PRIVATE int table_disp();
|
||||
PRIVATE int form_button();
|
||||
PRIVATE int ip_refuse();
|
||||
|
||||
|
||||
/* Sub-tables to analyse the DISPLAY-Keys */
|
||||
static PARSE_ENTRY first_table[] = {
|
||||
{"SECOND-PAGE", secondPage, NULL},
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
static PARSE_ENTRY display_table[] = {
|
||||
{"FIRST-PAGE", firstPage, first_table},
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
/* Sub-tables to analyse the MODIFY-Keys */
|
||||
static PARSE_ENTRY modify_table[] = {
|
||||
{"MODATTR", modattr, NULL},
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
/* Sub-tables to analyse the IND_ATTRS-Keys */
|
||||
static PARSE_ENTRY ind_attrs_table[] = {
|
||||
{"IND_ATTRS", ind_attribute, NULL},
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
/* The main-table for key-word-parsing */
|
||||
static PARSE_ENTRY parse_table[] = {
|
||||
{"WEBDN", webdn, NULL},
|
||||
{"WEBPW", webpw, NULL},
|
||||
{"WEBDN2", webdn2, NULL},
|
||||
{"WEBPW2", webpw2, NULL},
|
||||
{"WEBPORT", webport, NULL},
|
||||
{"TIMEOUT", timeout, NULL},
|
||||
{"TWEBHOST", hostname, NULL},
|
||||
{"LDAPD", ldapd, NULL},
|
||||
{"LDAPPORT", ldapportf, NULL},
|
||||
{"HEADER", header, NULL},
|
||||
{"FOOTER", footer, NULL},
|
||||
{"INDEX-URL", index_url, NULL},
|
||||
{"ALLOW-MSG", allow_msg, NULL},
|
||||
{"HELPFILE", helpfilef, NULL},
|
||||
{"FILTERFILE", filterfilef, NULL},
|
||||
{"ETCDIR", etcdir, NULL},
|
||||
{"FRIENDLYFILE", friendlyfilef, NULL},
|
||||
{"GRANT", grant, NULL},
|
||||
{"REFUSE", refuse, NULL},
|
||||
{"ALLOW-STRING", allow_string, NULL},
|
||||
{"ALLOW-PROXY", allow_proxy, NULL},
|
||||
{"SUBTREE-SEARCH", subtree_search, NULL},
|
||||
{"DENY-STRING", deny_string, NULL},
|
||||
{"SHOW-DEFAULT-OC", show_defoc, NULL},
|
||||
{"DISPLAY-OBJECT" , display, display_table},
|
||||
{"BASEDN", basednf, NULL},
|
||||
{"SEARCH-ONLY", search_only, NULL},
|
||||
{"GW-SWITCH", gw_switch, NULL},
|
||||
{"MODIFY", modify, modify_table},
|
||||
{"INDIRECT-ATTRS", ind_attrs, ind_attrs_table},
|
||||
{"MAXCOUNT", maxcount, NULL},
|
||||
{"CACHE-EXPIRE-DEFAULT", cache_expire, NULL},
|
||||
{"MAX-PERSON", max_person, NULL},
|
||||
{"CACHING-TERMS", caching_terms, NULL},
|
||||
{"COMREFUSE", comrefuse, NULL},
|
||||
{"LANGUAGE", language, NULL},
|
||||
{"STRIP-PIN", strip_pin, NULL},
|
||||
{"PREFER-REF-URIS", prefer_ref_uris, NULL},
|
||||
{"PULL-DOWN-MENUS", pull_down_menus, NULL},
|
||||
{"NO-PROXY", no_proxy, NULL},
|
||||
{"DISP-SEA-RDN", disp_sea_rdn, NULL},
|
||||
{"STRICT-BASEDN", strict_basedn, NULL},
|
||||
{"DYNAMIC-GW", dynamic_gw, NULL},
|
||||
{"LEGAL", legal, NULL},
|
||||
{"NO-SHOW-RDN", no_show_rdn, NULL},
|
||||
{"NO-MODIFY", no_modify, NULL},
|
||||
{"SORT", sort, NULL},
|
||||
{"TABLES", table_disp, NULL},
|
||||
{"FORM-BUTTON", form_button, NULL},
|
||||
|
||||
#ifdef AMBIXGW
|
||||
{"SELBSTEINTRAG", selbsteintrag, NULL},
|
||||
#endif
|
||||
|
||||
#ifdef TUE_TEL
|
||||
{"DIT-CONFIG", dit_config, NULL},
|
||||
{"PHONEWORLD", phoneworld, NULL},
|
||||
{"TON-URLS", ton_urls, NULL},
|
||||
#endif
|
||||
{"IP-REFUSE", ip_refuse, NULL},
|
||||
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
/* tables to compute DISPLAY-types to integer */
|
||||
STRDISP disp_types[] = {
|
||||
|
||||
{ "DEFAULT", 3, 0 },
|
||||
{ "MAILTO", 4, 6 },
|
||||
{ "MULTILINE", 5, 1 },
|
||||
{ "JPEG", 4, 9 },
|
||||
{ "JPEG2GIF", 8, 10 },
|
||||
{ "BMP", 3, 8 },
|
||||
{ "HREF", 4, 2 },
|
||||
{ "URL", 3, 5 },
|
||||
{ "FINGER", 6, 3 },
|
||||
{ "DATE", 4, 4 },
|
||||
{ "MOVETO", 4, 7 },
|
||||
{ "BOOLEAN", 9, 11 },
|
||||
{ "URI", 3, 12 },
|
||||
{ "PGPKEY", 6, 13 },
|
||||
{ "INDEXURL", 8, 14 },
|
||||
{ "DYNAMICDN", 9, 15 },
|
||||
{ "REFERRAL", 8, 20 },
|
||||
{ "PRE", 3, 21 },
|
||||
{ "HEADER", 6, 22 },
|
||||
|
||||
#ifdef TUE_TEL
|
||||
{ "PHONREFSHORT", 12, 16 },
|
||||
{ "PHONREFLONG", 11, 17 },
|
||||
{ "TFUNCPERS", 9, 18 },
|
||||
{ "FAXTABLE", 8, 19 },
|
||||
#endif
|
||||
|
||||
{ NULL, 0, 0 }
|
||||
|
||||
};
|
||||
|
||||
/* tables to compute syslog-options to integer */
|
||||
static STRDISP syslog_types[] = {
|
||||
|
||||
{ "LOCAL0", 6, LOG_LOCAL0 },
|
||||
{ "LOCAL1", 6, LOG_LOCAL1 },
|
||||
{ "LOCAL2", 6, LOG_LOCAL2 },
|
||||
{ "LOCAL3", 6, LOG_LOCAL3 },
|
||||
{ "LOCAL4", 6, LOG_LOCAL4 },
|
||||
{ "LOCAL5", 6, LOG_LOCAL5 },
|
||||
{ "LOCAL6", 6, LOG_LOCAL6 },
|
||||
{ "LOCAL7", 6, LOG_LOCAL7 },
|
||||
{ NULL, 0, 0 }
|
||||
|
||||
};
|
||||
|
||||
|
||||
/* Defaults */
|
||||
#define DEFAULT_TIMEOUT 120
|
||||
#define DEFAULT_MAXCOUNT 200
|
||||
#define MAX_EXPIRE 604800
|
||||
|
||||
|
||||
/* Variable for the Anti-Hack-Code */
|
||||
extern COMREFUSE *comRefuseP;
|
||||
|
||||
struct timeval timestore[5]; /* Time assigned to events:
|
||||
0 -> after accept, 1-> after dns,
|
||||
2 -> after check4access,
|
||||
3 -> before list_output/print_attr */
|
||||
|
||||
int items_displayed = 0; /* number of items showed on
|
||||
do_menu/do_search*/
|
||||
|
||||
#endif /* _INIT_ */
|
||||
|
@ -1,382 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* init_exp.h. *
|
||||
* *
|
||||
* Function:..File for TWEB-SOFTWARE *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* July 21 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* May 11 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
/*
|
||||
* $Id: init_exp.h,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _INIT_EXP_
|
||||
#define _INIT_EXP_
|
||||
|
||||
#ifdef TUE_TEL
|
||||
# include "tueTel_exp.h"
|
||||
#endif
|
||||
|
||||
#include "regular_exp.h"
|
||||
|
||||
PUBLIC int get_str_param(/* FILELINE *inLine, char **str,
|
||||
GLOB_STRUCT *glob, int lower */);
|
||||
|
||||
PUBLIC void getopts ();
|
||||
PUBLIC void check ();
|
||||
PUBLIC void init();
|
||||
PUBLIC void output();
|
||||
PUBLIC void langinit();
|
||||
PUBLIC void langoutput();
|
||||
PUBLIC void get_lang();
|
||||
PUBLIC void file_test();
|
||||
PUBLIC int do_readf();
|
||||
PUBLIC void get_index_url_rules();
|
||||
PUBLIC void re_read_index_url_rules();
|
||||
|
||||
extern STRDISP disp_types[];
|
||||
|
||||
|
||||
/* A pointer to an integer-function */
|
||||
typedef int (*IFP)();
|
||||
|
||||
|
||||
/* One line in the config-file, with line-counter */
|
||||
typedef struct _fileline {
|
||||
char value[BUFSIZ];
|
||||
int count;
|
||||
} FILELINE;
|
||||
|
||||
|
||||
/* Table-structure to parse the key-words in the config- und rc-files */
|
||||
typedef struct _parse_keys {
|
||||
char *keyWord;
|
||||
IFP keyFunc;
|
||||
struct _parse_keys *subTable;
|
||||
} PARSE_ENTRY;
|
||||
|
||||
|
||||
/* Maximum number of sub-lists in order to display result-lists */
|
||||
#define MAX_OCS 128
|
||||
|
||||
/* List of attributes which will be displayed (on 1./2. page) */
|
||||
typedef struct _display_line {
|
||||
char *attribute; /* the X.500-Attribute */
|
||||
char *label; /* the Label of the Web-Page */
|
||||
char *type; /* the Format-Type as String (C-Option) */
|
||||
int ty; /* the Format-Type as Int (print-Funkt.) */
|
||||
struct _display_line *next; /* the next Attribute */
|
||||
} DISPLAY_LINE, *pDISPLAY_LINE;
|
||||
|
||||
|
||||
/* List of Object-Classes which shall be displayed */
|
||||
typedef struct _display {
|
||||
char *ocs; /* the X.500-Object-Class(es) */
|
||||
DISPLAY_LINE *first_page; /* Attribute on the first page */
|
||||
DISPLAY_LINE *second_page; /* Attribute on the second page */
|
||||
struct _display *next; /* the next Objekt-Class(es) */
|
||||
} DISPLAY, *pDISPLAY;
|
||||
|
||||
|
||||
/* List of attributes which may be modified */
|
||||
typedef struct _modify_line {
|
||||
char *attribute; /* the X.500-attribute */
|
||||
char *label; /* the Label in the modification-formulare */
|
||||
int count; /* the maximmum number of attribute-values */
|
||||
struct _modify_line *next; /* the next attribute */
|
||||
} MODIFY_LINE, *pMODIFY_LINE;
|
||||
|
||||
/* List of Object-Class(es) which may be modified */
|
||||
typedef struct _modify {
|
||||
char *ocs; /* the X.500-Object-Class(es) */
|
||||
MODIFY_LINE *modattr; /* the modifyable attributes */
|
||||
struct _modify *next; /* the next Object-Class(es) */
|
||||
} MODIF, *pMODIF;
|
||||
|
||||
/*attributes which are read from another entry */
|
||||
typedef struct _ind_attr_arr {
|
||||
char *key; /* pers for person etc. */
|
||||
int replace; /* 2 -> function, 1 -> replace, 0 -> append */
|
||||
char *attr; /* functionname / referenced attribute */
|
||||
char *host; /* on which host to look */
|
||||
int port; /* on which port to look */
|
||||
char *base; /* where to look for ref-entry */
|
||||
LDAPMessage **e; /* Pointer to the result */
|
||||
LDAP *ld; /* Pointer to the matching LDAP-Struct */
|
||||
} IND_ATTR_ARR;
|
||||
|
||||
typedef struct _ind_attrs {
|
||||
char *ref_attr; /* name of the reference-attribute */
|
||||
IND_ATTR_ARR *valid_nodes; /* valid nodes array (only in 1st element) */
|
||||
IND_ATTR_ARR *ia_arr; /* supported keys, attrs and bases */
|
||||
struct _ind_attrs *next; /* the next ind_attr */
|
||||
} IND_ATTRS, *pIND_ATTRS;
|
||||
|
||||
|
||||
/* Support-structure to sort the result-lists */
|
||||
typedef struct _dncompare {
|
||||
char *string; /* Sort-String */
|
||||
char *href; /* Hyper-Link for the sorted entry */
|
||||
char *raw; /* Raw data: -> <name>[<attr>=<value>&..%..$.. */
|
||||
} DNLIST, *pDNLIST;
|
||||
|
||||
|
||||
/* Structure to sort the result-lists object-class/attribute-related */
|
||||
typedef struct _sort_line {
|
||||
char *object_class; /* Object-class by which is sorted */
|
||||
char *label; /* Label to display sub-lists */
|
||||
int priority; /* Sequence for list-output */
|
||||
char *display_class; /* dedicated display-class */
|
||||
DISPLAY *display_class_ptr; /* Pointer therefor */
|
||||
char *sort_attr; /* Attribut by which sorting is done */
|
||||
pDNLIST *dnList; /* Entries in the sub-list */
|
||||
int dnLast; /* Amount of entries in the sub-list */
|
||||
int restricted; /* 1 -> sub-list was restricted : 0 -> not*/
|
||||
struct _sort_line *next; /* the next Object-Class */
|
||||
} SORT_LINE, *pSORT_LINE;
|
||||
|
||||
/* Structure to handle caching */
|
||||
|
||||
typedef struct _caching_terms_line {
|
||||
int time; /* time to cache */
|
||||
char *access_type; /* type of access */
|
||||
int rdn_oc; /* 1 -> rdn, 0 -> oc -lookup */
|
||||
char *pattern; /* mach-pattern: oc/rdn */
|
||||
struct _caching_terms_line *next; /* the next line */
|
||||
} CACHING_TERMS_LINE, *pCACHING_TERMS_LINE;
|
||||
|
||||
|
||||
/* DN of the TWEB-Homepage, including header and footer thereof */
|
||||
typedef struct _basedn_line {
|
||||
char *dn;
|
||||
char **dnarray;
|
||||
char *head;
|
||||
char *foot;
|
||||
} BASEDN_LINE;
|
||||
|
||||
/* List of rules for table-button and table display */
|
||||
typedef struct _table_display {
|
||||
int allow; /* 1 -> tables only if allowed, 0 -> in any case */
|
||||
char *select_oc; /* table-button only if
|
||||
objectclass contains select_oc */
|
||||
char *button_label; /* label for table-request-button */
|
||||
char *dn_extension; /* extension behind button Xdn?MENU */
|
||||
struct _table_display *next;
|
||||
} TABLE_DISPLAY, *pTABLE_DISPLAY;
|
||||
|
||||
/* List of organisational units where only searching is permitted,
|
||||
including header and footer thereof */
|
||||
typedef struct _search_only_line {
|
||||
char *dn;
|
||||
char *head;
|
||||
char *foot;
|
||||
struct _search_only_line *next;
|
||||
} SEARCH_ONLY_LINE, *pSEARCH_ONLY_LINE;
|
||||
|
||||
/* Anti-Hack Structure */
|
||||
typedef struct _comrefuse {
|
||||
int tmin;
|
||||
int tdiff;
|
||||
int maxAccept;
|
||||
int suspendCycle;
|
||||
time_t statCycle;
|
||||
char *statFile;
|
||||
} COMREFUSE;
|
||||
|
||||
|
||||
/* static list of Gateway-Switches */
|
||||
typedef struct _gw_switch_line {
|
||||
char *dn; /* the DN of the organization(al unit) */
|
||||
char *url; /* the URL of the gateway to be called */
|
||||
struct _gw_switch_line *next; /* the next Gateway-Switch */
|
||||
} GW_SWITCH_LINE, *pGW_SWITCH_LINE;
|
||||
|
||||
/* the head of the Gateway-Switch-list */
|
||||
typedef struct _gw_switch {
|
||||
int dynamic; /* is dynamic switching allowed */
|
||||
char *lagws; /* language dependant recognition of
|
||||
GW-Switch-entries in X.500
|
||||
(language independant recognition is
|
||||
implemented by macro) */
|
||||
GW_SWITCH_LINE *list; /* the static list of switches */
|
||||
} GW_SWITCH, *pGW_SWITCH;
|
||||
|
||||
/* static list of already available ldap-connections */
|
||||
typedef struct _ld_list {
|
||||
LDAP *ld; /* pointer to the ldap-structure */
|
||||
char *host; /* The corresponding host */
|
||||
int port; /* The corresponding port */
|
||||
struct _ld_list *next; /* the next */
|
||||
} LD_LIST, *pLD_LIST;
|
||||
|
||||
typedef struct _index_url_rule {
|
||||
char *rule; /* Atribute providing data */
|
||||
char *dit_dn; /* DN supporting config */
|
||||
} INDEX_URL_RULE;
|
||||
|
||||
typedef struct _index_url {
|
||||
char *dat_file; /* File providing data */
|
||||
#define INDEX_RULE_SIZE 20
|
||||
INDEX_URL_RULE rarr[INDEX_RULE_SIZE]; /* array with rules */
|
||||
int rereadcycle; /* frequency to reread */
|
||||
} INDEX_URL;
|
||||
|
||||
/* Structure to hold config of buttons leading to form-scripts */
|
||||
typedef struct _form_button {
|
||||
int read_menu; /* 1-> button in do_read; 0-> in do_menu */
|
||||
char *object_class; /* display the button on presence of this
|
||||
object-class*/
|
||||
char *method; /* cgi method: GET .. */
|
||||
char *script_url; /* URL of CGI-Script */
|
||||
char *text; /* text in front of button */
|
||||
char *dn_name; /* name of dn in hidden form */
|
||||
char *form_name; /* name of form (submit-button) */
|
||||
char *button_label; /* label of submit-button */
|
||||
struct _form_button *next; /* the next FORM_BUTTON definition */
|
||||
} FORM_BUTTON, *pFORM_BUTTON;
|
||||
|
||||
typedef struct _ip_refuse {
|
||||
char *dat_file; /* File providing data */
|
||||
char *refu_str; /* String of refused clients */
|
||||
#define REFU_BUFSIZ 256
|
||||
#define REFU_STRDELIM "&"
|
||||
|
||||
int rereadcycle; /* frequency to reread */
|
||||
} IP_REFUSE;
|
||||
|
||||
/* the central structure of TWEB with the configuration of the gateway */
|
||||
typedef struct _glob_struct {
|
||||
char *webdn; /* GW-DN in case of authorisded access */
|
||||
char *webpw; /* GW-PW in case of authorisded access */
|
||||
char *webdn2; /* GW-DN in case of non-authorisded access */
|
||||
char *webpw2; /* GW-PW in case of non-authorisded access */
|
||||
int webport; /* the Port the GW is listening on */
|
||||
int timeout; /* how long does the gateway wait for the DSA*/
|
||||
time_t stat_slice; /* Time for the anti-Hack + Statistic */
|
||||
char *ldapd; /* the computer LDAPD is running on */
|
||||
int ldapport; /* the Port thereof */
|
||||
char *grant; /* ':'-separated list of domains with access */
|
||||
char *refuse; /* ':'-separated list of domains
|
||||
without access */
|
||||
char *allow_string; /* ':'-separated list of domains
|
||||
supported with authorised access */
|
||||
char *deny_string; /* ':'-separated list of domains
|
||||
supported with restricted access */
|
||||
regexp *comp_grant; /* compiled regular expressions for GRANT */
|
||||
regexp *comp_refuse; /* compiled regular expressions for REFUSE */
|
||||
regexp *comp_allow; /* compiled regular expressions for ALLOW_ST */
|
||||
regexp *comp_deny; /* compiled regular expressions for DENY_ST. */
|
||||
char **allow_proxy; /* ':'-separated list of proxy-servers
|
||||
supported with authorised access */
|
||||
char **subtree_search; /* ':'-separated list of objectclasses
|
||||
where to make subtree_search instead of
|
||||
single_level_search */
|
||||
DISPLAY *display; /* presentation of Objects */
|
||||
DISPLAY *default_display_type; /* pointer to the default display descript */
|
||||
BASEDN_LINE *basedn; /* the entry-page of TWEB */
|
||||
SEARCH_ONLY_LINE *search_only; /* where only searching is supported */
|
||||
GW_SWITCH *gw_switch; /* the Gateway-Switching */
|
||||
MODIF *modify; /* what may be modified within TWEB */
|
||||
IND_ATTRS *ind_attrs; /*attributes which are read from
|
||||
another entry */
|
||||
int cache_expire; /* caching-time for proxies in seconds */
|
||||
CACHING_TERMS_LINE *caching_terms; /* cache-control-rules */
|
||||
int maxcount; /* maximum amount of result-lists */
|
||||
int max_person; /* maximum amount of persons displayed */
|
||||
COMREFUSE *comrefuse; /* Anti-Hack Structure */
|
||||
TABLE_DISPLAY *tables; /* listings also as tables by button-request */
|
||||
INDEX_URL *index_url; /* how to display search-results of index
|
||||
-> display-type INDEX-URL */
|
||||
FORM_BUTTON *form_button; /* display buttons leading to forms */
|
||||
char *tables_marker; /* flag for menu with tables += their config */
|
||||
char **language; /* the language links on a html-page */
|
||||
char lang[2]; /* the number of the "own" language */
|
||||
char *olang; /* the other languages */
|
||||
char *no_show_rdn; /* String with "unvisible" DN parts */
|
||||
char *no_modify; /* Objectclasses without MODIFY-button */
|
||||
SORT_LINE *sort; /* how shall the results be sorted */
|
||||
SORT_LINE *sorty[MAX_OCS]; /* Array with the sorted lists */
|
||||
char **sort_attribs; /* Array with the sort-attributes */
|
||||
char *myname; /* the programname */
|
||||
char *argv0; /* ARGV[0] */
|
||||
char *hostname; /* the name of the computer TWEB
|
||||
is running on*/
|
||||
int virtualport; /* port if defined is set in every link
|
||||
instead of webport (may always
|
||||
lead requests over www4ward) */
|
||||
char *header; /* the header for the standardpage */
|
||||
char *footer; /* the footer for the standardpage */
|
||||
char *allow_msg; /* file containing allow-message */
|
||||
char *helpfile; /* the helpfile */
|
||||
char *filterfile; /* the filterfile for LDAP-search */
|
||||
char *etcdir; /* the directory containing the supportfiles */
|
||||
char *friendlyfile; /* the file for "more friendly" DNs */
|
||||
char *acfilename; /* the name of the actual config-file */
|
||||
time_t nowtime; /* actual time in tics */
|
||||
time_t expiretime; /* time for cache to expire in tics */
|
||||
char *nowtimestr; /* actual timestring in GMT */
|
||||
char *strip_pin; /* truncation of PINs at named sort_ocs */
|
||||
char *expiretimestr; /* timestring for cache to expire in GMT */
|
||||
char *server_connection_msg; /* TCP Connection-message */
|
||||
char *user_agent_msg; /* User-Agent message */
|
||||
char *menu_filter; /* menu_filter */
|
||||
#define LANG_ARR_SIZE 110
|
||||
char la[LANG_ARR_SIZE][BUFSIZ]; /* language-specific text-fragments */
|
||||
LD_LIST *ld_list; /* List of open LDAP-Connections */
|
||||
char **raw_attrs; /* Attributes to be shown with raw_access */
|
||||
size_t svc_cnt; /* A counter for the number of requests */
|
||||
|
||||
#ifdef TUE_TEL
|
||||
DIT_CONFIG *dit_config; /* container for relations between DNs and
|
||||
responsible host:port */
|
||||
TON_URLS *ton_urls; /* TONs in addition to DNs */
|
||||
char *phoneworld; /* visibility of phonebook */
|
||||
#endif
|
||||
IP_REFUSE *ip_refuse; /* refuse certain hosts by ip-addr */
|
||||
|
||||
#ifdef AMBIXGW
|
||||
char *selbsteintrag[10]; /* some strings for AMBIX-selfentry */
|
||||
#endif
|
||||
|
||||
unsigned show_defoc : 1, /* respect unknown OCs while sorting */
|
||||
strict : 1, /* restriction of person-lists also in the
|
||||
authorised case */
|
||||
restricted : 1, /* hard restriction of the extent of the list*/
|
||||
persRestricted : 1, /* restriction of person-lists (legal) */
|
||||
prefer_ref_uris : 1, /* take over labeledURIS from
|
||||
referenced objects */
|
||||
is_proxy : 1, /* did the request come from a proxy-server */
|
||||
pull_down_menus : 1, /* move upwards with pull-down-menus */
|
||||
no_proxy : 1, /* no local proxy-servers */
|
||||
strict_basedn : 1, /* no access outside BASEDN */
|
||||
no_browse : 1, /* no person-lists while browsing */
|
||||
noauth : 1, /* dynamic flag for question of authorisation*/
|
||||
caching : 1, /* shall be cached by proxy-server */
|
||||
legal : 1, /* display privacy-text */
|
||||
legal_top : 1, /* display privacy-text on top */
|
||||
unknown_host : 1, /* connection from unknown */
|
||||
allowed : 1; /* access allowed for decide_access */
|
||||
unsigned raw_data : 1, /* provide raw-data instead of html */
|
||||
ldap_referral_mode : 1, /* TWEB displayes foreign ldap-url */
|
||||
disp_sea_rdn : 1; /* display only rdns as search-result */
|
||||
} GLOB_STRUCT, *pGLOB_STRUCT;
|
||||
|
||||
|
||||
/* the function the gateway is initialized with */
|
||||
void init();
|
||||
|
||||
#endif /* _INIT_EXP_ */
|
||||
|
@ -1,734 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* queries.c.. *
|
||||
* *
|
||||
* Function:..WorldWideWeb-X.500-Gateway - Server-Functions *
|
||||
* Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
|
||||
* which is based on go500gw by Tim Howes, University of *
|
||||
* Michigan - All rights reserved *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* August 16 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* September 13 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: queries.c,v 1.8 1999/09/13 13:47:47 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#include "queries.h"
|
||||
|
||||
|
||||
PUBLIC void do_queries( s, glob , ip_addr, ip_port, hp)
|
||||
int s;
|
||||
GLOB_STRUCT *glob;
|
||||
char *ip_addr;
|
||||
unsigned int ip_port;
|
||||
struct hostent *hp;
|
||||
{
|
||||
char buf[100*BUFSIZ], *query, *tail;
|
||||
int len;
|
||||
FILE *fp;
|
||||
int rc, tblsize;
|
||||
struct timeval timeout;
|
||||
fd_set readfds;
|
||||
LDAP *ld;
|
||||
char tstring[100];
|
||||
|
||||
#if OL_LDAPV > 0
|
||||
int ldap_opt;
|
||||
#endif
|
||||
|
||||
/* get time for performance log */
|
||||
gettimeofday(×tore[2], NULL);
|
||||
|
||||
/* open output-port to waiting client */
|
||||
if ( (fp = fdopen( s, "a+")) == NULL ) {
|
||||
perror( "fdopen" );
|
||||
exit_tweb( 1 );
|
||||
}
|
||||
|
||||
tblsize = getdtablesize();
|
||||
timeout.tv_sec = glob->timeout;
|
||||
timeout.tv_usec = 0;
|
||||
FD_ZERO( &readfds );
|
||||
FD_SET( fileno( fp ), &readfds );
|
||||
|
||||
time(&glob->nowtime);
|
||||
time(&glob->expiretime);
|
||||
if(glob->cache_expire) {
|
||||
glob->expiretime += glob->cache_expire;
|
||||
glob->caching =TRUE;
|
||||
}
|
||||
free(glob->nowtimestr);
|
||||
free(glob->expiretimestr);
|
||||
|
||||
strftime(tstring, 99, GMT_FORMAT, gmtime(&glob->nowtime));
|
||||
glob->nowtimestr = strdup(tstring);
|
||||
strftime(tstring, 99, GMT_FORMAT2, gmtime(&glob->expiretime));
|
||||
glob->expiretimestr = strdup(tstring);
|
||||
|
||||
/* get client-query out from the system */
|
||||
if((rc=select(tblsize,(fd_set *)&readfds,NULL,NULL,&timeout))<=0)
|
||||
exit_tweb( 1 );
|
||||
|
||||
if ( fgets( buf, sizeof(buf), fp ) == NULL )
|
||||
exit_tweb( 1 );
|
||||
|
||||
/* Analyse Web-Client-Type / proxy + log-message */
|
||||
checkwwwclient(fp, ip_addr, ip_port, hp, glob);
|
||||
|
||||
len = strlen( buf );
|
||||
if ( debug ) {
|
||||
fprintf( stderr, "got %d bytes\n", len );
|
||||
|
||||
#if OL_LDAPV > 2
|
||||
ber_bprint( buf, len );
|
||||
#else
|
||||
lber_bprint( buf, len );
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/* strip of white spaces */
|
||||
query = trim (buf, WSPACE);
|
||||
|
||||
rewind (fp);
|
||||
|
||||
|
||||
/* strip "HTTP" from the end of the request */
|
||||
if ((tail = strstr(query, " HTTP")) != NULL ||
|
||||
(tail = strstr(query, " http")) != NULL) {
|
||||
http = 1;
|
||||
*tail = '\0';
|
||||
}
|
||||
|
||||
/* recognize GET/HEAD */
|
||||
if (!strncasecmp (query, "get", 3)) {
|
||||
|
||||
request = GET;
|
||||
query += 3;
|
||||
|
||||
} else if (!strncasecmp (query, "head", 4)) {
|
||||
|
||||
request = HEAD;
|
||||
query += 4;
|
||||
|
||||
} else {
|
||||
|
||||
/* Error because of neither GET- nor HEAD-request */
|
||||
do_error(fp, -2, NOT_IMPLEMENTED, glob);
|
||||
/* fprintf(fp, "HTTP/1.0 501 %s<br>", glob->la[5]); */
|
||||
rewind(fp);
|
||||
exit_tweb( 1 );
|
||||
}
|
||||
|
||||
/* strip off leading white space and '/' */
|
||||
while ( isspace( *query ) || *query == '/') {
|
||||
++query;
|
||||
}
|
||||
|
||||
|
||||
/* Now the real request is to be analized and served */
|
||||
|
||||
/* refuse robots if according robots.txt file exists */
|
||||
|
||||
if (!strcasecmp(query, "robots.txt")){
|
||||
if (http == 1) PRINT_PLAIN_HEADER;
|
||||
disp_file(glob, ROBOTS_TXT_FILE, fp);
|
||||
exit_tweb(0);
|
||||
}
|
||||
|
||||
#ifdef TUE_TEL
|
||||
if( glob->ton_urls && *query == cTON) {
|
||||
if(!glob->ton_urls->admin)
|
||||
glob->allowed = 0;
|
||||
if(glob->ton_urls->pass_oc) {
|
||||
glob->max_person = 10000;
|
||||
glob->no_browse = FALSE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
decide_access(glob);
|
||||
|
||||
/* get time for performance log */
|
||||
gettimeofday(×tore[3], NULL);
|
||||
|
||||
/* perform handling of pulldown/form retcodes
|
||||
-> gwswitch-redirect || pass */
|
||||
if(*query == cPULLDOWN) {
|
||||
if(strstr(query, "http")) {
|
||||
/* redirection */
|
||||
query += 4;
|
||||
hex_decode(query);
|
||||
PRINT_REDIRECT_HEADER;
|
||||
PRINT_HTML_FOOTER;
|
||||
exit_tweb(0);
|
||||
} else {
|
||||
/* pass */
|
||||
query += 7;
|
||||
hex_decode(query);
|
||||
}
|
||||
}
|
||||
|
||||
/* perform handling of buttons/form retcodes
|
||||
-> gwswitch-redirect || pass */
|
||||
if(*query == cBUTTON) {
|
||||
char *strptr;
|
||||
|
||||
query += 2;
|
||||
strptr = strrchr( query, '=' );
|
||||
*strptr = '\0';
|
||||
|
||||
if(strstr(query, "http")) {
|
||||
/* redirection */
|
||||
hex_decode(query);
|
||||
PRINT_REDIRECT_HEADER;
|
||||
PRINT_HTML_FOOTER;
|
||||
exit_tweb(0);
|
||||
} else {
|
||||
/* pass */
|
||||
hex_decode(query);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* 1. requests that may be served without DSA */
|
||||
switch (*query) {
|
||||
|
||||
|
||||
/* display Help-File */
|
||||
case cHELP:
|
||||
if (dosyslog)
|
||||
syslog (LOG_INFO, "working on query: %c (%s,%u) <%08d>",
|
||||
cHELP, ip_addr, ip_port, glob->svc_cnt);
|
||||
if (http == 1) PRINT_HTML_HEADER;
|
||||
fprintf(fp, "<HTML><HEAD>");
|
||||
disp_file(glob, glob->helpfile, fp);
|
||||
PRINT_HTML_FOOTER;
|
||||
rewind(fp);
|
||||
exit_tweb( 0 );
|
||||
|
||||
/* request error-explanation */
|
||||
case cERROR:
|
||||
if (dosyslog)
|
||||
syslog (LOG_INFO, "working on query: %c (%s,%u) <%08d>",
|
||||
cERROR, ip_addr, ip_port, glob->svc_cnt);
|
||||
/* fprintf(fp, HTML_HEAD_TITLE, "Errors", glob->la[100]);
|
||||
*/
|
||||
do_error( fp, 0 , 1, glob );
|
||||
rewind(fp);
|
||||
exit_tweb( 0 );
|
||||
|
||||
/* RCC: remote configuration control */
|
||||
case cCONFIG:
|
||||
if (dosyslog)
|
||||
syslog (LOG_INFO, "working on query: %c (%s,%u) <%08d>",
|
||||
cCONFIG, ip_addr, ip_port, glob->svc_cnt);
|
||||
if (http == 1) PRINT_HTML_HEADER;
|
||||
fprintf(fp, HTML_HEAD_TITLE, "Configuration", glob->la[100]);
|
||||
output(fp, glob, TRUE);
|
||||
langoutput(fp, glob, TRUE);
|
||||
PRINT_HTML_FOOTER;
|
||||
rewind(fp);
|
||||
exit_tweb(0);
|
||||
|
||||
/* query access-statistic */
|
||||
case cSTATS:
|
||||
if (dosyslog)
|
||||
syslog (LOG_INFO, "working on query: %c (%s,%u) <%08d>",
|
||||
cSTATS, ip_addr, ip_port, glob->svc_cnt);
|
||||
if (http == 1) PRINT_HTML_HEADER;
|
||||
fprintf(fp, HTML_HEAD_TITLE, "Statistics", glob->la[100]);
|
||||
fprintf(fp,
|
||||
"\n<strong>#############STATISTIC-DISPLAY#############</strong><br>\n" );
|
||||
fprintf( fp, "\n%s\n\n<p>\n", version );
|
||||
(void) put_hackStats (fp, 0);
|
||||
PRINT_HTML_FOOTER;
|
||||
rewind (fp);
|
||||
exit_tweb (0);
|
||||
|
||||
/* NOT REACHED */
|
||||
}
|
||||
|
||||
/* with ldap-referral use this host + port + use do_read */
|
||||
/* query looks like this: Wldap://host:port/dn */
|
||||
if ( *query == cREFERRAL ) {
|
||||
char *host, *port, *dn = NULL;
|
||||
|
||||
glob->ldap_referral_mode = 1;
|
||||
if ( ( host = strstr( query, "ldap://" ) ) ) {
|
||||
host += 7;
|
||||
if ( ( port = strchr( host, ':' ) ) ) {
|
||||
*port++ = '\0';
|
||||
if ( ( dn = strchr( port, '/' ) ) ) {
|
||||
*dn = '\0';
|
||||
glob->ldapd = strdup ( host );
|
||||
glob->ldapport = atoi ( port );
|
||||
*dn = cREAD;
|
||||
query = dn;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( !dn )
|
||||
exit_tweb( 1 );
|
||||
}
|
||||
|
||||
/* from here on there is needed a connection to the DSA */
|
||||
if ( (ld = ldap_open( glob->ldapd, glob->ldapport )) == NULL ) {
|
||||
if ( debug ) perror( "ldap_open" );
|
||||
do_error( fp, LDAP_SERVER_DOWN, SERVER_ERROR, glob);
|
||||
rewind(fp);
|
||||
exit_tweb( 1 );
|
||||
}
|
||||
|
||||
if(glob->caching_terms)
|
||||
trade_cache(fp, ld, query, glob);
|
||||
|
||||
/* performance of STRICT-BASEDN (blind out accesses != BASEDN) */
|
||||
|
||||
if(glob->strict_basedn)
|
||||
strict_basednf(fp, ld, query, glob);
|
||||
|
||||
|
||||
/* 2. queries with binding of the owner */
|
||||
switch (*query) {
|
||||
|
||||
/* request of the modification-formulare */
|
||||
case cGETMOD:
|
||||
/* log the request without password */
|
||||
hex_decode(query);
|
||||
if (dosyslog) {
|
||||
char qbuf[BUFSIZ], *qbufp;
|
||||
|
||||
strcpy(qbuf, query);
|
||||
if( ( qbufp = strchr(qbuf, '?')) )
|
||||
*qbufp = '\0';
|
||||
syslog (LOG_INFO, "working on query: %s (%s,%u) <%08d>",
|
||||
qbuf, ip_addr, ip_port, glob->svc_cnt);
|
||||
}
|
||||
rewind(fp);
|
||||
|
||||
/* follow aliases while searching */
|
||||
#if OL_LDAPV > 0
|
||||
|
||||
ldap_opt = LDAP_DEREF_ALWAYS;
|
||||
ldap_set_option( ld, LDAP_OPT_DEREF, &ldap_opt );
|
||||
|
||||
#else
|
||||
ld->ld_deref = LDAP_DEREF_ALWAYS;
|
||||
#endif
|
||||
|
||||
if ( !searchaliases )
|
||||
#if OL_LDAPV > 0
|
||||
|
||||
ldap_opt = LDAP_DEREF_FINDING;
|
||||
ldap_set_option( ld, LDAP_OPT_DEREF, &ldap_opt );
|
||||
|
||||
#else
|
||||
ld->ld_deref = LDAP_DEREF_FINDING;
|
||||
#endif
|
||||
|
||||
/* send WWW-Formulare with contence of the desired entry
|
||||
to the client */
|
||||
do_form( ld, fp, ++query, glob);
|
||||
ldap_unbind (ld);
|
||||
close_ldap_connections(glob);
|
||||
rewind(fp);
|
||||
exit_tweb (0);
|
||||
|
||||
/* return of the modification-formulare */
|
||||
case cDOMOD:
|
||||
|
||||
/* log the request in readable form without password if desired */
|
||||
if (dosyslog) {
|
||||
|
||||
char qbuf[100*BUFSIZ], *qbufp;
|
||||
|
||||
strcpy(qbuf, query);
|
||||
if( ( qbufp = strchr (qbuf, '?')) )
|
||||
*qbufp = '\0';
|
||||
hex_decode(qbuf+1);
|
||||
syslog (LOG_INFO, "working on query: %s (%s,%u) <%08d>",
|
||||
qbuf, ip_addr, ip_port, glob->svc_cnt);
|
||||
|
||||
}
|
||||
|
||||
/* perform modification with the original request */
|
||||
do_modify( ld, fp, ++query, glob);
|
||||
ldap_unbind (ld);
|
||||
close_ldap_connections(glob);
|
||||
rewind(fp);
|
||||
exit_tweb (0);
|
||||
|
||||
/* NOT REACHED */
|
||||
}
|
||||
|
||||
|
||||
/* perform all the other requests */
|
||||
|
||||
/* log the request in readable form first */
|
||||
hex_decode(query);
|
||||
if (dosyslog)
|
||||
syslog (LOG_INFO, "working on query: %s (%s,%u) <%08d>",
|
||||
*query ? trimright(query, WSPACE) : "BASEDN", ip_addr, ip_port,
|
||||
glob->svc_cnt);
|
||||
|
||||
/* accesses with resolvation of alias-entries */
|
||||
#if OL_LDAPV > 0
|
||||
|
||||
ldap_opt = LDAP_DEREF_ALWAYS;
|
||||
ldap_set_option( ld, LDAP_OPT_DEREF, &ldap_opt );
|
||||
|
||||
#else
|
||||
ld->ld_deref = LDAP_DEREF_ALWAYS;
|
||||
#endif
|
||||
|
||||
if ( !searchaliases )
|
||||
#if OL_LDAPV > 0
|
||||
|
||||
ldap_opt = LDAP_DEREF_FINDING;
|
||||
ldap_set_option( ld, LDAP_OPT_DEREF, &ldap_opt );
|
||||
|
||||
#else
|
||||
ld->ld_deref = LDAP_DEREF_FINDING;
|
||||
#endif
|
||||
|
||||
/* bind to DSA by order of the user as Web-DN
|
||||
(DN1 or DN2 was decided at check4access) */
|
||||
|
||||
#if OL_LDAPV > 0
|
||||
|
||||
/* a dummy call as long as socket connections are not settled
|
||||
* with OpenLDAP
|
||||
*/
|
||||
if ( dosyslog )
|
||||
syslog( LOG_INFO, "do_queries(): calling ldap_simple_bind_s()...\n" );
|
||||
|
||||
#endif
|
||||
|
||||
if ( (rc=ldap_simple_bind_s( ld, glob->webdn, glob->webpw ))
|
||||
!= LDAP_SUCCESS ) {
|
||||
if ( debug ) ldap_perror( ld, "ldap_simple_bind_s" );
|
||||
do_error( fp, rc, SERVER_ERROR, glob);
|
||||
rewind(fp);
|
||||
exit_tweb( 1 );
|
||||
}
|
||||
|
||||
/* 3. requests to the GW by order of the user */
|
||||
switch ( *query++ ) {
|
||||
|
||||
/* read entry */
|
||||
case cREAD:
|
||||
do_read( ld, fp, query, 0, glob );
|
||||
break;
|
||||
|
||||
/* display second page */
|
||||
case cREADALL:
|
||||
do_read( ld, fp, query, 1, glob);
|
||||
break;
|
||||
|
||||
/* search entries */
|
||||
case cSEARCH:
|
||||
do_search( ld, fp, query, glob );
|
||||
break;
|
||||
|
||||
/* list entries (browsing) */
|
||||
case cLIST:
|
||||
do_menu( ld, fp, query, "", glob );
|
||||
break;
|
||||
|
||||
#ifdef TUE_TEL
|
||||
/* list entries (browsing TON instead of DN) */
|
||||
case cTON:
|
||||
if(glob->ton_urls)
|
||||
do_ton( ld, fp, query, glob );
|
||||
break;
|
||||
#endif
|
||||
|
||||
/* request GIF-photo (Photo in X.500 as JPEG) */
|
||||
case cGIF:
|
||||
do_pict( ld, fp, query, 1, glob);
|
||||
break;
|
||||
|
||||
/* display JPEG-Photo */
|
||||
case cJPEG:
|
||||
do_pict( ld, fp, query, 2, glob);
|
||||
break;
|
||||
|
||||
/* display X.500-G3FAX-Photo */
|
||||
case cG3FAX:
|
||||
do_pict( ld, fp, query, 0, glob);
|
||||
break;
|
||||
|
||||
/* play Audio-attribute */
|
||||
case cAUDIO:
|
||||
do_audio( ld, fp, query, 0, glob);
|
||||
break;
|
||||
|
||||
/* eXtended query format */
|
||||
case cEXTENDED:
|
||||
do_xtend( ld, fp, query, 0, glob);
|
||||
break;
|
||||
|
||||
/* Default (empty query) is browsing of BASEDN */
|
||||
default:
|
||||
do_menu( ld, fp, glob->basedn->dn, "", glob );
|
||||
break;
|
||||
}
|
||||
|
||||
/* Job done, terminate connection to the DSA and bye! */
|
||||
ldap_unbind (ld);
|
||||
close_ldap_connections(glob);
|
||||
rewind(fp);
|
||||
exit_tweb( 0 );
|
||||
/* NOT REACHED */
|
||||
}
|
||||
/* end of function: do_queries */
|
||||
|
||||
PUBLIC void timeoutf(sig)
|
||||
int sig;
|
||||
{
|
||||
/* fprintf(stderr, "timeout!"); */
|
||||
exit_tweb(0);
|
||||
}
|
||||
/* end of function: timeoutf */
|
||||
|
||||
|
||||
PRIVATE void strict_basednf(fp, ld, query, glob)
|
||||
FILE *fp;
|
||||
LDAP *ld;
|
||||
char *query;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
char dnbuf[BUFSIZ], basednbuf[BUFSIZ], *strptr;
|
||||
LDAPMessage *res, *e;
|
||||
int rc, flag = 0, i, j;
|
||||
struct timeval timeout;
|
||||
char *url = NULL, **uri, *urlnola = NULL;
|
||||
pGW_SWITCH_LINE gw_ptr;
|
||||
char *url_tmp;
|
||||
char **dnarray, **bdnarray;
|
||||
|
||||
#ifdef TUE_TEL
|
||||
/* Patch for TONS */
|
||||
if( glob->ton_urls && (*query == cTON))
|
||||
return;
|
||||
#endif
|
||||
|
||||
/* Patch for FORMs/PULLDOWNs (cPULLDOWN) */
|
||||
if( glob->pull_down_menus && (*query == cPULLDOWN))
|
||||
return;
|
||||
|
||||
/* Patch for FORMs/BUTTONs (cBUTTONs) */
|
||||
if( glob->pull_down_menus && (*query == cBUTTON))
|
||||
return;
|
||||
|
||||
if(*query)
|
||||
strcpy(dnbuf, query+1);
|
||||
else
|
||||
strcpy(dnbuf, "\0");
|
||||
hex_decode(dnbuf);
|
||||
strcpy(basednbuf, glob->basedn->dn);
|
||||
|
||||
if( ( strptr = strchr(dnbuf, '?')) )
|
||||
*strptr = '\0';
|
||||
|
||||
if( *query && !dn_issuffix( dn_normalize(dnbuf), dn_normalize(basednbuf))) {
|
||||
|
||||
dnarray = dn2charray(dnbuf);
|
||||
bdnarray = glob->basedn->dnarray;
|
||||
|
||||
strcpy(dnbuf, "\0");
|
||||
if (glob->gw_switch) {
|
||||
for(gw_ptr = glob->gw_switch->list;
|
||||
!flag && gw_ptr; gw_ptr = gw_ptr->next) {
|
||||
if (!dn_cmp ("root", gw_ptr->dn)) {
|
||||
flag = 1;
|
||||
url = gw_ptr->url;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!flag) {
|
||||
fprintf(stderr, "Fehler:strict_basedn w/o root-switch!!!!\n");
|
||||
exit_tweb(0);
|
||||
}
|
||||
|
||||
for(j=0; bdnarray[j] && dnarray[j]; j++) {
|
||||
char *dnbufb;
|
||||
|
||||
flag = 0;
|
||||
|
||||
dnbufb = strdup(dnbuf);
|
||||
sprintf(dnbuf, "%s%s%s", dnarray[j], *dnbuf ? "," : "" , dnbufb);
|
||||
|
||||
if ( glob->gw_switch && glob->gw_switch->dynamic) {
|
||||
|
||||
if ( (rc=ldap_simple_bind_s( ld, glob->webdn, glob->webpw ))
|
||||
!= LDAP_SUCCESS ) {
|
||||
if ( debug ) ldap_perror( ld, "ldap_simple_bind_s" );
|
||||
do_error( fp, rc, SERVER_ERROR, glob);
|
||||
rewind(fp);
|
||||
exit_tweb( 1 );
|
||||
}
|
||||
|
||||
timeout.tv_sec = glob->timeout;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
if ( (rc = ldap_search_st( ld, dnbuf, LDAP_SCOPE_BASE, "objectClass=*",
|
||||
NULL, 0, &timeout, &res )) != LDAP_SUCCESS ) {
|
||||
/* do_error(fp, rc, NOT_FOUND, glob);
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if ( (e = ldap_first_entry( ld, res )) == NULL ) {
|
||||
do_error(fp, -2, SERVER_ERROR, glob);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
uri = ldap_get_values( ld, e, "labeledURI" );
|
||||
for(i=0; uri && uri[i] && *uri[i]; i++) {
|
||||
char *sp;
|
||||
|
||||
if( ( sp = strchr(uri[i], ' ')) ) {
|
||||
*sp++ = '\0';
|
||||
if(strstr(sp, glob->gw_switch->lagws)) {
|
||||
flag = 1;
|
||||
url = uri[i];
|
||||
break;
|
||||
} else if(strstr(sp, GWS))
|
||||
urlnola = uri[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!flag && urlnola) {
|
||||
url = urlnola;
|
||||
flag = 1;
|
||||
}
|
||||
if (glob->gw_switch) {
|
||||
|
||||
for(gw_ptr = glob->gw_switch->list;
|
||||
!flag && gw_ptr; gw_ptr = gw_ptr->next) {
|
||||
if (!dn_cmp (dnbuf, gw_ptr->dn)) {
|
||||
flag = 1;
|
||||
url = gw_ptr->url;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(strcmp(bdnarray[j], dnarray[j]))
|
||||
break;
|
||||
}
|
||||
|
||||
if (http == 1) PRINT_HTML_HEADER;
|
||||
fprintf( fp, HTML_HEAD_TITLE, "ACCESS DENIED", glob->la[100]);
|
||||
disp_file(glob, glob->header, fp);
|
||||
fprintf( fp, "%s\n", glob->la[96]);
|
||||
url_tmp = strdup(url_complete(url, query, ""));
|
||||
fprintf( fp, "<P><A HREF=\"%s\"><b>%s</b></A>\n",
|
||||
url_tmp, url_tmp);
|
||||
disp_file(glob, glob->footer, fp);
|
||||
PRINT_HTML_FOOTER;
|
||||
ldap_unbind (ld);
|
||||
close_ldap_connections(glob);
|
||||
exit_tweb(0);
|
||||
}
|
||||
}
|
||||
/* end of function: strict_basednf */
|
||||
|
||||
PRIVATE void trade_cache(fp, ld, query, glob)
|
||||
FILE *fp;
|
||||
LDAP *ld;
|
||||
char *query;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
pCACHING_TERMS_LINE ca_ptr;
|
||||
char dnbuf[BUFSIZ], rdn[BUFSIZ], *strptr;
|
||||
char tstring[100];
|
||||
int resflag;
|
||||
int rc;
|
||||
struct timeval timeout;
|
||||
LDAPMessage *res, *e;
|
||||
char **vals = NULL;
|
||||
|
||||
resflag = 0;
|
||||
if(*query)
|
||||
strcpy(dnbuf, query+1);
|
||||
else
|
||||
strcpy(dnbuf, glob->basedn->dn);
|
||||
hex_decode(dnbuf);
|
||||
if( ( strptr = strchr(dnbuf, '?')) )
|
||||
*strptr = '\0';
|
||||
strcpy(rdn, dnbuf);
|
||||
if( ( strptr = strQuoteChr(rdn, ',')) )
|
||||
*strptr = '\0';
|
||||
|
||||
for(ca_ptr = glob->caching_terms; ca_ptr; ca_ptr = ca_ptr->next) {
|
||||
if((toupper(*query) == toupper(*ca_ptr->access_type)) ||
|
||||
( !*query && (toupper(*ca_ptr->access_type) == 'M'))) {
|
||||
|
||||
if(ca_ptr->rdn_oc && (strstr(str_tolower(rdn), ca_ptr->pattern) ||
|
||||
(*ca_ptr->pattern == '*'))) {
|
||||
time(&glob->expiretime);
|
||||
glob->expiretime += ca_ptr->time;
|
||||
free(glob->expiretimestr);
|
||||
strftime(tstring, 99, GMT_FORMAT2, gmtime(&glob->expiretime));
|
||||
glob->expiretimestr = strdup(tstring);
|
||||
glob->caching = TRUE;
|
||||
}
|
||||
if(!ca_ptr->rdn_oc) {
|
||||
if(!resflag) {
|
||||
|
||||
if ( (rc=ldap_simple_bind_s( ld, glob->webdn, glob->webpw ))
|
||||
!= LDAP_SUCCESS ) {
|
||||
if ( debug ) ldap_perror( ld, "ldap_simple_bind_s" );
|
||||
do_error( fp, rc, SERVER_ERROR, glob);
|
||||
rewind(fp);
|
||||
exit_tweb( 1 );
|
||||
}
|
||||
|
||||
timeout.tv_sec = glob->timeout;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
if ( (rc = ldap_search_st( ld, dnbuf, LDAP_SCOPE_BASE, "objectClass=*",
|
||||
NULL, 0, &timeout, &res )) != LDAP_SUCCESS ) {
|
||||
do_error(fp, rc, NOT_FOUND, glob);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if ( (e = ldap_first_entry( ld, res )) == NULL ) {
|
||||
do_error(fp, -2, SERVER_ERROR, glob);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
vals = ldap_get_values( ld, e, "objectClass" );
|
||||
resflag = 1;
|
||||
}
|
||||
if(charray_inlist( vals, ca_ptr->pattern )) {
|
||||
time(&glob->expiretime);
|
||||
glob->expiretime += ca_ptr->time;
|
||||
free(glob->expiretimestr);
|
||||
strftime(tstring, 99, GMT_FORMAT2, gmtime(&glob->expiretime));
|
||||
glob->expiretimestr = strdup(tstring);
|
||||
glob->caching = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/* end of function: trade_cache */
|
@ -1,85 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* queries.h.. *
|
||||
* *
|
||||
* Funktion:..WorldWideWeb-X.500-Gateway - Server-Functions *
|
||||
* Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
|
||||
* which is based on go500gw by Tim Howes, University of *
|
||||
* Michigan - All rights reserved *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: : Z D D V V *
|
||||
* August 16 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* May 10 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: queries.h,v 1.6 1999/09/10 15:01:18 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _QUERIES_
|
||||
#define _QUERIES_
|
||||
|
||||
#include "tgeneral.h"
|
||||
#include "tglobal.h"
|
||||
#include "init_exp.h"
|
||||
#include "checkclient_exp.h"
|
||||
#include "support_exp.h"
|
||||
|
||||
#include "queries_exp.h"
|
||||
#include "x500_exp.h"
|
||||
#include "html_exp.h"
|
||||
#include "server_exp.h"
|
||||
#include "dn_exp.h"
|
||||
#include "charray_exp.h"
|
||||
|
||||
#ifdef TUE_TEL
|
||||
#include "tueTel_exp.h"
|
||||
#endif
|
||||
|
||||
|
||||
/* Macros for request-recognition */
|
||||
|
||||
/* 1. without DSA */
|
||||
#define cHELP 'H'
|
||||
#define cERROR 'E'
|
||||
#define cCONFIG 'C'
|
||||
#define cSTATS 'K'
|
||||
#define cPULLDOWN 'D'
|
||||
#define cBUTTON 'B'
|
||||
|
||||
/* 2. with user-bind */
|
||||
#define cGETMOD 'F'
|
||||
#define cDOMOD 'Y'
|
||||
|
||||
/* 3. with GW-bind */
|
||||
#define cREAD 'R'
|
||||
#define cREADALL 'L'
|
||||
#define cSEARCH 'S'
|
||||
#define cLIST 'M'
|
||||
#ifdef TUE_TEL
|
||||
#define cTON 'T'
|
||||
#endif
|
||||
#define cGIF 'I'
|
||||
#define cJPEG 'J'
|
||||
#define cG3FAX 'G'
|
||||
#define cAUDIO 'A'
|
||||
#define cREFERRAL 'W'
|
||||
#define cEXTENDED 'X'
|
||||
|
||||
#define GMT_FORMAT "%a, %d %b %Y %T GMT"
|
||||
#define GMT_FORMAT2 "Expires: %a, %d %b %Y %T GMT\n"
|
||||
#define ROBOTS_TXT_FILE "robots.txt"
|
||||
|
||||
PRIVATE void strict_basednf();
|
||||
PRIVATE void trade_cache();
|
||||
|
||||
#endif /* _QUERIES_ */
|
||||
|
@ -1,33 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* queries_exp.h *
|
||||
* *
|
||||
* Function:..File for TWEB-SOFTWARE *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* February 13 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* November 21 1996 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: queries_exp.h,v 1.6 1999/09/10 15:01:18 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _QUERIES_EXP_
|
||||
#define _QUERIES_EXP_
|
||||
|
||||
PUBLIC void do_queries(/* s, glob , ip_addr, ip_port*/);
|
||||
PUBLIC void timeoutf(/*sig*/);
|
||||
|
||||
|
||||
#endif /* _QUERIES_EXP_ */
|
File diff suppressed because it is too large
Load Diff
@ -1,137 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* regular.h.. *
|
||||
* *
|
||||
* Function:..Routine for TWEB *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* January 20 1998 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* December 31 1998 ZZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
/*
|
||||
* $Id: regular.h,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _REGULAR_
|
||||
#define _REGULAR_
|
||||
|
||||
|
||||
/* definition number opnd? meaning */
|
||||
#define END 0 /* no End of program. */
|
||||
#define BOL 1 /* no Match "" at beginning of line. */
|
||||
#define EOL 2 /* no Match "" at end of line. */
|
||||
#define ANY 3 /* no Match any one character. */
|
||||
#define ANYOF 4 /* str Match any character in this string. */
|
||||
#define ANYBUT 5 /* str Match any character not in this string. */
|
||||
#define BRANCH 6 /* node Match this alternative, or the next... */
|
||||
#define BACK 7 /* no Match "", "next" ptr points backward. */
|
||||
#define EXACTLY 8 /* str Match this string. */
|
||||
#define NOTHING 9 /* no Match empty string. */
|
||||
#define STAR 10 /* node Match this (simple) thing 0 or more times. */
|
||||
#define PLUS 11 /* node Match this (simple) thing 1 or more times. */
|
||||
#define OPEN 20 /* no Mark this point in input as start of #n. */
|
||||
/* OPEN+1 is number 1, etc. */
|
||||
#define CLOSE ((OPEN)+(NSUBEXP)+1) /* no Analogous to OPEN. */
|
||||
|
||||
/*
|
||||
* Opcode notes:
|
||||
*
|
||||
* BRANCH The set of branches constituting a single choice are hooked
|
||||
* together with their "next" pointers, since precedence prevents
|
||||
* anything being concatenated to any individual branch. The
|
||||
* "next" pointer of the last BRANCH in a choice points to the
|
||||
* thing following the whole choice. This is also where the
|
||||
* final "next" pointer of each individual branch points; each
|
||||
* branch starts with the operand node of a BRANCH node.
|
||||
*
|
||||
* BACK Normal "next" pointers all implicitly point forward; BACK
|
||||
* exists to make loop structures possible.
|
||||
*
|
||||
* STAR,PLUS '?', and complex '*' and '+', are implemented as circular
|
||||
* BRANCH structures using BACK. Simple cases (one character
|
||||
* per match) are implemented with STAR and PLUS for speed
|
||||
* and to minimize recursive plunges.
|
||||
*
|
||||
* OPEN,CLOSE ...are numbered at compile time.
|
||||
*/
|
||||
|
||||
/*
|
||||
* A node is one char of opcode followed by two chars of "next" pointer.
|
||||
* "Next" pointers are stored as two 8-bit pieces, high order first. The
|
||||
* value is a positive offset from the opcode of the node containing it.
|
||||
* An operand, if any, simply follows the node. (Note that much of the
|
||||
* code generation knows about this implicit relationship.)
|
||||
*
|
||||
* Using two bytes for the "next" pointer is vast overkill for most things,
|
||||
* but allows patterns to get big without disasters.
|
||||
*/
|
||||
#define OP(p) (*(p))
|
||||
#define NEXT(p) (((*((p)+1)&0377)<<8) + (*((p)+2)&0377))
|
||||
#define OPERAND(p) ((p) + 3)
|
||||
|
||||
/*
|
||||
* See regmagic.h for one further detail of program structure.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Utility definitions.
|
||||
*/
|
||||
#ifndef CHARBITS
|
||||
#define UCHARAT(p) ((int)*(unsigned char *)(p))
|
||||
#else
|
||||
#define UCHARAT(p) ((int)*(p)&CHARBITS)
|
||||
#endif
|
||||
|
||||
#define FAIL(m) { tweb_regerror(m); return(NULL); }
|
||||
#define ISMULT(c) ((c) == '*' || (c) == '+' || (c) == '?')
|
||||
#define META "^$.[()|?+*\\"
|
||||
|
||||
/*
|
||||
* Flags to be passed up and down.
|
||||
*/
|
||||
#define HASWIDTH 01 /* Known never to match null string. */
|
||||
#define SIMPLE 02 /* Simple enough to be STAR/PLUS operand. */
|
||||
#define SPSTART 04 /* Starts with * or +. */
|
||||
#define WORST 0 /* Worst case. */
|
||||
|
||||
/*
|
||||
* Global work variables for regcomp().
|
||||
*/
|
||||
PRIVATE char *regparse; /* Input-scan pointer. */
|
||||
PRIVATE int regnpar; /* () count. */
|
||||
PRIVATE char regdummy;
|
||||
PRIVATE char *regcode; /* Code-emit pointer; ®dummy = don't. */
|
||||
PRIVATE long regsize; /* Code size. */
|
||||
|
||||
/*
|
||||
* Forward declarations for regcomp()'s friends.
|
||||
*/
|
||||
#ifndef STATIC
|
||||
#define STATIC static
|
||||
#endif
|
||||
PRIVATE char *tweb_reg();
|
||||
PRIVATE char *tweb_regbranch();
|
||||
PRIVATE char *tweb_regpiece();
|
||||
PRIVATE char *tweb_regatom();
|
||||
PRIVATE char *tweb_regnode();
|
||||
PRIVATE char *tweb_regnext();
|
||||
PRIVATE void tweb_regc();
|
||||
PRIVATE void tweb_reginsert();
|
||||
PRIVATE void tweb_regtail();
|
||||
PRIVATE void tweb_regoptail();
|
||||
#ifdef STRCSPN
|
||||
STATIC int tweb_strcspn();
|
||||
#endif
|
||||
|
||||
#endif /* _REGULAR_ */
|
@ -1,56 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* regular_exp.h *
|
||||
* *
|
||||
* Function:..Routine for TWEB *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* January 20 1998 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* January 20 1998 ZZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
/*
|
||||
* $Id: regular_exp.h,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _REGULAR_EXP_
|
||||
#define _REGULAR_EXP_
|
||||
|
||||
/*
|
||||
* Definitions etc. for regexp(3) routines.
|
||||
*
|
||||
* Caveat: this is V8 regexp(3) [actually, a reimplementation thereof],
|
||||
* not the System V one.
|
||||
*/
|
||||
#define NSUBEXP 10
|
||||
typedef struct regexp {
|
||||
char *startp[NSUBEXP];
|
||||
char *endp[NSUBEXP];
|
||||
char regstart; /* Internal use only. */
|
||||
char reganch; /* Internal use only. */
|
||||
char *regmust; /* Internal use only. */
|
||||
int regmlen; /* Internal use only. */
|
||||
char program[1]; /* Unwarranted chumminess with compiler. */
|
||||
} regexp;
|
||||
|
||||
extern regexp *tweb_regcomp();
|
||||
extern int tweb_regexec();
|
||||
extern void tweb_regsub();
|
||||
extern void tweb_regerror();
|
||||
/*
|
||||
* The first byte of the regexp internal "program" is actually this magic
|
||||
* number; the start node begins in the second byte.
|
||||
*/
|
||||
#define MAGIC 0234
|
||||
|
||||
#endif /* _REGULAR_EXP_ */
|
@ -1,432 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* server.c... *
|
||||
* *
|
||||
* Function:..WorldWideWeb-X.500-Gateway - Server-Funktions *
|
||||
* Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
|
||||
* which is based on go500gw by Tim Howes, University of *
|
||||
* Michigan - All rights reserved *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* August 16 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* May 6 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: server.c,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#include "tgeneral.h"
|
||||
#include "tglobal.h"
|
||||
#include "init_exp.h"
|
||||
#include "checkclient_exp.h"
|
||||
#include "server.h"
|
||||
#include "charray_exp.h"
|
||||
|
||||
#if defined( TUE_TEL ) || defined( AMBIXGW )
|
||||
#include "tueTest_exp.h"
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
** start_server()
|
||||
**
|
||||
** Start the Web-X.500-Server.
|
||||
**/
|
||||
|
||||
PUBLIC void start_server(glob)
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
|
||||
int s, ns, rc;
|
||||
int tblsize;
|
||||
int pid = getpid();
|
||||
fd_set readfds;
|
||||
struct hostent *hp;
|
||||
struct sockaddr_in from;
|
||||
int fromlen;
|
||||
void wait4child();
|
||||
long int idx;
|
||||
|
||||
glob->stat_slice = time(&glob->stat_slice);
|
||||
stat_slice = &glob->stat_slice;
|
||||
/* if logging is desired via syslog establish connection to syslogd
|
||||
and write first log-message */
|
||||
if ( dosyslog ) {
|
||||
|
||||
openlog( glob->myname, LOG_PID | LOG_NOWAIT, dosyslog );
|
||||
syslog( LOG_INFO, "initializing" );
|
||||
|
||||
}
|
||||
|
||||
/* set up the socket to listen on */
|
||||
/* the actual port to listen is composed by the base-port
|
||||
and the language-offset */
|
||||
s = set_socket( glob->webport + atoi(glob->lang) );
|
||||
|
||||
/* arrange to reap children */
|
||||
(void) signal( SIGCHLD, wait4child );
|
||||
|
||||
if ( dosyslog )
|
||||
syslog (LOG_INFO, "socket: %d", s);
|
||||
|
||||
/* Read LDAP-filter for search-operations */
|
||||
if ( (filtd = ldap_init_getfilter( glob->filterfile )) == NULL ) {
|
||||
fprintf(stderr,"Cannot open filter file (%s)\n", glob->filterfile );
|
||||
exit( 1 );
|
||||
}
|
||||
|
||||
/* ### Code for the static server ### */
|
||||
|
||||
tblsize = getdtablesize();
|
||||
syslog (LOG_INFO, "listening for calls...");
|
||||
|
||||
/* Initialisation of the Anti-Hack-code */
|
||||
srand(pid);
|
||||
if (glob->comrefuse) hackTimer();
|
||||
bzero((char *) conArr, CARRSIZE * sizeof(int));
|
||||
bzero((char *) shadowconArr, CARRSIZE * sizeof(long int));
|
||||
bzero((char *) sumconArr, CARRSIZE * sizeof(long int));
|
||||
|
||||
#ifdef TUE_TEL
|
||||
/* initialisation of dit_config 1st time */
|
||||
if(glob->dit_config) {
|
||||
init_dit_config();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* initialisation of ip_refuse 1st time */
|
||||
if(glob->ip_refuse) {
|
||||
get_ip_refuse_clients(glob);
|
||||
}
|
||||
|
||||
/* the server runs in an infinite loop !!! */
|
||||
for ( ;; ) {
|
||||
|
||||
/* listen on the server-port for incoming connections */
|
||||
FD_ZERO( &readfds );
|
||||
FD_SET( s, &readfds );
|
||||
|
||||
if ((rc=select(tblsize,(fd_set *)&readfds,NULL,NULL,0))==-1) {
|
||||
if ( debug ) perror( "select" );
|
||||
continue;
|
||||
} else if ( rc == 0 ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ! FD_ISSET( s, &readfds ) )
|
||||
continue;
|
||||
|
||||
|
||||
/* got connection for the server: get data */
|
||||
fromlen = sizeof(from);
|
||||
|
||||
/* increment the counter for total connections */
|
||||
glob->svc_cnt++;
|
||||
|
||||
/* get new file-descriptors for the connection */
|
||||
if ( (ns = accept( s, (struct sockaddr *) &from, &fromlen )) == -1 ) {
|
||||
|
||||
/* new fd could not be assigned -> log & bye */
|
||||
if ( debug ) perror( "accept" );
|
||||
if ( dosyslog ) {
|
||||
syslog (LOG_INFO,
|
||||
"problem with accept, errno=%d, %s <%08d>",
|
||||
errno, strerror(errno), glob->svc_cnt);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
/* get time for performance log */
|
||||
gettimeofday(×tore[0], NULL);
|
||||
|
||||
/* get client-address via DNS */
|
||||
hp = gethostbyaddr( (char *) &(from.sin_addr.s_addr),
|
||||
sizeof(from.sin_addr.s_addr), AF_INET );
|
||||
|
||||
/* check ip-address for ip_refuse and bye if matched */
|
||||
if ( check_ip_denial( &from, glob ) == NOTOK ) {
|
||||
|
||||
if ( dosyslog )
|
||||
syslog( LOG_INFO, "IP-REFUSE: access denied for %s <%08d>",
|
||||
inet_ntoa( from.sin_addr ), glob->svc_cnt);
|
||||
|
||||
close (ns);
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
/* get time for performance log */
|
||||
gettimeofday(×tore[1], NULL);
|
||||
|
||||
/* Anti-Hack-part */
|
||||
|
||||
/* divide Host-IP-addresses in index-groups and count connection */
|
||||
idx = IP_HACK(from.sin_addr.s_addr);
|
||||
sumconArr[idx]++;
|
||||
|
||||
/* count try if already locked and bye */
|
||||
if(conArr[idx] < 0) {
|
||||
|
||||
shadowconArr[idx]++;
|
||||
close (ns);
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
/* if not yet locked and maximum amount of connections is exeeded ->
|
||||
lock & message & bye
|
||||
*/
|
||||
if (glob->comrefuse && (++conArr[idx] > glob->comrefuse->maxAccept)){
|
||||
|
||||
if (dosyslog)
|
||||
syslog(LOG_INFO,
|
||||
"connection refused for %s (IDX=%d): %d attempts, %d cycles suspended <%08d>",
|
||||
hp ? hp->h_name : "unknown", idx, conArr[idx],
|
||||
glob->comrefuse->suspendCycle, glob->svc_cnt);
|
||||
|
||||
/* lock for x timecycles */
|
||||
conArr[idx] = glob->comrefuse->suspendCycle;
|
||||
|
||||
/* bye, bye baby */
|
||||
close (ns);
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
/* END of Anti-Hack-part */
|
||||
|
||||
/* Log the connection */
|
||||
if ( dosyslog ) {
|
||||
char msg[BUFSIZ];
|
||||
|
||||
sprintf(msg, "TCP connection from %s (%s,%u)",
|
||||
(hp == NULL) ? "unknown" : hp->h_name,
|
||||
inet_ntoa( from.sin_addr ), from.sin_port );
|
||||
glob->server_connection_msg = strdup(msg);
|
||||
}
|
||||
|
||||
if ( debug ) {
|
||||
fprintf( stderr, "connection from %s (%s)\n",
|
||||
(hp == NULL) ? "unknown" : hp->h_name,
|
||||
inet_ntoa( from.sin_addr ) );
|
||||
}
|
||||
|
||||
glob->unknown_host = !hp;
|
||||
|
||||
/* OK, now fork a sub-process performing the further communication
|
||||
to the client; the father-process is listening for further
|
||||
connections */
|
||||
switch( pid = fork() ) {
|
||||
case 0: /* child */
|
||||
|
||||
/* the connection to the client should last at most OUT_TIME
|
||||
thereafter terminate connection */
|
||||
signal(SIGALRM, timeoutf);
|
||||
alarm(OUT_TIME);
|
||||
|
||||
/* the s-filedescriptor is not needed any more */
|
||||
close( s );
|
||||
|
||||
/* Serve client-request */
|
||||
do_queries( ns, glob , inet_ntoa( from.sin_addr ), from.sin_port, hp);
|
||||
break;
|
||||
|
||||
case -1: /* failed */
|
||||
if (dosyslog)
|
||||
syslog (LOG_INFO, "%s <%08d>",
|
||||
glob->server_connection_msg, glob->svc_cnt);
|
||||
perror( "fork" );
|
||||
break;
|
||||
|
||||
default: /* parent */
|
||||
/* the father-process continues listening */
|
||||
close( ns );
|
||||
if ( debug )
|
||||
fprintf( stderr, "forked child %d\n", pid );
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* NOT REACHED */
|
||||
}
|
||||
/* end of function: start_server */
|
||||
|
||||
|
||||
/**
|
||||
** set_socket()
|
||||
**
|
||||
** Initialise socket to listen on and assign dedicated FD
|
||||
**/
|
||||
|
||||
PRIVATE int set_socket(port)
|
||||
int port;
|
||||
{
|
||||
int s, one;
|
||||
struct sockaddr_in addr;
|
||||
|
||||
if ( (s = socket( AF_INET, SOCK_STREAM, 0 )) == -1 ) {
|
||||
perror( "socket" );
|
||||
exit( 1 );
|
||||
}
|
||||
|
||||
/* set option so clients can't keep us from coming back up */
|
||||
one = 1;
|
||||
if ( setsockopt( s, SOL_SOCKET, SO_REUSEADDR, (char *) &one,
|
||||
sizeof(one) ) < 0 ) {
|
||||
perror( "setsockopt" );
|
||||
exit( 1 );
|
||||
}
|
||||
|
||||
/* bind to a name */
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_addr.s_addr = INADDR_ANY;
|
||||
addr.sin_port = htons( port );
|
||||
if ( bind( s, (struct sockaddr *) &addr, sizeof(addr) ) ) {
|
||||
perror( "bind" );
|
||||
exit( 1 );
|
||||
}
|
||||
|
||||
/* listen for connections */
|
||||
if ( listen( s, 512 ) == -1 ) {
|
||||
perror( "listen" );
|
||||
exit( 1 );
|
||||
}
|
||||
|
||||
if ( debug )
|
||||
printf( "web500gw listening on port %d\n", port );
|
||||
|
||||
return( s );
|
||||
}
|
||||
/* end of function: set_socket */
|
||||
|
||||
/* If a sub-daemon exists, remove from Process list */
|
||||
PRIVATE void wait4child(arg)
|
||||
int arg;
|
||||
{
|
||||
int status;
|
||||
|
||||
if ( debug ) printf( "parent: catching child status\n" );
|
||||
while ( wait3( &status, WNOHANG | WUNTRACED, 0 ) > 0 )
|
||||
; /* NULL */
|
||||
(void) signal( SIGCHLD, wait4child );
|
||||
}
|
||||
/* end of function: wait4child */
|
||||
|
||||
/* set signal-handler for Anti-Hack */
|
||||
PRIVATE void hackTimer()
|
||||
{
|
||||
static time_t timer = (time_t) 0;
|
||||
time_t now = time (&now);
|
||||
|
||||
/* re-read IP-REFUSE file if necessary */
|
||||
re_readIPrefuse( globP );
|
||||
|
||||
/* re-read INDEX-URL file if necessary */
|
||||
re_read_index_url_rules( globP );
|
||||
|
||||
if (!timer) {
|
||||
|
||||
timer = now + comRefuseP->statCycle;
|
||||
|
||||
}
|
||||
|
||||
signal(SIGALRM, reset_conMem);
|
||||
alarm((rand() % comRefuseP->tdiff) + comRefuseP->tmin);
|
||||
|
||||
if (now + comRefuseP->tmin > timer) {
|
||||
|
||||
timer = put_hackStats (NULL, now) + comRefuseP->statCycle;
|
||||
*stat_slice = now;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
/* end of function: hackTimer */
|
||||
|
||||
|
||||
/* Signal-handler for Anti-Hack-code */
|
||||
PRIVATE void reset_conMem()
|
||||
{
|
||||
int i;
|
||||
|
||||
hackTimer();
|
||||
|
||||
for(i=0; i< 8192; i++)
|
||||
if(conArr[i] >= 0) conArr[i] = 0;
|
||||
else {
|
||||
if(++conArr[i] == 0){
|
||||
if (dosyslog)
|
||||
syslog(LOG_INFO, "connection accept resumed for IDX=%d; \
|
||||
%u connection attempts during suspension <%08d>", i, shadowconArr[i],
|
||||
globP->svc_cnt);
|
||||
shadowconArr[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/* end of function: reset_conMem */
|
||||
|
||||
|
||||
/* regular output of the access-statistic */
|
||||
PUBLIC time_t put_hackStats (fp, now)
|
||||
FILE *fp;
|
||||
time_t now;
|
||||
{
|
||||
int i, bereiche;
|
||||
int is_html = (fp != NULL);
|
||||
char *eol = is_html ? "<BR>\n" : "\n";
|
||||
unsigned long int gesamt = 0;
|
||||
|
||||
if (!now) now = time (&now);
|
||||
|
||||
if (!fp) fp = fopen (comRefuseP->statFile, "w");
|
||||
|
||||
if (fp) {
|
||||
|
||||
if (is_html) fprintf (fp, "<PRE><BR>\n");
|
||||
|
||||
fprintf (fp, "Access-Statistic TWEB%s", eol);
|
||||
fprintf (fp, "======================%s", eol);
|
||||
if (comRefuseP) fprintf (fp, "FILE : %s%s", comRefuseP->statFile, eol);
|
||||
fprintf (fp, "START: %s%s", format_time (*stat_slice), eol);
|
||||
fprintf (fp, "END : %s%s%s%s", format_time (now), eol, eol, eol);
|
||||
|
||||
for (i = 0, bereiche = 0; i < CARRSIZE; i++) {
|
||||
|
||||
if(sumconArr[i]) {
|
||||
fprintf (fp, "IP-IDX %5d: %8lu%s", i, sumconArr[i], eol);
|
||||
gesamt += sumconArr[i];
|
||||
bereiche++;
|
||||
}
|
||||
|
||||
}
|
||||
if(bereiche > 1) {
|
||||
fprintf (fp, "----------------------%s", eol);
|
||||
fprintf (fp, "Total: %8lu ( from %d IP-Ranges )%s",
|
||||
gesamt, bereiche, eol);
|
||||
}
|
||||
|
||||
if (is_html) {
|
||||
|
||||
fprintf (fp, "</PRE><BR>\n");
|
||||
|
||||
} else {
|
||||
|
||||
bzero((char *) sumconArr, CARRSIZE * sizeof(long int));
|
||||
fprintf (fp, "\n");
|
||||
fclose (fp);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return (now);
|
||||
|
||||
} /* put_hackStats */
|
@ -1,72 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* server.h... *
|
||||
* *
|
||||
* Funktion:..WorldWideWeb-X.500-Gateway - Server-Funktions *
|
||||
* Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
|
||||
* which is based on go500gw by Tim Howes, University of *
|
||||
* Michigan - All rights reserved *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* August 16 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* December 31 1998 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: server.h,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SERVER_
|
||||
#define _SERVER_
|
||||
|
||||
#include "server_exp.h"
|
||||
#include "queries_exp.h"
|
||||
#include "support_exp.h"
|
||||
|
||||
#ifdef TUE_TEL
|
||||
#include "tueTel_exp.h"
|
||||
#endif
|
||||
|
||||
|
||||
#define CARRSIZE 8192
|
||||
|
||||
#define MASK_30 0x40000000
|
||||
#define MASK_20 0x00100000
|
||||
#define MASK_17 0x00020000
|
||||
#define MASK_10 0x00000ffc
|
||||
|
||||
#define IP_HACK(x) ((((MASK_30 & (x)) != 0) * 4096) + \
|
||||
(((MASK_20 & (x)) != 0) * 2048) + \
|
||||
(((MASK_17 & (x)) != 0) * 1024) + \
|
||||
((MASK_10 & (x)) >> 2))
|
||||
|
||||
/* three integer-arrays to count connections */
|
||||
int conArr[CARRSIZE];
|
||||
unsigned long int shadowconArr[CARRSIZE];
|
||||
unsigned long int sumconArr[CARRSIZE];
|
||||
|
||||
/* the signal-handler */
|
||||
PRIVATE void reset_conMem();
|
||||
|
||||
/* set the Alarm-Timer */
|
||||
PRIVATE void hackTimer();
|
||||
|
||||
PRIVATE int set_socket();
|
||||
PRIVATE void wait4child();
|
||||
|
||||
/* A pointer to the Anti-Hack-infos in the Glob-structure */
|
||||
COMREFUSE *comRefuseP = NULL;
|
||||
time_t *stat_slice;
|
||||
|
||||
|
||||
#endif /* _SERVER_ */
|
||||
|
||||
|
@ -1,36 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* server_exp.h... *
|
||||
* *
|
||||
* Function:..WorldWideWeb-X.500-Gateway - Server-Funktions *
|
||||
* Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
|
||||
* which is based on go500gw by Tim Howes, University of *
|
||||
* Michigan - All rights reserved *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* February 2 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* December 31 1996 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: server_exp.h,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SERVER_EXP_
|
||||
#define _SERVER_EXP_
|
||||
|
||||
/* Statistic Output */
|
||||
extern time_t put_hackStats();
|
||||
extern void start_server();
|
||||
|
||||
#endif /* _SERVER_EXP_ */
|
||||
|
||||
|
@ -1,177 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* strng.c.... *
|
||||
* *
|
||||
* Function:..String Handling Functions *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* February 13 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* November 3 1998 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: strng.c,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#include "strng_exp.h"
|
||||
#include "tgeneral.h"
|
||||
|
||||
/*
|
||||
* Convert string to integer by means of a dispatcherlist
|
||||
* if string is not in the dispatcher -> return default
|
||||
*/
|
||||
|
||||
PUBLIC int cnvt_str2int (stringVal, dispatcher, defaultVal)
|
||||
STRDISP_P dispatcher;
|
||||
int defaultVal;
|
||||
char *stringVal;
|
||||
{
|
||||
int retVal = defaultVal;
|
||||
STRDISP_P disp;
|
||||
|
||||
for (disp = dispatcher; disp->stringVal; disp++) {
|
||||
|
||||
if (!strncmp (stringVal, disp->stringVal, disp->abbr)) {
|
||||
|
||||
retVal = disp->intVal;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return (retVal);
|
||||
|
||||
} /* cnvt_str2int */
|
||||
|
||||
|
||||
/*
|
||||
* Truncate characters at the beginning of a string
|
||||
*/
|
||||
|
||||
PUBLIC char * trimleft (s, what)
|
||||
char *s, *what;
|
||||
{
|
||||
|
||||
return (s + strspn (s, what));
|
||||
|
||||
} /* trimleft */
|
||||
|
||||
|
||||
/*
|
||||
* Truncate characters at the end of a string
|
||||
*/
|
||||
|
||||
PUBLIC char * trimright (s, what)
|
||||
char *s, *what;
|
||||
{
|
||||
char *tmp = s + strlen (s) - 1;
|
||||
|
||||
while ((tmp >= s) && strchr (what, *tmp)) *tmp-- = '\0';
|
||||
|
||||
return (s);
|
||||
|
||||
} /* trimright */
|
||||
|
||||
|
||||
/*
|
||||
* Truncate characters at the beginning and end of a string
|
||||
*/
|
||||
|
||||
PUBLIC char * trim (s, what)
|
||||
char *s, *what;
|
||||
{
|
||||
(void) trimright (s, what);
|
||||
return (trimleft (s, what));
|
||||
|
||||
} /* trim */
|
||||
|
||||
|
||||
/*
|
||||
* Convert a string to lower-case "in place"
|
||||
* uses tolower()
|
||||
*/
|
||||
|
||||
PUBLIC char *str_tolower (source)
|
||||
char *source;
|
||||
{
|
||||
char *target = source;
|
||||
|
||||
for (; *target; target++) *target = tolower (*target);
|
||||
return (source);
|
||||
|
||||
} /* str_tolower */
|
||||
|
||||
|
||||
/*
|
||||
* Convert a string to upper-case "in place"
|
||||
* uses toupper()
|
||||
*/
|
||||
|
||||
PUBLIC char *str_toupper (source)
|
||||
char *source;
|
||||
{
|
||||
char *target = source;
|
||||
|
||||
for (; *target; target++){
|
||||
*target = toupper (*target);
|
||||
|
||||
/* Patch fuer Umlaute */
|
||||
if(*target == 'ä') *target = 'Ä';
|
||||
else if(*target == 'ö') *target = 'Ö';
|
||||
else if(*target == 'ü') *target = 'Ü';
|
||||
}
|
||||
return (source);
|
||||
|
||||
} /* str_toupper */
|
||||
|
||||
|
||||
/*
|
||||
* Substitute a character in a string by another
|
||||
*/
|
||||
|
||||
PUBLIC char *tr1 (source, from, to)
|
||||
char *source;
|
||||
char from, to;
|
||||
{
|
||||
char *target = source - 1;
|
||||
|
||||
while ( ( target = strchr( ++target, from )) ) *target = to;
|
||||
|
||||
return (source);
|
||||
|
||||
} /* tr1 */
|
||||
|
||||
|
||||
PUBLIC int chrcnt(string, c)
|
||||
char *string;
|
||||
char *c;
|
||||
{
|
||||
int count=0;
|
||||
|
||||
string--;
|
||||
while( ( string = strpbrk(string+1, c)) )
|
||||
count++;
|
||||
return(count);
|
||||
}
|
||||
/* end of function: chrcnt */
|
||||
|
||||
|
||||
PUBLIC int
|
||||
qSortByString( a, b )
|
||||
char **a, **b;
|
||||
{
|
||||
return strcmp( *a, *b );
|
||||
}
|
||||
/* end of function: qSortByString */
|
||||
|
||||
|
@ -1,80 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* strng_exp.h *
|
||||
* *
|
||||
* Function:..String Handling Functions *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* February 13 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* November 3 1998 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: strng_exp.h,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __STRNG_EXP__
|
||||
#define __STRNG_EXP__
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Structures for the offered Funktions
|
||||
*/
|
||||
|
||||
typedef struct _str2intDispatch {
|
||||
|
||||
char *stringVal;
|
||||
int abbr,
|
||||
intVal;
|
||||
|
||||
} STRDISP, *STRDISP_P;
|
||||
|
||||
|
||||
/*
|
||||
* The "offered" Funktions
|
||||
*/
|
||||
|
||||
/* Conversion to upper/lower case in the whole string */
|
||||
char *str_tolower (/* char *string */);
|
||||
char *str_toupper (/* char *string */);
|
||||
|
||||
/* Convert string to integer by means of a dispatcherlist */
|
||||
/* if string is not in the dispatcher -> return default */
|
||||
int cnvt_str2int (/* string, dispatcher, default */);
|
||||
|
||||
/* Truncate characters at the beginning and end of a string */
|
||||
char *trimleft (/* char *s, char *what */);
|
||||
char *trimright (/* char *s, char *what */);
|
||||
char *trim (/* char *s, char *what */);
|
||||
|
||||
/* A special WHAT: whitespaces */
|
||||
#define WSPACE "\n\r\t "
|
||||
|
||||
/* Substitute a character in a string to another */
|
||||
char *tr1 (/* char *source, char from, char to */);
|
||||
|
||||
/* Count the named characters of string2 in string1 */
|
||||
int chrcnt (/*String1, String2*/);
|
||||
|
||||
|
||||
/* Compare by string values in qsort() */
|
||||
int qSortByString (/* char **StringP1, char **StringP2 */);
|
||||
|
||||
#endif
|
||||
|
@ -1,613 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* support.c.. *
|
||||
* *
|
||||
* Function:..WorldWideWeb-X.500-Gateway - Supporting Routines *
|
||||
* Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
|
||||
* which is based on go500gw by Tim Howes, University of *
|
||||
* Michigan - All rights reserved *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* August 16 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* September 7 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: support.c,v 1.6 1999/09/10 15:01:20 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#include "tgeneral.h"
|
||||
#include "tglobal.h"
|
||||
#include "init_exp.h"
|
||||
#include "support.h"
|
||||
|
||||
/*
|
||||
* Utilities for dealing with HTML junk
|
||||
*/
|
||||
|
||||
char hex[17] = "0123456789abcdef";
|
||||
char buffer[1024];
|
||||
|
||||
PUBLIC char * hex_decode (in)
|
||||
char *in;
|
||||
{
|
||||
char b, c;
|
||||
int q = 0;
|
||||
char *out = in;
|
||||
|
||||
while (*in) {
|
||||
if (*in == '?') /* start search */
|
||||
q = 1;
|
||||
if (*in == '%') { /* Hex escape */
|
||||
in++;
|
||||
if(!(c = *in++)) break;
|
||||
b = from_hex(c);
|
||||
if(!(c = *in++)) break;
|
||||
*out++ = (b<<4) + from_hex(c);
|
||||
} else if (q && *in == '+') {
|
||||
/* '+' is legal in path, in search it's a ' ' */
|
||||
*out++ = ' ';
|
||||
in++;
|
||||
} else {
|
||||
*out++ = *in++;
|
||||
}
|
||||
}
|
||||
*out = '\0';
|
||||
return (out);
|
||||
}
|
||||
/* end of function: hex_decode */
|
||||
|
||||
/* decode in search (for do_modify) */
|
||||
|
||||
PUBLIC char * hex_qdecode (in)
|
||||
char *in;
|
||||
{
|
||||
char b, c;
|
||||
char *out = in;
|
||||
|
||||
while (*in) {
|
||||
if (*in == '%') { /* Hex escape */
|
||||
in++;
|
||||
if(!(c = *in++)) break;
|
||||
b = from_hex(c);
|
||||
if(!(c = *in++)) break;
|
||||
*out++ = (b<<4) + from_hex(c);
|
||||
} else if (*in == '+') { /* we are in search, so: '+' -> ' ' */
|
||||
*out++ = ' ';
|
||||
in++;
|
||||
} else {
|
||||
*out++ = *in++;
|
||||
}
|
||||
}
|
||||
*out = '\0';
|
||||
return (out);
|
||||
}
|
||||
/* end of function: hex_qdecode */
|
||||
|
||||
PUBLIC char * form_encode (in)
|
||||
char *in;
|
||||
{
|
||||
char *out = buffer;
|
||||
|
||||
/* bzero(out, 1024); */
|
||||
while (*in) {
|
||||
if (*in == '"' || *in == '>' ) {
|
||||
*out++ = '\\';
|
||||
}
|
||||
*out++ = *in++;
|
||||
}
|
||||
*out = '\0';
|
||||
|
||||
/* fprintf( stderr, "returning - esc: %s.\n", buffer); */
|
||||
return (buffer);
|
||||
}
|
||||
/* end of function: form_encode */
|
||||
|
||||
/* gtime(): the inverse of localtime().
|
||||
This routine was supplied by Mike Accetta at CMU many years ago.
|
||||
*/
|
||||
|
||||
int dmsize[] = {
|
||||
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
|
||||
};
|
||||
|
||||
#define dysize(y) \
|
||||
(((y) % 4) ? 365 : (((y) % 100) ? 366 : (((y) % 400) ? 365 : 366)))
|
||||
|
||||
#define YEAR(y) ((y) >= 100 ? (y) : (y) + 1900)
|
||||
|
||||
PRIVATE time_t gtime (tm)
|
||||
struct tm *tm;
|
||||
{
|
||||
register int i,
|
||||
sec,
|
||||
mins,
|
||||
hour,
|
||||
mday,
|
||||
mon,
|
||||
year;
|
||||
register long result;
|
||||
|
||||
if ((sec = tm -> tm_sec) < 0 || sec > 59
|
||||
|| (mins = tm -> tm_min) < 0 || mins > 59
|
||||
|| (hour = tm -> tm_hour) < 0 || hour > 24
|
||||
|| (mday = tm -> tm_mday) < 1 || mday > 31
|
||||
|| (mon = tm -> tm_mon + 1) < 1 || mon > 12)
|
||||
return ((long) -1);
|
||||
if (hour == 24) {
|
||||
hour = 0;
|
||||
mday++;
|
||||
}
|
||||
year = YEAR (tm -> tm_year);
|
||||
result = 0L;
|
||||
for (i = 1970; i < year; i++)
|
||||
result += dysize (i);
|
||||
if (dysize (year) == 366 && mon >= 3)
|
||||
result++;
|
||||
while (--mon)
|
||||
result += dmsize[mon - 1];
|
||||
result += mday - 1;
|
||||
result = 24 * result + hour;
|
||||
result = 60 * result + mins;
|
||||
result = 60 * result + sec;
|
||||
return result;
|
||||
}
|
||||
/* end of function: gtime */
|
||||
|
||||
PUBLIC char * format_date (s, format)
|
||||
char **s;
|
||||
char *format;
|
||||
{
|
||||
/* PATCHED by /KSp, 94/04/29 */
|
||||
static char date[256];
|
||||
/* ^^^^^^ */
|
||||
/* END PATCH */
|
||||
|
||||
struct tm tm, *ntm;
|
||||
time_t t;
|
||||
|
||||
|
||||
tm.tm_year = 10*((*s)[0] - '0') + ((*s)[1] - '0');
|
||||
tm.tm_mon = 10*((*s)[2] - '0') + ((*s)[3] - '0') - 1;
|
||||
tm.tm_mday = 10*((*s)[4] - '0') + ((*s)[5] - '0');
|
||||
tm.tm_hour = 10*((*s)[6] - '0') + ((*s)[7] - '0');
|
||||
tm.tm_min = 10*((*s)[8] - '0') + ((*s)[9] - '0');
|
||||
tm.tm_sec = 10*((*s)[10] - '0') + ((*s)[11] - '0');
|
||||
|
||||
/* PATCHED for HPUX by /KSp, 94/04/28 */
|
||||
|
||||
tm.tm_isdst = 0;
|
||||
|
||||
#if !defined(__hpux) && !defined(__linux__) && !defined(__sun)
|
||||
tm.tm_gmtoff = 0;
|
||||
#endif
|
||||
|
||||
/* END PATCH */
|
||||
|
||||
t = gtime(&tm);
|
||||
ntm = gmtime(&t);
|
||||
strftime(date, 256, format, ntm);
|
||||
return (date);
|
||||
}
|
||||
/* end of function: format_date */
|
||||
|
||||
PUBLIC char * friendly_dn (dn, glob)
|
||||
char *dn;
|
||||
GLOB_STRUCT *glob;
|
||||
{
|
||||
/* PATCHED BY /KSp, 94/04/29 */
|
||||
/* static char fufn[1024], **s; */
|
||||
/* ^^^^^^ */
|
||||
/* END PATCH */
|
||||
|
||||
/* Again patched by /KSp, 97/01/25: dynamic mem-allocation */
|
||||
char *fufn;
|
||||
|
||||
if ( ( fufn = calloc( 1, BUFSIZ )) ) {
|
||||
|
||||
if (strlen(dn) == 0) {
|
||||
strcpy( fufn, glob->la[77] );
|
||||
} else {
|
||||
|
||||
int i = 0;
|
||||
char **s;
|
||||
|
||||
s = ldap_explode_dn( dn, 1 );
|
||||
while (s[i+1]) {
|
||||
strcat( fufn, s[i++] );
|
||||
strcat( fufn, ", " );
|
||||
}
|
||||
strcat( fufn, ldap_friendly_name( glob->friendlyfile, s[i], &fm ));
|
||||
}
|
||||
}
|
||||
|
||||
return (fufn);
|
||||
}
|
||||
/* end of function: friendly_dn */
|
||||
|
||||
|
||||
PUBLIC char * format_time (whatTime)
|
||||
time_t whatTime;
|
||||
{
|
||||
time_t timer;
|
||||
static char theTime[_TIMEOUT_LEN+1];
|
||||
|
||||
timer = whatTime ? whatTime : time (&timer);
|
||||
strftime (theTime, (_TIMEOUT_LEN + 1), _LOG_TIME, localtime (&timer));
|
||||
|
||||
return (theTime);
|
||||
|
||||
} /* end of function: format_time */
|
||||
|
||||
PUBLIC char * strQuoteChr(string, c)
|
||||
char *string;
|
||||
char c;
|
||||
{
|
||||
char *cPtr;
|
||||
int inQuote = FALSE;
|
||||
|
||||
cPtr = string;
|
||||
while(*cPtr) {
|
||||
if( *cPtr == '\"')
|
||||
inQuote = ( (inQuote == TRUE) ? FALSE : TRUE );
|
||||
if( (*cPtr == c) && (inQuote == FALSE) )
|
||||
return(cPtr);
|
||||
cPtr++;
|
||||
}
|
||||
|
||||
return(NULL);
|
||||
}
|
||||
/* end of function: strQuoteChr */
|
||||
|
||||
PUBLIC char * strrQuoteChr(string, c)
|
||||
char *string;
|
||||
char c;
|
||||
{
|
||||
char *cPtr;
|
||||
int inQuote = FALSE;
|
||||
|
||||
cPtr = string + strlen(string) - 1;
|
||||
while(cPtr >= string) {
|
||||
if( *cPtr == '\"')
|
||||
inQuote = ( (inQuote == TRUE) ? FALSE : TRUE );
|
||||
if( (*cPtr == c) && (inQuote == FALSE) )
|
||||
return(cPtr);
|
||||
cPtr--;
|
||||
}
|
||||
|
||||
return(NULL);
|
||||
}
|
||||
/* end of function: strrQuoteChr */
|
||||
|
||||
|
||||
PUBLIC void disp_file(glob, filename, fp)
|
||||
GLOB_STRUCT *glob;
|
||||
char *filename;
|
||||
FILE *fp;
|
||||
{
|
||||
char buf[4096];
|
||||
FILE *fp2;
|
||||
if(filename && (fp2 = fopen(filename, "r" ))) {
|
||||
while ( fgets(buf, 4095, fp2) != NULL )
|
||||
fprintf( fp, "%s",buf);
|
||||
fclose(fp2);
|
||||
}
|
||||
|
||||
/* Copyright-Zeile */
|
||||
if(filename == glob->footer ||
|
||||
(glob->basedn && filename == glob->basedn->foot))
|
||||
fprintf( fp, glob->la[99],glob->la[101], copyright );
|
||||
}
|
||||
/* end of function: disp_file */
|
||||
|
||||
|
||||
PUBLIC int dn_cmp(dn1, dn2)
|
||||
char *dn1, *dn2;
|
||||
{
|
||||
do {
|
||||
while(*dn1 == ' ' || *dn1 == '"')
|
||||
dn1++;
|
||||
while(*dn2 == ' ' || *dn2 == '"')
|
||||
dn2++;
|
||||
if(!*dn1 && !*dn2)
|
||||
return(FALSE); /* equality */
|
||||
} while(tolower(*dn1++) == tolower(*dn2++));
|
||||
return(TRUE);
|
||||
}
|
||||
/* end of function: dn_cmp */
|
||||
|
||||
|
||||
/*
|
||||
* dn_cmp_parts()
|
||||
*
|
||||
* comparison of dns by rdn parts. in case of unmatched the part(s) which
|
||||
* matched can be returned (matched not NULL)
|
||||
*
|
||||
* input:
|
||||
*
|
||||
* - dn1 (in url format)
|
||||
* - dn2 ( " )
|
||||
* - matched (pointer to dynamically allocatable string, or NULL)
|
||||
*
|
||||
* output:
|
||||
*
|
||||
* - DN_EQUAL | DN_LESS | DN_GREATER | DN_UNMATCHED (with matched allocated)
|
||||
*/
|
||||
|
||||
PUBLIC int
|
||||
dn_cmp_parts( dn1, dn2, matched )
|
||||
char *dn1;
|
||||
char *dn2;
|
||||
char **matched;
|
||||
{
|
||||
char **dn1arr = dn2charray( dn1 );
|
||||
char **dn2arr = dn2charray( dn2 );
|
||||
int idx;
|
||||
int domatch = TRUE;
|
||||
int result = DN_EQUAL;
|
||||
|
||||
for ( idx = 0; dn1arr[idx] && dn2arr[idx]; idx++ ) {
|
||||
|
||||
if ( strcasecmp( dn1arr[idx], dn2arr[idx] )) {
|
||||
|
||||
domatch = FALSE;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* what was the result */
|
||||
|
||||
if ( !domatch ) {
|
||||
|
||||
if ( matched ) {
|
||||
char buf[BUFSIZ];
|
||||
char buf2[BUFSIZ];
|
||||
int idx2;
|
||||
|
||||
*buf = '\0';
|
||||
|
||||
for ( idx2 = 0; idx2 < idx; idx2++ ) {
|
||||
|
||||
strcpy( buf2, buf );
|
||||
sprintf( buf, "%s,%s", dn1arr[idx2], buf2 );
|
||||
|
||||
}
|
||||
trimright( buf, "," );
|
||||
|
||||
*matched = strdup( buf );
|
||||
|
||||
}
|
||||
|
||||
result = DN_UNMATCHED;
|
||||
|
||||
} else if ( dn1arr[idx] ) result = DN_GREATER;
|
||||
else if ( dn2arr[idx] ) result = DN_LESS;
|
||||
|
||||
charray_free( dn1arr ); charray_free( dn2arr );
|
||||
|
||||
return( result );
|
||||
|
||||
} /* dn_cmp_parts */
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Comparison of substring lists
|
||||
*/
|
||||
|
||||
PUBLIC int strlstcmp (s1, s2, sep)
|
||||
char *s1, *s2;
|
||||
char sep;
|
||||
{
|
||||
int retCode = FALSE;
|
||||
char *target;
|
||||
char *source;
|
||||
char *idx, *idx2;
|
||||
char tmpChar;
|
||||
|
||||
if ( !s1 || !s2 )
|
||||
return( FALSE );
|
||||
|
||||
target = str_tolower (strdup (s1));
|
||||
source = str_tolower (strdup (s2));
|
||||
idx = source;
|
||||
|
||||
while (idx && (idx2 = strchr (idx+1, sep))) {
|
||||
|
||||
tmpChar = *(++idx2); *idx2 = '\0';
|
||||
if (strstr (target, idx)) {
|
||||
|
||||
retCode = TRUE;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
*(idx2) = tmpChar;
|
||||
idx = --idx2;
|
||||
|
||||
}
|
||||
|
||||
free (source);
|
||||
free (target);
|
||||
return (retCode);
|
||||
|
||||
}
|
||||
/* end of function: strlstcmp */
|
||||
|
||||
PUBLIC char *hex_html_encode(string, flag)
|
||||
char *string;
|
||||
int flag; /* 0->hex 1->html */
|
||||
{
|
||||
static char strbuf[10*BUFSIZ];
|
||||
char *strptr;
|
||||
|
||||
*strbuf = '\0';
|
||||
for(strptr = string; *strptr; strptr++){
|
||||
/* 200 a -> ä fuer aouAOU */
|
||||
if((flag==1) && (((int)*strptr&255)==200)) {
|
||||
if(strchr("aouAOU", *(strptr+1))) {
|
||||
sprintf(strbuf, "%s&%cuml;", strbuf, *++strptr);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* &#xxx; Handling-Patch */
|
||||
if((flag==1) && (((int)*strptr&255)>=160)) {
|
||||
sprintf(strbuf, "%s&#%d;", strbuf, ((int)*strptr&255));
|
||||
continue;
|
||||
}
|
||||
/* end Patch */
|
||||
|
||||
if(!encoding_tbl[(int)*strptr&255][flag]) {
|
||||
sprintf(strbuf, "%s%c", strbuf, *strptr);
|
||||
} else {
|
||||
strcat(strbuf, encoding_tbl[(int)*strptr&255][flag]);
|
||||
}
|
||||
}
|
||||
return(strbuf);
|
||||
}
|
||||
/* end of function: hex_html_encode */
|
||||
|
||||
/* Strips basecount+1 characters of type target at the end of an RDN */
|
||||
PUBLIC char *dnrcut(rdn, target, basecount)
|
||||
char *rdn;
|
||||
char *target;
|
||||
int basecount;
|
||||
{
|
||||
static char buf[BUFSIZ];
|
||||
char *strptr;
|
||||
int rdncount, morecount;
|
||||
|
||||
rdncount = chrcnt(rdn, target);
|
||||
if( (morecount = (rdncount - basecount)) > 0) {
|
||||
strcpy(buf, rdn);
|
||||
strptr = buf-1;
|
||||
while(morecount--) {
|
||||
strptr = strpbrk(strptr+1, target);
|
||||
}
|
||||
*strptr = '\0';
|
||||
} else *buf = '\0';
|
||||
return(buf);
|
||||
}
|
||||
/* end of function: dnrcut */
|
||||
|
||||
PUBLIC char **dn2charray(dn)
|
||||
char *dn;
|
||||
{
|
||||
char *dnbuf, *strptr, **a=NULL;
|
||||
|
||||
if ( !dn || !*dn ) {
|
||||
|
||||
a = (char **) ch_calloc( 1, sizeof( char ** ));
|
||||
return( a );
|
||||
|
||||
}
|
||||
|
||||
dnbuf = strdup(dn);
|
||||
do {
|
||||
strptr = strrQuoteChr(dnbuf, ',');
|
||||
if(strptr) {
|
||||
*strptr++ = '\0';
|
||||
/*
|
||||
while(*strptr == ' ')
|
||||
strptr++;
|
||||
*/
|
||||
strptr = trim( strptr, " " );
|
||||
}
|
||||
charray_add( &a, strptr ? strptr : trim( dnbuf, " " ));
|
||||
} while(strptr);
|
||||
free(dnbuf);
|
||||
return(a);
|
||||
}
|
||||
/* end of function: dn2charray */
|
||||
|
||||
|
||||
/* get the parent DN for a given one */
|
||||
PUBLIC char *
|
||||
get_parentDN( dn )
|
||||
char *dn;
|
||||
{
|
||||
char **a = NULL;
|
||||
char tmp[BUFSIZ];
|
||||
|
||||
a = dn2charray( dn );
|
||||
*tmp = *(tmp + 1) = '\0';
|
||||
|
||||
if ( a ) {
|
||||
char **rdnH;
|
||||
|
||||
/* we have to re-build the DN beginning at the last array element */
|
||||
for ( rdnH = a; *rdnH; rdnH++ )
|
||||
;
|
||||
|
||||
/* re-build DN from it's parts */
|
||||
rdnH--; rdnH--;
|
||||
for ( ; rdnH >= a; rdnH-- ) {
|
||||
|
||||
sprintf( tmp, "%s,%s", tmp, *rdnH );
|
||||
|
||||
}
|
||||
|
||||
charray_free( a );
|
||||
|
||||
}
|
||||
|
||||
/* ignore a leading ',' */
|
||||
return( strdup( tmp + 1 ));
|
||||
|
||||
} /* get_parentDN */
|
||||
|
||||
|
||||
PUBLIC char *elapsed(firsttime, secondtime)
|
||||
struct timeval firsttime;
|
||||
struct timeval secondtime;
|
||||
{
|
||||
long int elapsedmicrosec, elapsedsec;
|
||||
char elapsed_string[BUFSIZ];
|
||||
|
||||
elapsedsec = secondtime.tv_sec - firsttime.tv_sec;
|
||||
elapsedmicrosec = secondtime.tv_usec - firsttime.tv_usec;
|
||||
if(elapsedmicrosec < 0) {
|
||||
elapsedmicrosec += 1000000;
|
||||
elapsedsec -= 1;
|
||||
}
|
||||
if(elapsedsec > 1000){
|
||||
elapsedsec = 0;
|
||||
elapsedmicrosec = 0;
|
||||
}
|
||||
sprintf(elapsed_string, "%ld.%.6ld", elapsedsec, elapsedmicrosec);
|
||||
return(strdup(elapsed_string));
|
||||
}
|
||||
/* end of function: elapsed */
|
||||
|
||||
|
||||
/* performance-log on exit */
|
||||
PUBLIC int exit_tweb(rc)
|
||||
int rc;
|
||||
{
|
||||
struct timeval secondtime;
|
||||
|
||||
gettimeofday(&secondtime, NULL);
|
||||
if(!secondtime.tv_sec || !timestore[0].tv_sec) exit(rc);
|
||||
|
||||
if (dosyslog)
|
||||
syslog (LOG_INFO, "performance: %s#%s#%s#%s#%s#%s#%d seconds <%08d>",
|
||||
elapsed(timestore[0], secondtime), elapsed(timestore[0],
|
||||
timestore[1]), elapsed(timestore[1], timestore[2]),
|
||||
elapsed(timestore[2], timestore[3]),
|
||||
elapsed(timestore[3], items_displayed ? timestore[4] : secondtime),
|
||||
items_displayed ? elapsed(timestore[4], secondtime) : "",
|
||||
items_displayed, globP->svc_cnt);
|
||||
exit(rc);
|
||||
}
|
||||
/* end of function: exit_tweb */
|
||||
|
@ -1,300 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* support.h.. *
|
||||
* *
|
||||
* Function:..WorldWideWeb-X.500-Gateway - Support-Functions *
|
||||
* Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
|
||||
* which is based on go500gw by Tim Howes, University of *
|
||||
* Michigan - All rights reserved *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* August 16 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* September 7 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: support.h,v 1.6 1999/09/10 15:01:20 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SUPPORT_
|
||||
#define _SUPPORT_
|
||||
|
||||
#include "support_exp.h"
|
||||
#include "charray_exp.h"
|
||||
#include "ch_malloc_exp.h"
|
||||
|
||||
|
||||
/* Array for translation */
|
||||
/* 0: HEX; 1: uml (not used); 2: flatten */
|
||||
|
||||
char *encoding_tbl[257][3] = {
|
||||
/* 0 \0 */ { "%00" , "", NULL },
|
||||
/* 1 */ { "%01" , "", NULL },
|
||||
/* 2 */ { "%02" , "", NULL },
|
||||
/* 3 */ { "%03" , "", NULL },
|
||||
/* 4 */ { "%04" , "", NULL },
|
||||
/* 5 */ { "%05" , "", NULL },
|
||||
/* 6 */ { "%06" , "", NULL },
|
||||
/* 7 */ { "%07" , "", NULL },
|
||||
/* 8 */ { "%08" , "", NULL },
|
||||
/* 9 \t */ { "%09" , " ", NULL },
|
||||
/* 10 \n */ { "%0a" , "\n", NULL },
|
||||
/* 11 */ { "%0b" , "", NULL },
|
||||
/* 12 */ { "%0c" , "", NULL },
|
||||
/* 13
*/ { "%0d" , "
", NULL },
|
||||
/* 14 */ { "%0e" , "", NULL },
|
||||
/* 15 */ { "%0f" , "", NULL },
|
||||
/* 16 */ { "%10" , "", NULL },
|
||||
/* 17 */ { "%11" , "", NULL },
|
||||
/* 18 */ { "%12" , "", NULL },
|
||||
/* 19 */ { "%13" , "", NULL },
|
||||
/* 20 */ { "%14" , "", NULL },
|
||||
/* 21 */ { "%15" , "", NULL },
|
||||
/* 22 */ { "%16" , "", NULL },
|
||||
/* 23 */ { "%17" , "", NULL },
|
||||
/* 24 */ { "%18" , "", NULL },
|
||||
/* 25 */ { "%19" , "", NULL },
|
||||
/* 26 */ { "%1a" , "", NULL },
|
||||
/* 27 */ { "%1b" , "", NULL },
|
||||
/* 28 */ { "%1c" , "", NULL },
|
||||
/* 29 */ { "%1d" , "", NULL },
|
||||
/* 30 */ { "%1e" , "", NULL },
|
||||
/* 31 */ { "%1f" , "", NULL },
|
||||
/* 32 */ { "%20" , " ", NULL },
|
||||
/* 33 ! */ { "%21" , "!", NULL },
|
||||
/* 34 " */ { "%22" , """, NULL },
|
||||
/* 35 # */ { "%23" , "#", NULL },
|
||||
/* 36 $ */ { NULL, NULL, NULL },
|
||||
/* 37 % */ { "%25" , "%", NULL },
|
||||
/* 38 & */ { "%26" , "&", NULL },
|
||||
/* 39 ' */ { "%27" , "'", NULL },
|
||||
/* 40 ( */ { "%28" , "(", NULL },
|
||||
/* 41 ) */ { "%29" , ")", NULL },
|
||||
/* 42 * */ { "%2a" , "*", NULL },
|
||||
/* 43 + */ { "%2b" , "+", NULL },
|
||||
/* 44 , */ { "%2c" , ",", NULL },
|
||||
/* 45 - */ { NULL, NULL, NULL },
|
||||
/* 46 . */ { NULL, NULL, NULL },
|
||||
/* 47 / */ { "%2f" , "/", NULL },
|
||||
/* 48 0 */ { NULL, NULL, NULL },
|
||||
/* 49 1 */ { NULL, NULL, NULL },
|
||||
/* 50 2 */ { NULL, NULL, NULL },
|
||||
/* 51 3 */ { NULL, NULL, NULL },
|
||||
/* 52 4 */ { NULL, NULL, NULL },
|
||||
/* 53 5 */ { NULL, NULL, NULL },
|
||||
/* 54 6 */ { NULL, NULL, NULL },
|
||||
/* 55 7 */ { NULL, NULL, NULL },
|
||||
/* 56 8 */ { NULL, NULL, NULL },
|
||||
/* 57 9 */ { NULL, NULL, NULL },
|
||||
/* 58 : */ { "%3a" , ":", NULL },
|
||||
/* 59 ; */ { "%3b" , ";", NULL },
|
||||
/* 60 < */ { "%3c" , "<", NULL },
|
||||
/* 61 = */ { "%3d" , "=", NULL },
|
||||
/* 62 > */ { "%3e" , ">", NULL },
|
||||
/* 63 ? */ { "%3f" , "?", NULL },
|
||||
/* 64 @ */ { "%40" , "@", NULL },
|
||||
/* 65 A */ { NULL, NULL, NULL },
|
||||
/* 66 B */ { NULL, NULL, NULL },
|
||||
/* 67 C */ { NULL, NULL, NULL },
|
||||
/* 68 D */ { NULL, NULL, NULL },
|
||||
/* 69 E */ { NULL, NULL, NULL },
|
||||
/* 70 F */ { NULL, NULL, NULL },
|
||||
/* 71 G */ { NULL, NULL, NULL },
|
||||
/* 72 H */ { NULL, NULL, NULL },
|
||||
/* 73 I */ { NULL, NULL, NULL },
|
||||
/* 74 J */ { NULL, NULL, NULL },
|
||||
/* 75 K */ { NULL, NULL, NULL },
|
||||
/* 76 L */ { NULL, NULL, NULL },
|
||||
/* 77 M */ { NULL, NULL, NULL },
|
||||
/* 78 N */ { NULL, NULL, NULL },
|
||||
/* 79 O */ { NULL, NULL, NULL },
|
||||
/* 80 P */ { NULL, NULL, NULL },
|
||||
/* 81 Q */ { NULL, NULL, NULL },
|
||||
/* 82 R */ { NULL, NULL, NULL },
|
||||
/* 83 S */ { NULL, NULL, NULL },
|
||||
/* 84 T */ { NULL, NULL, NULL },
|
||||
/* 85 U */ { NULL, NULL, NULL },
|
||||
/* 86 V */ { NULL, NULL, NULL },
|
||||
/* 87 W */ { NULL, NULL, NULL },
|
||||
/* 88 X */ { NULL, NULL, NULL },
|
||||
/* 89 Y */ { NULL, NULL, NULL },
|
||||
/* 90 Z */ { NULL, NULL, NULL },
|
||||
/* 91 [ */ { "%5b" , "[", NULL },
|
||||
/* 92 \ */ { "%5c" , "\\", NULL },
|
||||
/* 93 ] */ { "%5d" , "]", NULL },
|
||||
/* 94 ^ */ { "%5e" , "^", NULL },
|
||||
/* 95 _ */ { NULL, NULL, NULL },
|
||||
/* 96 ` */ { "%60" , "`", NULL },
|
||||
/* 97 a */ { NULL, NULL, NULL },
|
||||
/* 98 b */ { NULL, NULL, NULL },
|
||||
/* 99 c */ { NULL, NULL, NULL },
|
||||
/* 100 d */ { NULL, NULL, NULL },
|
||||
/* 101 e */ { NULL, NULL, NULL },
|
||||
/* 102 f */ { NULL, NULL, NULL },
|
||||
/* 103 g */ { NULL, NULL, NULL },
|
||||
/* 104 h */ { NULL, NULL, NULL },
|
||||
/* 105 i */ { NULL, NULL, NULL },
|
||||
/* 106 j */ { NULL, NULL, NULL },
|
||||
/* 107 k */ { NULL, NULL, NULL },
|
||||
/* 108 l */ { NULL, NULL, NULL },
|
||||
/* 109 m */ { NULL, NULL, NULL },
|
||||
/* 110 n */ { NULL, NULL, NULL },
|
||||
/* 111 o */ { NULL, NULL, NULL },
|
||||
/* 112 p */ { NULL, NULL, NULL },
|
||||
/* 113 q */ { NULL, NULL, NULL },
|
||||
/* 114 r */ { NULL, NULL, NULL },
|
||||
/* 115 s */ { NULL, NULL, NULL },
|
||||
/* 116 t */ { NULL, NULL, NULL },
|
||||
/* 117 u */ { NULL, NULL, NULL },
|
||||
/* 118 v */ { NULL, NULL, NULL },
|
||||
/* 119 w */ { NULL, NULL, NULL },
|
||||
/* 120 x */ { NULL, NULL, NULL },
|
||||
/* 121 y */ { NULL, NULL, NULL },
|
||||
/* 122 z */ { NULL, NULL, NULL },
|
||||
/* 123 { */ { "%7b" , "{", NULL },
|
||||
/* 124 | */ { "%7c" , "|", NULL },
|
||||
/* 125 } */ { "%7d" , "}", NULL },
|
||||
/* 126 ~ */ { "%7e" , "~", NULL },
|
||||
/* 127 */ { "%7f" , "", NULL },
|
||||
/* 128 € */ { "%80" , "€", NULL },
|
||||
/* 129 <20> */ { "%81" , "<EFBFBD>", NULL },
|
||||
/* 130 ‚ */ { "%82" , "‚", NULL },
|
||||
/* 131 ƒ */ { "%83" , "ƒ", NULL },
|
||||
/* 132 „ */ { "%84" , "„", NULL },
|
||||
/* 133 … */ { "%85" , "…", NULL },
|
||||
/* 134 † */ { "%86" , "†", NULL },
|
||||
/* 135 ‡ */ { "%87" , "‡", NULL },
|
||||
/* 136 ˆ */ { "%88" , "ˆ", NULL },
|
||||
/* 137 ‰ */ { "%89" , "‰", NULL },
|
||||
/* 138 Š */ { "%8a" , "Š", NULL },
|
||||
/* 139 ‹ */ { "%8b" , "‹", NULL },
|
||||
/* 140 Œ */ { "%8c" , "Œ", NULL },
|
||||
/* 141 <20> */ { "%8d" , "<EFBFBD>", NULL },
|
||||
/* 142 Ž */ { "%8e" , "Ž", NULL },
|
||||
/* 143 <20> */ { "%8f" , "<EFBFBD>", NULL },
|
||||
/* 144 <20> */ { "%90" , "<EFBFBD>", NULL },
|
||||
/* 145 ‘ */ { "%91" , "‘", NULL },
|
||||
/* 146 ’ */ { "%92" , "’", NULL },
|
||||
/* 147 “ */ { "%93" , "“", NULL },
|
||||
/* 148 ” */ { "%94" , "”", NULL },
|
||||
/* 149 • */ { "%95" , "•", NULL },
|
||||
/* 150 – */ { "%96" , "–", NULL },
|
||||
/* 151 — */ { "%97" , "—", NULL },
|
||||
/* 152 ˜ */ { "%98" , "˜", NULL },
|
||||
/* 153 ™ */ { "%99" , "™", NULL },
|
||||
/* 154 š */ { "%9a" , "š", NULL },
|
||||
/* 155 › */ { "%9b" , "›", NULL },
|
||||
/* 156 œ */ { "%9c" , "œ", NULL },
|
||||
/* 157 <20> */ { "%9d" , "<EFBFBD>", NULL },
|
||||
/* 158 ž */ { "%9e" , "ž", NULL },
|
||||
/* 159 Ÿ */ { "%9f" , "Ÿ", NULL },
|
||||
/* 160 */ { "%a0" , "", NULL },
|
||||
/* 161 */ { "%a1" , "", NULL },
|
||||
/* 162 */ { "%a2" , "", NULL },
|
||||
/* 163 */ { "%a3" , "", NULL },
|
||||
/* 164 */ { "%a4" , "", NULL },
|
||||
/* 165 */ { "%a5" , "", NULL },
|
||||
/* 166 */ { "%a6" , "", NULL },
|
||||
/* 167 */ { "%a7" , "", NULL },
|
||||
/* 168 */ { "%a8" , "", NULL },
|
||||
/* 169 */ { "%a9" , "", NULL },
|
||||
/* 170 */ { "%aa" , "", NULL },
|
||||
/* 171 */ { "%ab" , "", NULL },
|
||||
/* 172 */ { "%ac" , "", NULL },
|
||||
/* 173 */ { "%ad" , "", NULL },
|
||||
/* 174 */ { "%ae" , "", NULL },
|
||||
/* 175 */ { "%af" , "", NULL },
|
||||
/* 176 */ { "%b0" , "", NULL },
|
||||
/* 177 */ { "%b1" , "", NULL },
|
||||
/* 178 */ { "%b2" , "", NULL },
|
||||
/* 179 */ { "%b3" , "", NULL },
|
||||
/* 180 */ { "%b4" , "", NULL },
|
||||
/* 181 */ { "%b5" , "", NULL },
|
||||
/* 182 */ { "%b6" , "", NULL },
|
||||
/* 183 */ { "%b7" , "", NULL },
|
||||
/* 184 */ { "%b8" , "", NULL },
|
||||
/* 185 */ { "%b9" , "", NULL },
|
||||
/* 186 */ { "%ba" , "", NULL },
|
||||
/* 187 */ { "%bb" , "", NULL },
|
||||
/* 188 */ { "%bc" , "", NULL },
|
||||
/* 189 */ { "%bd" , "", NULL },
|
||||
/* 190 */ { "%be" , "", NULL },
|
||||
/* 191 */ { "%bf" , "", NULL },
|
||||
/* 192 */ { "%c0" , "À", "A" },
|
||||
/* 193 */ { "%c1" , "Á", "A" },
|
||||
/* 194 */ { "%c2" , "Â", "A" },
|
||||
/* 195 */ { "%c3" , "Ã", "A" },
|
||||
/* 196 */ { "%c4" , "Ä", "Ae" },
|
||||
/* 197 */ { "%c5" , "Å", "A" },
|
||||
/* 198 */ { "%c6" , "Æ", "AE" },
|
||||
/* 199 */ { "%c7" , "Ç", "C" },
|
||||
/* 200 */ { "%c8" , "È", "E" },
|
||||
/* 201 */ { "%c9" , "É", "E" },
|
||||
/* 202 */ { "%ca" , "Ê", "E" },
|
||||
/* 203 */ { "%cb" , "Ë", "E" },
|
||||
/* 204 */ { "%cc" , "Ì", "I" },
|
||||
/* 205 */ { "%cd" , "Í", "I" },
|
||||
/* 206 */ { "%ce" , "Î", "I" },
|
||||
/* 207 */ { "%cf" , "Ï", "I" },
|
||||
/* 208 */ { "%d0" , "Ð", "Eth" },
|
||||
/* 209 */ { "%d1" , "Ñ", "N" },
|
||||
/* 210 */ { "%d2" , "Ò", "O" },
|
||||
/* 211 */ { "%d3" , "Ó", "O" },
|
||||
/* 212 */ { "%d4" , "Ô", "O" },
|
||||
/* 213 */ { "%d5" , "Õ", "O" },
|
||||
/* 214 */ { "%d6" , "Ö", "Oe" },
|
||||
/* 215 */ { "%d7" , "x", "x" },
|
||||
/* 216 */ { "%d8" , "Ø", "O" },
|
||||
/* 217 */ { "%d9" , "Ù", "U" },
|
||||
/* 218 */ { "%da" , "Ú", "U" },
|
||||
/* 219 */ { "%db" , "Û", "U" },
|
||||
/* 220 */ { "%dc" , "Ü", "Ue" },
|
||||
/* 221 */ { "%dd" , "Ý", "Y" },
|
||||
/* 222 */ { "%de" , "Þ", NULL },
|
||||
/* 223 */ { "%df" , "ß", "ss" },
|
||||
/* 224 */ { "%e0" , "à", "a" },
|
||||
/* 225 */ { "%e1" , "á", "a" },
|
||||
/* 226 */ { "%e2" , "â", "a" },
|
||||
/* 227 */ { "%e3" , "ã", "a" },
|
||||
/* 228 */ { "%e4" , "ä", "ae" },
|
||||
/* 229 */ { "%e5" , "å", "a" },
|
||||
/* 230 */ { "%e6" , "æ", "ae" },
|
||||
/* 231 */ { "%e7" , "ç", "c" },
|
||||
/* 232 */ { "%e8" , "è", "e" },
|
||||
/* 233 */ { "%e9" , "é", "e" },
|
||||
/* 234 */ { "%ea" , "ê", "e" },
|
||||
/* 235 */ { "%eb" , "ë", "e" },
|
||||
/* 236 */ { "%ec" , "ì", "i" },
|
||||
/* 237 */ { "%ed" , "í", "i" },
|
||||
/* 238 */ { "%ee" , "î", "i" },
|
||||
/* 239 */ { "%ef" , "ï", "i" },
|
||||
/* 240 */ { "%f0" , "ð", "eth" },
|
||||
/* 241 */ { "%f1" , "ñ", "n" },
|
||||
/* 242 */ { "%f2" , "ò", "o" },
|
||||
/* 243 */ { "%f3" , "ó", "o" },
|
||||
/* 244 */ { "%f4" , "ô", "o" },
|
||||
/* 245 */ { "%f5" , "õ", "o" },
|
||||
/* 246 */ { "%f6" , "ö", "oe" },
|
||||
/* 247 */ { "%f7" , "/", "/" },
|
||||
/* 248 */ { "%f8" , "ø", "o" },
|
||||
/* 249 */ { "%f9" , "ù", "u" },
|
||||
/* 250 */ { "%fa" , "ú", "u" },
|
||||
/* 251 */ { "%fb" , "û", "u" },
|
||||
/* 252 */ { "%fc" , "ü", "ue" },
|
||||
/* 253 */ { "%fd" , "ý", "y" },
|
||||
/* 254 */ { "%fe" , "þ", NULL },
|
||||
/* 255 */ { "%ff" , "ÿ", "y" },
|
||||
/* 256 EOF*/ { NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
#endif /* _SUPPORT_ */
|
||||
|
||||
|
@ -1,68 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* support_exp.h *
|
||||
* *
|
||||
* Function:..WorldWideWeb-X.500-Gateway - Supporting Routines *
|
||||
* Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
|
||||
* which is based on go500gw by Tim Howes, University of *
|
||||
* Michigan - All rights reserved *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* December 2 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* September 7 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: support_exp.h,v 1.6 1999/09/10 15:01:20 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SUPPORT_EXP_H_
|
||||
#define _SUPPORT_EXP_H_
|
||||
|
||||
PUBLIC char * hex_decode ();
|
||||
PUBLIC char * hex_qdecode ();
|
||||
PUBLIC char * form_encode ();
|
||||
|
||||
PUBLIC char * format_date ();
|
||||
PUBLIC char * friendly_dn ();
|
||||
PUBLIC char * format_time ();
|
||||
PUBLIC char * strQuoteChr();
|
||||
PUBLIC int strlstcmp (/* char *s1, char *s2, char sep */);
|
||||
PUBLIC void re_fail ();
|
||||
PUBLIC char *dnrcut(/*rdn, target, basecount*/);
|
||||
PUBLIC void disp_file (/* GLOB_STRUCT glob, char *filename, FILE *fp */);
|
||||
|
||||
PUBLIC char *elapsed();
|
||||
|
||||
PUBLIC char *hex_html_encode();
|
||||
|
||||
#define hex_encode(x) hex_html_encode((x), 0)
|
||||
#define char2html(x) hex_html_encode((x), 1)
|
||||
#define flatten_chars(x) hex_html_encode((x), 2)
|
||||
|
||||
PUBLIC char * get_parentDN();
|
||||
PUBLIC char **dn2charray();
|
||||
PUBLIC char * strrQuoteChr();
|
||||
PUBLIC int exit_tweb();
|
||||
|
||||
|
||||
/* dn_cmp and return codes */
|
||||
PUBLIC int dn_cmp( /* dn1, dn2 */ );
|
||||
PUBLIC int dn_cmp_parts( /* dn1, dn2, &matched */ );
|
||||
#define DN_EQUAL 0 /* dns are exactly equal */
|
||||
#define DN_LESS -1 /* dn1 is part of dn2 */
|
||||
#define DN_GREATER 1 /* dn2 is part of dn1 */
|
||||
#define DN_UNMATCHED -2 /* dns differ, matched is the same */
|
||||
/* (matched as seen from c down) */
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -1,264 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* tgeneral.h. *
|
||||
* *
|
||||
* Function:..General-Headerfile for TWEB *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* August 16 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* September 13 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: tgeneral.h,v 1.8 1999/09/13 13:47:47 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _TGENERAL_
|
||||
#define _TGENERAL_
|
||||
|
||||
#define PUBLIC
|
||||
#define PRIVATE static
|
||||
|
||||
/* For changes see file CHANGES */
|
||||
#ifdef __hpux
|
||||
#define _INCLUDE_POSIX_SOURCE
|
||||
#define _INCLUDE_XOPEN_SOURCE
|
||||
#define _INCLUDE_HPUX_SOURCE
|
||||
#define TIOCNOTTY _IO('t', 113)
|
||||
#define getdtablesize() _NFILE
|
||||
#endif
|
||||
|
||||
#if defined( __linux__ ) && !defined( _BSD_SOURCE )
|
||||
#define _BSD_SOURCE
|
||||
#define _SVID_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#define _POSIX_SOURCE
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
#include "lber.h"
|
||||
#include "ldap.h"
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <syslog.h>
|
||||
#include <sys/wait.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* Support of LDAP API versions */
|
||||
#if LDAP_API_VERSION >= 2003 && LDAP_API_VERSION <= 2010
|
||||
#define OL_LDAPV 3
|
||||
#else
|
||||
# if LDAP_API_VERSION >= 2001 && LDAP_API_VERSION <= 2010
|
||||
# define OL_LDAPV 2
|
||||
# else
|
||||
# define OL_LDAPV 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
# define ldap_debug debug
|
||||
|
||||
#if OL_LDAPV > 2
|
||||
# include "portable.h"
|
||||
# include "ldap_log.h"
|
||||
#endif
|
||||
|
||||
extern int errno;
|
||||
|
||||
|
||||
#include "strng_exp.h"
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
#define OK 1
|
||||
#define NOTOK 0
|
||||
#define DONE -1
|
||||
#define _TIMEOUT_LEN 31
|
||||
#define _LOG_TIME "%a, %d.%m.%y, %H:%M:%S"
|
||||
|
||||
#include "init_exp.h"
|
||||
extern GLOB_STRUCT *globP;
|
||||
|
||||
/*
|
||||
***************************************************************************
|
||||
* If you are not a University of Tuebingen site,
|
||||
* you probably want to tailor the following:
|
||||
***************************************************************************
|
||||
*/
|
||||
|
||||
/* Special code for DFN-Project AMBIX-D */
|
||||
#ifdef AMBIXGW
|
||||
|
||||
# define SELBST_CN glob->selbsteintrag[0]
|
||||
# define SELBST_CN_NAME glob->selbsteintrag[1]
|
||||
# define SELBST_STUDIE_ATTR glob->selbsteintrag[2]
|
||||
# define SELBST_INSERT_MODE glob->selbsteintrag[3]
|
||||
# define SELBST_INSERT_WHO glob->selbsteintrag[4]
|
||||
# define SELBST_INSERT_NO glob->selbsteintrag[5]
|
||||
# define SELBST_INSERT_WORK glob->selbsteintrag[6]
|
||||
# define SELBST_INSERT_ALL glob->selbsteintrag[7]
|
||||
# define SELBST_INSERT_STUD glob->selbsteintrag[8]
|
||||
|
||||
# define MAXDN_LEN 2048
|
||||
|
||||
extern void self_insert();
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Flags for print_attr */
|
||||
#define DEFAULT 0
|
||||
#define MULTILINE 1
|
||||
#define HREF 2
|
||||
#define FINGER 3
|
||||
#define DATE 4
|
||||
#define URL 5
|
||||
#define MAILTO 6
|
||||
#define MOVETO 7
|
||||
#define BMP 8
|
||||
#define JPEG 9
|
||||
#define JPEG2GIF 10
|
||||
#define BOOLEAN 11
|
||||
#define URI 12
|
||||
#define PGPKEY 13
|
||||
#define INDEXURL 14
|
||||
#define DYNAMICDN 15
|
||||
#define REFERRAL 20
|
||||
#define PRE 21
|
||||
#define HEADER 22
|
||||
|
||||
#ifdef TUE_TEL
|
||||
#define PHONREFSHORT 16
|
||||
#define PHONREFLONG 17
|
||||
#define TFUNCPERS 18
|
||||
#define FAXTABLE 19
|
||||
#endif
|
||||
|
||||
|
||||
/* Patch for hpux from ksp: */
|
||||
#ifdef __hpux
|
||||
# define rewind(a) fflush(a)
|
||||
#endif
|
||||
|
||||
#define G3TOXBM "cat"
|
||||
#define JPEGTOGIF "/soft/bin/djpeg -gif"
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* The rest of this stuff probably does not need to be changed
|
||||
*************************************************************************
|
||||
*/
|
||||
|
||||
#define TIMEOUT 240
|
||||
#define WEB500PORT 8889
|
||||
|
||||
#ifndef FD_SET
|
||||
#define NFDBITS 32
|
||||
#define FD_SETSIZE 32
|
||||
#define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
|
||||
#define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
|
||||
#define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
|
||||
#define FD_ZERO(p) bzero((char *)(p), sizeof(*(p)))
|
||||
#endif
|
||||
|
||||
#define from_hex(c) ((c>='0')&&(c<='9') ? c-'0' : (c>='A')&&(c<='F') ?\
|
||||
c-'A'+10 : (c>='a')&&(c<='f') ? c-'a'+10 : 0)
|
||||
|
||||
/*
|
||||
* HTTP request we are implementing
|
||||
*/
|
||||
|
||||
#define UNKNOWN 0
|
||||
#define GET 1
|
||||
#define HEAD 2
|
||||
|
||||
/*
|
||||
* HTTP response status
|
||||
*/
|
||||
#define DOCUMENT_FOLLOWS 200
|
||||
#define REDIRECT 302
|
||||
#define BAD_REQUEST 400
|
||||
#define AUTH_REQUIRED 401
|
||||
#define FORBIDDEN 403
|
||||
#define NOT_FOUND 404
|
||||
#define SERVER_ERROR 500
|
||||
#define NOT_IMPLEMENTED 501
|
||||
|
||||
#define PRINT_HTML_HEADER (fprintf(fp, \
|
||||
"HTTP/1.0 %d Document follows\n\
|
||||
MIME-Version: 1.0\n\
|
||||
Server: %s\n\
|
||||
Date: %s\n\
|
||||
Content-Type: text/html\n\
|
||||
Last-Modified: %s\n\
|
||||
%s\n",\
|
||||
DOCUMENT_FOLLOWS, version, glob->nowtimestr, glob->nowtimestr,\
|
||||
glob->caching ? glob->expiretimestr : "Pragma: no-cache\n" ))
|
||||
|
||||
#define PRINT_PLAIN_HEADER (fprintf(fp, \
|
||||
"HTTP/1.0 %d Document follows\n\
|
||||
MIME-Version: 1.0\n\
|
||||
Server: %s\n\
|
||||
Date: %s\n\
|
||||
Content-Type: text/plain\n\
|
||||
Last-Modified: %s\n\
|
||||
%s\n",\
|
||||
DOCUMENT_FOLLOWS, version, glob->nowtimestr, glob->nowtimestr,\
|
||||
glob->caching ? glob->expiretimestr : "Pragma: no-cache\n" ))
|
||||
|
||||
#define PRINT_REDIRECT_HEADER (fprintf(fp, \
|
||||
"HTTP/1.0 302 Found\n\
|
||||
MIME-Version: 1.0\n\
|
||||
Server: %s\n\
|
||||
Date: %s\n\
|
||||
Location: %s\n\
|
||||
Content-Type: text/html\n\
|
||||
Last-Modified: %s\n\
|
||||
%s\n",\
|
||||
version, glob->nowtimestr, query, glob->nowtimestr,\
|
||||
glob->caching ? glob->expiretimestr : "Pragma: no-cache\n" ))
|
||||
|
||||
#define HTML_HEAD_TITLE "<HTML><HEAD><TITLE>%s</TITLE></HEAD><%s>"
|
||||
|
||||
#define PRINT_HTML_FOOTER (fprintf(fp, "</BODY></HTML>"))
|
||||
|
||||
/* Meta-Syntax of Gateway-Switching feature */
|
||||
#define GWS "(gw)"
|
||||
#define GWS_FORMAT "(gw-%s)"
|
||||
|
||||
|
||||
#define OUT_TIME 900
|
||||
|
||||
/* Separator in UFNs */
|
||||
#define UFNSEP ","
|
||||
|
||||
#endif /* _TGENERAL_ */
|
||||
|
@ -1,65 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* tglobal.h.. *
|
||||
* *
|
||||
* Function:..Global variables for TWEB *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* August 16 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* September 13 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: tglobal.h,v 1.8 1999/09/13 13:47:47 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _TGLOBAL_
|
||||
#define _TGLOBAL_
|
||||
|
||||
#include "lber.h"
|
||||
#include "ldap.h"
|
||||
|
||||
|
||||
extern int debug;
|
||||
extern int dosyslog;
|
||||
extern int ldap_syslog;
|
||||
extern int ldap_syslog_level;
|
||||
|
||||
extern struct timeval timestore[];
|
||||
extern int items_displayed;
|
||||
|
||||
extern int searchaliases;
|
||||
|
||||
#if OL_LDAPV >= 2
|
||||
|
||||
extern LDAPFriendlyMap *fm;
|
||||
|
||||
#else
|
||||
|
||||
extern FriendlyMap *fm;
|
||||
|
||||
#endif
|
||||
|
||||
extern LDAPFiltDesc *filtd;
|
||||
|
||||
extern char version[];
|
||||
extern char copyright[];
|
||||
|
||||
extern int http; /* HTTP-header in request -> also in reply */
|
||||
|
||||
extern int request;
|
||||
|
||||
|
||||
#endif /* _TGLOBAL */
|
||||
|
||||
|
@ -1,179 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* tweb.c..... *
|
||||
* *
|
||||
* Function:..WorldWideWeb-X.500-Gateway MAIN-Routine *
|
||||
* Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
|
||||
* which is based on go500gw by Tim Howes, University of *
|
||||
* Michigan - All rights reserved *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* August 16 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* December 31 1996 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: tweb.c,v 1.6 1999/09/10 15:01:20 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* redesign BW 94/08/16
|
||||
* patched for HPUX 9.x by /KSp, 94/04/28
|
||||
* patched for AMBIX-D and use at University of Tuebingen by /KSp,
|
||||
* patched for always-assume-nonleaf-behaviour-and-reread-on-demand; /KSp
|
||||
* patched for restricted listing of Tuebinger students; /KSp
|
||||
* patched for mailto HREF in mail attribute; /KSp
|
||||
* patched for automatic referral to Chemnitz in case of ROOT access
|
||||
* (AMBIX version only); /KSp
|
||||
* patched for correct response in case of not found error; /MCl
|
||||
* neg patched: subtree search below locality removed; /KSp
|
||||
* patched for automatic referral to AMBIX in case of l=DFN access
|
||||
* (non-AMBIX version only); /KSp
|
||||
* patched for lower case compare during access control; /KSp
|
||||
* patched for menu-'seeAlso' in AMBIXGW; /KSp
|
||||
* patched for pgpPubKey formatting as MULTILINE; /KSP
|
||||
* correction of MULTILINE handling; /KSp
|
||||
* objectClass deleted from menu list entry in html-code; /KSp
|
||||
* patched for "Selbsteintrag" needed by AMBIX-Project /mc
|
||||
* last update: 95/07/07
|
||||
*
|
||||
* 95/07/17 changed to ANSI-C, deleted lots of compiletime-options. /mc
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms are permitted
|
||||
* provided that this notice is preserved and that due credit is given
|
||||
* to the University of Tuebingen. The name of the University
|
||||
* may not be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission. This software
|
||||
* is provided ``as is'' without express or implied warranty.
|
||||
*
|
||||
* ----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "tweb.h"
|
||||
|
||||
PUBLIC int main (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
|
||||
{
|
||||
/* The Glob-structure is NOT a global variable, but is stored here for
|
||||
all other functions !!! */
|
||||
GLOB_STRUCT glob;
|
||||
char lang[BUFSIZ];
|
||||
int pid, i;
|
||||
|
||||
/* make glob global available */
|
||||
globP = &glob;
|
||||
|
||||
/* first of all the language-parameter is scanned from the command-line
|
||||
and is written as first value to the Glob-structure */
|
||||
get_lang(argc, argv, lang);
|
||||
bzero((char *) &glob, sizeof(GLOB_STRUCT));
|
||||
glob.olang = strdup(lang);
|
||||
|
||||
/* Now start a process for each language and terminate the super-process */
|
||||
for(i=0; i<strlen(lang); i++){
|
||||
|
||||
/* memorize the sub-process-language */
|
||||
*glob.lang = lang[i];
|
||||
|
||||
switch( pid = fork() ) {
|
||||
|
||||
/* the Sub-Process */
|
||||
case 0:
|
||||
do_child(argc, argv,lang, &glob);
|
||||
break;
|
||||
|
||||
/* A Sub-Process could not be created !!! */
|
||||
case -1:
|
||||
perror( "fork" );
|
||||
break;
|
||||
|
||||
/* the Parent-Process */
|
||||
default:
|
||||
if ( debug )
|
||||
fprintf( stderr, "forked child %d\n", pid );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
/* end of function: main */
|
||||
|
||||
|
||||
/**
|
||||
** do_child()
|
||||
**
|
||||
** Main-Function for the working-processes; until now only the
|
||||
** language is initialized. The rest of the configuration
|
||||
** must be scanned now.
|
||||
**/
|
||||
|
||||
PRIVATE void do_child(argc, argv,lang, glob)
|
||||
int argc;
|
||||
char **argv;
|
||||
char *lang;
|
||||
GLOB_STRUCT *glob;
|
||||
|
||||
{
|
||||
FILE *fp = NULL;
|
||||
char filename[BUFSIZ];
|
||||
|
||||
/* read language-independent (.rc) and -dependent (.conf) configuration */
|
||||
init(argv, lang, glob);
|
||||
|
||||
/* read commandline-parameter (they overwrite conf) */
|
||||
getopts (argc, argv, glob);
|
||||
|
||||
/* If debug-Mode: Configuration Output */
|
||||
if (debug) {
|
||||
|
||||
sprintf(filename, "%s.debug", glob->myname);
|
||||
fp =fopen(filename, "a");
|
||||
fprintf(fp, "\n\n\n#####%s.%s-log Date: %s\n\n",
|
||||
glob->myname, glob->lang, format_time(NULL));
|
||||
output(fp, glob, FALSE);
|
||||
|
||||
}
|
||||
|
||||
/* read language-strings (from .lang) and write out if desired */
|
||||
langinit(glob);
|
||||
|
||||
if (debug) {
|
||||
|
||||
langoutput(fp, glob, FALSE);
|
||||
fclose(fp);
|
||||
|
||||
}
|
||||
|
||||
/* Final Configuration-Test */
|
||||
check(glob);
|
||||
|
||||
/* If dynamic Gateway-Switching is enabled the language-dependent
|
||||
recognition-string for the meta-Syntax must be fixed
|
||||
(language-independent recognition-string is given in Macro GWS ) */
|
||||
if(glob->gw_switch->dynamic) {
|
||||
char strbuf[BUFSIZ];
|
||||
|
||||
sprintf(strbuf, GWS_FORMAT, glob->la[0]);
|
||||
glob->gw_switch->lagws = strdup(strbuf);
|
||||
}
|
||||
|
||||
/* and now start the Gateway ... */
|
||||
start_server(glob);
|
||||
|
||||
}
|
||||
/* end of function: do_child */
|
||||
|
||||
|
@ -1,69 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* tweb.h..... *
|
||||
* *
|
||||
* Function:..Header-File for TWEB-SOFTWARE *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* August 16 1995 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* September 13 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: tweb.h,v 1.8 1999/09/13 13:47:47 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _TWEB_
|
||||
#define _TWEB_
|
||||
|
||||
|
||||
#include "tgeneral.h"
|
||||
#include "init_exp.h"
|
||||
#include "server_exp.h"
|
||||
#include "support_exp.h"
|
||||
|
||||
PRIVATE void do_child();
|
||||
int debug = 0;
|
||||
int ldap_syslog = 0;
|
||||
int ldap_syslog_level = 0;
|
||||
|
||||
int dosyslog = 0;
|
||||
|
||||
GLOB_STRUCT *globP;
|
||||
|
||||
int searchaliases = 1;
|
||||
|
||||
#if OL_LDAPV >= 2
|
||||
|
||||
LDAPFriendlyMap *fm = NULL;
|
||||
|
||||
#else
|
||||
|
||||
FriendlyMap *fm = NULL;
|
||||
|
||||
#endif
|
||||
|
||||
LDAPFiltDesc *filtd;
|
||||
|
||||
extern char version[];
|
||||
|
||||
int http = 1; /* HTTP Version ??? */
|
||||
|
||||
int request = UNKNOWN;
|
||||
|
||||
|
||||
|
||||
#endif /* _TWEB_ */
|
||||
|
||||
|
2168
contrib/tweb/x500.c
2168
contrib/tweb/x500.c
File diff suppressed because it is too large
Load Diff
@ -1,61 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* x500.h..... *
|
||||
* *
|
||||
* Function:..Header-File for TWEB-Software *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* February 13 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* February 18 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: x500.h,v 1.6 1999/09/10 15:01:21 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _X500_
|
||||
#define _X500_
|
||||
|
||||
#include "x500_exp.h"
|
||||
#include "charray_exp.h"
|
||||
#include "ch_malloc_exp.h"
|
||||
|
||||
typedef LDAPMessage *(*LFP)();
|
||||
|
||||
typedef struct _my_ldap_list {
|
||||
LDAPMessage *e;
|
||||
struct _my_ldap_list *next;
|
||||
} MY_LDAP_LIST, *pMY_LDAP_LIST;
|
||||
|
||||
pMY_LDAP_LIST mllroot = NULL;
|
||||
|
||||
PRIVATE int compare(/*a,b*/);
|
||||
PRIVATE char * pick_oc(/*oclist*/);
|
||||
PRIVATE int make_scope(/*ld, dn, glob*/);
|
||||
PRIVATE int no_show(/* rdn, glob*/);
|
||||
PRIVATE int sort_result(/*ld, res, dn, no_browse, glob*/);
|
||||
PRIVATE void list_output(/*fp, flag, glob*/);
|
||||
PRIVATE void make_la_buttons(/*sep, fp, dn, la_url, glob*/);
|
||||
PRIVATE void make_la_buttons_pull_down(/*sep, fp, dn, la_url, glob*/);
|
||||
PRIVATE void print_rdn(/*fp, dn, glob*/);
|
||||
PRIVATE void print_rdn_pull_down(/*fp, dn, glob*/);
|
||||
PRIVATE void make_search_box(/*fp, ld, dn, glob*/);
|
||||
PRIVATE LDAPMessage *my_first_entry();
|
||||
PRIVATE LDAPMessage *my_next_entry();
|
||||
PRIVATE LDAPMessage *ldap_list_eval();
|
||||
PRIVATE void sort_parse();
|
||||
PRIVATE void get_ref_attrs();
|
||||
PRIVATE void disp_form_button();
|
||||
|
||||
|
||||
#endif /* _X500_ */
|
@ -1,40 +0,0 @@
|
||||
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||
* *
|
||||
* x500_exp.h. *
|
||||
* *
|
||||
* Function:..Header-Datei fuer TWEB-Software *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* Authors:...Dr. Kurt Spanier & Bernhard Winkler, *
|
||||
* Zentrum fuer Datenverarbeitung, Bereich Entwicklung *
|
||||
* neuer Dienste, Universitaet Tuebingen, GERMANY *
|
||||
* *
|
||||
* ZZZZZ DDD V V *
|
||||
* Creation date: Z D D V V *
|
||||
* February 13 1996 Z D D V V *
|
||||
* Last modification: Z D D V V *
|
||||
* January 10 1999 ZZZZ DDD V *
|
||||
* *
|
||||
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
|
||||
|
||||
/*
|
||||
* $Id: x500_exp.h,v 1.6 1999/09/10 15:01:21 zrnsk01 Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _X500_EXP_
|
||||
#define _X500_EXP_
|
||||
|
||||
PUBLIC void do_menu(/*ld, fp, dn, glob*/);
|
||||
PUBLIC void do_xtend(/*ld, fp, dn, glob*/);
|
||||
PUBLIC int do_search(/*ld, fp, query, glob*/);
|
||||
PUBLIC void do_read(/*ld, fp, dn, amore, glob*/);
|
||||
PUBLIC void do_form(/*ld, fp, query, glob*/);
|
||||
PUBLIC void do_modify(/*ld, fp, query, glob*/);
|
||||
PUBLIC char * make_oc_to_string(/*oc*/);
|
||||
PUBLIC LDAP *get_ldap_connection( /* host, port, glob */ );
|
||||
PUBLIC void close_ldap_connections();
|
||||
|
||||
|
||||
#endif /* _X500_EXP_ */
|
@ -1,18 +0,0 @@
|
||||
PROGRAMS= web_ldap
|
||||
|
||||
SRCS= web_ldap.c util.c
|
||||
OBJS= web_ldap.o util.o
|
||||
|
||||
LDAP_INCDIR= ../../include
|
||||
LDAP_LIBDIR= ../../libraries
|
||||
|
||||
XLIBS = -lldap -llber -llutil
|
||||
XXLIBS = $(SECURITY_LIBS) $(LUTIL_LIBS)
|
||||
|
||||
web_ldap: ${OBJS} $(LDAP_LIBDEPEND)
|
||||
$(LTLINK) -o $@ $(OBJS) $(LIBS)
|
||||
|
||||
install-local: $(PROGRAMS) FORCE
|
||||
-$(MKDIR) $(DESTDIR)$(libexecdir)
|
||||
$(LTINSTALL) $(INSTALLFLAGS) -m 755 web_ldap $(DESTDIR)$(libexecdir)
|
||||
@echo ">> You must copy and edit web_ldap.cfg and web_ldap.html as needed. <<"
|
@ -1,622 +0,0 @@
|
||||
/* web_ldap.c
|
||||
* Form Processing Web application that returns html based
|
||||
* LDAP data with definitions from a configuration file.
|
||||
*
|
||||
* Jens Moller - Dec 11, 1998
|
||||
*/
|
||||
|
||||
#include "portable.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <ac/stdlib.h>
|
||||
#include <ac/string.h>
|
||||
#include <ac/time.h>
|
||||
#include <ac/unistd.h>
|
||||
|
||||
#include <lber.h>
|
||||
#include <ldap.h>
|
||||
#include "ldif.h"
|
||||
#include "maint_form.h" /* for HTML Form manipulations */
|
||||
|
||||
/* default values */
|
||||
#ifndef LDAP_PORT
|
||||
#define LDAP_PORT 389
|
||||
#endif
|
||||
#ifndef SERVER
|
||||
#define SERVER "ldap.bigfoot.com"
|
||||
#endif
|
||||
#ifndef CONFIG
|
||||
#define CONFIG "web_ldap.cfg"
|
||||
#endif
|
||||
|
||||
#define MAX_ATTRIB 100
|
||||
#define MAX_CHARS 256
|
||||
#define version "v 1.1"
|
||||
|
||||
entry entries[MAX_ENTRIES];
|
||||
|
||||
typedef struct {
|
||||
char servername[MAX_CHARS];
|
||||
char query[MAX_CHARS];
|
||||
char searchbase[MAX_CHARS];
|
||||
char htmlfile[MAX_CHARS];
|
||||
int ldap_port_num;
|
||||
int num_of_attrib;
|
||||
int debug; /* if zero, no debug text displayed */
|
||||
} LDAP_INFO;
|
||||
|
||||
typedef struct {
|
||||
char title[40];
|
||||
} ATTRIB_TITLE;
|
||||
|
||||
/* function Prototypes */
|
||||
void process_cfg(char *config,
|
||||
LDAP_INFO *ldap_data,
|
||||
char *attribute_array[],
|
||||
ATTRIB_TITLE *disp_attrib);
|
||||
|
||||
int strscn(char *istring,
|
||||
char *tstring);
|
||||
|
||||
void upcase_string(char *array,
|
||||
char *uparray);
|
||||
|
||||
int find_comma(char *array);
|
||||
|
||||
int find_colon(char *array);
|
||||
|
||||
void squeeze_blanks(char *array);
|
||||
|
||||
/* Pass in nothing and use the default config file, or
|
||||
* pass in the config file to use */
|
||||
|
||||
main(int argc, char ** argv) {
|
||||
LDAP *ld;
|
||||
LDAPMessage *res, *e;
|
||||
int i, j, cl, x, how_many;
|
||||
char *a, *dn, *value;
|
||||
BerElement *ptr;
|
||||
char **vals;
|
||||
char *read_attrs[MAX_ATTRIB]; /* up to MAX_ATTRIB attribs returned */
|
||||
struct berval **bvals;
|
||||
char attrs_name[MAX_CHARS];
|
||||
char config_file[MAX_CHARS];
|
||||
char temp[MAX_CHARS];
|
||||
char passed_in[MAX_CHARS];
|
||||
LDAP_INFO ldap_data;
|
||||
ATTRIB_TITLE attribute[MAX_ATTRIB];
|
||||
time_t now;
|
||||
FILE *logfp;
|
||||
|
||||
|
||||
/* html initialization */
|
||||
printf("Content-type: text/html\n\n");
|
||||
printf("<html>\n<head>\n<title>Web Ldap Results</title>\n");
|
||||
printf("</head>\n");
|
||||
printf("<body text=\"#000000\" bgcolor=\"#FFFFFF\">\n");
|
||||
printf("<h2>Web LDAP Results</h2>\n");
|
||||
|
||||
/* initialize ldap_data structure */
|
||||
memset(ldap_data.servername,0,MAX_CHARS);
|
||||
memset(ldap_data.query,0,MAX_CHARS);
|
||||
memset(ldap_data.searchbase,0,MAX_CHARS);
|
||||
memset(ldap_data.htmlfile,0,MAX_CHARS);
|
||||
ldap_data.ldap_port_num = 0;
|
||||
ldap_data.num_of_attrib = 0;
|
||||
ldap_data.debug = 0;
|
||||
|
||||
memset(passed_in,0,MAX_CHARS);
|
||||
|
||||
if (argc > 1) { /* interactive mode */
|
||||
|
||||
/* To use in this fashion when run from a Unix command line:
|
||||
*
|
||||
* > web_ldap DEF "cn=j*moller"
|
||||
* > web_ldap DEF cn=jens moller
|
||||
*
|
||||
* NOTE: The quotes are required if a special
|
||||
* character is a part of the LDAP request such
|
||||
* as the asterix (*) in the above example.
|
||||
*/
|
||||
|
||||
/* Parameters passed in are
|
||||
*
|
||||
* argv[0] = Program Name (argc = 1)
|
||||
* argv[1] = Config File Name (argc = 2)
|
||||
* argv[2] = Ldap Request (argc => 3)
|
||||
*/
|
||||
|
||||
/* do we use a different config file ? */
|
||||
strcpy(config_file, CONFIG);
|
||||
|
||||
if (argc == 2){
|
||||
if ((strcmp(argv[1],"DEF")) == 0) {
|
||||
strcpy(config_file, CONFIG);
|
||||
}
|
||||
else {
|
||||
strcpy(config_file, argv[1]);
|
||||
}
|
||||
}
|
||||
|
||||
/* is there an LDAP request?
|
||||
* if so, it may take up to 3 argv[x] values */
|
||||
|
||||
if (argc >= 3) {
|
||||
if (argc == 3) {
|
||||
strcpy(temp, argv[2]);
|
||||
}
|
||||
|
||||
if (argc == 4) {
|
||||
strcpy(temp, argv[2]);
|
||||
strcat(temp, " ");
|
||||
strcat(temp, argv[3]);
|
||||
}
|
||||
|
||||
if (argc == 5) {
|
||||
strcpy(temp, argv[2]);
|
||||
strcat(temp, " ");
|
||||
strcat(temp, argv[3]);
|
||||
strcat(temp, " ");
|
||||
strcat(temp, argv[4]);
|
||||
}
|
||||
|
||||
j = 0;
|
||||
for (i=0; i<strlen(temp);i++) {
|
||||
if ((temp[i] != '"') &&
|
||||
(temp[i] != '\\')){
|
||||
passed_in[j] = temp[i];
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else { /* Non Interactive Mode - read from a form */
|
||||
if (strcompare(getenv("REQUEST_METHOD"),"POST"))
|
||||
{
|
||||
printf("<p>++ Error - This script should be referenced with a METHOD of POST.\n");
|
||||
exit( EXIT_FAILURE );
|
||||
}
|
||||
if (strcompare(getenv("CONTENT_TYPE"),"application/x-www-form-urlencoded"))
|
||||
{
|
||||
printf("<p>++ Error - This script can only be used to decode form results. \n");
|
||||
exit( EXIT_FAILURE );
|
||||
}
|
||||
cl = atoi(getenv("CONTENT_LENGTH"));
|
||||
|
||||
for(x=0; cl && (!feof(stdin));x++)
|
||||
{
|
||||
entries[x].val = fmakeword(stdin,'&',&cl);
|
||||
plustospace(entries[x].val);
|
||||
unescape_url(entries[x].val);
|
||||
entries[x].name = makeword(entries[x].val,'=');
|
||||
how_many = x; /* keep track of how many we got */
|
||||
|
||||
#ifdef DEBUG_TEXT
|
||||
printf("entries[%d].name=%s - ",x,entries[x].name);
|
||||
printf("entries[%d].val =%s<br>\n",x,entries[x].val);
|
||||
#endif
|
||||
}
|
||||
|
||||
entries[x].name = NULL; /* entry after last valid one */
|
||||
entries[x].val = NULL; /* is set to NULL */
|
||||
|
||||
if(!getvalue(entries, "FORM", &value))
|
||||
{
|
||||
printf("%s%s%s", "This script expected a 'FORM' value returned ",
|
||||
"and did not get one. Make sure the HTML used for this ",
|
||||
"script is correct.");
|
||||
exit( EXIT_FAILURE );
|
||||
}
|
||||
|
||||
/* Looking for:
|
||||
* LDAP_REQUEST - actual LDAP request, ie 'cn=j*moller'
|
||||
* CONFIG = Configuration file
|
||||
*/
|
||||
|
||||
strcpy(config_file, CONFIG);
|
||||
|
||||
if(getvalue(entries, "LDAP_REQUEST", &value)) {
|
||||
strcpy(passed_in,value);
|
||||
}
|
||||
|
||||
if(getvalue(entries, "CONFIG", &value)) {
|
||||
if ((strcmp("DEF",value)) == 0) {
|
||||
strcpy(config_file, CONFIG);
|
||||
}
|
||||
else {
|
||||
strcpy(config_file, value);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* zero out the attribute pointers/data area */
|
||||
for (i = 0; i < MAX_ATTRIB; i++) {
|
||||
read_attrs[i] = NULL;
|
||||
memset(attribute[i].title,0,40);
|
||||
}
|
||||
|
||||
/* read in the config file */
|
||||
process_cfg(config_file, &ldap_data, read_attrs, attribute);
|
||||
|
||||
if (passed_in[0] != 0) {
|
||||
strcpy(ldap_data.query,passed_in);
|
||||
}
|
||||
|
||||
if (ldap_data.debug != 0) {
|
||||
if ((logfp = fopen("web_ldap.log","w")) == 0) {
|
||||
printf("<font color=red size=5>\n");
|
||||
printf("<p>Unable to open requested log file: web_ldap.log<p>\n");
|
||||
printf("</font>\n");
|
||||
}
|
||||
else {
|
||||
time(&now);
|
||||
sprintf(temp,"==> web_ldap request made at: %s\n",ctime(&now));
|
||||
fputs(temp,logfp);
|
||||
if (argc > 1) {
|
||||
sprintf(temp," Interactive Unix Command Line Request:\n\n");
|
||||
}
|
||||
else {
|
||||
sprintf(temp," Browser/Form Request:\n\n");
|
||||
}
|
||||
fputs(temp,logfp);
|
||||
sprintf(temp," Server Name: %s\n", ldap_data.servername);
|
||||
fputs(temp,logfp);
|
||||
sprintf(temp," Query: %s\n", ldap_data.query);
|
||||
fputs(temp,logfp);
|
||||
sprintf(temp," Passed In: %s\n", passed_in);
|
||||
fputs(temp,logfp);
|
||||
sprintf(temp," Searchbase: %s\n",ldap_data.searchbase);
|
||||
fputs(temp,logfp);
|
||||
if (ldap_data.htmlfile[0] != 0) {
|
||||
sprintf(temp," HTML File: %s\n",ldap_data.htmlfile);
|
||||
}
|
||||
else {
|
||||
sprintf(temp," HTML File: Non Provided - Use Default Processing\n");
|
||||
}
|
||||
fputs(temp,logfp);
|
||||
sprintf(temp," LDAP Port: %d\n",ldap_data.ldap_port_num);
|
||||
fputs(temp,logfp);
|
||||
sprintf(temp," Number of Attributes: %d\n",ldap_data.num_of_attrib);
|
||||
fputs(temp,logfp);
|
||||
if (ldap_data.num_of_attrib > 0) {
|
||||
for (i = 0; i < ldap_data.num_of_attrib; i++) {
|
||||
sprintf(temp," - %s\n",read_attrs[i]);
|
||||
fputs(temp,logfp);
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(temp,"\n==< Process Arguments: %d >==\n\n argv[0]: %s\n",
|
||||
argc, argv[0]);
|
||||
fputs(temp,logfp);
|
||||
if (argc >= 2) {
|
||||
sprintf(temp," argv[1]: %s\n",argv[1]);
|
||||
fputs(temp,logfp);
|
||||
}
|
||||
if (argc >= 3) {
|
||||
sprintf(temp," argv[2]: %s\n",argv[2]);
|
||||
fputs(temp,logfp);
|
||||
}
|
||||
if (argc >= 4) {
|
||||
sprintf(temp," argv[3]: %s\n",argv[3]);
|
||||
fputs(temp,logfp);
|
||||
}
|
||||
if (argc >= 5) {
|
||||
sprintf(temp," argv[4]: %s\n",argv[4]);
|
||||
fputs(temp,logfp);
|
||||
}
|
||||
fflush(logfp);
|
||||
fclose(logfp);
|
||||
}
|
||||
}
|
||||
|
||||
if (ldap_data.debug != 0) {
|
||||
if ((logfp = fopen("web_ldap.log","a")) == 0) {
|
||||
}
|
||||
else {
|
||||
time(&now);
|
||||
sprintf(temp,"\n==< Results >==\n\n");
|
||||
fputs(temp,logfp);
|
||||
sprintf(temp,"** performing ldap_init at %s\n", ctime(&now));
|
||||
fputs(temp,logfp);
|
||||
fflush(logfp);
|
||||
fclose(logfp);
|
||||
}
|
||||
}
|
||||
if ( (ld = ldap_init(ldap_data.servername, ldap_data.ldap_port_num) ) == NULL)
|
||||
{
|
||||
printf("<font color=red><b>ldap_init error</b></font>\n");
|
||||
if (ldap_data.debug != 0) {
|
||||
if ((logfp = fopen("web_ldap.log","a")) == 0) {
|
||||
}
|
||||
else {
|
||||
sprintf(temp,"++ ldap_init error\n");
|
||||
fputs(temp,logfp);
|
||||
fflush(logfp);
|
||||
fclose(logfp);
|
||||
}
|
||||
}
|
||||
printf("</body>\n</html>\n");
|
||||
exit( EXIT_FAILURE );
|
||||
}
|
||||
|
||||
/*authenticate as nobody */
|
||||
if (ldap_data.debug != 0) {
|
||||
if ((logfp = fopen("web_ldap.log","a")) == 0) {
|
||||
}
|
||||
else {
|
||||
time(&now);
|
||||
sprintf(temp,"** performing ldap_bind_s at %s\n",ctime(&now));
|
||||
fputs(temp,logfp);
|
||||
fflush(logfp);
|
||||
fclose(logfp);
|
||||
}
|
||||
}
|
||||
if(ldap_bind_s(ld, "", "", LDAP_AUTH_SIMPLE) != 0)
|
||||
{
|
||||
printf("<font color=red><b>");
|
||||
ldap_perror (ld, "ldap_simple_bind_s");
|
||||
printf("</b></font>\n");
|
||||
|
||||
if (ldap_data.debug != 0) {
|
||||
if ((logfp = fopen("web_ldap.log","a")) == 0) {
|
||||
}
|
||||
else {
|
||||
sprintf(temp,"++ ldap_bind_s error\n");
|
||||
fputs(temp,logfp);
|
||||
fflush(logfp);
|
||||
fclose(logfp);
|
||||
}
|
||||
}
|
||||
printf("</body>\n</html>\n");
|
||||
exit( EXIT_FAILURE );
|
||||
}
|
||||
|
||||
printf("<b>Directory Lookup Results</b>\n<pre>\n");
|
||||
printf("<hr><p>\n<pre>\n");
|
||||
|
||||
/* Get data */
|
||||
if (ldap_data.debug != 0) {
|
||||
if ((logfp = fopen("web_ldap.log","a")) == 0) {
|
||||
}
|
||||
else {
|
||||
time(&now);
|
||||
sprintf(temp,"** performing ldap_search_s at %s\n",ctime(&now));
|
||||
fputs(temp,logfp);
|
||||
fflush(logfp);
|
||||
fclose(logfp);
|
||||
}
|
||||
}
|
||||
if(ldap_search_s(ld, ldap_data.searchbase, LDAP_SCOPE_SUBTREE,
|
||||
ldap_data.query, read_attrs, 0, &res)
|
||||
!= LDAP_SUCCESS)
|
||||
{
|
||||
ldap_perror(ld, "ldap_search_s");
|
||||
}
|
||||
|
||||
for (e=ldap_first_entry(ld, res); e != NULL; e=ldap_next_entry(ld, e))
|
||||
{
|
||||
dn = ldap_get_dn(ld, e);
|
||||
|
||||
if (ldap_data.debug != 0) {
|
||||
if ((logfp = fopen("web_ldap.log","a")) == 0) {
|
||||
}
|
||||
else {
|
||||
sprintf(temp," dn=%s\n", dn);
|
||||
fputs(temp,logfp);
|
||||
fflush(logfp);
|
||||
fclose(logfp);
|
||||
}
|
||||
}
|
||||
|
||||
/*print each attribute */
|
||||
for (a = ldap_first_attribute(ld, e, &ptr);
|
||||
a != NULL;
|
||||
a = ldap_next_attribute(ld, e, ptr) )
|
||||
{
|
||||
strcpy(attrs_name, a);
|
||||
/* print attribute name */
|
||||
printf("%s: ", attrs_name);
|
||||
|
||||
/*print each value */
|
||||
|
||||
vals = ldap_get_values(ld, e, a);
|
||||
|
||||
for(i=0; vals[i] != NULL; i++)
|
||||
/* print value of attribute */
|
||||
printf("%s\n", vals[i],strlen(vals[i]));
|
||||
|
||||
ldap_value_free(vals);
|
||||
} /*end for*/
|
||||
free(a);
|
||||
free(dn);
|
||||
printf("<p>\n");
|
||||
}
|
||||
/*free the search results */
|
||||
ldap_msgfree (res);
|
||||
|
||||
printf("</pre>\n");
|
||||
|
||||
ldap_unbind(ld);
|
||||
|
||||
if (ldap_data.debug != 0) {
|
||||
if ((logfp = fopen("web_ldap.log","a")) == 0) {
|
||||
}
|
||||
else {
|
||||
time(&now);
|
||||
sprintf(temp,"\nFinished gathering results at %s\n",ctime(&now));
|
||||
fputs(temp,logfp);
|
||||
sprintf(temp,"==< Done >==\n");
|
||||
fputs(temp,logfp);
|
||||
fflush(logfp);
|
||||
fclose(logfp);
|
||||
}
|
||||
}
|
||||
printf("</body>\n</html>\n");
|
||||
}
|
||||
|
||||
/* Process the user passed in configuration file */
|
||||
void process_cfg(char *config,
|
||||
LDAP_INFO *ldap_data,
|
||||
char *attribute_array[],
|
||||
ATTRIB_TITLE *disp_attrib) {
|
||||
|
||||
char file_data[1024];
|
||||
char upfile_data[1024];
|
||||
char temp[1024];
|
||||
int lcomma, lcolon, attrib_pos;
|
||||
FILE * fp;
|
||||
|
||||
strcpy(ldap_data->servername,SERVER);
|
||||
ldap_data->ldap_port_num = LDAP_PORT;
|
||||
strcpy(ldap_data->query,"cn=jens*moller");
|
||||
|
||||
/* config file needs to be in the cgi-bin directory */
|
||||
if ((fp = fopen(config,"r")) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
attrib_pos = 0;
|
||||
|
||||
for (;;) { /* read until eof */
|
||||
fgets (file_data,1024,fp);
|
||||
if (feof(fp)) break;
|
||||
if (file_data[0] != '#') { /* skip commented lines */
|
||||
upcase_string(file_data,upfile_data);
|
||||
|
||||
/* get the server specific data */
|
||||
if (strscn(upfile_data,"SERVER:") == 0) {
|
||||
lcolon = find_colon(file_data) + 1;
|
||||
lcomma = find_comma(file_data);
|
||||
if (lcomma > 0) {
|
||||
memset(ldap_data->servername,0,MAX_CHARS);
|
||||
strncpy(ldap_data->servername,&file_data[lcolon],
|
||||
lcomma - lcolon);
|
||||
ldap_data->ldap_port_num = atoi(&file_data[lcomma + 1]);
|
||||
}
|
||||
else {
|
||||
strcpy(ldap_data->servername,&file_data[lcolon]);
|
||||
}
|
||||
squeeze_blanks(ldap_data->servername);
|
||||
}
|
||||
else if (strscn(upfile_data,"SEARCHBASE:") == 0) {
|
||||
lcolon = find_colon(file_data) + 1;
|
||||
strcpy(ldap_data->searchbase,&file_data[lcolon]);
|
||||
squeeze_blanks(ldap_data->searchbase);
|
||||
}
|
||||
else if (strscn(upfile_data,"HTMLFILE:") == 0) {
|
||||
lcolon = find_colon(file_data) + 1;
|
||||
strcpy(ldap_data->htmlfile,&file_data[lcolon]);
|
||||
}
|
||||
else if (strscn(upfile_data,"DEBUG:") == 0) {
|
||||
lcolon = find_colon(file_data) + 1;
|
||||
ldap_data->debug = atoi(&file_data[lcolon]);
|
||||
}
|
||||
|
||||
/* get the attribute list */
|
||||
else if ((file_data[0] != ' ') && (file_data[0] != 0)) {
|
||||
memset(temp,0,1024);
|
||||
/* data appears as a comma delimited list, where:
|
||||
*
|
||||
* attrib_name (char),display_length (int)
|
||||
*
|
||||
* (default length = 20 if display_length undefined)
|
||||
*
|
||||
* is how each record is defined */
|
||||
lcomma = find_comma(file_data);
|
||||
if (lcomma < 0) {
|
||||
strcpy(temp,file_data);
|
||||
squeeze_blanks(temp);
|
||||
}
|
||||
else {
|
||||
strncpy(temp,file_data,lcomma);
|
||||
squeeze_blanks(temp);
|
||||
}
|
||||
attribute_array[attrib_pos] = malloc(strlen(temp));
|
||||
strcpy(attribute_array[attrib_pos],temp);
|
||||
attrib_pos++;
|
||||
ldap_data->num_of_attrib = attrib_pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* find character substring matches */
|
||||
int strscn(char * istring,
|
||||
char * tstring) {
|
||||
int i, status, icmp, len;
|
||||
status = -1;
|
||||
len = (strlen(istring) + 1) - strlen(tstring);
|
||||
if (len < 1) len = 1;
|
||||
for (i=0;i<len ;i++) {
|
||||
icmp = memcmp(&istring[i],tstring,strlen(tstring));
|
||||
if (icmp == 0) {
|
||||
status = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
/* convert the array to uparray, where uparray contains upper
|
||||
* case characters */
|
||||
void upcase_string(char *array,
|
||||
char *uparray) {
|
||||
int i;
|
||||
for (i=0; i < strlen(array); i++) {
|
||||
uparray[i] = toupper((unsigned char) array[i]);
|
||||
uparray[i + 1] = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* return the position of the first comma - ',' - from within a string */
|
||||
int find_comma(char *array){
|
||||
int i;
|
||||
for (i = 0; i < strlen(array); i++) {
|
||||
if (array[i] == ',') return(i);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* return the position of the first colon - '.' - from within a string */
|
||||
int find_colon(char *array){
|
||||
int i;
|
||||
for (i = 0; i < strlen(array); i++) {
|
||||
if (array[i] == ':') return(i);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Remove unneeded blanks from a character array. Don't leave
|
||||
* any at the end & throw away any newline characters */
|
||||
void squeeze_blanks(char *array){
|
||||
int i, pos, blank;
|
||||
char temp[1024];
|
||||
memset(temp,0,1024);
|
||||
|
||||
pos = 0; /* location within temp array */
|
||||
blank = 0; /* # of blanks written in a row */
|
||||
|
||||
for (i = 0; i < strlen(array); i++) {
|
||||
if (array[i] != ' ') {
|
||||
temp[pos] = array[i];
|
||||
blank = 0;
|
||||
pos++;
|
||||
}
|
||||
else if ((blank == 0) &&
|
||||
(array[i] == ' ') &&
|
||||
(pos != 0)) {
|
||||
temp[pos] = array[i];
|
||||
blank += 1;
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
strcpy(array,temp);
|
||||
if (array[strlen(array) - 1] <= ' ')
|
||||
array[strlen(array) - 1] = 0;
|
||||
}
|
@ -1,354 +0,0 @@
|
||||
<html>
|
||||
<title>web_ldap_usage</title>
|
||||
<body text="#000000"
|
||||
bgcolor="#FFFFFF">
|
||||
|
||||
<h2>web_ldap version 1.1, OpenLDAP variant</h2>
|
||||
|
||||
This is an OpenLDAP port of the web_ldap program.
|
||||
<p>
|
||||
<i>
|
||||
The files provided in the file set for 'web_ldap'
|
||||
were developed under the GNU General Public License (GPL).
|
||||
Under the GPL, the source code is freely-distributed and available
|
||||
to the general public. There is no warranty on the software,
|
||||
and it does not come with support, however, I would appreciate
|
||||
it if you emailed any bug-fixes you create to me
|
||||
(<a href="mailto:jens@colomar.com">jens@colomar.com</a>) and
|
||||
<a href="mailto:OpenLDAP-its@OpenLDAP.org">OpenLDAP-its@OpenLDAP.org</a>.
|
||||
<p>
|
||||
All code here is generic ISO C, allowing most Unix compilers
|
||||
to generate the required object files and executable images.
|
||||
It was tested against an Apache HTTPD server and uses no
|
||||
special HTML functionality that does not appear within V 3.x
|
||||
versions of Netscapes or Microsofts Web Browsers. The goal was
|
||||
to create a starting point example to help people build
|
||||
effective interactive HTML based LDAP clients.
|
||||
</i>
|
||||
<h3>Introduction:</h3>
|
||||
|
||||
The 'web_ldap' package is a complete LDAP application that
|
||||
provides a functional Web Server Based client. The intent
|
||||
is to give you a working example that you can expand upon
|
||||
for your own needs. It does not solve a specific problem
|
||||
for you, rather it solves a general problem by giving
|
||||
you a functional starting point from where to begin your
|
||||
development efforts. It runs under Unix.
|
||||
<p>
|
||||
The application consists of a number of C programs, header
|
||||
files, an HTML file with form entry, a configuration file
|
||||
and a sample makefile. You will need the LDAP SDK for your
|
||||
specific Unix System (both the UofM libraries and Netscape
|
||||
libraries - which are also free - have been tested).
|
||||
<p>
|
||||
The tool allows you to specify that actions taken
|
||||
be logged to a file. This provides you a method by which
|
||||
you can build out larger applications and see what is happening.
|
||||
<p>
|
||||
The application can be run interactively (without use of
|
||||
a Web Browser) but was intended for use as an HTML LDAP Web
|
||||
page application.
|
||||
<p>
|
||||
One thing to consider when running a program of this nature
|
||||
is that there are 2 totally different sets of environments
|
||||
involved. The program is written assuming very little in
|
||||
the way of file/directory organization. As such it looks for
|
||||
files either in the directory it was run from, or where ever
|
||||
you have configured your Web Server to look for things.
|
||||
<p>
|
||||
The C CGI program will attempt to open a default configuration
|
||||
file called 'web_ldap.cfg'. If you set the debug mode on
|
||||
in the configuration file, it will also attempt to create
|
||||
a log file called 'web_ldap.log' in the same directory as
|
||||
the 'web_ldap.cfg' files appears in.
|
||||
<p>
|
||||
The 2 environments are 'Interactive' and 'Web Server'.
|
||||
<p>
|
||||
When you execute the application from a command line such as:
|
||||
<pre>
|
||||
> web_ldap DEF cn=jens moller
|
||||
</pre>
|
||||
All actions take place in the same directory that the web_ldap
|
||||
program resides in. Most people would typically build an
|
||||
application of this nature in one of their own directories and
|
||||
this would give them Read/Write access to all of the files
|
||||
associated with the program. Any file restrictions or capabilities
|
||||
that you have will be enabled as part of your session.
|
||||
<p>
|
||||
This is quite different than when you ask a Web Server to
|
||||
execute the program for you. The Web Server is typically
|
||||
using the user 'nobody'. This is not you, its a separate
|
||||
application user and it may not have access to the same
|
||||
files that you have nor the same process capabilities.
|
||||
<p>
|
||||
When your program executes from a Web Browser, you will
|
||||
see something like:
|
||||
<pre>
|
||||
http://my.system.com/cgi-bin/web_ldap
|
||||
|
||||
</pre>
|
||||
displayed by the Web Browser as the URL that its executing.
|
||||
The Web Server is executing the program on your behalf.
|
||||
File protections normally cause initial problems, possibly
|
||||
because the Web Browser doesn't own the files or doesn't
|
||||
have execute access. For your initial testing, please set these
|
||||
files to full access - ie. 'chmod 777 web_ldap*' - You can
|
||||
adjust the file protections once you get everything working.
|
||||
If you get errors - start with this simple change.
|
||||
|
||||
<h3>Building the application:</h3>
|
||||
|
||||
Requires ISO C (your standard OS compiler or GCC should
|
||||
work fine).
|
||||
<p>
|
||||
Under OpenLDAP, you should build with the following commands after
|
||||
having configured and built OpenLDAP itself:
|
||||
<pre>
|
||||
cd contrib/web_ldap
|
||||
make depend
|
||||
make
|
||||
</pre>
|
||||
|
||||
<h3>Configuration:</h3>
|
||||
|
||||
Its a very simple tool that allows you to make LDAP requests
|
||||
to any existing LDAP Directory Server. By default, it
|
||||
attempts to connect to 'ldap.bigfoot.com', which is a
|
||||
commercial LDAP server on the Internet - usually available
|
||||
from anywhere.
|
||||
<p>
|
||||
To specify a different LDAP server, you could either modify
|
||||
the program to default elsewhere, or you could modify the
|
||||
existing 'web_ldap.cfg' file, or create another one with
|
||||
a different name.
|
||||
<p><i>
|
||||
NOTE: A '#' in the first column of any line
|
||||
in the configuration file is considered a comment.
|
||||
</i>
|
||||
<p>
|
||||
The configuration file allows you specify:
|
||||
<pre>
|
||||
server:
|
||||
</pre>
|
||||
This is the servername. For example:
|
||||
<pre>
|
||||
server:ldap.bigfoot.com,389
|
||||
</pre>
|
||||
connects you up to port 389 on the ldap server 'ldap.bigfoot.com'.
|
||||
You can specify one of your own servers here if you desire.
|
||||
<p>
|
||||
Next you will see:
|
||||
<pre>
|
||||
searchbase:
|
||||
</pre>
|
||||
This is where within a tree you want to start looking. For
|
||||
'ldap.bigfoot.com', you would leave this blank and it will
|
||||
look in all the trees. For many companies a specific tree
|
||||
structure will be defined, and you will want to specify the
|
||||
highest point in the tree structure that defines the area that
|
||||
you are interested in. For example, if you have a tree that
|
||||
starts at 'c=US', and branches at 'o=ABC, c=US' and
|
||||
'o=XYZ, c=US', you could specify:
|
||||
<pre>
|
||||
searchbase:c=US
|
||||
</pre>
|
||||
and search both 'o=ABC, c=US' and 'o=XYZ, c=US', or
|
||||
if you only wanted to search against 'o=ABC, c=US',
|
||||
you could specify:
|
||||
<pre>
|
||||
searchbase:o=ABC, c=US
|
||||
</pre>
|
||||
If you want to turn on a simple Debug mode, you can specify any number
|
||||
other than zero for 'debug:'. For example:
|
||||
<pre>
|
||||
debug:1
|
||||
</pre>
|
||||
turns on the Debug logging mode, and
|
||||
<pre>
|
||||
debug:0
|
||||
</pre>
|
||||
turns it off. Debug logging simply creates a file called
|
||||
'web_ldap.log' in the same directory that the web_ldap
|
||||
executable is located. It flushes everything after each
|
||||
event, so if it gets stuck anywhere, you will be able
|
||||
to see it. It also time-stamps most of the results, so you
|
||||
can get an idea where things are running faster and/or
|
||||
slower for different queries.
|
||||
<p>
|
||||
The remainder of the configuration file is where you list
|
||||
the attributes that you are interested in displaying.
|
||||
<p>
|
||||
You could list parameters (up to 100) like:
|
||||
<pre>
|
||||
cn
|
||||
givenname
|
||||
sn
|
||||
</pre>
|
||||
and that is all it will return. If you don't specify
|
||||
anything, it returns everything it finds. if you
|
||||
specify an attribute that the directory has never
|
||||
heard of (ie. its not a member of any object class
|
||||
anyone has defined), that attribute will simply be
|
||||
ignored. If you misspell an attribute name and wonder
|
||||
why it never gets listed in the results - this might be
|
||||
why. If you specify an attribute that some users have and
|
||||
others don't, only ones with that attribute will list
|
||||
a value for it.
|
||||
<p>
|
||||
Directory data can be multi-valued. This means that any
|
||||
attribute could have multiple values. This application will
|
||||
list all the values it finds for any given attribute.
|
||||
|
||||
|
||||
<h3>Where to put the files:</h3>
|
||||
|
||||
If running this interactively (from a Unix shell prompt),
|
||||
all the files can reside in any of your home directories.
|
||||
I suggest that you test the application in your home
|
||||
directory first.
|
||||
<p>
|
||||
If running this application from a Web Server, you need
|
||||
to find out where the Web Server keeps its cgi applications
|
||||
and where it keeps its html applications. This varies
|
||||
from operating system to operating system and Web Server
|
||||
to Web Server.
|
||||
<p>
|
||||
Once you have located the cgi-bin (or equivalent) directory,
|
||||
put these 2 files there:
|
||||
<pre>
|
||||
web_ldap
|
||||
web_ldap.cfg
|
||||
</pre>
|
||||
then make sure that these files are accessible to the Web
|
||||
Server by executing the Unix shell command:
|
||||
<pre>
|
||||
> chmod 777 web_ldap*
|
||||
</pre>
|
||||
Now find the HTML source directory. Copy
|
||||
<pre>
|
||||
web_ldap.html
|
||||
</pre>
|
||||
to this directory. Make sure that this file is accessible to the Web
|
||||
Server by executing the Unix shell command:
|
||||
<pre>
|
||||
> chmod 777 web_ldap*
|
||||
</pre>
|
||||
|
||||
<h3>Running the application:</h3>
|
||||
|
||||
Test it in your own directory by entering:
|
||||
<pre>
|
||||
> web_ldap DEF
|
||||
</pre>
|
||||
This should connect to 'ldap.bigfoot.com' and try to find a number
|
||||
of entries (it does when I try it). You will notice that it
|
||||
outputs results in the form of an HTML file - this is what it
|
||||
is supposed to do. If you leave out the 'DEF', you will get the
|
||||
error:
|
||||
<pre>
|
||||
<p>++ Error - This script should be referenced with a METHOD of POST.
|
||||
</pre>
|
||||
as a part of your result with no LDAP data returned.
|
||||
<p>
|
||||
Interactively, the program assumes that you will always pass it at least
|
||||
the name of the Configuration file ('DEF' tells it to use the default
|
||||
configuration file). If there is no configuration file, it still will
|
||||
find 'ldap.bigfoot.com'.
|
||||
<p>
|
||||
Once you have it working there, try the version in the HTML directory.
|
||||
To do so, enter your WEB Servers URL, the cgi-bin directory reference
|
||||
and then the application name, all separated by slashes. For example,
|
||||
if your Web Server URL is 'http://my.server.com', then you will want
|
||||
to specify the URL:
|
||||
<pre>
|
||||
http://my.server.com/cgi-bin/web_ldap
|
||||
</pre>
|
||||
NOTE: You can only run cgi scripts out of a directory that the Web Server
|
||||
allows. It is unlikely that you can execute Web Server CGI applications
|
||||
from your own directory.
|
||||
<p>
|
||||
This will provide a simple Web Based form. It will have 2 user entry
|
||||
fields. The first allows you to enter an LDAP request. The second
|
||||
allows you to specify a configuration file (it defaults to 'DEF').
|
||||
<p>
|
||||
Enter a simple LDAP request, such as the ones shown and see if you
|
||||
get back a response. You should if connected to 'ldap.bigfoot.com'.
|
||||
|
||||
|
||||
<h3>Now that you have it working:</h3>
|
||||
|
||||
Feel free to adapt this program to fit your needs. You will need
|
||||
to have the 'dn' in order to do updates. It is recovered within
|
||||
the program, so you can save it for use once you retrieve it
|
||||
(it is listed in the web_ldap.log file of you enable debug mode).
|
||||
<p>
|
||||
This program does not update anything. The goal was to create a very
|
||||
simple and expandable LDAP client and provide the complete source
|
||||
code for doing it. To this goal, it is successful. From here
|
||||
you should be able to experiment with the interfaces and create
|
||||
new functionality to suit your given needs.
|
||||
<p>
|
||||
This was tested against the UofM V 3.3 LDAP Libraries and the Netscape
|
||||
V 1.x and V 3.x SDK under both Irix 6.2 (Silicon Graphics) and
|
||||
Solaris 2.6 (Sun). I don't have other hardware or OS's to test
|
||||
against here.
|
||||
|
||||
|
||||
<h3>Usage Information:</h3>
|
||||
|
||||
If you want to find out what attributes are being used, you can enable
|
||||
the application to tell you all that it finds. Do this by simply
|
||||
not defining any attributes within the configuration file. It will
|
||||
list all the attributes it finds. You could create a special configuration
|
||||
file specifically for this purpose.
|
||||
<p>
|
||||
If you are getting fatal errors from your Web Server when you attempt to
|
||||
execute a command, please try the same command using interactive mode. Look
|
||||
to see if the HTML being generated makes sense or not. If the HTML
|
||||
looks good, run it again interactively and pipe the results to a file, then
|
||||
attempt to submit the resulting file as the URL. If it works, it is
|
||||
likely that the environment you run is different than the one the Web
|
||||
server is using - Unix file protections frequently are a cause of these
|
||||
problems. If you can't determine what is different, discuss the problem
|
||||
with your Unix system administrator - is is likely a resource problem.
|
||||
If you add code that causes problems, but you still get a result, try the
|
||||
application in interactive mode and verify the HTML being generated. Any
|
||||
additional HTML code you add may need to to have proper termination syntax
|
||||
(tables are very touchy about this), and you may need to further enhance
|
||||
your changes to compensate.
|
||||
<p>
|
||||
When creating new applications, please test your
|
||||
results on both Netscape's Web Browser and Internet
|
||||
Explorer. Nothing is more irritating to end users than getting different
|
||||
results based on their Web Browser selection.
|
||||
<p>
|
||||
The Unix Command line will not allow you to pass some characters into
|
||||
an application unless you surround the characters or command with quotes.
|
||||
Some common examples of executing web_ldap interactively are:
|
||||
<pre>
|
||||
> web_ldap DEF "cn=j*moller"
|
||||
|
||||
> web_ldap DEF cn=jens moller
|
||||
</pre>
|
||||
The command with the '*' in it requires quotes around it. Also note
|
||||
that the application only allows the LDAP command to use up to 3 argv
|
||||
values. This is as a limitation of the current parsing within the program
|
||||
of argc/argv parameters. You could alter the program, or simply put
|
||||
quotes around the LDAP request. Enable the debug mode within the
|
||||
configuration file if you feel that the application is losing
|
||||
arguments to see what its operating against. When operated by the Web Server,
|
||||
and passing in FORM data - you won't have this limitation, and you don't
|
||||
need quotes.
|
||||
<p>
|
||||
You can pass hidden fields from the Web Form into the web_ldap program.
|
||||
An example is shown with the name of 'FORM' having a value of '300'.
|
||||
You can create additional hidden fields, named anything you want them
|
||||
to be, with any value you want. These can be used to define existing
|
||||
options (such as which configuration file to use), or other options
|
||||
that your modified web_ldap.c program may want to have passed to it.
|
||||
<p>
|
||||
<hr>
|
||||
Jens Moller - Jens@colomar.com -
|
||||
<a href="http://www.colomar.com">COLOMAR Group</a>.<br>
|
||||
|
||||
<a href="http://www.OpenLDAP.org/">OpenLDAP</a> - OpenLDAP-devel@OpenLDAP.org.
|
@ -1,344 +0,0 @@
|
||||
web_ldap Version 1.1, OpenLDAP variant
|
||||
|
||||
This is an OpenLDAP port of the web_ldap program.
|
||||
|
||||
The files provided in the file set for 'web_ldap'
|
||||
were developed under the GNU General Public License (GPL).
|
||||
Under the GPL, the source code is freely-distributed and available
|
||||
to the general public. There is no warranty on the software,
|
||||
and it does not come with support, however, I would appreciate
|
||||
it if you emailed any bug-fixes you create to me (jens@colomar.com)
|
||||
and OpenLDAP-its@OpenLDAP.org.
|
||||
|
||||
All code here is generic ISO C, allowing most Unix compilers
|
||||
to generate the required object files and executable images.
|
||||
It was tested against an Apache HTTPD server and uses no
|
||||
special HTML functionality that does not appear within V 3.x
|
||||
versions of Netscapes or Microsofts Web Browsers. The goal was
|
||||
to create a starting point example to help people build
|
||||
effective interactive HTML based LDAP clients.
|
||||
|
||||
Introduction:
|
||||
|
||||
The 'web_ldap' package is a complete LDAP application that
|
||||
provides a functional Web Server Based client. The intent
|
||||
is to give you a working example that you can expand upon
|
||||
for your own needs. It does not solve a specific problem
|
||||
for you, rather it solves a general problem by giving
|
||||
you a functional starting point from where to begin your
|
||||
development efforts. It runs under Unix.
|
||||
|
||||
The application consists of a number of C programs, header
|
||||
files, an HTML file with form entry, a configuration file
|
||||
and a sample makefile. You will need the LDAP SDK for your
|
||||
specific Unix System (both the UofM libraries and Netscape
|
||||
libraries - which are also free - have been tested).
|
||||
|
||||
The tool allows You to specify that actions taken
|
||||
be logged to a file. This provides you a method by which
|
||||
you can build out larger applications and see what is happening.
|
||||
|
||||
The application can be run interactively (without use of
|
||||
a Web Browser) but was intended for use as an HTML LDAP Web
|
||||
page application.
|
||||
|
||||
One thing to consider when running a program of this nature
|
||||
is that there are 2 totally different sets of environments
|
||||
involved. The program is written assuming very little in
|
||||
the way of file/directory organization. As such it looks for
|
||||
files either in the directory it was run from, or where ever
|
||||
you have configured your Web Server to look for things.
|
||||
|
||||
The C CGI program will attempt to open a default configuration
|
||||
file called 'web_ldap.cfg'. If you set the debug mode on
|
||||
in the configuration file, it will also attempt to create
|
||||
a log file called 'web_ldap.log' in the same directory as
|
||||
the 'web_ldap.cfg' files appears in.
|
||||
|
||||
The 2 environments are 'Interactive' and 'Web Server'.
|
||||
|
||||
When you execute the application from a command line such as:
|
||||
|
||||
> web_ldap DEF cn=jens moller
|
||||
|
||||
All actions take place in the same directory that the web_ldap
|
||||
program resides in. Most people would typically build an
|
||||
application of this nature in one of their own directories and
|
||||
this would give them Read/Write access to all of the files
|
||||
associated with the program. Any file restrictions or capabilities
|
||||
that you have will be enabled as part of your session.
|
||||
|
||||
This is quite different than when you ask a Web Server to
|
||||
execute the program for you. The Web Server is typically
|
||||
using the user 'nobody'. This is not you, its a separate
|
||||
application user and it may not have access to the same
|
||||
files that you have nor the same process capabilities.
|
||||
|
||||
When your program executes from a Web Browser, you will
|
||||
see something like:
|
||||
|
||||
http://my.system.com/cgi-bin/web_ldap
|
||||
|
||||
displayed by the Web Browser as the URL that its executing.
|
||||
The Web Server is executing the program on your behalf.
|
||||
File protections normally cause initial problems, possibly
|
||||
because the Web Browser doesn't own the files or doesn't
|
||||
have execute access. For your initial testing, please set these
|
||||
files to full access - ie. 'chmod 777 web_ldap*' - You can
|
||||
adjust the file protections once you get everything working.
|
||||
If you get errors - start with this simple change.
|
||||
|
||||
|
||||
Building the application:
|
||||
|
||||
Requires ISO C (your standard OS compiler or GCC should
|
||||
work fine).
|
||||
|
||||
Under OpenLDAP, you should build with the following commands after having
|
||||
configured and built OpenLDAP itself:
|
||||
|
||||
cd contrib/web_ldap
|
||||
make depend
|
||||
make
|
||||
|
||||
|
||||
Configuration:
|
||||
|
||||
Its a very simple tool that allows you to make LDAP requests
|
||||
to any existing LDAP Directory Server. By default, it
|
||||
attempts to connect to 'ldap.bigfoot.com', which is a
|
||||
commercial LDAP server on the Internet - usually available
|
||||
from anywhere.
|
||||
|
||||
To specify a different LDAP server, you could either modify
|
||||
the program to default elsewhere, or you could modify the
|
||||
existing 'web_ldap.cfg' file, or create another one with
|
||||
a different name.
|
||||
|
||||
NOTE: A '#' in the first column of any line
|
||||
in the configuration file is considered a comment.
|
||||
|
||||
The configuration file allows you specify:
|
||||
|
||||
server:
|
||||
|
||||
This is the servername. For example:
|
||||
|
||||
server:ldap.bigfoot.com,389
|
||||
|
||||
connects you up to port 389 on the ldap server 'ldap.bigfoot.com'.
|
||||
You can specify one of your own servers here if you desire.
|
||||
|
||||
Next you will see:
|
||||
|
||||
searchbase:
|
||||
|
||||
This is where within a tree you want to start looking. For
|
||||
'ldap.bigfoot.com', you would leave this blank and it will
|
||||
look in all the trees. For many companies a specific tree
|
||||
structure will be defined, and you will want to specify the
|
||||
highest point in the tree structure that defines the area that
|
||||
you are interested in. For example, if you have a tree that
|
||||
starts at 'c=US', and branches at 'o=ABC, c=US' and
|
||||
'o=XYZ, c=US', you could specify:
|
||||
|
||||
searchbase:c=US
|
||||
|
||||
and search both 'o=ABC, c=US' and 'o=XYZ, c=US', or
|
||||
if you only wanted to search against 'o=ABC, c=US',
|
||||
you could specify:
|
||||
|
||||
searchbase:o=ABC, c=US
|
||||
|
||||
If you want to turn on a simple Debug mode, you can specify any number
|
||||
other than zero for 'debug:'. For example:
|
||||
|
||||
debug:1
|
||||
|
||||
turns on the Debug logging mode, and
|
||||
|
||||
debug:0
|
||||
|
||||
turns it off. Debug logging simply creates a file called
|
||||
'web_ldap.log' in the same directory that the web_ldap
|
||||
executable is located. It flushes everything after each
|
||||
event, so if it gets stuck anywhere, you will be able
|
||||
to see it. It also time-stamps most of the results, so you
|
||||
can get an idea where things are running faster and/or
|
||||
slower for different queries.
|
||||
|
||||
The remainder of the configuration file is where you list
|
||||
the attributes that you are interested in displaying.
|
||||
|
||||
You could list parameters (up to 100) like:
|
||||
|
||||
cn
|
||||
givenname
|
||||
sn
|
||||
|
||||
and that is all it will return. If you don't specify
|
||||
anything, it returns everything it finds. if you
|
||||
specify an attribute that the directory has never
|
||||
heard of (ie. its not a member of any object class
|
||||
anyone has defined), that attribute will simply be
|
||||
ignored. If you misspell an attribute name and wonder
|
||||
why it never gets listed in the results - this might be
|
||||
why. If you specify an attribute that some users have and
|
||||
others don't, only ones with that attribute will list
|
||||
a value for it.
|
||||
|
||||
Directory data can be multi-valued. This means that any
|
||||
attribute could have multiple values. This application will
|
||||
list all the values it finds for any given attribute.
|
||||
|
||||
|
||||
Where to put the files:
|
||||
|
||||
If running this interactively (from a Unix shell prompt),
|
||||
all the files can reside in any of your home directories.
|
||||
I suggest that you test the application in your home
|
||||
directory first.
|
||||
|
||||
If running this application from a Web Server, you need
|
||||
to find out where the Web Server keeps its cgi applications
|
||||
and where it keeps its html applications. This varies
|
||||
from operating system to operating system and Web Server
|
||||
to Web Server.
|
||||
|
||||
Once you have located the cgi-bin (or equivalent) directory,
|
||||
put these 2 files there:
|
||||
|
||||
web_ldap
|
||||
web_ldap.cfg
|
||||
|
||||
then make sure that these files are accessible to the Web
|
||||
Server by executing the Unix shell command:
|
||||
|
||||
> chmod 777 web_ldap*
|
||||
|
||||
Now find the HTML source directory. Copy
|
||||
|
||||
web_ldap.html
|
||||
|
||||
to this directory. Make sure that this file is accessible to the Web
|
||||
Server by executing the Unix shell command:
|
||||
|
||||
> chmod 777 web_ldap*
|
||||
|
||||
|
||||
Running the application:
|
||||
|
||||
Test it in your own directory by entering:
|
||||
|
||||
> web_ldap DEF
|
||||
|
||||
This should connect to 'ldap.bigfoot.com' and try to find a number
|
||||
of entries (it does when I try it). You will notice that it
|
||||
outputs results in the form of an HTML file - this is what it
|
||||
is supposed to do. If you leave out the 'DEF', you will get the
|
||||
error:
|
||||
|
||||
<p>++ Error - This script should be referenced with a METHOD of POST.
|
||||
|
||||
as a part of your result with no LDAP data returned.
|
||||
|
||||
Interactively, the program assumes that you will always pass it at least
|
||||
the name of the Configuration file ('DEF' tells it to use the default
|
||||
configuration file). If there is no configuration file, it still will
|
||||
find 'ldap.bigfoot.com'.
|
||||
|
||||
Once you have it working there, try the version in the HTML directory.
|
||||
To do so, enter your WEB Servers URL, the cgi-bin directory reference
|
||||
and then the application name, all separated by slashes. For example,
|
||||
if your Web Server URL is 'http://my.server.com', then you will want
|
||||
to specify the URL:
|
||||
|
||||
http://my.server.com/cgi-bin/web_ldap
|
||||
|
||||
NOTE: You can only run cgi scripts out of a directory that the Web Server
|
||||
allows. It is unlikely that you can execute Web Server CGI applications
|
||||
from your own directory.
|
||||
|
||||
This will provide a simple Web Based form. It will have 2 user entry
|
||||
fields. The first allows you to enter an LDAP request. The second
|
||||
allows you to specify a configuration file (it defaults to 'DEF').
|
||||
|
||||
Enter a simple LDAP request, such as the ones shown and see if you
|
||||
get back a response. You should if connected to 'ldap.bigfoot.com'.
|
||||
|
||||
|
||||
Now that you have it working:
|
||||
|
||||
Feel free to adapt this program to fit your needs. You will need
|
||||
to have the 'dn' in order to do updates. It is recovered within
|
||||
the program, so you can save it for use once you retrieve it
|
||||
(it is listed in the web_ldap.log file of you enable debug mode).
|
||||
|
||||
This program does not update anything. The goal was to create a very
|
||||
simple and expandable LDAP client and provide the complete source
|
||||
code for doing it. To this goal, it is successful. From here
|
||||
you should be able to experiment with the interfaces and create
|
||||
new functionality to suit your given needs.
|
||||
|
||||
This was tested against the UofM V 3.3 LDAP Libraries and the Netscape
|
||||
V 1.x and V 3.x SDK under both Irix 6.2 (Silicon Graphics) and
|
||||
Solaris 2.6 (Sun). I don't have other hardware or OS's to test
|
||||
against here.
|
||||
|
||||
|
||||
Usage Information:
|
||||
|
||||
If you want to find out what attributes are being used, you can enable
|
||||
the application to tell you all that it finds. Do this by simply
|
||||
not defining any attributes within the configuration file. It will
|
||||
list all the attributes it finds. You could create a special configuration
|
||||
file specifically for this purpose.
|
||||
|
||||
If you are getting fatal errors from your Web Server when you attempt to
|
||||
execute a command, please try the same command using interactive mode. Look
|
||||
to see if the HTML being generated makes sense or not. If the HTML
|
||||
looks good, run it again interactively and pipe the results to a file, then
|
||||
attempt to submit the resulting file as the URL. If it works, it is
|
||||
likely that the environment you run is different than the one the Web
|
||||
server is using - Unix file protections frequently are a cause of these
|
||||
problems. If you can't determine what is different, discuss the problem
|
||||
with your Unix system administrator - is is likely a resource problem.
|
||||
If you add code that causes problems, but you still get a result, try the
|
||||
application in interactive mode and verify the HTML being generated. Any
|
||||
additional HTML code you add may need to to have proper termination syntax
|
||||
(tables are very touchy about this), and you may need to further enhance
|
||||
your changes to compensate.
|
||||
|
||||
When creating new applications, please test your results on both
|
||||
Netscape's Web Browser and Internet Explorer. Nothing is more
|
||||
irritating to end users than getting different results based on their
|
||||
Web Browser selection.
|
||||
|
||||
The Unix Command line will not allow you to pass some characters into
|
||||
an application unless you surround the characters or command with quotes.
|
||||
Some common examples of executing web_ldap interactively are:
|
||||
|
||||
> web_ldap DEF "cn=j*moller"
|
||||
|
||||
> web_ldap DEF cn=jens moller
|
||||
|
||||
The command with the '*' in it requires quotes around it. Also note
|
||||
that the application only allows the LDAP command to use up to 3 argv
|
||||
values. This is as a limitation of the current parsing within the program
|
||||
of argc/argv parameters. You could alter the program, or simply put
|
||||
quotes around the LDAP request. Enable the debug mode within the
|
||||
configuration file if you feel that the application is losing
|
||||
arguments to see what its operating against. When operated by the Web Server,
|
||||
and passing in FORM data - you won't have this limitation, and you don't
|
||||
need quotes.
|
||||
|
||||
You can pass hidden fields from the Web Form into the web_ldap program.
|
||||
An example is shown with the name of 'FORM' having a value of '300'.
|
||||
You can create additional hidden fields, named anything you want them
|
||||
to be, with any value you want. These can be used to define existing
|
||||
options (such as which configuration file to use), or other options
|
||||
that your modified web_ldap.c program may want to have passed to it.
|
||||
|
||||
|
||||
Jens Moller - Jens@colomar.com - COLOMAR Group.
|
||||
OpenLDAP - OpenLDAP-devel@OpenLDAP.org.
|
Loading…
x
Reference in New Issue
Block a user