From 2cb79b0580b6b5629530c4d142a73a9a654f282f Mon Sep 17 00:00:00 2001 From: brian Date: Sun, 23 Nov 1997 20:27:41 +0000 Subject: Import version 1.5 of ppp. This is a user-level ppp implementation that uses the tun driver. It was originally created by a Japanese ISP. It's now piled with features. Check the man pages for details. The sources are identical to the ones in FreeBSD, except for the Makefile. IP aliasing (NAT) is disabled, and can be enabled by simply doing a ``make install'' of libalias, then rebuilding ppp. I'll create libalias as a port soon. --- usr.sbin/ppp/loadalias.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 usr.sbin/ppp/loadalias.c (limited to 'usr.sbin/ppp/loadalias.c') diff --git a/usr.sbin/ppp/loadalias.c b/usr.sbin/ppp/loadalias.c new file mode 100644 index 00000000000..3e4cf3bc4ed --- /dev/null +++ b/usr.sbin/ppp/loadalias.c @@ -0,0 +1,92 @@ +/* + * $Id: loadalias.c,v 1.1 1997/11/23 20:27:34 brian Exp $ + */ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "command.h" +#include "mbuf.h" +#include "log.h" +#include "systems.h" +#include "id.h" +#include "loadalias.h" +#include "defs.h" +#include "vars.h" + +#define _PATH_ALIAS "/usr/lib/libalias.so." ## __libalias_version + +#define off(item) ((int)&(((struct aliasHandlers *)0)->item)) +#define entry(a) { off(a), "_" #a } + +static struct { + int offset; + const char *name; +} map[] = { + entry(PacketAliasGetFragment), + entry(PacketAliasInit), + entry(PacketAliasIn), + entry(PacketAliasOut), + entry(PacketAliasRedirectAddr), + entry(PacketAliasRedirectPort), + entry(PacketAliasSaveFragment), + entry(PacketAliasSetAddress), + entry(PacketAliasSetMode), + entry(PacketAliasFragmentIn), + { 0, 0 } +}; + +static void *dl; + +int +loadAliasHandlers(struct aliasHandlers * h) +{ + const char *path; + const char *env; + int i; + + path = _PATH_ALIAS; + env = getenv("_PATH_ALIAS"); + if (env) + if (ID0realuid() == 0) + path = env; + else + LogPrintf(LogALERT, "Ignoring environment _PATH_ALIAS value (%s)\n", env); + + dl = dlopen(path, RTLD_LAZY); + if (dl == (void *) 0) { + LogPrintf(LogWARN, "_PATH_ALIAS (%s): Invalid lib: %s\n", + path, dlerror()); + return -1; + } + for (i = 0; map[i].name; i++) { + *(void **) ((char *) h + map[i].offset) = dlsym(dl, map[i].name); + if (*(void **) ((char *) h + map[i].offset) == (void *) 0) { + LogPrintf(LogWARN, "_PATH_ALIAS (%s): %s: %s\n", path, + map[i].name, dlerror()); + (void) dlclose(dl); + dl = (void *) 0; + return -1; + } + } + + VarPacketAliasInit(); + + return 0; +} + +void +unloadAliasHandlers() +{ + if (dl) { + dlclose(dl); + dl = (void *) 0; + } +} -- cgit v1.2.3