OpenVPN
auth-pam.c File Reference
#include <security/pam_appl.h>
#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 <limits.h>
#include "utils.h"
#include <arpa/inet.h>
#include <openvpn-plugin.h>
Include dependency graph for auth-pam.c:

Go to the source code of this file.

Data Structures

struct  auth_pam_context
struct  name_value
struct  name_value_list
struct  user_pass

Macros

#define DEBUG(verb)
#define COMMAND_VERIFY   0
#define COMMAND_EXIT   1
#define RESPONSE_INIT_SUCCEEDED   10
#define RESPONSE_INIT_FAILED   11
#define RESPONSE_VERIFY_SUCCEEDED   12
#define RESPONSE_VERIFY_FAILED   13
#define RESPONSE_DEFER   14
#define N_NAME_VALUE   16

Functions

static void pam_server (int fd, const char *service, int verb, const struct name_value_list *name_value_list)
static int recv_control (int fd)
static int send_control (int fd, int code)
static ssize_t recv_string (int fd, char *buffer, size_t len)
static ssize_t send_string (int fd, const char *string)
static void close_fds_except (int keep)
static void set_signals (void)
static int name_value_match (const char *query, const char *match)
static void split_scrv1_password (struct user_pass *up)
OPENVPN_EXPORT int openvpn_plugin_open_v3 (const int v3structver, struct openvpn_plugin_args_open_in const *args, struct openvpn_plugin_args_open_return *ret)
OPENVPN_EXPORT int openvpn_plugin_func_v1 (openvpn_plugin_handle_t handle, const int type, const char *argv[], const char *envp[])
OPENVPN_EXPORT void openvpn_plugin_close_v1 (openvpn_plugin_handle_t handle)
OPENVPN_EXPORT void openvpn_plugin_abort_v1 (openvpn_plugin_handle_t handle)
static int my_conv (int num_msg, const struct pam_message **msg_array, struct pam_response **response_array, void *appdata_ptr)
static int pam_auth (const char *service, const struct user_pass *up)
static void do_deferred_pam_auth (int fd, const char *ac_file_name, const char *service, const struct user_pass *up)

Variables

static plugin_log_t plugin_log = NULL
static plugin_secure_memzero_t plugin_secure_memzero = NULL
static plugin_base64_decode_t plugin_base64_decode = NULL
static char * MODULE = "AUTH-PAM"

Macro Definition Documentation

◆ COMMAND_EXIT

#define COMMAND_EXIT   1

◆ COMMAND_VERIFY

#define COMMAND_VERIFY   0

Definition at line 57 of file auth-pam.c.

Referenced by openvpn_plugin_func_v1(), and pam_server().

◆ DEBUG

#define DEBUG ( verb)
Value:
((verb) >= 4)

Definition at line 54 of file auth-pam.c.

Referenced by my_conv(), openvpn_plugin_close_v1(), openvpn_plugin_func_v1(), pam_server(), and split_scrv1_password().

◆ N_NAME_VALUE

#define N_NAME_VALUE   16

Definition at line 100 of file auth-pam.c.

Referenced by openvpn_plugin_open_v3().

◆ RESPONSE_DEFER

#define RESPONSE_DEFER   14

Definition at line 65 of file auth-pam.c.

Referenced by do_deferred_pam_auth(), and openvpn_plugin_func_v1().

◆ RESPONSE_INIT_FAILED

#define RESPONSE_INIT_FAILED   11

Definition at line 62 of file auth-pam.c.

Referenced by pam_server().

◆ RESPONSE_INIT_SUCCEEDED

#define RESPONSE_INIT_SUCCEEDED   10

◆ RESPONSE_VERIFY_FAILED

#define RESPONSE_VERIFY_FAILED   13

Definition at line 64 of file auth-pam.c.

Referenced by pam_server().

◆ RESPONSE_VERIFY_SUCCEEDED

#define RESPONSE_VERIFY_SUCCEEDED   12

Definition at line 63 of file auth-pam.c.

Referenced by openvpn_plugin_func_v1(), and pam_server().

Function Documentation

◆ close_fds_except()

void close_fds_except ( int keep)
static

Definition at line 253 of file auth-pam.c.

Referenced by openvpn_plugin_open_v3().

◆ do_deferred_pam_auth()

void do_deferred_pam_auth ( int fd,
const char * ac_file_name,
const char * service,
const struct user_pass * up )
static

Definition at line 852 of file auth-pam.c.

References MODULE, pam_auth(), plugin_log, RESPONSE_DEFER, send_control(), service, user_pass::username, and write.

Referenced by pam_server().

◆ my_conv()

int my_conv ( int num_msg,
const struct pam_message ** msg_array,
struct pam_response ** response_array,
void * appdata_ptr )
static

◆ name_value_match()

int name_value_match ( const char * query,
const char * match )
static

Definition at line 286 of file auth-pam.c.

Referenced by my_conv().

◆ openvpn_plugin_abort_v1()

OPENVPN_EXPORT void openvpn_plugin_abort_v1 ( openvpn_plugin_handle_t handle)

Definition at line 636 of file auth-pam.c.

References COMMAND_EXIT, and send_control().

◆ openvpn_plugin_close_v1()

OPENVPN_EXPORT void openvpn_plugin_close_v1 ( openvpn_plugin_handle_t handle)

Definition at line 605 of file auth-pam.c.

References COMMAND_EXIT, DEBUG, MODULE, plugin_log, and send_control().

◆ openvpn_plugin_func_v1()

OPENVPN_EXPORT int openvpn_plugin_func_v1 ( openvpn_plugin_handle_t handle,
const int type,
const char * argv[],
const char * envp[] )

◆ openvpn_plugin_open_v3()

OPENVPN_EXPORT int openvpn_plugin_open_v3 ( const int v3structver,
struct openvpn_plugin_args_open_in const * args,
struct openvpn_plugin_args_open_return * ret )

◆ pam_auth()

int pam_auth ( const char * service,
const struct user_pass * up )
static

◆ pam_server()

◆ recv_control()

int recv_control ( int fd)
static

Definition at line 141 of file auth-pam.c.

References read.

Referenced by openvpn_plugin_func_v1(), openvpn_plugin_open_v3(), and pam_server().

◆ recv_string()

ssize_t recv_string ( int fd,
char * buffer,
size_t len )
static

Definition at line 172 of file auth-pam.c.

References name_value_list::len, and read.

Referenced by pam_server().

◆ send_control()

int send_control ( int fd,
int code )
static

◆ send_string()

ssize_t send_string ( int fd,
const char * string )
static

Definition at line 188 of file auth-pam.c.

References name_value_list::len, and write.

Referenced by openvpn_plugin_func_v1().

◆ set_signals()

void set_signals ( void )
static

Definition at line 271 of file auth-pam.c.

References SIGHUP, SIGINT, SIGTERM, SIGUSR1, and SIGUSR2.

Referenced by openvpn_plugin_open_v3().

◆ split_scrv1_password()

void split_scrv1_password ( struct user_pass * up)
static

Variable Documentation

◆ MODULE

char* MODULE = "AUTH-PAM"
static

Definition at line 73 of file auth-pam.c.

◆ plugin_base64_decode

plugin_base64_decode_t plugin_base64_decode = NULL
static

Definition at line 70 of file auth-pam.c.

Referenced by split_scrv1_password().

◆ plugin_log

◆ plugin_secure_memzero

plugin_secure_memzero_t plugin_secure_memzero = NULL
static

Definition at line 69 of file auth-pam.c.

Referenced by pam_server(), and split_scrv1_password().