亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? auth-pam.c

?? 可以實現(xiàn)搭建VPN服務(wù)器
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *  OpenVPN -- An application to securely tunnel IP networks *             over a single TCP/UDP port, with support for SSL/TLS-based *             session authentication and key exchange, *             packet encryption, packet authentication, and *             packet compression. * *  Copyright (C) 2002-2005 OpenVPN Solutions LLC <info@openvpn.net> * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License version 2 *  as published by the Free Software Foundation. * *  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 (see the file COPYING included with this *  distribution); if not, write to the Free Software Foundation, Inc., *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *//* * OpenVPN plugin module to do PAM authentication using a split * privilege model. */#if DLOPEN_PAM#include <dlfcn.h>#include "pamdl.h"#else#include <security/pam_appl.h>#endif#include <stdio.h>#include <string.h>#include <ctype.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/wait.h>#include <fcntl.h>#include <signal.h>#include <syslog.h>#include "openvpn-plugin.h"#define DEBUG(verb) ((verb) >= 7)/* Command codes for foreground -> background communication */#define COMMAND_VERIFY 0#define COMMAND_EXIT   1/* Response codes for background -> foreground communication */#define RESPONSE_INIT_SUCCEEDED   10#define RESPONSE_INIT_FAILED      11#define RESPONSE_VERIFY_SUCCEEDED 12#define RESPONSE_VERIFY_FAILED    13/* * Plugin state, used by foreground */struct auth_pam_context{  /* Foreground's socket to background process */  int foreground_fd;  /* Process ID of background process */  pid_t background_pid;  /* Verbosity level of OpenVPN */  int verb;};/* * Name/Value pairs for conversation function. * Special Values: * *  "USERNAME" -- substitute client-supplied username *  "PASSWORD" -- substitute client-specified password */#define N_NAME_VALUE 16struct name_value {  const char *name;  const char *value;};struct name_value_list {  int len;  struct name_value data[N_NAME_VALUE];};/* * Used to pass the username/password * to the PAM conversation function. */struct user_pass {  int verb;  char username[128];  char password[128];  const struct name_value_list *name_value_list;};/* Background process function */static void pam_server (int fd, const char *service, int verb, const struct name_value_list *name_value_list);/* * Given an environmental variable name, search * the envp array for its value, returning it * if found or NULL otherwise. */static const char *get_env (const char *name, const char *envp[]){  if (envp)    {      int i;      const int namelen = strlen (name);      for (i = 0; envp[i]; ++i)	{	  if (!strncmp (envp[i], name, namelen))	    {	      const char *cp = envp[i] + namelen;	      if (*cp == '=')		return cp + 1;	    }	}    }  return NULL;}/* * Return the length of a string array */static intstring_array_len (const char *array[]){  int i = 0;  if (array)    {      while (array[i])	++i;    }  return i;}/* * Socket read/write functions. */static intrecv_control (int fd){  unsigned char c;  const ssize_t size = read (fd, &c, sizeof (c));  if (size == sizeof (c))    return c;  else    {      /*fprintf (stderr, "AUTH-PAM: DEBUG recv_control.read=%d\n", (int)size);*/      return -1;    }}static intsend_control (int fd, int code){  unsigned char c = (unsigned char) code;  const ssize_t size = write (fd, &c, sizeof (c));  if (size == sizeof (c))    return (int) size;  else    return -1;}static intrecv_string (int fd, char *buffer, int len){  if (len > 0)    {      ssize_t size;      memset (buffer, 0, len);      size = read (fd, buffer, len);      buffer[len-1] = 0;      if (size >= 1)	return (int)size;    }  return -1;}static intsend_string (int fd, const char *string){  const int len = strlen (string) + 1;  const ssize_t size = write (fd, string, len);  if (size == len)    return (int) size;  else    return -1;}/* * Daemonize if "daemon" env var is true. * Preserve stderr across daemonization if * "daemon_log_redirect" env var is true. */static voiddaemonize (const char *envp[]){  const char *daemon_string = get_env ("daemon", envp);  if (daemon_string && daemon_string[0] == '1')    {      const char *log_redirect = get_env ("daemon_log_redirect", envp);      int fd = -1;      if (log_redirect && log_redirect[0] == '1')	fd = dup (2);      if (daemon (0, 0) < 0)	{	  fprintf (stderr, "AUTH-PAM: daemonization failed\n");	}      else if (fd >= 3)	{	  dup2 (fd, 2);	  close (fd);	}    }}/* * Close most of parent's fds. * Keep stdin/stdout/stderr, plus one * other fd which is presumed to be * our pipe back to parent. * Admittedly, a bit of a kludge, * but posix doesn't give us a kind * of FD_CLOEXEC which will stop * fds from crossing a fork(). */static voidclose_fds_except (int keep){  int i;  closelog ();  for (i = 3; i <= 100; ++i)    {      if (i != keep)	close (i);    }}/* * Usually we ignore signals, because our parent will * deal with them. */static voidset_signals (void){  signal (SIGTERM, SIG_DFL);  signal (SIGINT, SIG_IGN);  signal (SIGHUP, SIG_IGN);  signal (SIGUSR1, SIG_IGN);  signal (SIGUSR2, SIG_IGN);  signal (SIGPIPE, SIG_IGN);}/* * Return 1 if query matches match. */static intname_value_match (const char *query, const char *match){  while (!isalnum (*query))    {      if (*query == '\0')	return 0;      ++query;    }  return strncasecmp (match, query, strlen (match)) == 0;}OPENVPN_EXPORT openvpn_plugin_handle_topenvpn_plugin_open_v1 (unsigned int *type_mask, const char *argv[], const char *envp[]){  pid_t pid;  int fd[2];  struct auth_pam_context *context;  struct name_value_list name_value_list;  const int base_parms = 2;  /*   * Allocate our context   */  context = (struct auth_pam_context *) calloc (1, sizeof (struct auth_pam_context));  context->foreground_fd = -1;  /*   * Intercept the --auth-user-pass-verify callback.   */  *type_mask = OPENVPN_PLUGIN_MASK (OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY);  /*   * Make sure we have two string arguments: the first is the .so name,   * the second is the PAM service type.   */  if (string_array_len (argv) < base_parms)    {      fprintf (stderr, "AUTH-PAM: need PAM service parameter\n");      goto error;    }  /*   * See if we have optional name/value pairs to match against   * PAM module queried fields in the conversation function.   */  name_value_list.len = 0;  if (string_array_len (argv) > base_parms)    {      const int nv_len = string_array_len (argv) - base_parms;      int i;      if ((nv_len & 1) == 1 || (nv_len / 2) > N_NAME_VALUE)	{	  fprintf (stderr, "AUTH-PAM: bad name/value list length\n");	  goto error;	}      name_value_list.len = nv_len / 2;      for (i = 0; i < name_value_list.len; ++i)	{	  const int base = base_parms + i * 2;	  name_value_list.data[i].name = argv[base];	  name_value_list.data[i].value = argv[base+1];	}    }  /*   * Get verbosity level from environment   */  {    const char *verb_string = get_env ("verb", envp);    if (verb_string)      context->verb = atoi (verb_string);  }  /*   * Make a socket for foreground and background processes   * to communicate.   */  if (socketpair (PF_UNIX, SOCK_DGRAM, 0, fd) == -1)    {      fprintf (stderr, "AUTH-PAM: socketpair call failed\n");      goto error;    }  /*   * Fork off the privileged process.  It will remain privileged   * even after the foreground process drops its privileges.   */  pid = fork ();  if (pid)    {      int status;      /*       * Foreground Process       */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成av人影院在线观看网| av在线一区二区三区| 国产精品一品二品| 欧美色图免费看| 国产精品视频在线看| 日韩二区三区在线观看| 91在线观看污| 久久久久久久久久久久电影| 五月婷婷久久综合| 在线视频综合导航| 亚洲色图欧美激情| 北条麻妃国产九九精品视频| 精品国精品国产尤物美女| 午夜精品久久久久久久蜜桃app| 成人黄色在线视频| 久久夜色精品国产欧美乱极品| 日韩av在线发布| 欧美色中文字幕| 一区二区三区在线播放| av在线免费不卡| 中文字幕巨乱亚洲| 国产馆精品极品| 久久亚洲精品小早川怜子| 日韩专区一卡二卡| 在线不卡中文字幕播放| 亚洲一卡二卡三卡四卡五卡| 91在线云播放| 亚洲男人的天堂在线观看| a级高清视频欧美日韩| 国产人伦精品一区二区| 高潮精品一区videoshd| 国产三级一区二区| 北条麻妃国产九九精品视频| 国产精品国产自产拍高清av王其 | 91丨porny丨中文| 国产精品久久毛片a| 成人激情免费电影网址| 亚洲女同一区二区| 在线观看国产一区二区| 亚洲福利视频三区| 91精品蜜臀在线一区尤物| 免费在线观看成人| 久久久久久久久久久99999| 国产精品18久久久久久久网站| 国产三级一区二区三区| 99久久精品免费看| 亚洲国产欧美在线| 日韩免费观看高清完整版 | 日韩精品一区二区三区视频| 日本aⅴ免费视频一区二区三区 | 国产成人免费视频一区| 国产精品美女久久久久久久久久久| 成人一区二区三区| 一区二区三区在线不卡| 日韩午夜精品电影| 国产成人精品免费看| 亚洲精品欧美专区| 欧美一区二区久久| 成人久久视频在线观看| 亚洲自拍偷拍麻豆| 日韩欧美国产精品| 97se亚洲国产综合自在线观| 天堂一区二区在线| 久久亚洲综合av| 欧美性色欧美a在线播放| 蜜桃在线一区二区三区| 日本一区二区成人在线| 欧美性感一区二区三区| 国产福利电影一区二区三区| 亚洲午夜免费视频| 国产欧美一区二区精品性色| 欧美日本在线看| 成人午夜视频福利| 蜜臀久久久99精品久久久久久| 中文字幕日韩一区二区| 欧美成人艳星乳罩| 欧美在线|欧美| 大白屁股一区二区视频| 美日韩黄色大片| 一区二区欧美在线观看| 日本一区二区在线不卡| 欧美一区二区三区四区久久| 91色综合久久久久婷婷| 国产麻豆精品一区二区| 亚洲午夜一区二区| 中文字幕在线一区| 精品国产乱子伦一区| 欧美欧美欧美欧美首页| 色婷婷综合久久久| 国产99精品在线观看| 久久97超碰国产精品超碰| 亚洲国产一区视频| 日韩毛片在线免费观看| 国产精品无遮挡| 精品不卡在线视频| 欧美一级片免费看| 欧美中文一区二区三区| 91麻豆123| 成人午夜精品一区二区三区| 国产一区二区不卡在线| 久88久久88久久久| 免费不卡在线观看| 午夜精品久久久久久久| 一区二区三区免费在线观看| 欧美国产在线观看| 中文在线一区二区| 国产欧美日韩另类视频免费观看| 精品国产乱码久久| 日韩免费一区二区| 亚洲精品一区二区三区蜜桃下载| 欧美一区二区三区在线观看| 欧美精品色综合| 欧美精品一级二级| 日韩欧美电影在线| 91精品视频网| 67194成人在线观看| 91精品国产aⅴ一区二区| 欧美欧美欧美欧美| 欧美一卡2卡3卡4卡| 日韩三级视频中文字幕| 日韩区在线观看| 久久综合久色欧美综合狠狠| 精品裸体舞一区二区三区| 精品第一国产综合精品aⅴ| xfplay精品久久| 欧美韩日一区二区三区四区| 国产精品日日摸夜夜摸av| 亚洲欧洲av在线| 亚洲激情图片一区| 日本在线观看不卡视频| 激情伊人五月天久久综合| 国产福利精品一区二区| 91美女在线观看| 欧美美女黄视频| 精品电影一区二区三区| 国产精品传媒在线| 亚洲高清中文字幕| 国产一区二区女| 91在线国产观看| 7777精品伊人久久久大香线蕉完整版| 4438亚洲最大| 国产亚洲一区字幕| 亚洲一区电影777| 狠狠色丁香婷婷综合久久片| 99精品视频免费在线观看| 欧美视频日韩视频在线观看| 精品国精品自拍自在线| 中文字幕一区在线观看| 日本美女一区二区| caoporn国产精品| 91精品国产高清一区二区三区| 中文字幕免费不卡| 日韩国产一区二| 99re8在线精品视频免费播放| 欧美日韩视频专区在线播放| 久久久国产精品午夜一区ai换脸| 中文字幕色av一区二区三区| 蜜桃av一区二区在线观看 | 日本一区二区三区免费乱视频| 一区二区三区四区视频精品免费| 免费观看91视频大全| 丰满少妇在线播放bd日韩电影| 欧美三级中文字| 国产精品视频观看| 久久成人免费网| 在线视频欧美区| 中文字幕视频一区二区三区久| 日本不卡的三区四区五区| 色综合色狠狠综合色| 欧美一区二区三区爱爱| 中文字幕欧美一| 国产成人激情av| 精品欧美一区二区久久| 日韩中文字幕亚洲一区二区va在线| av在线不卡观看免费观看| 久久毛片高清国产| 久久精品免费观看| 88在线观看91蜜桃国自产| 亚洲欧美一区二区三区国产精品 | 中文字幕欧美国产| 久久国产免费看| 日韩亚洲欧美中文三级| 亚洲综合免费观看高清完整版| 成人精品免费看| 久久精品视频一区二区三区| 久久66热偷产精品| 3d动漫精品啪啪一区二区竹菊| 亚洲一区在线播放| 欧美图区在线视频| 一区二区三区.www| 欧美性高清videossexo| 亚洲一区二区三区四区在线免费观看| 95精品视频在线| 亚洲男人天堂一区| 一本色道久久综合狠狠躁的推荐| 国产精品免费看片| www.99精品| 亚洲精品国产a| 欧美亚洲愉拍一区二区| 亚洲二区在线观看|