1 #ifndef VSF_PRIVSOCK_H 2 #define VSF_PRIVSOCK_H 3 4 struct mystr; 5 struct vsf_session; 6 7 /* priv_sock_init() 8 * PURPOSE 9 * Initialize the priv_sock system, by opening the communications sockets. 10 * 11 * PARAMETERS 12 * p_sess - the current session object 13 */ 14 void priv_sock_init(struct vsf_session* p_sess); 15 16 /* priv_sock_close() 17 * PURPOSE 18 * Closes any open file descriptors relating to the priv_sock system. 19 * 20 * PARAMETERS 21 * p_sess - the current session object 22 */ 23 void priv_sock_close(struct vsf_session* p_sess); 24 25 /* priv_sock_set_parent_context() 26 * PURPOSE 27 * Closes the child's fd, e.g. p_sess->child_fd. 28 * 29 * PARAMETERS 30 * p_sess - the current session object 31 */ 32 void priv_sock_set_parent_context(struct vsf_session* p_sess); 33 34 /* priv_sock_set_child_context() 35 * PURPOSE 36 * Closes the parent's fd, e.g. p_sess->parent_fd. 37 * 38 * PARAMETERS 39 * p_sess - the current session object 40 */ 41 void priv_sock_set_child_context(struct vsf_session* p_sess); 42 43 /* priv_sock_send_cmd() 44 * PURPOSE 45 * Sends a command, typically to the privileged side of the channel. 46 * PARAMETERS 47 * fd - the fd on which to send the command 48 * cmd - the command to send 49 */ 50 void priv_sock_send_cmd(int fd, char cmd); 51 52 /* priv_sock_send_str() 53 * PURPOSE 54 * Sends a string to the other side of the channel. 55 * PARAMETERS 56 * fd - the fd on which to send the string 57 * p_str - the string to send 58 */ 59 void priv_sock_send_str(int fd, const struct mystr* p_str); 60 61 /* priv_sock_send_buf() 62 * PURPOSE 63 * Sends a buffer to the other side of the channel. The protocol used is the 64 * same as priv_sock_send_str() 65 * PARAMETERS 66 * fd - the fd on which to send the buffer 67 * p_buf - the buffer to send 68 * len - length of the buffer 69 */ 70 void priv_sock_send_buf(int fd, const char* p_buf, unsigned int len); 71 72 /* priv_sock_recv_buf() 73 * PURPOSE 74 * Receives a buffer from the other side of the channel. The protocol used is 75 * the same as priv_sock_recv_str() 76 * PARAMETERS 77 * fd - the fd on which to receive the buffer 78 * p_buf - the buffer to write into 79 * len - length of the buffer 80 */ 81 void priv_sock_recv_buf(int fd, char* p_buf, unsigned int len); 82 83 /* priv_sock_get_result() 84 * PURPOSE 85 * Receives a response, typically from the privileged side of the channel. 86 * PARAMETERS 87 * fd - the fd on which to receive the response 88 * RETURNS 89 * The response code. 90 */ 91 char priv_sock_get_result(int fd); 92 93 /* priv_sock_get_cmd() 94 * PURPOSE 95 * Receives a command, typically on the privileged side of the channel. 96 * PARAMETERS 97 * fd - the fd on which to receive the command. 98 * RETURNS 99 * The command that was sent. 100 */ 101 char priv_sock_get_cmd(int fd); 102 103 /* priv_sock_get_str() 104 * PURPOSE 105 * Receives a string from the other side of the channel. 106 * PARAMETERS 107 * fd - the fd on which to receive the string 108 * p_dest - where to copy the received string 109 */ 110 void priv_sock_get_str(int fd, struct mystr* p_dest); 111 112 /* priv_sock_send_result() 113 * PURPOSE 114 * Sends a command result, typically to the unprivileged side of the channel. 115 * PARAMETERS 116 * fd - the fd on which to send the result 117 * res - the result to send 118 */ 119 void priv_sock_send_result(int fd, char res); 120 121 /* priv_sock_send_fd() 122 * PURPOSE 123 * Sends a file descriptor to the other side of the channel. 124 * PARAMETERS 125 * fd - the fd on which to send the descriptor 126 * send_fd - the descriptor to send 127 */ 128 void priv_sock_send_fd(int fd, int send_fd); 129 130 /* priv_sock_recv_fd() 131 * PURPOSE 132 * Receives a file descriptor from the other side of the channel. 133 * PARAMETERS 134 * fd - the fd on which to receive the descriptor 135 * RETURNS 136 * The received file descriptor 137 */ 138 int priv_sock_recv_fd(int fd); 139 140 /* priv_sock_send_int() 141 * PURPOSE 142 * Sends an integer to the other side of the channel. 143 * PARAMETERS 144 * fd - the fd on which to send the integer 145 * the_int - the integer to send 146 */ 147 void priv_sock_send_int(int fd, int the_int); 148 149 /* priv_sock_get_int() 150 * PURPOSE 151 * Receives an integer from the other side of the channel. 152 * PARAMETERS 153 * fd - the fd on which to receive the integer 154 * RETURNS 155 * The integer that was sent. 156 */ 157 int priv_sock_get_int(int fd); 158 159 #define PRIV_SOCK_LOGIN 1 160 #define PRIV_SOCK_CHOWN 2 161 #define PRIV_SOCK_GET_DATA_SOCK 3 162 #define PRIV_SOCK_GET_USER_CMD 4 163 #define PRIV_SOCK_WRITE_USER_RESP 5 164 #define PRIV_SOCK_DO_SSL_HANDSHAKE 6 165 #define PRIV_SOCK_DO_SSL_CLOSE 7 166 #define PRIV_SOCK_DO_SSL_READ 8 167 #define PRIV_SOCK_DO_SSL_WRITE 9 168 #define PRIV_SOCK_PASV_CLEANUP 10 169 #define PRIV_SOCK_PASV_ACTIVE 11 170 #define PRIV_SOCK_PASV_LISTEN 12 171 #define PRIV_SOCK_PASV_ACCEPT 13 172 173 #define PRIV_SOCK_RESULT_OK 1 174 #define PRIV_SOCK_RESULT_BAD 2 175 176 #endif /* VSF_PRIVSOCK_H */ 177 178