lsm_daemon.c File Reference

#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h>
#include <ctype.h>
#include <signal.h>
#include <sys/types.h>
#include <pwd.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <stdarg.h>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/queue.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <libgen.h>
#include <assert.h>
#include <grp.h>
#include <limits.h>
#include <libconfig.h>
Include dependency graph for lsm_daemon.c:

Go to the source code of this file.

Data Structures

struct  plugin

Defines

#define _GNU_SOURCE
#define BASE_DIR   "/var/run/lsm"
#define SOCKET_DIR   BASE_DIR"/ipc"
#define PLUGIN_DIR   "/usr/bin"
#define LSM_USER   "libstoragemgmt"
#define LSM_CONF_DIR   "/etc/lsm/"
#define LSM_PLUGIN_CONF_DIR_NAME   "pluginconf.d"
#define LSMD_CONF_FILE   "lsmd.conf"
#define LSM_CONF_ALLOW_ROOT_OPT_NAME   "allow-plugin-root-privilege"
#define LSM_CONF_REQUIRE_ROOT_OPT_NAME   "require-root-privilege"
#define min(a, b)
#define max(a, b)
#define log_and_exit(fmt,...)   logger(LOG_ERR, fmt, ##__VA_ARGS__)
#define warn(fmt,...)   logger(LOG_WARNING, fmt, ##__VA_ARGS__)
#define info(fmt,...)   logger(LOG_INFO, fmt, ##__VA_ARGS__)

Typedefs

typedef int(* file_op )(void *p, char *full_file_path)

Enumerations

enum  serve_type { RUNNING, RESTART, EXIT }

Functions

 LIST_HEAD (plugin_list, plugin)
void signal_handler (int s)
void install_sh (void)
void drop_privileges (void)
void flight_check (void)
void usage (void)
char * path_form (const char *path, const char *name)
void process_directory (char *dir, void *p, file_op call_back)
int delete_socket (void *p, char *full_name)
void clean_sockets ()
int setup_socket (char *full_name)
void empty_plugin_list (struct plugin_list *list)
void parse_conf_bool (char *conf_path, char *key_name, int *value)
int chk_pconf_root_pri (char *plugin_path)
int process_plugin (void *p, char *full_name)
void child_cleanup (void)
void clean_up (void)
int process_plugins (void)
struct pluginplugin_lookup (int fd)
void exec_plugin (char *plugin, int client_fd, int require_root)
void _serving (void)
void serve (void)
int main (int argc, char *argv[])

Variables

int verbose_flag = 0
int systemd = 0
char * socket_dir = SOCKET_DIR
char * plugin_dir = PLUGIN_DIR
char * conf_dir = LSM_CONF_DIR
char plugin_extension [] = "_lsmplugin"
char plugin_conf_extension [] = ".conf"
serve_type serve_state = RUNNING
int plugin_mem_debug = 0
int allow_root_plugin = 0
int has_root_plugin = 0

Define Documentation

#define _GNU_SOURCE

Definition at line 19 of file lsm_daemon.c.

#define BASE_DIR   "/var/run/lsm"

Definition at line 47 of file lsm_daemon.c.

#define info ( fmt,
...   )     logger(LOG_INFO, fmt, ##__VA_ARGS__)

Definition at line 136 of file lsm_daemon.c.

#define log_and_exit ( fmt,
...   )     logger(LOG_ERR, fmt, ##__VA_ARGS__)

Definition at line 134 of file lsm_daemon.c.

#define LSM_CONF_ALLOW_ROOT_OPT_NAME   "allow-plugin-root-privilege"

Definition at line 54 of file lsm_daemon.c.

#define LSM_CONF_DIR   "/etc/lsm/"

Definition at line 51 of file lsm_daemon.c.

#define LSM_CONF_REQUIRE_ROOT_OPT_NAME   "require-root-privilege"

Definition at line 55 of file lsm_daemon.c.

#define LSM_PLUGIN_CONF_DIR_NAME   "pluginconf.d"

Definition at line 52 of file lsm_daemon.c.

#define LSM_USER   "libstoragemgmt"

Definition at line 50 of file lsm_daemon.c.

#define LSMD_CONF_FILE   "lsmd.conf"

Definition at line 53 of file lsm_daemon.c.

#define max ( a,
 ) 
Value:
({ __typeof__ (a) _a = (a); \
       __typeof__ (b) _b = (b); \
     _a > _b ? _a : _b; })

Definition at line 62 of file lsm_daemon.c.

#define min ( a,
 ) 
Value:
({ __typeof__ (a) _a = (a); \
       __typeof__ (b) _b = (b); \
     _a < _b ? _a : _b; })

Definition at line 57 of file lsm_daemon.c.

#define PLUGIN_DIR   "/usr/bin"

Definition at line 49 of file lsm_daemon.c.

#define SOCKET_DIR   BASE_DIR"/ipc"

Definition at line 48 of file lsm_daemon.c.

