Added the +rules command.
Also added the +motd command to see the message of the day, which is sent while connecting.
This commit is contained in:
parent
80c6ad9d76
commit
e45511827f
|
@ -518,6 +518,20 @@ static int command_log(struct hub_info* hub, struct hub_user* user, struct hub_c
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int command_rules(struct hub_info* hub, struct hub_user* user, struct hub_command* cmd)
|
||||||
|
{
|
||||||
|
if (!hub_send_rules(hub, user))
|
||||||
|
return command_status(hub, user, cmd, "no rules defined.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int command_motd(struct hub_info* hub, struct hub_user* user, struct hub_command* cmd)
|
||||||
|
{
|
||||||
|
if (!hub_send_motd(hub, user))
|
||||||
|
return command_status(hub, user, cmd, "no motd defined.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CRASH_DEBUG
|
#ifdef CRASH_DEBUG
|
||||||
static int command_crash(struct hub_info* hub, struct hub_user* user, struct hub_command* cmd)
|
static int command_crash(struct hub_info* hub, struct hub_user* user, struct hub_command* cmd)
|
||||||
{
|
{
|
||||||
|
@ -589,6 +603,8 @@ static struct commands_handler command_handlers[] = {
|
||||||
{ "log", 3, 0, cred_operator, command_log, "Display log" },
|
{ "log", 3, 0, cred_operator, command_log, "Display log" },
|
||||||
{ "mute", 4, "n", cred_operator, command_mute, "Mute user" },
|
{ "mute", 4, "n", cred_operator, command_mute, "Mute user" },
|
||||||
{ "unmute", 6, "n", cred_operator, command_mute, "Unmute user" },
|
{ "unmute", 6, "n", cred_operator, command_mute, "Unmute user" },
|
||||||
|
{ "rules", 5, 0, cred_guest, command_rules, "Show the hub rules" },
|
||||||
|
{ "motd", 4, 0, cred_guest, command_motd, "Show the message of the day" },
|
||||||
#ifdef CRASH_DEBUG
|
#ifdef CRASH_DEBUG
|
||||||
{ "crash", 5, 0, cred_admin, command_crash, "Crash the hub (DEBUG)." },
|
{ "crash", 5, 0, cred_admin, command_crash, "Crash the hub (DEBUG)." },
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -116,6 +116,7 @@
|
||||||
#define DEF_HUB_ENABLED 1
|
#define DEF_HUB_ENABLED 1
|
||||||
#define DEF_FILE_ACL ""
|
#define DEF_FILE_ACL ""
|
||||||
#define DEF_FILE_MOTD ""
|
#define DEF_FILE_MOTD ""
|
||||||
|
#define DEF_FILE_RULES ""
|
||||||
#define DEF_MAX_USERS 500
|
#define DEF_MAX_USERS 500
|
||||||
#define DEF_MAX_CHAT_HISTORY 20
|
#define DEF_MAX_CHAT_HISTORY 20
|
||||||
#define DEF_MAX_LOGOUT_LOG 100
|
#define DEF_MAX_LOGOUT_LOG 100
|
||||||
|
@ -180,6 +181,7 @@ void config_defaults(struct hub_config* config)
|
||||||
DEFAULT_BOOLEAN(hub_enabled, DEF_HUB_ENABLED);
|
DEFAULT_BOOLEAN(hub_enabled, DEF_HUB_ENABLED);
|
||||||
DEFAULT_STRING (file_acl, DEF_FILE_ACL);
|
DEFAULT_STRING (file_acl, DEF_FILE_ACL);
|
||||||
DEFAULT_STRING (file_motd, DEF_FILE_MOTD);
|
DEFAULT_STRING (file_motd, DEF_FILE_MOTD);
|
||||||
|
DEFAULT_STRING (file_rules, DEF_FILE_RULES);
|
||||||
DEFAULT_INTEGER(server_port, DEF_SERVER_PORT);
|
DEFAULT_INTEGER(server_port, DEF_SERVER_PORT);
|
||||||
DEFAULT_INTEGER(server_listen_backlog, DEF_SERVER_BACKLOG);
|
DEFAULT_INTEGER(server_listen_backlog, DEF_SERVER_BACKLOG);
|
||||||
DEFAULT_INTEGER(max_users, DEF_MAX_USERS);
|
DEFAULT_INTEGER(max_users, DEF_MAX_USERS);
|
||||||
|
@ -249,6 +251,7 @@ static int apply_config(struct hub_config* config, char* key, char* data, int li
|
||||||
{
|
{
|
||||||
GET_STR (file_acl);
|
GET_STR (file_acl);
|
||||||
GET_STR (file_motd);
|
GET_STR (file_motd);
|
||||||
|
GET_STR (file_rules);
|
||||||
GET_STR (server_bind_addr);
|
GET_STR (server_bind_addr);
|
||||||
GET_INT (server_port);
|
GET_INT (server_port);
|
||||||
GET_INT (server_listen_backlog);
|
GET_INT (server_listen_backlog);
|
||||||
|
@ -327,6 +330,7 @@ void free_config(struct hub_config* config)
|
||||||
hub_free(config->server_bind_addr);
|
hub_free(config->server_bind_addr);
|
||||||
hub_free(config->file_motd);
|
hub_free(config->file_motd);
|
||||||
hub_free(config->file_acl);
|
hub_free(config->file_acl);
|
||||||
|
hub_free(config->file_rules);
|
||||||
hub_free(config->hub_name);
|
hub_free(config->hub_name);
|
||||||
hub_free(config->hub_description);
|
hub_free(config->hub_description);
|
||||||
|
|
||||||
|
@ -398,6 +402,7 @@ void dump_config(struct hub_config* config, int ignore_defaults)
|
||||||
{
|
{
|
||||||
DUMP_STR (file_acl, DEF_FILE_ACL);
|
DUMP_STR (file_acl, DEF_FILE_ACL);
|
||||||
DUMP_STR (file_motd, DEF_FILE_MOTD);
|
DUMP_STR (file_motd, DEF_FILE_MOTD);
|
||||||
|
DUMP_STR (file_rules, DEF_FILE_RULES);
|
||||||
DUMP_STR (server_bind_addr, DEF_SERVER_BIND_ADDR);
|
DUMP_STR (server_bind_addr, DEF_SERVER_BIND_ADDR);
|
||||||
DUMP_INT (server_port, DEF_SERVER_PORT);
|
DUMP_INT (server_port, DEF_SERVER_PORT);
|
||||||
DUMP_INT (server_listen_backlog, DEF_SERVER_BACKLOG);
|
DUMP_INT (server_listen_backlog, DEF_SERVER_BACKLOG);
|
||||||
|
|
|
@ -33,6 +33,7 @@ struct hub_config
|
||||||
int chat_is_privileged; /**<<< "Allow chat for operators and above only (default: 0) */
|
int chat_is_privileged; /**<<< "Allow chat for operators and above only (default: 0) */
|
||||||
char* file_motd; /**<<< "File containing the 'message of the day' (default: '' - no motd)" */
|
char* file_motd; /**<<< "File containing the 'message of the day' (default: '' - no motd)" */
|
||||||
char* file_acl; /**<<< "File containing user database (default: '' - no known users)" */
|
char* file_acl; /**<<< "File containing user database (default: '' - no known users)" */
|
||||||
|
char* file_rules; /**<<< "File containing the rules (default: '' - no rules)" */
|
||||||
char* hub_name; /**<<< "Name of hub (default: 'My uhub hub')" */
|
char* hub_name; /**<<< "Name of hub (default: 'My uhub hub')" */
|
||||||
char* hub_description; /**<<< "Name of hub (default: 'no description')" */
|
char* hub_description; /**<<< "Name of hub (default: 'no description')" */
|
||||||
int max_recv_buffer; /**<<< "Max read buffer before parse, per user (default: 4096)" */
|
int max_recv_buffer; /**<<< "Max read buffer before parse, per user (default: 4096)" */
|
||||||
|
|
|
@ -361,14 +361,27 @@ void hub_send_handshake(struct hub_info* hub, struct hub_user* u)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void hub_send_motd(struct hub_info* hub, struct hub_user* u)
|
int hub_send_motd(struct hub_info* hub, struct hub_user* u)
|
||||||
{
|
{
|
||||||
if (hub->command_motd)
|
if (hub->command_motd)
|
||||||
{
|
{
|
||||||
route_to_user(hub, u, hub->command_motd);
|
route_to_user(hub, u, hub->command_motd);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int hub_send_rules(struct hub_info* hub, struct hub_user* u)
|
||||||
|
{
|
||||||
|
if (hub->command_rules)
|
||||||
|
{
|
||||||
|
route_to_user(hub, u, hub->command_rules);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void hub_send_password_challenge(struct hub_info* hub, struct hub_user* u)
|
void hub_send_password_challenge(struct hub_info* hub, struct hub_user* u)
|
||||||
{
|
{
|
||||||
struct adc_message* igpa;
|
struct adc_message* igpa;
|
||||||
|
@ -669,6 +682,22 @@ void hub_set_variables(struct hub_info* hub, struct acl_handle* acl)
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hub->command_rules = 0;
|
||||||
|
fd = (hub->config->file_rules && *hub->config->file_rules) ? open(hub->config->file_rules, 0) : -1;
|
||||||
|
if (fd != -1)
|
||||||
|
{
|
||||||
|
ret = read(fd, buf, MAX_RECV_BUF);
|
||||||
|
if (ret > 0)
|
||||||
|
{
|
||||||
|
buf[ret] = 0;
|
||||||
|
tmp = adc_msg_escape(buf);
|
||||||
|
hub->command_rules = adc_msg_construct(ADC_CMD_IMSG, 6 + strlen(tmp));
|
||||||
|
adc_msg_add_argument(hub->command_rules, tmp);
|
||||||
|
hub_free(tmp);
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
|
||||||
hub->command_support = adc_msg_construct(ADC_CMD_ISUP, 6 + strlen(ADC_PROTO_SUPPORT));
|
hub->command_support = adc_msg_construct(ADC_CMD_ISUP, 6 + strlen(ADC_PROTO_SUPPORT));
|
||||||
if (hub->command_support)
|
if (hub->command_support)
|
||||||
{
|
{
|
||||||
|
@ -697,6 +726,9 @@ void hub_free_variables(struct hub_info* hub)
|
||||||
if (hub->command_motd)
|
if (hub->command_motd)
|
||||||
adc_msg_free(hub->command_motd);
|
adc_msg_free(hub->command_motd);
|
||||||
|
|
||||||
|
if (hub->command_rules)
|
||||||
|
adc_msg_free(hub->command_rules);
|
||||||
|
|
||||||
adc_msg_free(hub->command_support);
|
adc_msg_free(hub->command_support);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -103,6 +103,7 @@ struct hub_info
|
||||||
struct adc_message* command_info; /* The hub's INF command */
|
struct adc_message* command_info; /* The hub's INF command */
|
||||||
struct adc_message* command_support; /* The hub's SUP command */
|
struct adc_message* command_support; /* The hub's SUP command */
|
||||||
struct adc_message* command_motd; /* The message of the day */
|
struct adc_message* command_motd; /* The message of the day */
|
||||||
|
struct adc_message* command_rules; /* The hub rules */
|
||||||
struct adc_message* command_banner; /* The default welcome message */
|
struct adc_message* command_banner; /* The default welcome message */
|
||||||
time_t tm_started;
|
time_t tm_started;
|
||||||
int status;
|
int status;
|
||||||
|
@ -203,8 +204,15 @@ extern void hub_send_handshake(struct hub_info* hub, struct hub_user* u);
|
||||||
/**
|
/**
|
||||||
* Send a welcome message containing the message of the day to
|
* Send a welcome message containing the message of the day to
|
||||||
* one particular user. This can be sent in any point in time.
|
* one particular user. This can be sent in any point in time.
|
||||||
|
* @return 1 if the motd were sent.
|
||||||
*/
|
*/
|
||||||
extern void hub_send_motd(struct hub_info* hub, struct hub_user* u);
|
extern int hub_send_motd(struct hub_info* hub, struct hub_user* u);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send the rules if configured.
|
||||||
|
* @return 1 if the rules were sent.
|
||||||
|
*/
|
||||||
|
extern int hub_send_rules(struct hub_info* hub, struct hub_user* u);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a password challenge to a user.
|
* Send a password challenge to a user.
|
||||||
|
|
|
@ -68,6 +68,10 @@ void on_login_success(struct hub_info* hub, struct hub_user* u)
|
||||||
if (user_is_logged_in(u)) /* Previous send() can fail! */
|
if (user_is_logged_in(u)) /* Previous send() can fail! */
|
||||||
hub_send_motd(hub, u);
|
hub_send_motd(hub, u);
|
||||||
|
|
||||||
|
/* Send message of the day (if any) */
|
||||||
|
if (user_is_logged_in(u)) /* Previous send() can fail! */
|
||||||
|
hub_send_rules(hub, u);
|
||||||
|
|
||||||
/* reset timeout */
|
/* reset timeout */
|
||||||
net_con_clear_timeout(u->connection);
|
net_con_clear_timeout(u->connection);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue