⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plugins

📁 经典的ppp程序
💻
字号:
Starting with version 2.3.10, pppd includes support for `plugins' -pieces of code which can be loaded into pppd at runtime and which canaffect its behaviour in various ways.  The idea of plugins is toprovide a way for people to customize the behaviour of pppd withouthaving to either apply local patches to each version or get theirpatches accepted into the standard distribution.  My aim is thatplugins will be able to be used with successive versions of pppdwithout needing to recompile the plugins.A plugin is a standard shared library object, typically with a nameending in .so.  They are loaded using the standard dlopen() librarycall, so plugins are only supported on systems which support sharedlibraries and the dlopen call.  At present pppd is compiled withplugin support only under Linux and Solaris.Plugins are loaded into pppd using the `plugin' option, which takesone argument, the name of a shared object file.  The plugin option isa privileged option.  I suggest that you give the full path name ofthe shared object file; if you don't, it may be possible forunscrupulous users to substitute another shared object file for theone you mean to load, e.g. by setting the LD_LIBRARY_PATH variable.Plugins are usually written in C and compiled and linked to a sharedobject file in the appropriate manner for your platform.  Using gccunder Linux, a plugin called `xyz' could be compiled and linked withthe following commands:	gcc -c -O xyz.c	gcc -shared -o xyz.so xyz.oThere are some example plugins in the pppd/plugins directory in theppp distribution.  Currently there is one example, minconn.c, whichimplements a `minconnect' option, which specifies a minimum connecttime before the idle timeout applies.Plugins can access global variables within pppd, so it is useful forthem to #include "pppd.h" from the pppd source directory.Every plugin must contain a global procedure called `plugin_init'.This procedure will get called (with no arguments) immediately afterthe plugin is loaded.Plugins can affect the behaviour of pppd in at least three ways:1. They can add extra options which pppd will then recognize.  This is   done by calling the add_options() procedure with a pointer to an   array of option_t structures.  The last entry in the array must   have its name field set to NULL.2. Pppd contains `hook' variables which are procedure pointers.  If a   given hook is not NULL, pppd will call the procedure it points to   at the appropriate point in its processing.  The plugin can set any   of these hooks to point to its own procedures.  See below for a   description of the hooks which are currently implemented.3. Plugin code can call any global procedures and access any global   variables in pppd.Here is a list of the currently implemented hooks in pppd.int (*idle_time_hook)(struct ppp_idle *idlep);The idle_time_hook is called when the link first comes up (i.e. whenthe first network protocol comes up) and at intervals thereafter.  Onthe first call, the idlep parameter is NULL, and the return value isthe number of seconds before pppd should check the link activity, or 0if there is to be no idle timeout.On subsequent calls, idlep points to a structure giving the number ofseconds since the last packets were sent and received.  If the returnvalue is > 0, pppd will wait that many seconds before checking again.If it is <= 0, that indicates that the link should be terminated dueto lack of activity.int (*holdoff_hook)(void);The holdoff_hook is called when an attempt to bring up the link fails,or the link is terminated, and the persist or demand option was used.It returns the number of seconds that pppd should wait before tryingto reestablish the link (0 means immediately).int (*pap_check_hook)(void);int (*pap_passwd_hook)(char *user, char *passwd);int (*pap_auth_hook)(char *user, int userlen,		     char *passwd, int passlen,		     char **msgp, int *msglenp,		     struct wordlist **paddrs,		     struct wordlist **popts);These hooks are designed to allow a plugin to replace the normal PAPpassword processing in pppd with something different (e.g. contactingan external server).The pap_check_hook is called to check whether there is any possibilitythat the peer could authenticate itself to us.  If it returns 1, pppdwill ask the peer to authenticate itself.  If it returns 0, pppd willnot ask the peer to authenticate itself (but if authentication isrequired, pppd may exit, or terminate the link before network protocolnegotiation).  If it returns -1, pppd will look in the pap-secretsfile as it would normally.The pap_passwd_hook is called to determine what username and passwordpppd should use in authenticating itself to the peer with PAP.  Theuser string will already be initialized, by the `user' option, the`name' option, or from the hostname, but can be changed if necessary.MAXNAMELEN bytes of space are available at *user, and MAXSECRETLENbytes of space at *passwd.  If this hook returns 0, pppd will use thevalues at *user and *passwd; if it returns -1, pppd will look in thepap-secrets file, or use the value from the +ua or password option, asit would normally.The pap_auth_hook is called to determine whether the username andpassword supplied by the peer are valid.  user and passwd point tonull-terminated strings containing the username and password suppliedby the peer, with non-printable characters converted to a printableform.  The pap_auth_hook function should set msg to a string to bereturned to the peer and return 1 if the username/password was validand 0 if not.  If the hook returns -1, pppd will look in thepap-secrets file as usual.If the username/password was valid, the hook can set *paddrs to pointto a wordlist containing the IP address(es) which the peer ispermitted to use, formatted as in the pap-secrets file.  It can alsoset *popts to a wordlist containing any extra options for this userwhich pppd should apply at this point.## $Id: PLUGINS,v 1.2 1999/09/17 06:02:45 paulus Exp $ ##

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -