]> andersk Git - gssapi-openssh.git/blobdiff - openssh/servconf.c
Merge from OPENSSH_3_8_1P1_GSSAPI_20040713 to OPENSSH_3_9P1_GSSAPI_20040818.
[gssapi-openssh.git] / openssh / servconf.c
index fb680b91f6227eb8654aa49e4f8292f02ede5772..a959c4be768e810a74f222d7d03b255cd2461c6b 100644 (file)
@@ -10,7 +10,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: servconf.c,v 1.130 2003/12/23 16:12:10 jakob Exp $");
+RCSID("$OpenBSD: servconf.c,v 1.137 2004/08/13 11:09:24 dtucker Exp $");
 
 #include "ssh.h"
 #include "log.h"
@@ -18,7 +18,6 @@ RCSID("$OpenBSD: servconf.c,v 1.130 2003/12/23 16:12:10 jakob Exp $");
 #include "xmalloc.h"
 #include "compat.h"
 #include "pathnames.h"
-#include "tildexpand.h"
 #include "misc.h"
 #include "cipher.h"
 #include "kex.h"
@@ -80,7 +79,6 @@ initialize_server_options(ServerOptions *options)
        options->kerberos_get_afs_token = -1;
        options->gss_authentication=-1;
        options->gss_keyex=-1;
-       options->gss_use_session_ccache = -1;
        options->gss_cleanup_creds = -1;
        options->password_authentication = -1;
        options->kbd_interactive_authentication = -1;
@@ -102,12 +100,14 @@ 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;
        options->client_alive_count_max = -1;
        options->authorized_keys_file = NULL;
        options->authorized_keys_file2 = NULL;
+       options->num_accept_env = 0;
 
        /* Needs to be accessable in many places */
        use_privsep = -1;
@@ -195,8 +195,6 @@ fill_default_server_options(ServerOptions *options)
                options->gss_authentication = 1;
        if (options->gss_keyex == -1)
                options->gss_keyex = 1;
-       if (options->gss_use_session_ccache == -1)
-               options->gss_use_session_ccache = 1;
        if (options->gss_cleanup_creds == -1)
                options->gss_cleanup_creds = 1;
        if (options->password_authentication == -1)
@@ -223,6 +221,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)
@@ -276,11 +276,13 @@ 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,
-       sGssAuthentication, sGssKeyEx, sGssUseSessionCredCache, sGssCleanupCreds,
+       sGssAuthentication, sGssCleanupCreds, sAcceptEnv,
+       sGssKeyEx, 
        sUsePrivilegeSeparation,
        sDeprecated, sUnsupported
 } ServerOpCodes;
@@ -335,14 +337,10 @@ static struct {
 #ifdef GSSAPI
        { "gssapiauthentication", sGssAuthentication },
        { "gssapikeyexchange", sGssKeyEx },
-       { "gssusesessionccache", sGssUseSessionCredCache },
-       { "gssapiusesessioncredcache", sGssUseSessionCredCache },
        { "gssapicleanupcredentials", sGssCleanupCreds },
 #else
        { "gssapiauthentication", sUnsupported },
        { "gssapikeyexchange", sUnsupported },
-       { "gssusesessionccache", sUnsupported },
-       { "gssapiusesessioncredcache", sUnsupported },
        { "gssapicleanupcredentials", sUnsupported },
 #endif
 #ifdef SESSION_HOOKS
@@ -382,6 +380,7 @@ static struct {
        { "gatewayports", sGatewayPorts },
        { "subsystem", sSubsystem },
        { "maxstartups", sMaxStartups },
+       { "maxauthtries", sMaxAuthTries },
        { "banner", sBanner },
        { "usedns", sUseDNS },
        { "verifyreversemapping", sDeprecated },
@@ -391,6 +390,7 @@ static struct {
        { "authorizedkeysfile", sAuthorizedKeysFile },
        { "authorizedkeysfile2", sAuthorizedKeysFile2 },
        { "useprivilegeseparation", sUsePrivilegeSeparation},
+       { "acceptenv", sAcceptEnv },
        { NULL, sBadOption }
 };
 
@@ -677,10 +677,6 @@ parse_flag:
                intptr = &options->gss_keyex;
                goto parse_flag;
 
-       case sGssUseSessionCredCache:
-               intptr = &options->gss_use_session_ccache;
-               goto parse_flag;
-
        case sGssCleanupCreds:
                intptr = &options->gss_cleanup_creds;
                goto parse_flag;
@@ -918,6 +914,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;
@@ -942,6 +942,19 @@ parse_flag:
                intptr = &options->client_alive_count_max;
                goto parse_int;
 
+       case sAcceptEnv:
+               while ((arg = strdelim(&cp)) && *arg != '\0') {
+                       if (strchr(arg, '=') != NULL)
+                               fatal("%s line %d: Invalid environment name.",
+                                   filename, linenum);
+                       if (options->num_accept_env >= MAX_ACCEPT_ENV)
+                               fatal("%s line %d: too many allow env.",
+                                   filename, linenum);
+                       options->accept_env[options->num_accept_env++] =
+                           xstrdup(arg);
+               }
+               break;
+
        case sDeprecated:
                logit("%s line %d: Deprecated option %s",
                    filename, linenum, arg);
@@ -969,26 +982,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, *obuf, *cbuf;
+
+       debug2("%s: config %s len %d", __func__, filename, buffer_len(conf));
+
+       obuf = cbuf = xstrdup(buffer_ptr(conf));
+       linenum = 1;
+       while((cp = strsep(&cbuf, "\n")) != NULL) {
+               if (process_server_config_line(options, cp, filename,
+                   linenum++) != 0)
+                       bad_options++;
+       }
+       xfree(obuf);
        if (bad_options > 0)
                fatal("%s: terminating, %d bad configuration options",
                    filename, bad_options);
This page took 0.041116 seconds and 4 git commands to generate.