1 /* 2 * ProFTPD - FTP server daemon 3 * Copyright (c) 2009-2017 The ProFTPD Project team 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA. 18 * 19 * As a special exemption, The ProFTPD Project team and other respective 20 * copyright holders give permission to link this program with OpenSSL, and 21 * distribute the resulting executable, without including the source code for 22 * OpenSSL in the source distribution. 23 */ 24 25 #ifndef PR_CMD_H 26 #define PR_CMD_H 27 28 cmd_rec *pr_cmd_alloc(pool *p, unsigned int, ...); 29 int pr_cmd_clear_cache(cmd_rec *cmd); 30 const char *pr_cmd_get_displayable_str(cmd_rec *cmd, size_t *len); 31 int pr_cmd_get_errno(cmd_rec *cmd); 32 33 int pr_cmd_cmp(cmd_rec *cmd, int cmd_id); 34 int pr_cmd_strcmp(cmd_rec *cmd, const char *cmd_name); 35 36 /* Returns the cmd ID for the given command string, or -1 if there was an 37 * error (with errno set appropriately). NOTE: the given command name 38 * MUST be all uppercased before being passed in for the proper ID to be 39 * be returned. 40 * 41 * A return value of 0 means "unknown command". 42 */ 43 int pr_cmd_get_id(const char *name_name); 44 45 /* These IDs are indices into a static list in the Command API. */ 46 #define PR_CMD_USER_ID 1 47 #define PR_CMD_PASS_ID 2 48 #define PR_CMD_ACCT_ID 3 49 #define PR_CMD_CWD_ID 4 50 #define PR_CMD_XCWD_ID 5 51 #define PR_CMD_CDUP_ID 6 52 #define PR_CMD_XCUP_ID 7 53 #define PR_CMD_SMNT_ID 8 54 #define PR_CMD_REIN_ID 9 55 #define PR_CMD_QUIT_ID 10 56 #define PR_CMD_PORT_ID 11 57 #define PR_CMD_EPRT_ID 12 58 #define PR_CMD_PASV_ID 13 59 #define PR_CMD_EPSV_ID 14 60 #define PR_CMD_TYPE_ID 15 61 #define PR_CMD_STRU_ID 16 62 #define PR_CMD_MODE_ID 17 63 #define PR_CMD_RETR_ID 18 64 #define PR_CMD_STOR_ID 19 65 #define PR_CMD_STOU_ID 20 66 #define PR_CMD_APPE_ID 21 67 #define PR_CMD_ALLO_ID 22 68 #define PR_CMD_REST_ID 23 69 #define PR_CMD_RNFR_ID 24 70 #define PR_CMD_RNTO_ID 25 71 #define PR_CMD_ABOR_ID 26 72 #define PR_CMD_DELE_ID 27 73 #define PR_CMD_MDTM_ID 28 74 #define PR_CMD_RMD_ID 29 75 #define PR_CMD_XRMD_ID 30 76 #define PR_CMD_MKD_ID 31 77 #define PR_CMD_MLSD_ID 32 78 #define PR_CMD_MLST_ID 33 79 #define PR_CMD_XMKD_ID 34 80 #define PR_CMD_PWD_ID 35 81 #define PR_CMD_XPWD_ID 36 82 #define PR_CMD_SIZE_ID 37 83 #define PR_CMD_LIST_ID 38 84 #define PR_CMD_NLST_ID 39 85 #define PR_CMD_SITE_ID 40 86 #define PR_CMD_SYST_ID 41 87 #define PR_CMD_STAT_ID 42 88 #define PR_CMD_HELP_ID 43 89 #define PR_CMD_NOOP_ID 44 90 #define PR_CMD_FEAT_ID 45 91 #define PR_CMD_OPTS_ID 46 92 #define PR_CMD_LANG_ID 47 93 #define PR_CMD_ADAT_ID 48 94 #define PR_CMD_AUTH_ID 49 95 #define PR_CMD_CCC_ID 50 96 #define PR_CMD_CONF_ID 51 97 #define PR_CMD_ENC_ID 52 98 #define PR_CMD_MIC_ID 53 99 #define PR_CMD_PBSZ_ID 54 100 #define PR_CMD_PROT_ID 55 101 #define PR_CMD_MFF_ID 56 102 #define PR_CMD_MFMT_ID 57 103 #define PR_CMD_HOST_ID 58 104 #define PR_CMD_CLNT_ID 59 105 #define PR_CMD_RANG_ID 60 106 107 /* The minimum and maximum command name lengths. */ 108 #define PR_CMD_MIN_NAMELEN 3 109 #define PR_CMD_MAX_NAMELEN 4 110 111 /* Returns TRUE if the given command is a known HTTP method, FALSE if not 112 * a known HTTP method, and -1 if there is an error. 113 */ 114 int pr_cmd_is_http(cmd_rec *cmd); 115 116 /* Returns TRUE if the given command is a known SMTP method, FALSE if not 117 * a known SMTP method, and -1 if there is an error. 118 */ 119 int pr_cmd_is_smtp(cmd_rec *cmd); 120 121 /* Returns TRUE if the given command appears to be an SSH2 request, FALSE 122 * if not, and -1 if there was an error. 123 */ 124 int pr_cmd_is_ssh2(cmd_rec *cmd); 125 126 int pr_cmd_set_errno(cmd_rec *cmd, int xerrno); 127 int pr_cmd_set_name(cmd_rec *cmd, const char *name); 128 129 /* Implemented in main.c */ 130 int pr_cmd_read(cmd_rec **cmd); 131 int pr_cmd_dispatch(cmd_rec *cmd); 132 int pr_cmd_dispatch_phase(cmd_rec *cmd, int, int); 133 #define PR_CMD_DISPATCH_FL_SEND_RESPONSE 0x001 134 #define PR_CMD_DISPATCH_FL_CLEAR_RESPONSE 0x002 135 136 void pr_cmd_set_handler(void (*)(server_rec *s, conn_t *conn)); 137 138 #endif /* PR_CMD_H */ 139