diff options
author | Luke Bratch <luke@bratch.co.uk> | 2019-05-12 21:36:31 +0100 |
---|---|---|
committer | Luke Bratch <luke@bratch.co.uk> | 2019-05-12 21:36:31 +0100 |
commit | 03b15b2a99dee16998d08e17652bb49555c8560d (patch) | |
tree | 2ba2ea430e1c2ed05c5e9b68c2f7b0d9b925ea70 /blabouncer.c | |
parent | dba30066da1c929a140281cbbb6a8f177fdf14d4 (diff) |
Make configuration file path configurable on the command line. Also finish removing the non-functional debug() stuff.
Diffstat (limited to 'blabouncer.c')
-rw-r--r-- | blabouncer.c | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/blabouncer.c b/blabouncer.c index a370d71..13e91c1 100644 --- a/blabouncer.c +++ b/blabouncer.c @@ -70,8 +70,6 @@ #define MAXREALNAMELEN 128 // Randomly picked (TODO - is there an actual maximum real name length?) #define MAXPORTLEN 6 // Up to 65535, so 5 characters + 1 for null -#define CONFFILE "blabouncer.conf" - struct channel { char name[MAXCHANLENGTH]; char topic[MAXDATASIZE]; // TODO - Is there a particular maximum topic length? @@ -105,6 +103,7 @@ struct settings { char ircrealname[MAXREALNAMELEN]; char ircserver[HOST_NAME_MAX]; char ircserverport[MAXPORTLEN]; + char conffile[PATH_MAX]; }; // Return index of requested client FD within arr_clients @@ -669,7 +668,7 @@ int processircmessage(int *serversockfd, int *clientsockfd, char *str, int sourc case SOURCE_CLIENT: // If message(s) were from a real IRC client // PASS received? User is trying to log in, check their password. if (strncmp(tokens[0], "PASS", strlen(tokens[0])) == 0) { - if (checkpassword(tokens[1], CONFFILE)) { + if (checkpassword(tokens[1], settings->conffile)) { printf("Password accepted! Setting fd %d to authenticated.\n", sourcefd); // Find the client in the clients array and set them as authenticated for (int i = 0; i < MAXCLIENTS; i++) { @@ -1271,42 +1270,60 @@ int main(int argc, char *argv[]) { // Structure of our various settings which are to either be read from the configuration file or set at runtime struct settings settings; - // Populate said settings + // Check to see if a configuration file was specified on the command line + if (argc == 3) { + if (strcmp(argv[1], "-c")) { + fprintf(stderr,"usage: %s [-c /path/to/blabouncer.conf]\n", argv[0]); + exit(1); + } else { + strcpy(settings.conffile, argv[2]); + } + } else if (argc == 2 || argc > 3) { + fprintf(stderr,"usage: %s [-c /path/to/blabouncer.conf]\n", argv[0]); + exit(1); + } else { + // If none provided, set to default + strcpy(settings.conffile, "blabouncer.conf"); + } + + printf("Using configuration file '%s'.\n", settings.conffile); + + // Populate said settings from configuration file // How many seconds of replay log should automatically be replayed - TODO - Can we do error checking on this? - settings.replayseconds = getconfint("replayseconds", CONFFILE); + settings.replayseconds = getconfint("replayseconds", settings.conffile); // What port should the bouncer listen on - if (!getconfstr("clientport", CONFFILE, settings.clientport)) { + if (!getconfstr("clientport", settings.conffile, settings.clientport)) { printf("main(): error getting 'clientport' from configuration file.\n"); exit(1); } // What is the configured nick? - if (!getconfstr("nick", CONFFILE, settings.ircnick)) { + if (!getconfstr("nick", settings.conffile, settings.ircnick)) { printf("main(): error getting 'nick' from configuration file.\n"); exit(1); } // What is the configured username? - if (!getconfstr("username", CONFFILE, settings.ircusername)) { + if (!getconfstr("username", settings.conffile, settings.ircusername)) { printf("main(): error getting 'username' from configuration file.\n"); exit(1); } // What is the configured real name? - if (!getconfstr("realname", CONFFILE, settings.ircrealname)) { + if (!getconfstr("realname", settings.conffile, settings.ircrealname)) { printf("main(): error getting 'realname' from configuration file.\n"); exit(1); } // What is the real IRC server address? - if (!getconfstr("ircserver", CONFFILE, settings.ircserver)) { + if (!getconfstr("ircserver", settings.conffile, settings.ircserver)) { printf("main(): error getting 'ircserver' from configuration file.\n"); exit(1); } // What is the real IRC server port? - if (!getconfstr("ircserverport", CONFFILE, settings.ircserverport)) { + if (!getconfstr("ircserverport", settings.conffile, settings.ircserverport)) { printf("main(): error getting 'ircserverport' from configuration file.\n"); exit(1); } |