=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/servconf.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -r1.46 -r1.47 --- src/usr.bin/ssh/servconf.c 2000/06/26 21:59:18 1.46 +++ src/usr.bin/ssh/servconf.c 2000/07/10 16:30:25 1.47 @@ -12,7 +12,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: servconf.c,v 1.46 2000/06/26 21:59:18 markus Exp $"); +RCSID("$OpenBSD: servconf.c,v 1.47 2000/07/10 16:30:25 ho Exp $"); #include "ssh.h" #include "servconf.h" @@ -304,7 +304,7 @@ { FILE *f; char line[1024]; - char *cp, **charptr; + char *cp, **charptr, *arg; int linenum, *intptr, value; int bad_options = 0; ServerOpCodes opcode; @@ -321,8 +321,8 @@ cp = line + strspn(line, WHITESPACE); if (!*cp || *cp == '#') continue; - cp = strtok(cp, WHITESPACE); - opcode = parse_token(cp, filename, linenum); + arg = strsep(&cp, WHITESPACE); + opcode = parse_token(arg, filename, linenum); switch (opcode) { case sBadOption: bad_options++; @@ -337,23 +337,23 @@ if (options->num_ports >= MAX_PORTS) fatal("%s line %d: too many ports.\n", filename, linenum); - cp = strtok(NULL, WHITESPACE); - if (!cp) + arg = strsep(&cp, WHITESPACE); + if (!arg || *arg == '\0') fatal("%s line %d: missing port number.\n", filename, linenum); - options->ports[options->num_ports++] = atoi(cp); + options->ports[options->num_ports++] = atoi(arg); break; case sServerKeyBits: intptr = &options->server_key_bits; parse_int: - cp = strtok(NULL, WHITESPACE); - if (!cp) { + arg = strsep(&cp, WHITESPACE); + if (!arg || *arg == '\0') { fprintf(stderr, "%s line %d: missing integer value.\n", filename, linenum); exit(1); } - value = atoi(cp); + value = atoi(arg); if (*intptr == -1) *intptr = value; break; @@ -367,11 +367,11 @@ goto parse_int; case sListenAddress: - cp = strtok(NULL, WHITESPACE); - if (!cp) + arg = strsep(&cp, WHITESPACE); + if (!arg || *arg == '\0') fatal("%s line %d: missing inet addr.\n", filename, linenum); - add_listen_addr(options, cp); + add_listen_addr(options, arg); break; case sHostKeyFile: @@ -379,14 +379,14 @@ charptr = (opcode == sHostKeyFile ) ? &options->host_key_file : &options->host_dsa_key_file; parse_filename: - cp = strtok(NULL, WHITESPACE); - if (!cp) { + arg = strsep(&cp, WHITESPACE); + if (!arg || *arg == '\0') { fprintf(stderr, "%s line %d: missing file name.\n", filename, linenum); exit(1); } if (*charptr == NULL) - *charptr = tilde_expand_filename(cp, getuid()); + *charptr = tilde_expand_filename(arg, getuid()); break; case sPidFile: @@ -396,26 +396,26 @@ case sRandomSeedFile: fprintf(stderr, "%s line %d: \"randomseed\" option is obsolete.\n", filename, linenum); - cp = strtok(NULL, WHITESPACE); + arg = strsep(&cp, WHITESPACE); break; case sPermitRootLogin: intptr = &options->permit_root_login; - cp = strtok(NULL, WHITESPACE); - if (!cp) { + arg = strsep(&cp, WHITESPACE); + if (!arg || *arg == '\0') { fprintf(stderr, "%s line %d: missing yes/without-password/no argument.\n", filename, linenum); exit(1); } - if (strcmp(cp, "without-password") == 0) + if (strcmp(arg, "without-password") == 0) value = 2; - else if (strcmp(cp, "yes") == 0) + else if (strcmp(arg, "yes") == 0) value = 1; - else if (strcmp(cp, "no") == 0) + else if (strcmp(arg, "no") == 0) value = 0; else { fprintf(stderr, "%s line %d: Bad yes/without-password/no argument: %s\n", - filename, linenum, cp); + filename, linenum, arg); exit(1); } if (*intptr == -1) @@ -425,19 +425,19 @@ case sIgnoreRhosts: intptr = &options->ignore_rhosts; parse_flag: - cp = strtok(NULL, WHITESPACE); - if (!cp) { + arg = strsep(&cp, WHITESPACE); + if (!arg || *arg == '\0') { fprintf(stderr, "%s line %d: missing yes/no argument.\n", filename, linenum); exit(1); } - if (strcmp(cp, "yes") == 0) + if (strcmp(arg, "yes") == 0) value = 1; - else if (strcmp(cp, "no") == 0) + else if (strcmp(arg, "no") == 0) value = 0; else { fprintf(stderr, "%s line %d: Bad yes/no argument: %s\n", - filename, linenum, cp); + filename, linenum, arg); exit(1); } if (*intptr == -1) @@ -540,82 +540,82 @@ case sLogFacility: intptr = (int *) &options->log_facility; - cp = strtok(NULL, WHITESPACE); - value = log_facility_number(cp); + arg = strsep(&cp, WHITESPACE); + value = log_facility_number(arg); if (value == (SyslogFacility) - 1) fatal("%.200s line %d: unsupported log facility '%s'\n", - filename, linenum, cp ? cp : ""); + filename, linenum, arg ? arg : ""); if (*intptr == -1) *intptr = (SyslogFacility) value; break; case sLogLevel: intptr = (int *) &options->log_level; - cp = strtok(NULL, WHITESPACE); - value = log_level_number(cp); + arg = strsep(&cp, WHITESPACE); + value = log_level_number(arg); if (value == (LogLevel) - 1) fatal("%.200s line %d: unsupported log level '%s'\n", - filename, linenum, cp ? cp : ""); + filename, linenum, arg ? arg : ""); if (*intptr == -1) *intptr = (LogLevel) value; break; case sAllowUsers: - while ((cp = strtok(NULL, WHITESPACE))) { + while ((arg = strsep(&cp, WHITESPACE)) && *arg != '\0') { if (options->num_allow_users >= MAX_ALLOW_USERS) fatal("%s line %d: too many allow users.\n", filename, linenum); - options->allow_users[options->num_allow_users++] = xstrdup(cp); + options->allow_users[options->num_allow_users++] = xstrdup(arg); } break; case sDenyUsers: - while ((cp = strtok(NULL, WHITESPACE))) { + while ((arg = strsep(&cp, WHITESPACE)) && *arg != '\0') { if (options->num_deny_users >= MAX_DENY_USERS) fatal( "%s line %d: too many deny users.\n", filename, linenum); - options->deny_users[options->num_deny_users++] = xstrdup(cp); + options->deny_users[options->num_deny_users++] = xstrdup(arg); } break; case sAllowGroups: - while ((cp = strtok(NULL, WHITESPACE))) { + while ((arg = strsep(&cp, WHITESPACE)) && *arg != '\0') { if (options->num_allow_groups >= MAX_ALLOW_GROUPS) fatal("%s line %d: too many allow groups.\n", filename, linenum); - options->allow_groups[options->num_allow_groups++] = xstrdup(cp); + options->allow_groups[options->num_allow_groups++] = xstrdup(arg); } break; case sDenyGroups: - while ((cp = strtok(NULL, WHITESPACE))) { + while ((arg = strsep(&cp, WHITESPACE)) && *arg != '\0') { if (options->num_deny_groups >= MAX_DENY_GROUPS) fatal("%s line %d: too many deny groups.\n", filename, linenum); - options->deny_groups[options->num_deny_groups++] = xstrdup(cp); + options->deny_groups[options->num_deny_groups++] = xstrdup(arg); } break; case sCiphers: - cp = strtok(NULL, WHITESPACE); - if (!cp) + arg = strsep(&cp, WHITESPACE); + if (!arg || *arg == '\0') fatal("%s line %d: Missing argument.", filename, linenum); - if (!ciphers_valid(cp)) + if (!ciphers_valid(arg)) fatal("%s line %d: Bad SSH2 cipher spec '%s'.", - filename, linenum, cp ? cp : ""); + filename, linenum, arg ? arg : ""); if (options->ciphers == NULL) - options->ciphers = xstrdup(cp); + options->ciphers = xstrdup(arg); break; case sProtocol: intptr = &options->protocol; - cp = strtok(NULL, WHITESPACE); - if (!cp) + arg = strsep(&cp, WHITESPACE); + if (!arg || *arg == '\0') fatal("%s line %d: Missing argument.", filename, linenum); - value = proto_spec(cp); + value = proto_spec(arg); if (value == SSH_PROTO_UNKNOWN) fatal("%s line %d: Bad protocol spec '%s'.", - filename, linenum, cp ? cp : ""); + filename, linenum, arg ? arg : ""); if (*intptr == SSH_PROTO_UNKNOWN) *intptr = value; break; @@ -625,20 +625,20 @@ fatal("%s line %d: too many subsystems defined.", filename, linenum); } - cp = strtok(NULL, WHITESPACE); - if (!cp) + arg = strsep(&cp, WHITESPACE); + if (!arg || *arg == '\0') fatal("%s line %d: Missing subsystem name.", filename, linenum); for (i = 0; i < options->num_subsystems; i++) - if(strcmp(cp, options->subsystem_name[i]) == 0) + if(strcmp(arg, options->subsystem_name[i]) == 0) fatal("%s line %d: Subsystem '%s' already defined.", - filename, linenum, cp); - options->subsystem_name[options->num_subsystems] = xstrdup(cp); - cp = strtok(NULL, WHITESPACE); - if (!cp) + filename, linenum, arg); + options->subsystem_name[options->num_subsystems] = xstrdup(arg); + arg = strsep(&cp, WHITESPACE); + if (!arg || *arg == '\0') fatal("%s line %d: Missing subsystem command.", filename, linenum); - options->subsystem_command[options->num_subsystems] = xstrdup(cp); + options->subsystem_command[options->num_subsystems] = xstrdup(arg); options->num_subsystems++; break; @@ -648,12 +648,13 @@ default: fprintf(stderr, "%s line %d: Missing handler for opcode %s (%d)\n", - filename, linenum, cp, opcode); + filename, linenum, arg, opcode); exit(1); } - if (strtok(NULL, WHITESPACE) != NULL) { - fprintf(stderr, "%s line %d: garbage at end of line.\n", - filename, linenum); + if ((arg = strsep(&cp, WHITESPACE)) != NULL && *arg != '\0') { + fprintf(stderr, + "%s line %d: garbage at end of line; \"%.200s\".\n", + filename, linenum, arg); exit(1); } }