003 File Manager
Current Path:
/usr/local/include/proftpd
usr
/
local
/
include
/
proftpd
/
📁
..
📄
acconfig.h
(2.79 KB)
📄
ascii.h
(2.61 KB)
📄
auth.h
(6.23 KB)
📄
bindings.h
(7.84 KB)
📄
buildstamp.h
(50 B)
📄
ccan-json.h
(3.59 KB)
📄
child.h
(1.48 KB)
📄
class.h
(3.02 KB)
📄
cmd.h
(4.33 KB)
📄
compat.h
(2.03 KB)
📄
conf.h
(3.61 KB)
📄
config.h
(33.97 KB)
📄
configdb.h
(5.58 KB)
📄
ctrls.h
(7.92 KB)
📄
data.h
(2.52 KB)
📄
default_paths.h
(2.97 KB)
📄
dirtree.h
(7.45 KB)
📄
display.h
(2.46 KB)
📄
encode.h
(3.67 KB)
📄
env.h
(1.87 KB)
📄
error.h
(18.45 KB)
📄
event.h
(3.5 KB)
📄
expr.h
(2.16 KB)
📄
feat.h
(1.27 KB)
📄
filter.h
(2.06 KB)
📄
fsio.h
(18.58 KB)
📄
ftp.h
(8.92 KB)
📄
glibc-glob.h
(7.12 KB)
📄
hanson-tpl.h
(4.4 KB)
📄
help.h
(1.24 KB)
📄
ident.h
(1.3 KB)
📄
inet.h
(5.13 KB)
📄
jot.h
(8.44 KB)
📄
json.h
(5.34 KB)
📄
lastlog.h
(1.62 KB)
📄
libsupp.h
(3.42 KB)
📄
log.h
(6.66 KB)
📄
logfmt.h
(3.3 KB)
📄
memcache.h
(4.94 KB)
📄
mkhome.h
(1.53 KB)
📄
mod_ctrls.h
(3.38 KB)
📄
mod_dnsbl.h
(1.36 KB)
📄
mod_quotatab.h
(6.11 KB)
📄
mod_sftp.h
(8.98 KB)
📄
mod_snmp.h
(2.22 KB)
📄
mod_sql.h
(3.71 KB)
📄
mod_tls.h
(6.33 KB)
📄
mod_wrap2.h
(2.63 KB)
📄
modules.h
(6.3 KB)
📄
netacl.h
(2.51 KB)
📄
netaddr.h
(15.58 KB)
📄
netio.h
(7.98 KB)
📄
openbsd-blowfish.h
(2.88 KB)
📄
options.h
(8.12 KB)
📄
os.h
(7.03 KB)
📄
parser.h
(5.94 KB)
📄
pidfile.h
(1.3 KB)
📄
pool.h
(3.49 KB)
📄
pr-syslog.h
(3.47 KB)
📄
privs.h
(2.55 KB)
📄
proctitle.h
(1.64 KB)
📄
proftpd.h
(9.46 KB)
📄
random.h
(1.29 KB)
📄
redis.h
(15.21 KB)
📄
regexp.h
(3.15 KB)
📄
response.h
(3.07 KB)
📄
rlimit.h
(1.83 KB)
📄
scoreboard.h
(4.57 KB)
📄
session.h
(4.27 KB)
📄
sets.h
(1.94 KB)
📄
signals.h
(1.42 KB)
📄
stash.h
(2.12 KB)
📄
str.h
(5.37 KB)
📄
support.h
(4.39 KB)
📄
table.h
(11.43 KB)
📄
throttle.h
(1.26 KB)
📄
timers.h
(3.29 KB)
📄
trace.h
(2.36 KB)
📄
utf8.h
(1.37 KB)
📄
var.h
(4.32 KB)
📄
version.h
(1.59 KB)
📄
xferlog.h
(1.34 KB)
Editing: ctrls.h
/* * ProFTPD - FTP server daemon * Copyright (c) 2001-2016 The ProFTPD Project team * * 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; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA. * * As a special exemption, Public Flood Software/MacGyver aka Habeeb J. Dihu * and other respective copyright holders give permission to link this program * with OpenSSL, and distribute the resulting executable, without including * the source code for OpenSSL in the source distribution. */ /* Controls API definitions */ #ifndef PR_CTRLS_H #define PR_CTRLS_H #include <sys/un.h> #include "conf.h" /* Controls API build-time necessities */ /* mode for control socket */ #define PR_CTRLS_MODE 0777 /* mode for client sockets */ #define PR_CTRLS_CL_MODE S_IRWXU /* Controls API objects */ /* Controls client object */ typedef struct cl_obj { struct cl_obj *cl_next, *cl_prev; /* Pool for this object's use */ pool *cl_pool; /* Client socket file descriptor */ int cl_fd; /* Credentials of the connecting client */ uid_t cl_uid; const char *cl_user; gid_t cl_gid; const char *cl_group; pid_t cl_pid; /* For internal use only */ volatile unsigned long cl_flags; /* Pointers to all controls matching client request */ array_header *cl_ctrls; } pr_ctrls_cl_t; /* Controls client flag values */ #define PR_CTRLS_CL_HAVEREQ 0x001 #define PR_CTRLS_CL_HAVERESP 0x002 #define PR_CTRLS_CL_NOACCESS 0x004 #define PR_CTRLS_CL_NOACTION 0x010 #define PR_CTRLS_CL_BLOCKED 0x020 /* Controls handler object */ typedef struct ctrls_obj { struct ctrls_obj *ctrls_next, *ctrls_prev; /* Object ID */ unsigned int ctrls_id; /* Registering module */ const module *ctrls_module; /* Requesting client */ pr_ctrls_cl_t *ctrls_cl; /* Control "action" */ const char *ctrls_action; /* Control trigger time. If 0, triggers immediately */ time_t ctrls_when; /* Simple description/help text */ const char *ctrls_desc; /* Temporary pool */ pool *ctrls_tmp_pool; /* Control handler callback */ int (*ctrls_cb)(struct ctrls_obj *, int, char **); /* Control handler callback arguments */ array_header *ctrls_cb_args; /* Control handler callback return value. Used to determine when to clear * this object from the requested list */ int ctrls_cb_retval; /* Control handler callback responses */ array_header *ctrls_cb_resps; /* For possibly passing data among control handlers */ void *ctrls_data; /* For internal use */ volatile unsigned long ctrls_flags; } pr_ctrls_t; #define PR_CTRLS_REQUESTED 0x00001 #define PR_CTRLS_HANDLED 0x00002 #define PR_CTRLS_PENDING 0x00004 #define PR_CTRLS_ACT_SOLITARY 0x00010 #define PR_CTRLS_ACT_DISABLED 0x00020 #define CTRLS_GET_ACTION_ALL 7 #define CTRLS_GET_ACTION_ENABLED 8 #define CTRLS_GET_DESC 9 /* Controls API prototypes */ /* Register a control handler for the given action with the Controls layer, * to be available to requesting clients. Returns the ID of the registered * handler, or -1 if there was an error. */ int pr_ctrls_register(const module *mod, const char *action, const char *desc, int (*ctrls_cb)(pr_ctrls_t *, int, char **)); /* Unregisters any control handlers that match the given module/action pair. * If the module argument is null, then the specified action for all modules * is unregistered. If the action argument is null, then all actions for the * specified module are unregistered. * * Returns 0 on success, -1 on failure. */ int pr_ctrls_unregister(module *mod, const char *action); /* Add the given ctrls_arg string to the pr_ctrls_t object's argument * array. Returns 0 on success, -1 on failure. */ int pr_ctrls_add_arg(pr_ctrls_t *ctrl, char *ctrls_arg, size_t ctrls_arglen); /* Add the given string to the pr_ctrls_t object's response array. Returns * 0 on success, -1 on failure. Control handlers can use this function to * add a text response to be returned to the requesting client. */ int pr_ctrls_add_response(pr_ctrls_t *ctrl, char *fmt, ...) #ifdef __GNUC__ __attribute__ ((format (printf, 2, 3))); #else ; #endif /* Meant for use in opening a client control socket, by ftpdctl and core * routines. Connects to the control socket, and returns the socket descriptor * opened, or -1 if there was an error. */ int pr_ctrls_connect(const char *socket_file); int pr_ctrls_copy_args(pr_ctrls_t *src_ctrl, pr_ctrls_t *dest_ctrl); int pr_ctrls_copy_resps(pr_ctrls_t *src_ctrl, pr_ctrls_t *dest_ctrl); /* Flush any responses added to the pr_ctrls_t out the client. This should * only be used when the control handler will not return (as when it is * going to end the process then and there). Returns -1 with errno set to * EINVAL if the given pointer is NULL, EPERM if unable to flush the responses * out to the client. Returns 0 on success. */ int pr_ctrls_flush_response(pr_ctrls_t *ctrl); /* Parses the given string into the argc, argv pointers, creating inputs * suitable for passing to pr_ctrls_send_msg(). The argv array of strings * is allocated from the given pool. Provided as a utility function. * Returns -1 on error, 0 if successful. */ int pr_ctrls_parse_msg(pool *msg_pool, char *msg, unsigned int *msgargc, char ***msgargv); /* Reads a client control request from the given client. Returns -1 with errno * set to EOF if there is nothing to read from the client socket, or errno set * to the appropriate error for other problems. Returns 0 on success. */ int pr_ctrls_recv_request(pr_ctrls_cl_t *cl); /* respargv can be NULL, as when the client does not care to know the * response messages, just that a response was successfully received. * Returns respargc, or -1 if there was an error. */ int pr_ctrls_recv_response(pool *resp_pool, int ctrls_sockfd, int *status, char ***respargv); /* Useful for core routines that themselves want to send a control message */ int pr_ctrls_send_msg(int sockfd, int msgstatus, unsigned int msgargc, char **msgargv); /* Determine whether the given socket mode is for a Unix domain socket. * Returns zero if true, -1 otherwise. */ int pr_ctrls_issock_unix(mode_t sock_mode); /* Accept a Controls connection. Returns the fd of the connected client * if successful, -1 (with errno set appropriately) otherwise. * * The optional uid, gid, and pid pointers, if provided, will be filled in * with the uid, gid, and pid of the connecting client process. These can * be used e.g. for access control checks. The max_age parameter specifies * the maximum age, in seconds, for the connecting client; this is used * for some types of credentials checking. */ int pr_ctrls_accept(int sockfd, uid_t *uid, gid_t *gid, pid_t *pid, unsigned int max_age); int pr_get_registered_actions(pr_ctrls_t *ctrl, int flags); int pr_set_registered_actions(module *mod, const char *action, unsigned char skip_disabled, unsigned int flags); /* Blocks ctrls from being run. */ void pr_block_ctrls(void); /* Unblocks ctrls from being run. */ void pr_unblock_ctrls(void); /* XXX */ int pr_check_actions(void); /* Iterate through the list of pr_ctrls_ts and invoke the callbacks of any * that match the given module and action arguments. Returns 0 if successful, * -1 if error (eg controls are blocked). */ int pr_run_ctrls(module *mod, const char *action); /* XXX */ int pr_reset_ctrls(void); /* For internal use only. */ void init_ctrls(void); #endif /* PR_CTRLS_H */
Upload File
Create Folder