]> andersk Git - openssh.git/blobdiff - servconf.c
- (tim) [configure.ac] updwtmpx() on OpenServer seems to add duplicate entry.
[openssh.git] / servconf.c
index ae380f5227d32c03bedddb3f88ccec4dc2877e57..02fae0fbe39defdd04f16ccfb70539b9d4e6ddc1 100644 (file)
@@ -10,7 +10,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: servconf.c,v 1.131 2004/04/27 09:46:37 djm Exp $");
+RCSID("$OpenBSD: servconf.c,v 1.135 2004/07/11 17:48:47 deraadt Exp $");
 
 #include "ssh.h"
 #include "log.h"
@@ -18,7 +18,6 @@ RCSID("$OpenBSD: servconf.c,v 1.131 2004/04/27 09:46:37 djm Exp $");
 #include "xmalloc.h"
 #include "compat.h"
 #include "pathnames.h"
-#include "tildexpand.h"
 #include "misc.h"
 #include "cipher.h"
 #include "kex.h"
@@ -95,6 +94,7 @@ initialize_server_options(ServerOptions *options)
        options->max_startups_begin = -1;
        options->max_startups_rate = -1;
        options->max_startups = -1;
+       options->max_authtries = -1;
        options->banner = NULL;
        options->use_dns = -1;
        options->client_alive_interval = -1;
@@ -213,6 +213,8 @@ fill_default_server_options(ServerOptions *options)
                options->max_startups_rate = 100;               /* 100% */
        if (options->max_startups_begin == -1)
                options->max_startups_begin = options->max_startups;
+       if (options->max_authtries == -1)
+               options->max_authtries = DEFAULT_AUTH_FAIL_MAX;
        if (options->use_dns == -1)
                options->use_dns = 1;
        if (options->client_alive_interval == -1)
@@ -263,7 +265,8 @@ typedef enum {
        sPermitUserEnvironment, sUseLogin, sAllowTcpForwarding, sCompression,
        sAllowUsers, sDenyUsers, sAllowGroups, sDenyGroups,
        sIgnoreUserKnownHosts, sCiphers, sMacs, sProtocol, sPidFile,
-       sGatewayPorts, sPubkeyAuthentication, sXAuthLocation, sSubsystem, sMaxStartups,
+       sGatewayPorts, sPubkeyAuthentication, sXAuthLocation, sSubsystem,
+       sMaxStartups, sMaxAuthTries,
        sBanner, sUseDNS, sHostbasedAuthentication,
        sHostbasedUsesNameFromPacketOnly, sClientAliveInterval,
        sClientAliveCountMax, sAuthorizedKeysFile, sAuthorizedKeysFile2,
@@ -358,6 +361,7 @@ static struct {
        { "gatewayports", sGatewayPorts },
        { "subsystem", sSubsystem },
        { "maxstartups", sMaxStartups },
+       { "maxauthtries", sMaxAuthTries },
        { "banner", sBanner },
        { "usedns", sUseDNS },
        { "verifyreversemapping", sDeprecated },
@@ -870,6 +874,10 @@ parse_flag:
                        options->max_startups = options->max_startups_begin;
                break;
 
+       case sMaxAuthTries:
+               intptr = &options->max_authtries;
+               goto parse_int;
+
        case sBanner:
                charptr = &options->banner;
                goto parse_filename;
@@ -934,26 +942,50 @@ parse_flag:
 /* Reads the server configuration file. */
 
 void
-read_server_config(ServerOptions *options, const char *filename)
+load_server_config(const char *filename, Buffer *conf)
 {
-       int linenum, bad_options = 0;
-       char line[1024];
+       char line[1024], *cp;
        FILE *f;
 
-       debug2("read_server_config: filename %s", filename);
-       f = fopen(filename, "r");
-       if (!f) {
+       debug2("%s: filename %s", __func__, filename);
+       if ((f = fopen(filename, "r")) == NULL) {
                perror(filename);
                exit(1);
        }
-       linenum = 0;
+       buffer_clear(conf);
        while (fgets(line, sizeof(line), f)) {
-               /* Update line number counter. */
-               linenum++;
-               if (process_server_config_line(options, line, filename, linenum) != 0)
-                       bad_options++;
+               /*
+                * Trim out comments and strip whitespace
+                * NB - preserve newlines, they are needed to reproduce
+                * line numbers later for error messages
+                */
+               if ((cp = strchr(line, '#')) != NULL)
+                       memcpy(cp, "\n", 2);
+               cp = line + strspn(line, " \t\r");
+
+               buffer_append(conf, cp, strlen(cp));
        }
+       buffer_append(conf, "\0", 1);
        fclose(f);
+       debug2("%s: done config len = %d", __func__, buffer_len(conf));
+}
+
+void
+parse_server_config(ServerOptions *options, const char *filename, Buffer *conf)
+{
+       int linenum, bad_options = 0;
+       char *cp, *cbuf;
+
+       debug2("%s: config %s len %d", __func__, filename, buffer_len(conf));
+
+       cbuf = xstrdup(buffer_ptr(conf));
+       linenum = 0;
+       while((cp = strsep(&cbuf, "\n")) != NULL) {
+               if (process_server_config_line(options, cp, filename,
+                   linenum++) != 0)
+                       bad_options++;
+       }
+       free(cbuf);
        if (bad_options > 0)
                fatal("%s: terminating, %d bad configuration options",
                    filename, bad_options);
This page took 0.044589 seconds and 4 git commands to generate.