X-Git-Url: http://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Foptions.c;h=d9e794b23ac5d7be0b5d734c220dfb89c77bb2dd;hp=edee078245a2d43b1699befbb2b25468c698bf4a;hb=deb02ea79306c28c58538561bde38da17bd2bd4d;hpb=07de73a331240b97d915c1851431a743449dd0f4 diff --git a/pppd/options.c b/pppd/options.c index edee078..d9e794b 100644 --- a/pppd/options.c +++ b/pppd/options.c @@ -17,7 +17,7 @@ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ -#define RCSID "$Id: options.c,v 1.66 1999/09/11 12:08:58 paulus Exp $" +#define RCSID "$Id: options.c,v 1.70 2000/03/13 23:39:58 paulus Exp $" #include #include @@ -78,8 +78,8 @@ bool lockflag = 0; /* Create lock file to lock the serial dev */ bool nodetach = 0; /* Don't detach from controlling tty */ bool updetach = 0; /* Detach once link is up */ char *initializer = NULL; /* Script to initialize physical link */ -char *connector = NULL; /* Script to establish physical link */ -char *disconnector = NULL; /* Script to disestablish physical link */ +char *connect_script = NULL; /* Script to establish physical link */ +char *disconnect_script = NULL; /* Script to disestablish physical link */ char *welcomer = NULL; /* Script to run after phys link estab. */ char *ptycommand = NULL; /* Command to run on other side of pty */ int maxconnect = 0; /* Maximum connect time */ @@ -93,6 +93,7 @@ int idle_time_limit = 0; /* Disconnect if idle for this many seconds */ int holdoff = 30; /* # seconds to pause before reconnecting */ bool holdoff_specified; /* true if a holdoff value has been given */ bool notty = 0; /* Stdin/out is not a tty */ +char *pty_socket = NULL; /* Socket to connect to pty */ char *record_file = NULL; /* File to record chars sent/received */ int using_pty = 0; bool sync_serial = 0; /* Device is synchronous serial device */ @@ -100,14 +101,16 @@ int log_to_fd = 1; /* send log messages to this fd too */ int maxfail = 10; /* max # of unsuccessful connection attempts */ char linkname[MAXPATHLEN]; /* logical name for link */ bool tune_kernel; /* may alter kernel settings */ +int connect_delay = 1000; /* wait this many ms after connect script */ +int max_data_rate; /* max bytes/sec through charshunt */ extern option_t auth_options[]; extern struct stat devstat; extern int prepass; /* Doing pre-pass to find device name */ struct option_info initializer_info; -struct option_info connector_info; -struct option_info disconnector_info; +struct option_info connect_script_info; +struct option_info disconnect_script_info; struct option_info welcomer_info; struct option_info devnam_info; struct option_info ptycommand_info; @@ -190,12 +193,12 @@ option_t general_options[] = { { "init", o_string, &initializer, "A program to initialize the device", OPT_A2INFO | OPT_PRIVFIX, &initializer_info }, - { "connect", o_string, &connector, + { "connect", o_string, &connect_script, "A program to set up a connection", - OPT_A2INFO | OPT_PRIVFIX, &connector_info }, - { "disconnect", o_string, &disconnector, + OPT_A2INFO | OPT_PRIVFIX, &connect_script_info }, + { "disconnect", o_string, &disconnect_script, "Program to disconnect serial device", - OPT_A2INFO | OPT_PRIVFIX, &disconnector_info }, + OPT_A2INFO | OPT_PRIVFIX, &disconnect_script_info }, { "welcome", o_string, &welcomer, "Script to welcome client", OPT_A2INFO | OPT_PRIVFIX, &welcomer_info }, @@ -204,6 +207,8 @@ option_t general_options[] = { OPT_A2INFO | OPT_PRIVFIX | OPT_DEVNAM, &ptycommand_info }, { "notty", o_bool, ¬ty, "Input/output is not a tty", OPT_DEVNAM | 1 }, + { "socket", o_string, &pty_socket, + "Send and receive over socket, arg is host:port", OPT_DEVNAM }, { "record", o_string, &record_file, "Record characters sent/received to file" }, { "maxconnect", o_int, &maxconnect, @@ -267,6 +272,10 @@ option_t general_options[] = { "Alter kernel settings as necessary", 1 }, { "noktune", o_bool, &tune_kernel, "Don't alter kernel settings", 0 }, + { "connect-delay", o_int, &connect_delay, + "Maximum time (in ms) to wait after connect script finishes" }, + { "datarate", o_int, &max_data_rate, + "Maximum data rate in bytes/sec (with pty, notty or record option)" }, #ifdef PLUGIN { "plugin", o_special, loadplugin, "Load a plug-in module into pppd", OPT_PRIV }, @@ -1413,7 +1422,7 @@ setipaddr(arg) */ if (colon != arg) { *colon = '\0'; - if ((local = inet_addr(arg)) == -1) { + if ((local = inet_addr(arg)) == (u_int32_t) -1) { if ((hp = gethostbyname(arg)) == NULL) { option_error("unknown host: %s", arg); return -1; @@ -1434,7 +1443,7 @@ setipaddr(arg) * If colon last character, then no remote addr. */ if (*++colon != '\0') { - if ((remote = inet_addr(colon)) == -1) { + if ((remote = inet_addr(colon)) == (u_int32_t) -1) { if ((hp = gethostbyname(colon)) == NULL) { option_error("unknown host: %s", colon); return -1; @@ -1478,7 +1487,7 @@ setnetmask(argv) b = strtoul(p, &endp, 0); if (endp == p) break; - if (b < 0 || b > 255) { + if (b > 255) { if (n == 3) { /* accept e.g. 0xffffff00 */ p = endp; @@ -1523,7 +1532,9 @@ setlogfile(argv) if (!privileged_option) seteuid(getuid()); - fd = open(*argv, O_WRONLY | O_APPEND); + fd = open(*argv, O_WRONLY | O_APPEND | O_CREAT | O_EXCL, 0644); + if (fd < 0 && errno == EEXIST) + fd = open(*argv, O_WRONLY | O_APPEND); err = errno; if (!privileged_option) seteuid(0);