-/* $Id: yaz-proxy-main.cpp,v 1.2 2004-04-11 11:58:35 adam Exp $
- Copyright (c) 1998-2004, Index Data.
+/* $Id: yaz-proxy-main.cpp,v 1.12 2005-02-21 14:27:32 adam Exp $
+ Copyright (c) 1998-2005, Index Data.
This file is part of the yaz-proxy.
-Zebra is free software; you can redistribute it and/or modify it under
+YAZ proxy is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.
-Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
+YAZ proxy is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
-along with Zebra; see the file LICENSE.proxy. If not, write to the
+along with YAZ proxy; see the file LICENSE. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
-#ifdef WIN32
-#else
#include <signal.h>
+#if HAVE_UNISTD_H
#include <unistd.h>
-#include <pwd.h>
#endif
+#if HAVE_SYS_TYPES_H
#include <sys/types.h>
-
-#include <stdarg.h>
-
-#if HAVE_GETRLIMIT
+#endif
+#if HAVE_SYS_TIME_H
#include <sys/time.h>
+#endif
+#if HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+#if HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif
+#if HAVE_PWD_H
+#include <pwd.h>
+#endif
+
+#include <stdarg.h>
+#include <stdlib.h>
#include <yaz/log.h>
#include <yaz/options.h>
#include <yaz++/pdu-assoc.h>
#include <yazproxy/proxy.h>
+#if HAVE_XSLT
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <libxslt/xsltutils.h>
+#include <libxslt/transform.h>
+#endif
+
void usage(char *prog)
{
fprintf (stderr, "%s: [-c config] [-l log] [-a log] [-v level] [-t target] "
char *prog = argv[0];
int ret;
- while ((ret = options("o:a:t:v:c:u:i:m:l:T:p:U:n:X",
+ while ((ret = options("o:a:t:v:c:u:i:m:l:T:p:n:X",
argv, argc, &arg)) != -2)
{
int err;
err = proxy->set_config(arg);
if (err == -2)
{
- fprintf(stderr, "Config file support not enabled (proxy not compiled with libxml2 support)\n");
+ fprintf(stderr, "Config file support not enabled (not using libxslt & libxml2)\n");
exit(1);
}
else if (err == -1)
case 't':
proxy->set_default_target(arg);
break;
- case 'U':
- proxy->set_proxy_authentication(arg);
- break;
case 'o':
proxy->option("optimize", arg);
break;
no_limit_files = atoi(arg);
break;
case 'X':
+ proxy->set_debug_mode(1);
debug = 1;
break;
case 'p':
{
if (proxy->server(addr))
{
- yaz_log(LOG_FATAL|LOG_ERRNO, "listen %s", addr);
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "listen %s", addr);
exit(1);
}
}
#else
vsnprintf(buf, sizeof(buf), fmt, ap);
#endif
- yaz_log(LOG_WARN, "%s: %s", (char*) ctx, buf);
+ yaz_log(YLOG_WARN, "%s: %s", (char*) ctx, buf);
va_end (ap);
}
#endif
#ifdef WIN32
#else
- yaz_log(LOG_LOG, "0 proxy run=%d pid=%ld", run, (long) getpid());
+ yaz_log(YLOG_LOG, "0 proxy run=%d pid=%ld", run, (long) getpid());
#endif
if (no_limit_files)
{
limit_data.rlim_cur = no_limit_files;
limit_data.rlim_max = no_limit_files;
- yaz_log(LOG_LOG, "0 setrlimit NOFILE cur=%d max=%d",
- limit_data.rlim_cur, limit_data.rlim_max);
+ yaz_log(YLOG_LOG, "0 setrlimit NOFILE cur=%ld max=%ld",
+ (long) limit_data.rlim_cur, (long) limit_data.rlim_max);
if (setrlimit(RLIMIT_NOFILE, &limit_data))
- yaz_log(LOG_ERRNO|LOG_WARN, "setrlimit");
+ yaz_log(YLOG_ERRNO|YLOG_WARN, "setrlimit");
#else
- yaz_log(LOG_WARN, "setrlimit unavablable. Option -n ignored");
+ yaz_log(YLOG_WARN, "setrlimit unavablable. Option -n ignored");
#endif
}
#ifdef WIN32
FILE *f = fopen(pid_fname, "w");
if (!f)
{
- yaz_log(LOG_ERRNO|LOG_FATAL, "Couldn't create %s", pid_fname);
+ yaz_log(YLOG_ERRNO|YLOG_FATAL, "Couldn't create %s", pid_fname);
exit(0);
}
fprintf(f, "%ld", (long) getpid());
if (!(pw = getpwnam(uid)))
{
- yaz_log(LOG_FATAL, "%s: Unknown user", uid);
+ yaz_log(YLOG_FATAL, "%s: Unknown user", uid);
exit(3);
}
if (log_file)
}
if (setuid(pw->pw_uid) < 0)
{
- yaz_log(LOG_FATAL|LOG_ERRNO, "setuid");
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "setuid");
exit(4);
}
xfree(uid);
#if HAVE_GETRLIMIT
struct rlimit limit_data;
getrlimit(RLIMIT_NOFILE, &limit_data);
- yaz_log(LOG_LOG, "0 getrlimit NOFILE cur=%d max=%d",
- limit_data.rlim_cur, limit_data.rlim_max);
+ yaz_log(YLOG_LOG, "0 getrlimit NOFILE cur=%ld max=%ld",
+ (long) limit_data.rlim_cur, (long) limit_data.rlim_max);
#endif
while (m->processEvent() > 0)
pid_t p = fork();
if (p == (pid_t) -1)
{
- yaz_log(LOG_FATAL|LOG_ERRNO, "fork");
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "fork");
exit(1);
}
else if (p == 0)
if (p1 != p)
{
- yaz_log(LOG_FATAL, "p1=%d != p=%d", p1, p);
+ yaz_log(YLOG_FATAL, "p1=%d != p=%d", p1, p);
exit(1);
}
if (WIFSIGNALED(status))
{
switch(WTERMSIG(status)) {
case SIGILL:
- yaz_log(LOG_WARN, "Received SIGILL from child %ld", (long) p);
+ yaz_log(YLOG_WARN, "Received SIGILL from child %ld", (long) p);
cont = 1;
break;
case SIGABRT:
- yaz_log(LOG_WARN, "Received SIGABRT from child %ld", (long) p);
+ yaz_log(YLOG_WARN, "Received SIGABRT from child %ld", (long) p);
cont = 1;
break ;
case SIGSEGV:
- yaz_log(LOG_WARN, "Received SIGSEGV from child %ld", (long) p);
+ yaz_log(YLOG_WARN, "Received SIGSEGV from child %ld", (long) p);
cont = 1;
break;
case SIGBUS:
- yaz_log(LOG_WARN, "Received SIGBUS from child %ld", (long) p);
+ yaz_log(YLOG_WARN, "Received SIGBUS from child %ld", (long) p);
cont = 1;
break;
case SIGTERM:
- yaz_log(LOG_LOG, "Received SIGTERM from child %ld",
+ yaz_log(YLOG_LOG, "Received SIGTERM from child %ld",
(long) p);
cont = 0;
break;
default:
- yaz_log(LOG_WARN, "Received SIG %d from child %ld",
+ yaz_log(YLOG_WARN, "Received SIG %d from child %ld",
WTERMSIG(status), (long) p);
cont = 0;
}
cont = 0;
else
{
- yaz_log(LOG_LOG, "Exit %d from child %ld", status, (long) p);
+ yaz_log(YLOG_LOG, "Exit %d from child %ld", status, (long) p);
cont = 1;
}
if (cont)