blob: 453b8b0891f2d73e1e3cdc167520dda0c6ace961 [file] [log] [blame]
/*
* Copyright (C) Tildeslash Ltd. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3.
*
* 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 Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* In addition, as a special exception, the copyright holders give
* permission to link the code of portions of this program with the
* OpenSSL library under certain conditions as described in each
* individual source file, and distribute linked combinations
* including the two.
*
* You must obey the GNU Affero General Public License in all respects
* for all of the code used other than OpenSSL.
*/
#ifndef MONIT_FILE_H
#define MONIT_FILE_H
/**
* Utilities used for managing files used by monit.
*
* @file
*/
/**
* Initialize the programs file variables
*/
void file_init();
/**
* Finalize and remove temporary files
*/
void file_finalize();
/**
* Get a object's last modified timestamp.
* @param object A object to stat
* @param type Requested object's type
* @return Max of either st_mtime or st_ctime or
* FALSE if not found or different type of object
*/
time_t file_getTimestamp(char *object, mode_t type);
/**
* Search the system for the monit control file. Try first ~/.monitrc,
* if that fails try /etc/monitrc, then /usr/local/etc/monitrc and
* finally ./monitrc. Exit the application if the control file was
* not found.
* @return The location of monits control file (monitrc)
*/
char *file_findControlFile();
/**
* Create a program's pidfile - Such a file is created when in daemon
* mode. The file is created with mask = MYPIDMASK (usually 644).
* @param pidfile The name of the pidfile to create
* @return TRUE if the file was created, otherwise FALSE.
*/
int file_createPidFile(char *pidfile);
/**
* Check if the file is a regular file
* @param file A path to the file to check
* @return TRUE if file exist and is a regular file, otherwise FALSE
*/
int file_isFile(char *file);
/**
* Check if this is a directory.
* @param dir An absolute directory path
* @return TRUE if dir exist and is a regular directory, otherwise
* FALSE
*/
int file_isDirectory(char *dir);
/**
* Check if this is a fifo
* @param fifo A path to the fifo to check
* @return TRUE if fifo exist, otherwise FALSE
*/
int file_isFifo(char *fifo);
/**
* Check if the file exist on the system
* @file A path to the file to check
* @return TRUE if file exist otherwise FALSE
*/
int file_exist(char *file);
/**
* Security check for files. The files must have the same uid as the
* REAL uid of this process, it must have permissions no greater than
* "maxpermission" and it must not be a symbolic link. We check these
* conditions here.
* @param filename The filename of the checked file
* @param description The description of the checked file
* @param permmask The permission mask for the file
* @return TRUE if the test succeeded otherwise FALSE
*/
int file_checkStat(char *filename, char *description, int permmask);
/**
* Check whether the specified directory exist or create it using
* specified mode.
* @param path The fully qualified path to the directory
* @param mode The permission for the directory
* @return TRUE if the succeeded otherwise FALSE
*/
int file_checkQueueDirectory(char *path, mode_t mode);
/**
* Check the queue size limit.
* @param path The fully qualified path to the directory
* @param mode The queue limit
* @return TRUE if the succeeded otherwise FALSE
*/
int file_checkQueueLimit(char *path, int limit);
/**
* Write data to the queue file
* @param file Filedescriptor to write to
* @param data Data to be written
* @param size Size of the data to be written
* @return TRUE if the succeeded otherwise FALSE
*/
int file_writeQueue(FILE *file, void *data, size_t size);
/**
* Read the data from the queue file's actual position
* @param file Filedescriptor to read from
* @param size Size of the data read
* @return The data read if any or NULL. The size parameter is set
* appropriately.
*/
void *file_readQueue(FILE *file, size_t *size);
#endif