#define warn ( fmt,
...   )     logger(LOG_WARNING, fmt, ##__VA_ARGS__)

Definition at line 135 of file lsm_daemon.c.


Typedef Documentation

typedef int(* file_op)(void *p, char *full_file_path)

Definition at line 254 of file lsm_daemon.c.


Enumeration Type Documentation

enum serve_type
Enumerator:
RUNNING 
RESTART 
EXIT 

Definition at line 78 of file lsm_daemon.c.


Function Documentation

void _serving ( void   ) 

Main event loop

Definition at line 739 of file lsm_daemon.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void child_cleanup ( void   ) 

Cleans up any children that have exited.

Definition at line 559 of file lsm_daemon.c.

Here is the caller graph for this function:

int chk_pconf_root_pri ( char *  plugin_path  ) 

Load plugin config for root privilege setting. If config not found, return 0 for no root privilege required.

Parameters:
plugin_path Full path of plugin
Returns:
1 for require root privilege, 0 or not.

Definition at line 474 of file lsm_daemon.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void clean_sockets (  ) 

Walk the IPC socket directory and remove the socket files.

Definition at line 339 of file lsm_daemon.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void clean_up ( void   ) 

Closes and frees memory and removes Unix domain sockets.

Definition at line 592 of file lsm_daemon.c.

Here is the call graph for this function:

Here is the caller graph for this function:

int delete_socket ( void *  p,
char *  full_name 
)

Callback to remove a unix domain socket by deleting it.

Parameters:
p Call back data
full_name Full path an and file name
Returns:
0 to continue processing, anything else to stop.

Definition at line 317 of file lsm_daemon.c.

Here is the caller graph for this function:

void drop_privileges ( void   ) 

If we are running as root, we will try to drop our privs. to our default user.

Definition at line 169 of file lsm_daemon.c.

Here is the caller graph for this function:

void empty_plugin_list ( struct plugin_list *  list  ) 

Closes all the listening sockets and re-claims memory in linked list.

Parameters:
list 

Definition at line 409 of file lsm_daemon.c.

Here is the caller graph for this function:

void exec_plugin ( char *  plugin,
int  client_fd,
int  require_root 
)

Does the actual fork and exec of the plug-in

Parameters:
plugin Full filename and path of plug-in to exec.
client_fd Client connected file descriptor
require_root int, indicate whether this plugin require root privilege or not

Definition at line 638 of file lsm_daemon.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void flight_check ( void   ) 

Check to make sure we have access to the directories of interest

Definition at line 203 of file lsm_daemon.c.

Here is the caller graph for this function:

void install_sh ( void   ) 

Installs our signal handler

Definition at line 154 of file lsm_daemon.c.

Here is the call graph for this function:

Here is the caller graph for this function:

LIST_HEAD ( plugin_list  ,
plugin   
)

Linked list of plug-ins

Definition at line 99 of file lsm_daemon.c.

int main ( int  argc,
char *  argv[] 
)

Definition at line 810 of file lsm_daemon.c.

Here is the call graph for this function:

void parse_conf_bool ( char *  conf_path,
char *  key_name,
int *  value 
)

Parse config and seeking provided key name bool 1. Keep value untouched if file not exist 2. If file is not readable, abort via log_and_exit() 3. Keep value untouched if provided key not found 4. Abort via log_and_exit() if no enough memory.

Parameters:
conf_path config file path
key_name string, searching key
value int, output, value of this config key

Definition at line 442 of file lsm_daemon.c.

Here is the caller graph for this function:

char* path_form ( const char *  path,
const char *  name 
)

Concatenates a path and a file name.

Parameters:
path Fully qualified path
name File name
Returns:
Concatenated string, caller must call free when done

Definition at line 241 of file lsm_daemon.c.

Here is the caller graph for this function:

struct plugin* plugin_lookup ( int  fd  )  [read]

Given a socket descriptor looks it up and returns the plug-in

Parameters:
fd Socket descriptor to lookup
Returns:
struct plugin

Definition at line 620 of file lsm_daemon.c.

Here is the caller graph for this function:

void process_directory ( char *  dir,
void *  p,
file_op  call_back 
)

For a given directory iterate through each directory item and exec the callback, recursively process nested directories too.

Parameters:
dir Directory to transverse
p Pointer to user data (Optional)
call_back Function to call against file
Returns:

Definition at line 264 of file lsm_daemon.c.

Here is the call graph for this function:

Here is the caller graph for this function:

int process_plugin ( void *  p,
char *  full_name 
)

Call back for plug-in processing.

Parameters:
p Private data
full_name Full path and file name
Returns:
0 to continue, else abort directory processing

Definition at line 519 of file lsm_daemon.c.

Here is the call graph for this function:

Here is the caller graph for this function:

int process_plugins ( void   ) 

Walks the plugin directory creating IPC sockets for each one.

Returns:

Definition at line 602 of file lsm_daemon.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void serve ( void   ) 

Main entry for daemon to work

Definition at line 798 of file lsm_daemon.c.

Here is the call graph for this function:

Here is the caller graph for this function:

int setup_socket ( char *  full_name  ) 

Given a fully qualified path and name to a plug-in, create the IPC socket.

Parameters:
full_name Full name and path for plug-in
Returns:
listening socket descriptor for IPC

Definition at line 350 of file lsm_daemon.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void signal_handler ( int  s  ) 

Our signal handler.

Parameters:
s Received signal

Definition at line 142 of file lsm_daemon.c.

Here is the caller graph for this function:

void usage ( void   ) 

Print help.

Definition at line 222 of file lsm_daemon.c.

Here is the caller graph for this function:


Variable Documentation

Definition at line 83 of file lsm_daemon.c.

char* conf_dir = LSM_CONF_DIR

Definition at line 72 of file lsm_daemon.c.

int has_root_plugin = 0

Definition at line 84 of file lsm_daemon.c.

char plugin_conf_extension[] = ".conf"

Definition at line 76 of file lsm_daemon.c.

char* plugin_dir = PLUGIN_DIR

Definition at line 71 of file lsm_daemon.c.

char plugin_extension[] = "_lsmplugin"

Definition at line 74 of file lsm_daemon.c.

Definition at line 81 of file lsm_daemon.c.

Definition at line 79 of file lsm_daemon.c.

char* socket_dir = SOCKET_DIR

Definition at line 70 of file lsm_daemon.c.

int systemd = 0

Definition at line 68 of file lsm_daemon.c.

int verbose_flag = 0

Definition at line 67 of file lsm_daemon.c.


Generated on 9 Jul 2015 for libStorageMgmt by  doxygen 1.6.1