This commit is contained in:
2026-03-30 23:05:55 +08:00
parent 6c561ad3bd
commit f62c73d5a6
2 changed files with 20 additions and 12 deletions
+1 -1
View File
@@ -110,7 +110,7 @@ Examples:
CONFIG FILE CONFIG FILE
----------- -----------
Loaded from ~/.ircrc or ~/.config/irc/ircrc (first found wins). Loaded from ~/.sirc or ~/.config/sirc/config (first found wins).
CLI flags override the first server in the config. CLI flags override the first server in the config.
Use [server] blocks for multiple servers. Each block is an independent Use [server] blocks for multiple servers. Each block is an independent
+19 -11
View File
@@ -3,7 +3,7 @@
* *
* Usage: sirc [options] * Usage: sirc [options]
* *
* Config (~/.sircrc): * Config (~/.sirc):
* # Default server (applied when no [server] block precedes it) * # Default server (applied when no [server] block precedes it)
* nick = mynick * nick = mynick
* ignore = badbot,spammer * ignore = badbot,spammer
@@ -584,7 +584,7 @@ static void handle_irc_line(int si, const char *raw) {
} else if (strcmp(sub,"NAK")==0) { } else if (strcmp(sub,"NAK")==0) {
ev_simple(EV_ERROR, si, NULL, NULL, "Server rejected SASL CAP."); ev_simple(EV_ERROR, si, NULL, NULL, "Server rejected SASL CAP.");
srv_sendf(si, "NICK %s", s->nick); srv_sendf(si, "NICK %s", s->nick);
srv_sendf(si, "USER %s 0 * :circ", s->nick); srv_sendf(si, "USER %s 0 * :sirc", s->nick);
} }
return; return;
} }
@@ -600,7 +600,7 @@ static void handle_irc_line(int si, const char *raw) {
ev_simple(EV_STATUS, si, NULL, NULL, "SASL authentication successful."); ev_simple(EV_STATUS, si, NULL, NULL, "SASL authentication successful.");
srv_send_raw(si, "CAP END"); srv_send_raw(si, "CAP END");
srv_sendf(si, "NICK %s", s->nick); srv_sendf(si, "NICK %s", s->nick);
srv_sendf(si, "USER %s 0 * :circ", s->nick); srv_sendf(si, "USER %s 0 * :sirc", s->nick);
return; return;
} }
if (strcmp(m.cmd,"902")==0||strcmp(m.cmd,"904")==0|| if (strcmp(m.cmd,"902")==0||strcmp(m.cmd,"904")==0||
@@ -610,7 +610,7 @@ static void handle_irc_line(int si, const char *raw) {
ev_simple(EV_ERROR, si, NULL, NULL, buf); ev_simple(EV_ERROR, si, NULL, NULL, buf);
srv_send_raw(si, "CAP END"); srv_send_raw(si, "CAP END");
srv_sendf(si, "NICK %s", s->nick); srv_sendf(si, "NICK %s", s->nick);
srv_sendf(si, "USER %s 0 * :circ", s->nick); srv_sendf(si, "USER %s 0 * :sirc", s->nick);
return; return;
} }
@@ -943,7 +943,7 @@ static void *net_thread(void *arg) {
srv_send_raw(si,"CAP REQ :sasl"); srv_send_raw(si,"CAP REQ :sasl");
else { else {
srv_sendf(si,"NICK %s",s->nick); srv_sendf(si,"NICK %s",s->nick);
srv_sendf(si,"USER %s 0 * :circ",s->nick); srv_sendf(si,"USER %s 0 * :sirc",s->nick);
} }
char readbuf[8192], linebuf[MAX_LINE*4]; char readbuf[8192], linebuf[MAX_LINE*4];
@@ -1056,8 +1056,8 @@ static void load_config(const char *path) {
char candidates[2][MAX_HOST]; char candidates[2][MAX_HOST];
const char *home=getenv("HOME"); const char *home=getenv("HOME");
if (home) { if (home) {
snprintf(candidates[0],MAX_HOST,"%s/.ircrc",home); snprintf(candidates[0],MAX_HOST,"%s/.sirc",home);
snprintf(candidates[1],MAX_HOST,"%s/.config/irc/ircrc",home); snprintf(candidates[1],MAX_HOST,"%s/.config/sirc/config",home);
} }
FILE *f=NULL; FILE *f=NULL;
if (path) f=fopen(path,"r"); if (path) f=fopen(path,"r");
@@ -1965,7 +1965,7 @@ static void usage(const char *prog) {
" --sasl-pass PASS SASL password\n" " --sasl-pass PASS SASL password\n"
" --config FILE config file\n" " --config FILE config file\n"
"\n" "\n"
"Multiple servers via ~/.ircrc [server] blocks.\n", prog); "Multiple servers via ~/.sirc [server] blocks.\n", prog);
} }
int main(int argc, char **argv) { int main(int argc, char **argv) {
@@ -1994,19 +1994,27 @@ int main(int argc, char **argv) {
if (cli_host) { if (cli_host) {
int si; int si;
if (g_srv_count==0) si=srv_alloc(); if (g_srv_count==0) si=srv_alloc();
else si=0; /* override first */ else si=0;
strncpy(g_srv[si].host,cli_host,MAX_HOST-1); strncpy(g_srv[si].host,cli_host,MAX_HOST-1);
if(cli_port>0) g_srv[si].port=cli_port; if(cli_port>0) g_srv[si].port=cli_port;
if(cli_nick) strncpy(g_srv[si].nick,cli_nick,MAX_NICK-1);
if(cli_tls>=0) g_srv[si].use_tls=cli_tls; if(cli_tls>=0) g_srv[si].use_tls=cli_tls;
if(cli_chan) srv_add_autojoin(si,cli_chan);
if(cli_su) strncpy(g_srv[si].sasl_user,cli_su,MAX_NICK-1); if(cli_su) strncpy(g_srv[si].sasl_user,cli_su,MAX_NICK-1);
if(cli_sp) strncpy(g_srv[si].sasl_pass,cli_sp,255); if(cli_sp) strncpy(g_srv[si].sasl_pass,cli_sp,255);
if(cli_chan) srv_add_autojoin(si,cli_chan); if(cli_nick) strncpy(g_srv[si].nick,cli_nick,MAX_NICK-1);
} else if (g_srv_count==0) { } else if (g_srv_count==0) {
/* no config, no --host: add default server */ /* no config, no --host: add default server */
srv_alloc(); srv_alloc();
} }
/* apply --nick / --channel / --tls to all servers that don't have
their own value set (covers the no-host case) */
for (int i=0; i<g_srv_count; i++) {
if (cli_nick && !cli_host) strncpy(g_srv[i].nick, cli_nick, MAX_NICK-1);
if (cli_tls>=0 && !cli_host) g_srv[i].use_tls = cli_tls;
if (cli_chan && !cli_host) srv_add_autojoin(i, cli_chan);
}
/* create status channels */ /* create status channels */
for(int i=0;i<g_srv_count;i++) chan_add(i,"*status*"); for(int i=0;i<g_srv_count;i++) chan_add(i,"*status*");