misc.h

来自「OpenVPN -- A Secure tunneling daemon」· C头文件 代码 · 共 153 行

H
153
字号
/* *  OpenVPN -- An application to securely tunnel IP networks *             over a single UDP port, with support for SSL/TLS-based *             session authentication and key exchange, *             packet encryption, packet authentication, and *             packet compression. * *  Copyright (C) 2002-2003 James Yonan <jim@yonan.net> * *  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 (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 */#ifndef MISC_H#define MISC_H#include "basic.h"#include "common.h"/* socket descriptor passed by inetd/xinetd server to us */#define INETD_SOCKET_DESCRIPTOR 0/* Get/Set UID of process */struct user_state {#if defined(HAVE_GETPWNAM) && defined(HAVE_SETUID)  const char *username;  struct passwd *pw;#else  int dummy;#endif};void get_user (const char *username, struct user_state *state);void set_user (const struct user_state *state);/* Get/Set GID of process */struct group_state {#if defined(HAVE_GETGRNAM) && defined(HAVE_SETGID)  const char *groupname;  struct group *gr;#else  int dummy;#endif};void get_group (const char *groupname, struct group_state *state);void set_group (const struct group_state *state);void set_nice (int niceval);void do_chroot (const char *path);void run_script (const char *command, const char *arg, int tun_mtu, int udp_mtu,		 const char *ifconfig_local, const char* ifconfig_remote);/* workspace for get_pid_file/write_pid */struct pid_state {#ifdef HAVE_GETPID  FILE *fp;  const char *filename;#else  int dummy;#endif};void get_pid_file (const char* filename, struct pid_state *state);void write_pid (const struct pid_state *state);void do_mlockall (bool print_msg); /* Disable paging */#ifndef HAVE_DAEMONint daemon (int nochdir, int noclose);#endif/* check file protections */void warn_if_group_others_accessible(const char* filename);/* wrapper around the system() call. */int openvpn_system (const char *command);/* interpret the status code returned by system() */bool system_ok(int);const char *system_error_message (int);/* run system() with error check, return true if success,   false if error, exit if error and fatal==true */bool system_check (const char* command, const char* error_message, bool fatal);/* format a time_t as ascii, or use current time if 0 */const char* time_string (time_t t);#ifdef HAVE_STRERROR/* a thread-safe version of strerror */const char* strerror_ts (int errnum);#endif/* Set standard file descriptors to /dev/null */void set_std_files_to_null (void);/* Wrapper for chdir library function */int openvpn_chdir (const char* dir);/* dup inetd/xinetd socket descriptor and save */extern int inetd_socket_descriptor;void save_inetd_socket_descriptor (void);/* init random() function, only used as source for weak random numbers, when !USE_CRYPTO */void init_random_seed(void);/* an analogue to the random() function, but use OpenSSL functions if available */#ifdef USE_CRYPTOlong int get_random(void);#else#define get_random random#endif/* struct timeval functions */static inline booltv_defined (const struct timeval *tv){  return tv->tv_sec > 0;}/* return tv1 - tv2 in usec, constrained by max_seconds */static inline inttv_subtract (const struct timeval *tv1, const struct timeval *tv2, bool max_seconds){  const int max_usec = max_seconds * 1000000;  const int sec_diff = tv1->tv_sec - tv2->tv_sec;  if (sec_diff > (max_seconds + 10))    return max_usec;  else if (sec_diff < -(max_seconds + 10))    return -max_usec;  return constrain_int (sec_diff * 1000000 + (tv1->tv_usec - tv2->tv_usec), -max_usec, max_usec);}#endif

⌨️ 快捷键说明

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