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

📄 mod_load.c.in

📁 这是 关于FTP最新版本的PROFTP的 源码
💻 IN
📖 第 1 页 / 共 2 页
字号:
/* * ProFTPD: mod_load -- a module for refusing connections based on system load * * Copyright (c) 2001-2005 TJ Saunders * * This program 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 of the License, or * (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA. * * As a special exemption, TJ Saunders and other respective copyright holders * give permission to link this program with OpenSSL, and distribute the * resulting executable, without including the source code for OpenSSL in the * source distribution. * * This is mod_load, contrib software for proftpd 1.2.x and above. * For more information contact TJ Saunders <tj@castaglia.org>. * * Based on the getloadavg.c file included in GNU make-3.79, which carries * the following copyright: * *   Copyright (C) 1985, 86, 87, 88, 89, 91, 92, 93, 1994, 1995, 1997 *     Free Software Foundation, Inc. *  * $Id: mod_load.c.in,v 1.3 2005/01/06 23:39:59 castaglia Exp $ * $Libraries: @MODULE_LIBS@ $ */#include "conf.h"#include "privs.h"#include "mod_load.h"#define MOD_LOAD_VERSION		"mod_load/1.0.1"/* Make sure the version of proftpd is as necessary. */#if PROFTPD_VERSION_NUMBER < 0x0001030001# error "ProFTPD 1.3.0rc1 or later required"#endif/* Support code.  Most of this is from getloadavg.c */#if defined (unix) || defined (__unix)# include <sys/param.h>#endif#ifndef HAVE_GETLOADAVG# if !defined(LDAV_CVT) && defined(LOAD_AVE_CVT)#  define LDAV_CVT(n) (LOAD_AVE_CVT (n) / 100.0)# endif# if !defined (BSD) && defined (ultrix)#  define BSD# endif# ifdef NeXT#  undef BSD#  undef FSCALE# endif# ifdef __GNU__#  undef BSD#  undef FSCALE# endif /* __GNU__ */# if defined (HPUX) && !defined (hpux)#  define hpux# endif# if defined (__hpux) && !defined (hpux)#  define hpux# endif# if defined (__sun) && !defined (sun)#  define sun# endif# if defined(hp300) && !defined(hpux)#  define MORE_BSD# endif# if defined(ultrix) && defined(mips)#  define decstation# endif# if defined (__SVR4) && !defined (SVR4)#  define SVR4# endif# if (defined(sun) && defined(SVR4)) || defined (SOLARIS2)#  define SUNOS_5# endif# if defined (__osf__) && (defined (__alpha) || defined (__alpha__))#  define OSF_ALPHA#  include <sys/mbuf.h>#  include <sys/socket.h>#  include <net/route.h>#  include <sys/table.h># endif# if defined (__osf__) && (defined (mips) || defined (__mips__))#  define OSF_MIPS#  include <sys/table.h># endif# if !defined (tek4300) && defined (unix) && defined (m68k) && defined (mc68000) && defined (mc68020) && defined (_MACH_IND_SYS_TYPES)#  define tek4300# endif# ifndef LOAD_AVE_TYPE#  ifdef MORE_BSD#   define LOAD_AVE_TYPE long#  endif#  ifdef sun#   define LOAD_AVE_TYPE long#  endif#  ifdef decstation#   define LOAD_AVE_TYPE long#  endif#  ifdef _SEQUENT_#   define LOAD_AVE_TYPE long#  endif#  ifdef sgi#   define LOAD_AVE_TYPE long#  endif#  ifdef SVR4#   define LOAD_AVE_TYPE long#  endif#  ifdef sony_news#   define LOAD_AVE_TYPE long#  endif#  ifdef sequent#   define LOAD_AVE_TYPE long#  endif#  ifdef OSF_ALPHA#   define LOAD_AVE_TYPE long#  endif#  if defined (ardent) && defined (titan)#   define LOAD_AVE_TYPE long#  endif#  ifdef tek4300#   define LOAD_AVE_TYPE long#  endif#  if defined(alliant) && defined(i860) /* Alliant FX/2800 */#   define LOAD_AVE_TYPE long#  endif#  ifdef _AIX#   define LOAD_AVE_TYPE long#  endif#  ifdef convex#   define LOAD_AVE_TYPE double#   ifndef LDAV_CVT#    define LDAV_CVT(n) (n)#   endif#  endif# endif /* No LOAD_AVE_TYPE.  */# ifdef OSF_ALPHA#  undef FSCALE#  define FSCALE 1024.0# endif# if defined(alliant) && defined(i860) /* Alliant FX/2800 */#  undef FSCALE#  define FSCALE 100.0# endif# ifndef        FSCALE#  ifdef MORE_BSD#   define FSCALE 2048.0#  endif#  if defined(MIPS) || defined(SVR4) || defined(decstation)#   define FSCALE 256#  endif#  if defined (sgi) || defined (sequent)#   undef FSCALE#   define      FSCALE 1000.0#  endif#  if defined (ardent) && defined (titan)#   define FSCALE 65536.0#  endif#  ifdef tek4300#   define FSCALE 100.0#  endif#  ifdef _AIX#   define FSCALE 65536.0#  endif# endif /* Not FSCALE.  */# if !defined (LDAV_CVT) && defined (FSCALE)#  define       LDAV_CVT(n) (((double) (n)) / FSCALE)# endif# ifndef NLIST_STRUCT#  ifdef MORE_BSD#   define NLIST_STRUCT#  endif#  ifdef sun#   define NLIST_STRUCT#  endif#  ifdef decstation#   define NLIST_STRUCT#  endif#  ifdef hpux#   define NLIST_STRUCT#  endif#  if defined (_SEQUENT_) || defined (sequent)#   define NLIST_STRUCT#  endif#  ifdef sgi#   define NLIST_STRUCT#  endif#  ifdef SVR4#   define NLIST_STRUCT#  endif#  ifdef sony_news#   define NLIST_STRUCT#  endif#  ifdef OSF_ALPHA#   define NLIST_STRUCT#  endif#  if defined (ardent) && defined (titan)#   define NLIST_STRUCT#  endif#  ifdef tek4300#   define NLIST_STRUCT#  endif#  ifdef butterfly#   define NLIST_STRUCT#  endif#  if defined(alliant) && defined(i860) /* Alliant FX/2800 */#   define NLIST_STRUCT#  endif#  ifdef _AIX#   define NLIST_STRUCT#  endif# endif /* defined (NLIST_STRUCT) */# if defined(sgi) || (defined(mips) && !defined(BSD))#  define FIXUP_KERNEL_SYMBOL_ADDR(nl) ((nl)[0].n_value &= ~(1 << 31))# endif# if !defined (KERNEL_FILE) && defined (sequent)#  define KERNEL_FILE "/dynix"# endif# if !defined (KERNEL_FILE) && defined (hpux)#  define KERNEL_FILE "/hp-ux"# endif# if !defined(KERNEL_FILE) && (defined(_SEQUENT_) || defined(MIPS) || defined(SVR4) || defined(ISC) || defined (sgi) || (defined (ardent) && defined (titan)))#  define KERNEL_FILE "/unix"# endif# if !defined (LDAV_SYMBOL) && defined (alliant)#  define LDAV_SYMBOL "_Loadavg"# endif# if !defined(LDAV_SYMBOL) && ((defined(hpux) && !defined(hp9000s300)) || defined(_SEQUENT_) || defined(SVR4) || defined(ISC) || defined(sgi) || (defined (ardent) && defined (titan)) || defined (_AIX))#  define LDAV_SYMBOL "avenrun"# endif# ifdef HAVE_UNISTD_H#  include <unistd.h># endif# include <stdio.h># if !defined(LOAD_AVE_TYPE) && (defined(BSD) || defined(LDAV_CVT) || defined(KERNEL_FILE) || defined(LDAV_SYMBOL))#  define LOAD_AVE_TYPE double# endif# ifdef LOAD_AVE_TYPE#  ifndef VMS#   ifndef __linux__#    ifndef NLIST_STRUCT#     include <a.out.h>#    else /* NLIST_STRUCT */#     include <nlist.h>#    endif /* NLIST_STRUCT */#    ifdef SUNOS_5#     include <fcntl.h>#     include <kvm.h>#     include <kstat.h>#    endif#    if defined (hpux) && defined (HAVE_PSTAT_GETDYNAMIC)#     include <sys/pstat.h>#    endif#    ifndef KERNEL_FILE#     define KERNEL_FILE "/vmunix"#    endif /* KERNEL_FILE */#    ifndef LDAV_SYMBOL#     define LDAV_SYMBOL "_avenrun"#    endif /* LDAV_SYMBOL */#   endif /* __linux__ */#  else /* VMS */#   ifndef eunice#    include <iodef.h>#    include <descrip.h>#   else /* eunice */#    include <vms/iodef.h>#   endif /* eunice */#  endif /* VMS */#  ifndef LDAV_CVT#   define LDAV_CVT(n) ((double) (n))#  endif /* !LDAV_CVT */# endif /* LOAD_AVE_TYPE */# if defined(__GNU__) && !defined (NeXT)#  define NeXT#  define host_self mach_host_self# endif# ifdef NeXT#  ifdef HAVE_MACH_MACH_H#   include <mach/mach.h>#  else#   include <mach.h>#  endif# endif /* NeXT */# ifdef sgi#  include <sys/sysmp.h># endif /* sgi */# ifdef UMAX#  include <stdio.h>#  include <signal.h>#  include <sys/time.h>#  include <sys/wait.h>#  include <sys/syscall.h>#  ifdef UMAX_43#   include <machine/cpu.h>#   include <inq_stats/statistics.h>#   include <inq_stats/sysstats.h>#   include <inq_stats/cpustats.h>#   include <inq_stats/procstats.h>#  else /* Not UMAX_43.  */#   include <sys/sysdefs.h>#   include <sys/statistics.h>#   include <sys/sysstats.h>#   include <sys/cpudefs.h>#   include <sys/cpustats.h>#   include <sys/procstats.h>#  endif /* Not UMAX_43.  */# endif /* UMAX */# ifdef DGUX#  include <sys/dg_sys_info.h># endif# if defined(HAVE_FCNTL_H) || defined(_POSIX_VERSION)#  include <fcntl.h># else#  include <sys/file.h># endif# ifdef NeXTstatic processor_set_t default_set;static int getloadavg_initialized;# endif /* NeXT */# ifdef UMAXstatic unsigned int cpus = 0;static unsigned int samples;# endif /* UMAX */# ifdef DGUXstatic struct dg_sys_info_load_info load_info;  /* what-a-mouthful! */# endif /* DGUX */# if !defined(HAVE_LIBKSTAT) && defined(LOAD_AVE_TYPE) && !defined(__linux__)/* File descriptor open to /dev/kmem or VMS load ave driver.  */static int channel;/* Nonzero iff channel is valid.  */static int getloadavg_initialized;/* Offset in kmem to seek to read load average, or 0 means invalid.  */static long offset;#  if !defined(VMS) && !defined(sgi) && !defined(__linux__)static struct nlist nl[2];#  endif /* Not VMS or sgi */#  ifdef SUNOS_5static kvm_t *kd;#  endif /* SUNOS_5 */# endif /* LOAD_AVE_TYPE && !HAVE_LIBKSTAT *//* Put the 1 minute, 5 minute and 15 minute load averages into the first * NELEM elements of LOADAVG.  Return the number written (never more than 3, * but may be less than NELEM), or -1 if an error occurred. */static int getloadavg(double *loadavg, int nelem) {  int elem = 0;                 /* Return value.  */# ifdef NO_GET_LOAD_AVG#  define LDAV_DONE  /* Set errno to zero to indicate that there was no particular error;     this function just can't work at all on this system.  */  errno = 0;  elem = -1;# endif# if !defined (LDAV_DONE) && defined (HAVE_LIBKSTAT)/* Use libkstat because we don't have to be root.  */#  define LDAV_DONE  kstat_ctl_t *kc;  kstat_t *ksp;  kstat_named_t *kn;  kc = kstat_open ();  if (kc == 0)    return -1;  ksp = kstat_lookup (kc, "unix", 0, "system_misc");  if (ksp == 0 )    return -1;  if (kstat_read (kc, ksp, 0) == -1)    return -1;  kn = kstat_data_lookup (ksp, "avenrun_1min");  if (kn == 0)    {      /* Return -1 if no load average information is available.  */      nelem = 0;      elem = -1;    }  if (nelem >= 1)    loadavg[elem++] = (double) kn->value.ul/FSCALE;  if (nelem >= 2)    {      kn = kstat_data_lookup (ksp, "avenrun_5min");      if (kn != 0)        {          loadavg[elem++] = (double) kn->value.ul/FSCALE;          if (nelem >= 3)            {              kn = kstat_data_lookup (ksp, "avenrun_15min");              if (kn != 0)                loadavg[elem++] = (double) kn->value.ul/FSCALE;            }        }    }  kstat_close (kc);# endif /* HAVE_LIBKSTAT */# if !defined (LDAV_DONE) && defined (hpux) && defined (HAVE_PSTAT_GETDYNAMIC)/* Use pstat_getdynamic() because we don't have to be root.  */#  define LDAV_DONE#  undef LOAD_AVE_TYPE  struct pst_dynamic dyn_info;  if (pstat_getdynamic (&dyn_info, sizeof (dyn_info), 0, 0) < 0)    return -1;  if (nelem > 0)    loadavg[elem++] = dyn_info.psd_avg_1_min;  if (nelem > 1)    loadavg[elem++] = dyn_info.psd_avg_5_min;  if (nelem > 2)    loadavg[elem++] = dyn_info.psd_avg_15_min;# endif /* hpux && HAVE_PSTAT_GETDYNAMIC */# if !defined (LDAV_DONE) && defined (__linux__)#  define LDAV_DONE#  undef LOAD_AVE_TYPE#  ifndef LINUX_LDAV_FILE#   define LINUX_LDAV_FILE "/proc/loadavg"#  endif  char ldavgbuf[40];  double load_ave[3];  int fd, count;  fd = open (LINUX_LDAV_FILE, O_RDONLY);  if (fd == -1)    return -1;  count = read (fd, ldavgbuf, 40);  (void) close (fd);  if (count <= 0)    return -1;

⌨️ 快捷键说明

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