Annotation of embedaddon/coova-chilli/src/cmdline.c, revision 1.1
1.1 ! misho 1: /*
! 2: File autogenerated by gengetopt version 2.22
! 3: generated with the following command:
! 4: gengetopt -C --no-handle-help --no-handle-version
! 5:
! 6: The developers of gengetopt consider the fixed text that goes in all
! 7: gengetopt output files to be in the public domain:
! 8: we make no copyright claims on it.
! 9: */
! 10:
! 11: /* If we use autoconf. */
! 12: #ifdef HAVE_CONFIG_H
! 13: #include "config.h"
! 14: #endif
! 15:
! 16: #include <stdio.h>
! 17: #include <stdlib.h>
! 18: #include <string.h>
! 19:
! 20: #include "getopt.h"
! 21:
! 22: #include "cmdline.h"
! 23:
! 24: const char *gengetopt_args_info_purpose = "";
! 25:
! 26: const char *gengetopt_args_info_usage = "Usage: " CMDLINE_PARSER_PACKAGE " [OPTIONS]...";
! 27:
! 28: const char *gengetopt_args_info_description = "";
! 29:
! 30: const char *gengetopt_args_info_help[] = {
! 31: " -h, --help Print help and exit",
! 32: " -V, --version Print version and exit",
! 33: " -f, --fg Run in foreground (default=off)",
! 34: " -d, --debug Run in debug mode (default=off)",
! 35: " --debugfacility=INT Which modules to print debug messages for \n (default=`1')",
! 36: " --logfacility=INT Syslog facility to be used for logging \n (default=`-1')",
! 37: " -c, --conf=STRING Read configuration file",
! 38: " --interval=INT Re-read configuration file at this interval \n (default=`3600')",
! 39: " --pidfile=STRING Filename of process id file",
! 40: " --statedir=STRING Directory of nonvolatile data",
! 41: " -n, --net=STRING Network (default=`192.168.182.0/24')",
! 42: " --dhcpstart=INT Network DHCP Starting IP (default=`0')",
! 43: " --dhcpend=INT Network DHCP Ending IP (default=`0')",
! 44: " --dynip=STRING Dynamic IP address pool",
! 45: " --nodynip No Dynamic IP assignment (default=off)",
! 46: " --statip=STRING Static IP address pool",
! 47: " --dns1=STRING Primary DNS server IP address",
! 48: " --dns2=STRING Secondary DNS server IP address",
! 49: " --domain=STRING Domain to use for DNS lookups \n (default=`coova.org')",
! 50: " --ipup=STRING Script to run after link-up",
! 51: " --ipdown=STRING Script to run after link-down",
! 52: " --conup=STRING Script to run after user logon",
! 53: " --condown=STRING Script to run after user logoff",
! 54: " --txqlen=INT TX Queue length for tun interface (linux only) \n (default=`100')",
! 55: " --tundev=STRING TUN/TAP Device, as in tun0 or tap1",
! 56: " --radiuslisten=STRING IP address to send from",
! 57: " --radiusserver1=STRING IP address of radius server 1 \n (default=`rad01.coova.org')",
! 58: " --radiusserver2=STRING IP address of radius server 2 \n (default=`rad01.coova.org')",
! 59: " --radiusauthport=INT Authentication UDP port of radius server \n (default=`1812')",
! 60: " --radiusacctport=INT Accounting UDP port of radius server \n (default=`1813')",
! 61: " --radiussecret=STRING Radius shared secret \n (default=`coova-anonymous')",
! 62: " --radiustimeout=INT Retry timeout in seconds (default=`30')",
! 63: " --radiusretry=INT Total number of retries (default=`6')",
! 64: " --radiusretrysec=INT Number of retries before using secondary \n (default=`3')",
! 65: " --radiusnasid=STRING Radius NAS-Identifier (default=`nas01')",
! 66: " --radiuslocationid=STRING WISPr Location ID",
! 67: " --radiuslocationname=STRING\n WISPr Location Name",
! 68: " --locationname=STRING Location Name",
! 69: " --radiusnasporttype=INT Radius NAS-Port-Type (default=`19')",
! 70: " --coaport=INT Radius disconnect port to listen to \n (default=`0')",
! 71: " --coanoipcheck Allow radius disconnect from any IP \n (default=off)",
! 72: " --proxylisten=STRING IP address to listen to",
! 73: " --proxyport=INT UDP port to listen to (default=`0')",
! 74: " --proxyclient=STRING IP address of proxy client(s)",
! 75: " --proxysecret=STRING Radius proxy shared secret",
! 76: " --dhcpif=STRING Local Ethernet interface",
! 77: " --dhcpmac=STRING Interface MAC address",
! 78: " --dhcpradius Map certain DHCP options to RADIUS attributes \n (default=off)",
! 79: " --dhcpgateway=STRING DHCP gateway addresss for relay",
! 80: " --dhcpgatewayport=INT DHCP gateway port for relay (default=`67')",
! 81: " --dhcprelayagent=STRING DHCP relay agent IP addresss (default \n uamlisten)",
! 82: " --lease=INT Lease time to allocate to clients \n (default=`600')",
! 83: " --eapolenable Enable IEEE 802.1x authentication \n (default=off)",
! 84: " --uamserver=STRING URL of authentication web server",
! 85: " --uamhomepage=STRING URL of homepage to redirect unauthenticated \n users to",
! 86: " --uamsecret=STRING Shared secret between uamserver and chilli",
! 87: " --uamlisten=STRING IP address to listen to for authentication \n requests",
! 88: " --uamport=INT TCP port to bind to for authentication requests \n (default=`3990')",
! 89: " --uamuiport=INT TCP port to bind to for UAM UI requests \n (default=`3991')",
! 90: " --uamallowed=STRING Domain names exempt from access check ",
! 91: " --uamdomain=STRING Domain name allowed (active dns filtering; one \n per line!) ",
! 92: " --uamanydns Allow client to use any DNS server \n (default=off)",
! 93: " --uamanyip Allow client to use any IP Address \n (default=off)",
! 94: " --wisprlogin=STRING A specific WISPr login url to be used",
! 95: " --nouamsuccess Do not return to the UAM server on success, \n original url instead (default=off)",
! 96: " --nouamwispr Do not send WISPr XML from ChilliSpot, assume \n back-end does (default=off)",
! 97: " --uamlogoutip=STRING HTTP Auto-Logout IP Address \n (default=`1.1.1.1')",
! 98: " --defsessiontimeout=LONG Default session-timeout if not returned by \n RADIUS (default=`0')",
! 99: " --defidletimeout=INT Default idle-timeout if not returned by RADIUS \n (default=`0')",
! 100: " --defbandwidthmaxdown=LONG\n Default WISPr-Bandwidth-Max-Down if not \n returned by RADIUS (default=`0')",
! 101: " --defbandwidthmaxup=LONG Default WISPr-Bandwidth-Max-Up if not returned \n by RADIUS (default=`0')",
! 102: " --definteriminterval=INT Default interim-interval for accounting if not \n returned by RADIUS (default=`300')",
! 103: " --macauth Authenticate based on MAC address \n (default=off)",
! 104: " --macauthdeny Deny access (even UAM) to MAC addresses given \n Access-Reject (default=off)",
! 105: " --macallowed=STRING List of allowed MAC addresses",
! 106: " --macsuffix=STRING Suffix to add to the MAC address",
! 107: " --macpasswd=STRING Password used when performing MAC \n authentication",
! 108: " --macallowlocal Do not use RADIUS for authenticating the \n macallowed (default=off)",
! 109: " --wwwdir=STRING Local content served by chilli (for splash \n page, etc)",
! 110: " --wwwbin=STRING Script binary (such as haserl) for simple web \n programming",
! 111: " --uamui=STRING Program in inetd style to handle all uam \n requests",
! 112: " --adminuser=STRING RADIUS administrative user login username \n (default=`chillispot')",
! 113: " --adminpasswd=STRING RADIUS administrative user login password \n (default=`chillispot')",
! 114: " --nasmac=STRING Unique MAC address of the NAS \n (called-station-id)",
! 115: " --nasip=STRING Unique IP address of the NAS (nas-ip-address)",
! 116: " --ssid=STRING SSID of the session",
! 117: " --vlan=STRING VLAN of the session",
! 118: " --cmdsocket=STRING path to the command unix socket",
! 119: " --radiusoriginalurl Turn on the sending of ChilliSpot-OriginalURL \n in Access-Request (default=off)",
! 120: " --swapoctets Swap the meaning of input/output octets/packets \n (default=off)",
! 121: " --usestatusfile Use the status file to keep track of sessions \n (default=off)",
! 122: " --localusers=STRING File keep 'Local' usernames and passwords",
! 123: " --postauthproxy=STRING IP of an upstream transparent proxy",
! 124: " --postauthproxyport=INT Port of an upstream transparent proxy \n (default=`0')",
! 125: " --wpaguests Allow WPA 'Guest' access (default=off)",
! 126: " --openidauth Allow OpenID authentication (default=off)",
! 127: " --papalwaysok Always allow 'PAP' authentication (depreciated; \n always on) (default=off)",
! 128: " --chillixml Use ChilliSpot XML in WISPr blocks \n (default=off)",
! 129: " --acctupdate Allow updating of session attributes in \n Accounting-Response (default=off)",
! 130: " --dnsparanoia Inspect DNS packets and drop responses with any \n non- A, CNAME, SOA, or MX records (to prevent \n dns tunnels) (default=off)",
! 131: " --usetap Use a TAP instead of TUN (linux only) \n (default=off)",
! 132: " --routeif=STRING Interface to use as default route; turns on \n 'manual' routing",
! 133: 0
! 134: };
! 135:
! 136: typedef enum {ARG_NO
! 137: , ARG_FLAG
! 138: , ARG_STRING
! 139: , ARG_INT
! 140: , ARG_LONG
! 141: } cmdline_parser_arg_type;
! 142:
! 143: static
! 144: void clear_given (struct gengetopt_args_info *args_info);
! 145: static
! 146: void clear_args (struct gengetopt_args_info *args_info);
! 147:
! 148: static int
! 149: cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info,
! 150: struct cmdline_parser_params *params, const char *additional_error);
! 151:
! 152: static int
! 153: cmdline_parser_required2 (struct gengetopt_args_info *args_info, const char *prog_name, const char *additional_error);
! 154: struct line_list
! 155: {
! 156: char * string_arg;
! 157: struct line_list * next;
! 158: };
! 159:
! 160: static struct line_list *cmd_line_list = 0;
! 161: static struct line_list *cmd_line_list_tmp = 0;
! 162:
! 163: static void
! 164: free_cmd_list(void)
! 165: {
! 166: /* free the list of a previous call */
! 167: if (cmd_line_list)
! 168: {
! 169: while (cmd_line_list) {
! 170: cmd_line_list_tmp = cmd_line_list;
! 171: cmd_line_list = cmd_line_list->next;
! 172: free (cmd_line_list_tmp->string_arg);
! 173: free (cmd_line_list_tmp);
! 174: }
! 175: }
! 176: }
! 177:
! 178:
! 179: static char *
! 180: gengetopt_strdup (const char *s);
! 181:
! 182: static
! 183: void clear_given (struct gengetopt_args_info *args_info)
! 184: {
! 185: args_info->help_given = 0 ;
! 186: args_info->version_given = 0 ;
! 187: args_info->fg_given = 0 ;
! 188: args_info->debug_given = 0 ;
! 189: args_info->debugfacility_given = 0 ;
! 190: args_info->logfacility_given = 0 ;
! 191: args_info->conf_given = 0 ;
! 192: args_info->interval_given = 0 ;
! 193: args_info->pidfile_given = 0 ;
! 194: args_info->statedir_given = 0 ;
! 195: args_info->net_given = 0 ;
! 196: args_info->dhcpstart_given = 0 ;
! 197: args_info->dhcpend_given = 0 ;
! 198: args_info->dynip_given = 0 ;
! 199: args_info->nodynip_given = 0 ;
! 200: args_info->statip_given = 0 ;
! 201: args_info->dns1_given = 0 ;
! 202: args_info->dns2_given = 0 ;
! 203: args_info->domain_given = 0 ;
! 204: args_info->ipup_given = 0 ;
! 205: args_info->ipdown_given = 0 ;
! 206: args_info->conup_given = 0 ;
! 207: args_info->condown_given = 0 ;
! 208: args_info->txqlen_given = 0 ;
! 209: args_info->tundev_given = 0 ;
! 210: args_info->radiuslisten_given = 0 ;
! 211: args_info->radiusserver1_given = 0 ;
! 212: args_info->radiusserver2_given = 0 ;
! 213: args_info->radiusauthport_given = 0 ;
! 214: args_info->radiusacctport_given = 0 ;
! 215: args_info->radiussecret_given = 0 ;
! 216: args_info->radiustimeout_given = 0 ;
! 217: args_info->radiusretry_given = 0 ;
! 218: args_info->radiusretrysec_given = 0 ;
! 219: args_info->radiusnasid_given = 0 ;
! 220: args_info->radiuslocationid_given = 0 ;
! 221: args_info->radiuslocationname_given = 0 ;
! 222: args_info->locationname_given = 0 ;
! 223: args_info->radiusnasporttype_given = 0 ;
! 224: args_info->coaport_given = 0 ;
! 225: args_info->coanoipcheck_given = 0 ;
! 226: args_info->proxylisten_given = 0 ;
! 227: args_info->proxyport_given = 0 ;
! 228: args_info->proxyclient_given = 0 ;
! 229: args_info->proxysecret_given = 0 ;
! 230: args_info->dhcpif_given = 0 ;
! 231: args_info->dhcpmac_given = 0 ;
! 232: args_info->dhcpradius_given = 0 ;
! 233: args_info->dhcpgateway_given = 0 ;
! 234: args_info->dhcpgatewayport_given = 0 ;
! 235: args_info->dhcprelayagent_given = 0 ;
! 236: args_info->lease_given = 0 ;
! 237: args_info->eapolenable_given = 0 ;
! 238: args_info->uamserver_given = 0 ;
! 239: args_info->uamhomepage_given = 0 ;
! 240: args_info->uamsecret_given = 0 ;
! 241: args_info->uamlisten_given = 0 ;
! 242: args_info->uamport_given = 0 ;
! 243: args_info->uamuiport_given = 0 ;
! 244: args_info->uamallowed_given = 0 ;
! 245: args_info->uamdomain_given = 0 ;
! 246: args_info->uamanydns_given = 0 ;
! 247: args_info->uamanyip_given = 0 ;
! 248: args_info->wisprlogin_given = 0 ;
! 249: args_info->nouamsuccess_given = 0 ;
! 250: args_info->nouamwispr_given = 0 ;
! 251: args_info->uamlogoutip_given = 0 ;
! 252: args_info->defsessiontimeout_given = 0 ;
! 253: args_info->defidletimeout_given = 0 ;
! 254: args_info->defbandwidthmaxdown_given = 0 ;
! 255: args_info->defbandwidthmaxup_given = 0 ;
! 256: args_info->definteriminterval_given = 0 ;
! 257: args_info->macauth_given = 0 ;
! 258: args_info->macauthdeny_given = 0 ;
! 259: args_info->macallowed_given = 0 ;
! 260: args_info->macsuffix_given = 0 ;
! 261: args_info->macpasswd_given = 0 ;
! 262: args_info->macallowlocal_given = 0 ;
! 263: args_info->wwwdir_given = 0 ;
! 264: args_info->wwwbin_given = 0 ;
! 265: args_info->uamui_given = 0 ;
! 266: args_info->adminuser_given = 0 ;
! 267: args_info->adminpasswd_given = 0 ;
! 268: args_info->nasmac_given = 0 ;
! 269: args_info->nasip_given = 0 ;
! 270: args_info->ssid_given = 0 ;
! 271: args_info->vlan_given = 0 ;
! 272: args_info->cmdsocket_given = 0 ;
! 273: args_info->radiusoriginalurl_given = 0 ;
! 274: args_info->swapoctets_given = 0 ;
! 275: args_info->usestatusfile_given = 0 ;
! 276: args_info->localusers_given = 0 ;
! 277: args_info->postauthproxy_given = 0 ;
! 278: args_info->postauthproxyport_given = 0 ;
! 279: args_info->wpaguests_given = 0 ;
! 280: args_info->openidauth_given = 0 ;
! 281: args_info->papalwaysok_given = 0 ;
! 282: args_info->chillixml_given = 0 ;
! 283: args_info->acctupdate_given = 0 ;
! 284: args_info->dnsparanoia_given = 0 ;
! 285: args_info->usetap_given = 0 ;
! 286: args_info->routeif_given = 0 ;
! 287: }
! 288:
! 289: static
! 290: void clear_args (struct gengetopt_args_info *args_info)
! 291: {
! 292: args_info->fg_flag = 0;
! 293: args_info->debug_flag = 0;
! 294: args_info->debugfacility_arg = 1;
! 295: args_info->debugfacility_orig = NULL;
! 296: args_info->logfacility_arg = -1;
! 297: args_info->logfacility_orig = NULL;
! 298: args_info->conf_arg = NULL;
! 299: args_info->conf_orig = NULL;
! 300: args_info->interval_arg = 3600;
! 301: args_info->interval_orig = NULL;
! 302: args_info->pidfile_arg = NULL;
! 303: args_info->pidfile_orig = NULL;
! 304: args_info->statedir_arg = NULL;
! 305: args_info->statedir_orig = NULL;
! 306: args_info->net_arg = gengetopt_strdup ("192.168.182.0/24");
! 307: args_info->net_orig = NULL;
! 308: args_info->dhcpstart_arg = 0;
! 309: args_info->dhcpstart_orig = NULL;
! 310: args_info->dhcpend_arg = 0;
! 311: args_info->dhcpend_orig = NULL;
! 312: args_info->dynip_arg = NULL;
! 313: args_info->dynip_orig = NULL;
! 314: args_info->nodynip_flag = 0;
! 315: args_info->statip_arg = NULL;
! 316: args_info->statip_orig = NULL;
! 317: args_info->dns1_arg = NULL;
! 318: args_info->dns1_orig = NULL;
! 319: args_info->dns2_arg = NULL;
! 320: args_info->dns2_orig = NULL;
! 321: args_info->domain_arg = gengetopt_strdup ("coova.org");
! 322: args_info->domain_orig = NULL;
! 323: args_info->ipup_arg = NULL;
! 324: args_info->ipup_orig = NULL;
! 325: args_info->ipdown_arg = NULL;
! 326: args_info->ipdown_orig = NULL;
! 327: args_info->conup_arg = NULL;
! 328: args_info->conup_orig = NULL;
! 329: args_info->condown_arg = NULL;
! 330: args_info->condown_orig = NULL;
! 331: args_info->txqlen_arg = 100;
! 332: args_info->txqlen_orig = NULL;
! 333: args_info->tundev_arg = NULL;
! 334: args_info->tundev_orig = NULL;
! 335: args_info->radiuslisten_arg = NULL;
! 336: args_info->radiuslisten_orig = NULL;
! 337: args_info->radiusserver1_arg = gengetopt_strdup ("rad01.coova.org");
! 338: args_info->radiusserver1_orig = NULL;
! 339: args_info->radiusserver2_arg = gengetopt_strdup ("rad01.coova.org");
! 340: args_info->radiusserver2_orig = NULL;
! 341: args_info->radiusauthport_arg = 1812;
! 342: args_info->radiusauthport_orig = NULL;
! 343: args_info->radiusacctport_arg = 1813;
! 344: args_info->radiusacctport_orig = NULL;
! 345: args_info->radiussecret_arg = gengetopt_strdup ("coova-anonymous");
! 346: args_info->radiussecret_orig = NULL;
! 347: args_info->radiustimeout_arg = 30;
! 348: args_info->radiustimeout_orig = NULL;
! 349: args_info->radiusretry_arg = 6;
! 350: args_info->radiusretry_orig = NULL;
! 351: args_info->radiusretrysec_arg = 3;
! 352: args_info->radiusretrysec_orig = NULL;
! 353: args_info->radiusnasid_arg = gengetopt_strdup ("nas01");
! 354: args_info->radiusnasid_orig = NULL;
! 355: args_info->radiuslocationid_arg = NULL;
! 356: args_info->radiuslocationid_orig = NULL;
! 357: args_info->radiuslocationname_arg = NULL;
! 358: args_info->radiuslocationname_orig = NULL;
! 359: args_info->locationname_arg = NULL;
! 360: args_info->locationname_orig = NULL;
! 361: args_info->radiusnasporttype_arg = 19;
! 362: args_info->radiusnasporttype_orig = NULL;
! 363: args_info->coaport_arg = 0;
! 364: args_info->coaport_orig = NULL;
! 365: args_info->coanoipcheck_flag = 0;
! 366: args_info->proxylisten_arg = NULL;
! 367: args_info->proxylisten_orig = NULL;
! 368: args_info->proxyport_arg = 0;
! 369: args_info->proxyport_orig = NULL;
! 370: args_info->proxyclient_arg = NULL;
! 371: args_info->proxyclient_orig = NULL;
! 372: args_info->proxysecret_arg = NULL;
! 373: args_info->proxysecret_orig = NULL;
! 374: args_info->dhcpif_arg = NULL;
! 375: args_info->dhcpif_orig = NULL;
! 376: args_info->dhcpmac_arg = NULL;
! 377: args_info->dhcpmac_orig = NULL;
! 378: args_info->dhcpradius_flag = 0;
! 379: args_info->dhcpgateway_arg = NULL;
! 380: args_info->dhcpgateway_orig = NULL;
! 381: args_info->dhcpgatewayport_arg = 67;
! 382: args_info->dhcpgatewayport_orig = NULL;
! 383: args_info->dhcprelayagent_arg = NULL;
! 384: args_info->dhcprelayagent_orig = NULL;
! 385: args_info->lease_arg = 600;
! 386: args_info->lease_orig = NULL;
! 387: args_info->eapolenable_flag = 0;
! 388: args_info->uamserver_arg = NULL;
! 389: args_info->uamserver_orig = NULL;
! 390: args_info->uamhomepage_arg = NULL;
! 391: args_info->uamhomepage_orig = NULL;
! 392: args_info->uamsecret_arg = NULL;
! 393: args_info->uamsecret_orig = NULL;
! 394: args_info->uamlisten_arg = NULL;
! 395: args_info->uamlisten_orig = NULL;
! 396: args_info->uamport_arg = 3990;
! 397: args_info->uamport_orig = NULL;
! 398: args_info->uamuiport_arg = 3991;
! 399: args_info->uamuiport_orig = NULL;
! 400: args_info->uamallowed_arg = NULL;
! 401: args_info->uamallowed_orig = NULL;
! 402: args_info->uamdomain_arg = NULL;
! 403: args_info->uamdomain_orig = NULL;
! 404: args_info->uamanydns_flag = 0;
! 405: args_info->uamanyip_flag = 0;
! 406: args_info->wisprlogin_arg = NULL;
! 407: args_info->wisprlogin_orig = NULL;
! 408: args_info->nouamsuccess_flag = 0;
! 409: args_info->nouamwispr_flag = 0;
! 410: args_info->uamlogoutip_arg = gengetopt_strdup ("1.1.1.1");
! 411: args_info->uamlogoutip_orig = NULL;
! 412: args_info->defsessiontimeout_arg = 0;
! 413: args_info->defsessiontimeout_orig = NULL;
! 414: args_info->defidletimeout_arg = 0;
! 415: args_info->defidletimeout_orig = NULL;
! 416: args_info->defbandwidthmaxdown_arg = 0;
! 417: args_info->defbandwidthmaxdown_orig = NULL;
! 418: args_info->defbandwidthmaxup_arg = 0;
! 419: args_info->defbandwidthmaxup_orig = NULL;
! 420: args_info->definteriminterval_arg = 300;
! 421: args_info->definteriminterval_orig = NULL;
! 422: args_info->macauth_flag = 0;
! 423: args_info->macauthdeny_flag = 0;
! 424: args_info->macallowed_arg = NULL;
! 425: args_info->macallowed_orig = NULL;
! 426: args_info->macsuffix_arg = NULL;
! 427: args_info->macsuffix_orig = NULL;
! 428: args_info->macpasswd_arg = NULL;
! 429: args_info->macpasswd_orig = NULL;
! 430: args_info->macallowlocal_flag = 0;
! 431: args_info->wwwdir_arg = NULL;
! 432: args_info->wwwdir_orig = NULL;
! 433: args_info->wwwbin_arg = NULL;
! 434: args_info->wwwbin_orig = NULL;
! 435: args_info->uamui_arg = NULL;
! 436: args_info->uamui_orig = NULL;
! 437: args_info->adminuser_arg = gengetopt_strdup ("chillispot");
! 438: args_info->adminuser_orig = NULL;
! 439: args_info->adminpasswd_arg = gengetopt_strdup ("chillispot");
! 440: args_info->adminpasswd_orig = NULL;
! 441: args_info->nasmac_arg = NULL;
! 442: args_info->nasmac_orig = NULL;
! 443: args_info->nasip_arg = NULL;
! 444: args_info->nasip_orig = NULL;
! 445: args_info->ssid_arg = NULL;
! 446: args_info->ssid_orig = NULL;
! 447: args_info->vlan_arg = NULL;
! 448: args_info->vlan_orig = NULL;
! 449: args_info->cmdsocket_arg = NULL;
! 450: args_info->cmdsocket_orig = NULL;
! 451: args_info->radiusoriginalurl_flag = 0;
! 452: args_info->swapoctets_flag = 0;
! 453: args_info->usestatusfile_flag = 0;
! 454: args_info->localusers_arg = NULL;
! 455: args_info->localusers_orig = NULL;
! 456: args_info->postauthproxy_arg = NULL;
! 457: args_info->postauthproxy_orig = NULL;
! 458: args_info->postauthproxyport_arg = 0;
! 459: args_info->postauthproxyport_orig = NULL;
! 460: args_info->wpaguests_flag = 0;
! 461: args_info->openidauth_flag = 0;
! 462: args_info->papalwaysok_flag = 0;
! 463: args_info->chillixml_flag = 0;
! 464: args_info->acctupdate_flag = 0;
! 465: args_info->dnsparanoia_flag = 0;
! 466: args_info->usetap_flag = 0;
! 467: args_info->routeif_arg = NULL;
! 468: args_info->routeif_orig = NULL;
! 469:
! 470: }
! 471:
! 472: static
! 473: void init_args_info(struct gengetopt_args_info *args_info)
! 474: {
! 475:
! 476:
! 477: args_info->help_help = gengetopt_args_info_help[0] ;
! 478: args_info->version_help = gengetopt_args_info_help[1] ;
! 479: args_info->fg_help = gengetopt_args_info_help[2] ;
! 480: args_info->debug_help = gengetopt_args_info_help[3] ;
! 481: args_info->debugfacility_help = gengetopt_args_info_help[4] ;
! 482: args_info->logfacility_help = gengetopt_args_info_help[5] ;
! 483: args_info->conf_help = gengetopt_args_info_help[6] ;
! 484: args_info->interval_help = gengetopt_args_info_help[7] ;
! 485: args_info->pidfile_help = gengetopt_args_info_help[8] ;
! 486: args_info->statedir_help = gengetopt_args_info_help[9] ;
! 487: args_info->net_help = gengetopt_args_info_help[10] ;
! 488: args_info->dhcpstart_help = gengetopt_args_info_help[11] ;
! 489: args_info->dhcpend_help = gengetopt_args_info_help[12] ;
! 490: args_info->dynip_help = gengetopt_args_info_help[13] ;
! 491: args_info->nodynip_help = gengetopt_args_info_help[14] ;
! 492: args_info->statip_help = gengetopt_args_info_help[15] ;
! 493: args_info->dns1_help = gengetopt_args_info_help[16] ;
! 494: args_info->dns2_help = gengetopt_args_info_help[17] ;
! 495: args_info->domain_help = gengetopt_args_info_help[18] ;
! 496: args_info->ipup_help = gengetopt_args_info_help[19] ;
! 497: args_info->ipdown_help = gengetopt_args_info_help[20] ;
! 498: args_info->conup_help = gengetopt_args_info_help[21] ;
! 499: args_info->condown_help = gengetopt_args_info_help[22] ;
! 500: args_info->txqlen_help = gengetopt_args_info_help[23] ;
! 501: args_info->tundev_help = gengetopt_args_info_help[24] ;
! 502: args_info->radiuslisten_help = gengetopt_args_info_help[25] ;
! 503: args_info->radiusserver1_help = gengetopt_args_info_help[26] ;
! 504: args_info->radiusserver2_help = gengetopt_args_info_help[27] ;
! 505: args_info->radiusauthport_help = gengetopt_args_info_help[28] ;
! 506: args_info->radiusacctport_help = gengetopt_args_info_help[29] ;
! 507: args_info->radiussecret_help = gengetopt_args_info_help[30] ;
! 508: args_info->radiustimeout_help = gengetopt_args_info_help[31] ;
! 509: args_info->radiusretry_help = gengetopt_args_info_help[32] ;
! 510: args_info->radiusretrysec_help = gengetopt_args_info_help[33] ;
! 511: args_info->radiusnasid_help = gengetopt_args_info_help[34] ;
! 512: args_info->radiuslocationid_help = gengetopt_args_info_help[35] ;
! 513: args_info->radiuslocationname_help = gengetopt_args_info_help[36] ;
! 514: args_info->locationname_help = gengetopt_args_info_help[37] ;
! 515: args_info->radiusnasporttype_help = gengetopt_args_info_help[38] ;
! 516: args_info->coaport_help = gengetopt_args_info_help[39] ;
! 517: args_info->coanoipcheck_help = gengetopt_args_info_help[40] ;
! 518: args_info->proxylisten_help = gengetopt_args_info_help[41] ;
! 519: args_info->proxyport_help = gengetopt_args_info_help[42] ;
! 520: args_info->proxyclient_help = gengetopt_args_info_help[43] ;
! 521: args_info->proxysecret_help = gengetopt_args_info_help[44] ;
! 522: args_info->dhcpif_help = gengetopt_args_info_help[45] ;
! 523: args_info->dhcpmac_help = gengetopt_args_info_help[46] ;
! 524: args_info->dhcpradius_help = gengetopt_args_info_help[47] ;
! 525: args_info->dhcpgateway_help = gengetopt_args_info_help[48] ;
! 526: args_info->dhcpgatewayport_help = gengetopt_args_info_help[49] ;
! 527: args_info->dhcprelayagent_help = gengetopt_args_info_help[50] ;
! 528: args_info->lease_help = gengetopt_args_info_help[51] ;
! 529: args_info->eapolenable_help = gengetopt_args_info_help[52] ;
! 530: args_info->uamserver_help = gengetopt_args_info_help[53] ;
! 531: args_info->uamhomepage_help = gengetopt_args_info_help[54] ;
! 532: args_info->uamsecret_help = gengetopt_args_info_help[55] ;
! 533: args_info->uamlisten_help = gengetopt_args_info_help[56] ;
! 534: args_info->uamport_help = gengetopt_args_info_help[57] ;
! 535: args_info->uamuiport_help = gengetopt_args_info_help[58] ;
! 536: args_info->uamallowed_help = gengetopt_args_info_help[59] ;
! 537: args_info->uamallowed_min = -1;
! 538: args_info->uamallowed_max = -1;
! 539: args_info->uamdomain_help = gengetopt_args_info_help[60] ;
! 540: args_info->uamdomain_min = -1;
! 541: args_info->uamdomain_max = -1;
! 542: args_info->uamanydns_help = gengetopt_args_info_help[61] ;
! 543: args_info->uamanyip_help = gengetopt_args_info_help[62] ;
! 544: args_info->wisprlogin_help = gengetopt_args_info_help[63] ;
! 545: args_info->nouamsuccess_help = gengetopt_args_info_help[64] ;
! 546: args_info->nouamwispr_help = gengetopt_args_info_help[65] ;
! 547: args_info->uamlogoutip_help = gengetopt_args_info_help[66] ;
! 548: args_info->defsessiontimeout_help = gengetopt_args_info_help[67] ;
! 549: args_info->defidletimeout_help = gengetopt_args_info_help[68] ;
! 550: args_info->defbandwidthmaxdown_help = gengetopt_args_info_help[69] ;
! 551: args_info->defbandwidthmaxup_help = gengetopt_args_info_help[70] ;
! 552: args_info->definteriminterval_help = gengetopt_args_info_help[71] ;
! 553: args_info->macauth_help = gengetopt_args_info_help[72] ;
! 554: args_info->macauthdeny_help = gengetopt_args_info_help[73] ;
! 555: args_info->macallowed_help = gengetopt_args_info_help[74] ;
! 556: args_info->macallowed_min = -1;
! 557: args_info->macallowed_max = -1;
! 558: args_info->macsuffix_help = gengetopt_args_info_help[75] ;
! 559: args_info->macpasswd_help = gengetopt_args_info_help[76] ;
! 560: args_info->macallowlocal_help = gengetopt_args_info_help[77] ;
! 561: args_info->wwwdir_help = gengetopt_args_info_help[78] ;
! 562: args_info->wwwbin_help = gengetopt_args_info_help[79] ;
! 563: args_info->uamui_help = gengetopt_args_info_help[80] ;
! 564: args_info->adminuser_help = gengetopt_args_info_help[81] ;
! 565: args_info->adminpasswd_help = gengetopt_args_info_help[82] ;
! 566: args_info->nasmac_help = gengetopt_args_info_help[83] ;
! 567: args_info->nasip_help = gengetopt_args_info_help[84] ;
! 568: args_info->ssid_help = gengetopt_args_info_help[85] ;
! 569: args_info->vlan_help = gengetopt_args_info_help[86] ;
! 570: args_info->cmdsocket_help = gengetopt_args_info_help[87] ;
! 571: args_info->radiusoriginalurl_help = gengetopt_args_info_help[88] ;
! 572: args_info->swapoctets_help = gengetopt_args_info_help[89] ;
! 573: args_info->usestatusfile_help = gengetopt_args_info_help[90] ;
! 574: args_info->localusers_help = gengetopt_args_info_help[91] ;
! 575: args_info->postauthproxy_help = gengetopt_args_info_help[92] ;
! 576: args_info->postauthproxyport_help = gengetopt_args_info_help[93] ;
! 577: args_info->wpaguests_help = gengetopt_args_info_help[94] ;
! 578: args_info->openidauth_help = gengetopt_args_info_help[95] ;
! 579: args_info->papalwaysok_help = gengetopt_args_info_help[96] ;
! 580: args_info->chillixml_help = gengetopt_args_info_help[97] ;
! 581: args_info->acctupdate_help = gengetopt_args_info_help[98] ;
! 582: args_info->dnsparanoia_help = gengetopt_args_info_help[99] ;
! 583: args_info->usetap_help = gengetopt_args_info_help[100] ;
! 584: args_info->routeif_help = gengetopt_args_info_help[101] ;
! 585:
! 586: }
! 587:
! 588: void
! 589: cmdline_parser_print_version (void)
! 590: {
! 591: printf ("%s %s\n", CMDLINE_PARSER_PACKAGE, CMDLINE_PARSER_VERSION);
! 592: }
! 593:
! 594: static void print_help_common(void) {
! 595: cmdline_parser_print_version ();
! 596:
! 597: if (strlen(gengetopt_args_info_purpose) > 0)
! 598: printf("\n%s\n", gengetopt_args_info_purpose);
! 599:
! 600: if (strlen(gengetopt_args_info_usage) > 0)
! 601: printf("\n%s\n", gengetopt_args_info_usage);
! 602:
! 603: printf("\n");
! 604:
! 605: if (strlen(gengetopt_args_info_description) > 0)
! 606: printf("%s\n", gengetopt_args_info_description);
! 607: }
! 608:
! 609: void
! 610: cmdline_parser_print_help (void)
! 611: {
! 612: int i = 0;
! 613: print_help_common();
! 614: while (gengetopt_args_info_help[i])
! 615: printf("%s\n", gengetopt_args_info_help[i++]);
! 616: }
! 617:
! 618: void
! 619: cmdline_parser_init (struct gengetopt_args_info *args_info)
! 620: {
! 621: clear_given (args_info);
! 622: clear_args (args_info);
! 623: init_args_info (args_info);
! 624: }
! 625:
! 626: void
! 627: cmdline_parser_params_init(struct cmdline_parser_params *params)
! 628: {
! 629: if (params)
! 630: {
! 631: params->override = 0;
! 632: params->initialize = 1;
! 633: params->check_required = 1;
! 634: params->check_ambiguity = 0;
! 635: params->print_errors = 1;
! 636: }
! 637: }
! 638:
! 639: struct cmdline_parser_params *
! 640: cmdline_parser_params_create(void)
! 641: {
! 642: struct cmdline_parser_params *params =
! 643: (struct cmdline_parser_params *)malloc(sizeof(struct cmdline_parser_params));
! 644: cmdline_parser_params_init(params);
! 645: return params;
! 646: }
! 647:
! 648: static void
! 649: free_string_field (char **s)
! 650: {
! 651: if (*s)
! 652: {
! 653: free (*s);
! 654: *s = 0;
! 655: }
! 656: }
! 657:
! 658: /** @brief generic value variable */
! 659: union generic_value {
! 660: int int_arg;
! 661: long long_arg;
! 662: char *string_arg;
! 663: };
! 664:
! 665: /** @brief holds temporary values for multiple options */
! 666: struct generic_list
! 667: {
! 668: union generic_value arg;
! 669: char *orig;
! 670: struct generic_list *next;
! 671: };
! 672:
! 673: /**
! 674: * @brief add a node at the head of the list
! 675: */
! 676: static void add_node(struct generic_list **list) {
! 677: struct generic_list *new_node = (struct generic_list *) malloc (sizeof (struct generic_list));
! 678: new_node->next = *list;
! 679: *list = new_node;
! 680: new_node->arg.string_arg = NULL;
! 681: new_node->orig = NULL;
! 682: }
! 683:
! 684:
! 685: static void
! 686: free_multiple_string_field(unsigned int len, char ***arg, char ***orig)
! 687: {
! 688: unsigned int i;
! 689: if (*arg) {
! 690: for (i = 0; i < len; ++i)
! 691: {
! 692: free_string_field(&((*arg)[i]));
! 693: free_string_field(&((*orig)[i]));
! 694: }
! 695: free_string_field(&((*arg)[0])); /* free default string */
! 696:
! 697: free (*arg);
! 698: *arg = 0;
! 699: free (*orig);
! 700: *orig = 0;
! 701: }
! 702: }
! 703:
! 704: static void
! 705: cmdline_parser_release (struct gengetopt_args_info *args_info)
! 706: {
! 707:
! 708: free_string_field (&(args_info->debugfacility_orig));
! 709: free_string_field (&(args_info->logfacility_orig));
! 710: free_string_field (&(args_info->conf_arg));
! 711: free_string_field (&(args_info->conf_orig));
! 712: free_string_field (&(args_info->interval_orig));
! 713: free_string_field (&(args_info->pidfile_arg));
! 714: free_string_field (&(args_info->pidfile_orig));
! 715: free_string_field (&(args_info->statedir_arg));
! 716: free_string_field (&(args_info->statedir_orig));
! 717: free_string_field (&(args_info->net_arg));
! 718: free_string_field (&(args_info->net_orig));
! 719: free_string_field (&(args_info->dhcpstart_orig));
! 720: free_string_field (&(args_info->dhcpend_orig));
! 721: free_string_field (&(args_info->dynip_arg));
! 722: free_string_field (&(args_info->dynip_orig));
! 723: free_string_field (&(args_info->statip_arg));
! 724: free_string_field (&(args_info->statip_orig));
! 725: free_string_field (&(args_info->dns1_arg));
! 726: free_string_field (&(args_info->dns1_orig));
! 727: free_string_field (&(args_info->dns2_arg));
! 728: free_string_field (&(args_info->dns2_orig));
! 729: free_string_field (&(args_info->domain_arg));
! 730: free_string_field (&(args_info->domain_orig));
! 731: free_string_field (&(args_info->ipup_arg));
! 732: free_string_field (&(args_info->ipup_orig));
! 733: free_string_field (&(args_info->ipdown_arg));
! 734: free_string_field (&(args_info->ipdown_orig));
! 735: free_string_field (&(args_info->conup_arg));
! 736: free_string_field (&(args_info->conup_orig));
! 737: free_string_field (&(args_info->condown_arg));
! 738: free_string_field (&(args_info->condown_orig));
! 739: free_string_field (&(args_info->txqlen_orig));
! 740: free_string_field (&(args_info->tundev_arg));
! 741: free_string_field (&(args_info->tundev_orig));
! 742: free_string_field (&(args_info->radiuslisten_arg));
! 743: free_string_field (&(args_info->radiuslisten_orig));
! 744: free_string_field (&(args_info->radiusserver1_arg));
! 745: free_string_field (&(args_info->radiusserver1_orig));
! 746: free_string_field (&(args_info->radiusserver2_arg));
! 747: free_string_field (&(args_info->radiusserver2_orig));
! 748: free_string_field (&(args_info->radiusauthport_orig));
! 749: free_string_field (&(args_info->radiusacctport_orig));
! 750: free_string_field (&(args_info->radiussecret_arg));
! 751: free_string_field (&(args_info->radiussecret_orig));
! 752: free_string_field (&(args_info->radiustimeout_orig));
! 753: free_string_field (&(args_info->radiusretry_orig));
! 754: free_string_field (&(args_info->radiusretrysec_orig));
! 755: free_string_field (&(args_info->radiusnasid_arg));
! 756: free_string_field (&(args_info->radiusnasid_orig));
! 757: free_string_field (&(args_info->radiuslocationid_arg));
! 758: free_string_field (&(args_info->radiuslocationid_orig));
! 759: free_string_field (&(args_info->radiuslocationname_arg));
! 760: free_string_field (&(args_info->radiuslocationname_orig));
! 761: free_string_field (&(args_info->locationname_arg));
! 762: free_string_field (&(args_info->locationname_orig));
! 763: free_string_field (&(args_info->radiusnasporttype_orig));
! 764: free_string_field (&(args_info->coaport_orig));
! 765: free_string_field (&(args_info->proxylisten_arg));
! 766: free_string_field (&(args_info->proxylisten_orig));
! 767: free_string_field (&(args_info->proxyport_orig));
! 768: free_string_field (&(args_info->proxyclient_arg));
! 769: free_string_field (&(args_info->proxyclient_orig));
! 770: free_string_field (&(args_info->proxysecret_arg));
! 771: free_string_field (&(args_info->proxysecret_orig));
! 772: free_string_field (&(args_info->dhcpif_arg));
! 773: free_string_field (&(args_info->dhcpif_orig));
! 774: free_string_field (&(args_info->dhcpmac_arg));
! 775: free_string_field (&(args_info->dhcpmac_orig));
! 776: free_string_field (&(args_info->dhcpgateway_arg));
! 777: free_string_field (&(args_info->dhcpgateway_orig));
! 778: free_string_field (&(args_info->dhcpgatewayport_orig));
! 779: free_string_field (&(args_info->dhcprelayagent_arg));
! 780: free_string_field (&(args_info->dhcprelayagent_orig));
! 781: free_string_field (&(args_info->lease_orig));
! 782: free_string_field (&(args_info->uamserver_arg));
! 783: free_string_field (&(args_info->uamserver_orig));
! 784: free_string_field (&(args_info->uamhomepage_arg));
! 785: free_string_field (&(args_info->uamhomepage_orig));
! 786: free_string_field (&(args_info->uamsecret_arg));
! 787: free_string_field (&(args_info->uamsecret_orig));
! 788: free_string_field (&(args_info->uamlisten_arg));
! 789: free_string_field (&(args_info->uamlisten_orig));
! 790: free_string_field (&(args_info->uamport_orig));
! 791: free_string_field (&(args_info->uamuiport_orig));
! 792: free_multiple_string_field (args_info->uamallowed_given, &(args_info->uamallowed_arg), &(args_info->uamallowed_orig));
! 793: free_multiple_string_field (args_info->uamdomain_given, &(args_info->uamdomain_arg), &(args_info->uamdomain_orig));
! 794: free_string_field (&(args_info->wisprlogin_arg));
! 795: free_string_field (&(args_info->wisprlogin_orig));
! 796: free_string_field (&(args_info->uamlogoutip_arg));
! 797: free_string_field (&(args_info->uamlogoutip_orig));
! 798: free_string_field (&(args_info->defsessiontimeout_orig));
! 799: free_string_field (&(args_info->defidletimeout_orig));
! 800: free_string_field (&(args_info->defbandwidthmaxdown_orig));
! 801: free_string_field (&(args_info->defbandwidthmaxup_orig));
! 802: free_string_field (&(args_info->definteriminterval_orig));
! 803: free_multiple_string_field (args_info->macallowed_given, &(args_info->macallowed_arg), &(args_info->macallowed_orig));
! 804: free_string_field (&(args_info->macsuffix_arg));
! 805: free_string_field (&(args_info->macsuffix_orig));
! 806: free_string_field (&(args_info->macpasswd_arg));
! 807: free_string_field (&(args_info->macpasswd_orig));
! 808: free_string_field (&(args_info->wwwdir_arg));
! 809: free_string_field (&(args_info->wwwdir_orig));
! 810: free_string_field (&(args_info->wwwbin_arg));
! 811: free_string_field (&(args_info->wwwbin_orig));
! 812: free_string_field (&(args_info->uamui_arg));
! 813: free_string_field (&(args_info->uamui_orig));
! 814: free_string_field (&(args_info->adminuser_arg));
! 815: free_string_field (&(args_info->adminuser_orig));
! 816: free_string_field (&(args_info->adminpasswd_arg));
! 817: free_string_field (&(args_info->adminpasswd_orig));
! 818: free_string_field (&(args_info->nasmac_arg));
! 819: free_string_field (&(args_info->nasmac_orig));
! 820: free_string_field (&(args_info->nasip_arg));
! 821: free_string_field (&(args_info->nasip_orig));
! 822: free_string_field (&(args_info->ssid_arg));
! 823: free_string_field (&(args_info->ssid_orig));
! 824: free_string_field (&(args_info->vlan_arg));
! 825: free_string_field (&(args_info->vlan_orig));
! 826: free_string_field (&(args_info->cmdsocket_arg));
! 827: free_string_field (&(args_info->cmdsocket_orig));
! 828: free_string_field (&(args_info->localusers_arg));
! 829: free_string_field (&(args_info->localusers_orig));
! 830: free_string_field (&(args_info->postauthproxy_arg));
! 831: free_string_field (&(args_info->postauthproxy_orig));
! 832: free_string_field (&(args_info->postauthproxyport_orig));
! 833: free_string_field (&(args_info->routeif_arg));
! 834: free_string_field (&(args_info->routeif_orig));
! 835:
! 836:
! 837:
! 838: clear_given (args_info);
! 839: }
! 840:
! 841:
! 842: static void
! 843: write_into_file(FILE *outfile, const char *opt, const char *arg, char *values[])
! 844: {
! 845: if (arg) {
! 846: fprintf(outfile, "%s=\"%s\"\n", opt, arg);
! 847: } else {
! 848: fprintf(outfile, "%s\n", opt);
! 849: }
! 850: }
! 851:
! 852: static void
! 853: write_multiple_into_file(FILE *outfile, int len, const char *opt, char **arg, char *values[])
! 854: {
! 855: int i;
! 856:
! 857: for (i = 0; i < len; ++i)
! 858: write_into_file(outfile, opt, (arg ? arg[i] : 0), values);
! 859: }
! 860:
! 861: int
! 862: cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info)
! 863: {
! 864: int i = 0;
! 865:
! 866: if (!outfile)
! 867: {
! 868: fprintf (stderr, "%s: cannot dump options to stream\n", CMDLINE_PARSER_PACKAGE);
! 869: return EXIT_FAILURE;
! 870: }
! 871:
! 872: if (args_info->help_given)
! 873: write_into_file(outfile, "help", 0, 0 );
! 874: if (args_info->version_given)
! 875: write_into_file(outfile, "version", 0, 0 );
! 876: if (args_info->fg_given)
! 877: write_into_file(outfile, "fg", 0, 0 );
! 878: if (args_info->debug_given)
! 879: write_into_file(outfile, "debug", 0, 0 );
! 880: if (args_info->debugfacility_given)
! 881: write_into_file(outfile, "debugfacility", args_info->debugfacility_orig, 0);
! 882: if (args_info->logfacility_given)
! 883: write_into_file(outfile, "logfacility", args_info->logfacility_orig, 0);
! 884: if (args_info->conf_given)
! 885: write_into_file(outfile, "conf", args_info->conf_orig, 0);
! 886: if (args_info->interval_given)
! 887: write_into_file(outfile, "interval", args_info->interval_orig, 0);
! 888: if (args_info->pidfile_given)
! 889: write_into_file(outfile, "pidfile", args_info->pidfile_orig, 0);
! 890: if (args_info->statedir_given)
! 891: write_into_file(outfile, "statedir", args_info->statedir_orig, 0);
! 892: if (args_info->net_given)
! 893: write_into_file(outfile, "net", args_info->net_orig, 0);
! 894: if (args_info->dhcpstart_given)
! 895: write_into_file(outfile, "dhcpstart", args_info->dhcpstart_orig, 0);
! 896: if (args_info->dhcpend_given)
! 897: write_into_file(outfile, "dhcpend", args_info->dhcpend_orig, 0);
! 898: if (args_info->dynip_given)
! 899: write_into_file(outfile, "dynip", args_info->dynip_orig, 0);
! 900: if (args_info->nodynip_given)
! 901: write_into_file(outfile, "nodynip", 0, 0 );
! 902: if (args_info->statip_given)
! 903: write_into_file(outfile, "statip", args_info->statip_orig, 0);
! 904: if (args_info->dns1_given)
! 905: write_into_file(outfile, "dns1", args_info->dns1_orig, 0);
! 906: if (args_info->dns2_given)
! 907: write_into_file(outfile, "dns2", args_info->dns2_orig, 0);
! 908: if (args_info->domain_given)
! 909: write_into_file(outfile, "domain", args_info->domain_orig, 0);
! 910: if (args_info->ipup_given)
! 911: write_into_file(outfile, "ipup", args_info->ipup_orig, 0);
! 912: if (args_info->ipdown_given)
! 913: write_into_file(outfile, "ipdown", args_info->ipdown_orig, 0);
! 914: if (args_info->conup_given)
! 915: write_into_file(outfile, "conup", args_info->conup_orig, 0);
! 916: if (args_info->condown_given)
! 917: write_into_file(outfile, "condown", args_info->condown_orig, 0);
! 918: if (args_info->txqlen_given)
! 919: write_into_file(outfile, "txqlen", args_info->txqlen_orig, 0);
! 920: if (args_info->tundev_given)
! 921: write_into_file(outfile, "tundev", args_info->tundev_orig, 0);
! 922: if (args_info->radiuslisten_given)
! 923: write_into_file(outfile, "radiuslisten", args_info->radiuslisten_orig, 0);
! 924: if (args_info->radiusserver1_given)
! 925: write_into_file(outfile, "radiusserver1", args_info->radiusserver1_orig, 0);
! 926: if (args_info->radiusserver2_given)
! 927: write_into_file(outfile, "radiusserver2", args_info->radiusserver2_orig, 0);
! 928: if (args_info->radiusauthport_given)
! 929: write_into_file(outfile, "radiusauthport", args_info->radiusauthport_orig, 0);
! 930: if (args_info->radiusacctport_given)
! 931: write_into_file(outfile, "radiusacctport", args_info->radiusacctport_orig, 0);
! 932: if (args_info->radiussecret_given)
! 933: write_into_file(outfile, "radiussecret", args_info->radiussecret_orig, 0);
! 934: if (args_info->radiustimeout_given)
! 935: write_into_file(outfile, "radiustimeout", args_info->radiustimeout_orig, 0);
! 936: if (args_info->radiusretry_given)
! 937: write_into_file(outfile, "radiusretry", args_info->radiusretry_orig, 0);
! 938: if (args_info->radiusretrysec_given)
! 939: write_into_file(outfile, "radiusretrysec", args_info->radiusretrysec_orig, 0);
! 940: if (args_info->radiusnasid_given)
! 941: write_into_file(outfile, "radiusnasid", args_info->radiusnasid_orig, 0);
! 942: if (args_info->radiuslocationid_given)
! 943: write_into_file(outfile, "radiuslocationid", args_info->radiuslocationid_orig, 0);
! 944: if (args_info->radiuslocationname_given)
! 945: write_into_file(outfile, "radiuslocationname", args_info->radiuslocationname_orig, 0);
! 946: if (args_info->locationname_given)
! 947: write_into_file(outfile, "locationname", args_info->locationname_orig, 0);
! 948: if (args_info->radiusnasporttype_given)
! 949: write_into_file(outfile, "radiusnasporttype", args_info->radiusnasporttype_orig, 0);
! 950: if (args_info->coaport_given)
! 951: write_into_file(outfile, "coaport", args_info->coaport_orig, 0);
! 952: if (args_info->coanoipcheck_given)
! 953: write_into_file(outfile, "coanoipcheck", 0, 0 );
! 954: if (args_info->proxylisten_given)
! 955: write_into_file(outfile, "proxylisten", args_info->proxylisten_orig, 0);
! 956: if (args_info->proxyport_given)
! 957: write_into_file(outfile, "proxyport", args_info->proxyport_orig, 0);
! 958: if (args_info->proxyclient_given)
! 959: write_into_file(outfile, "proxyclient", args_info->proxyclient_orig, 0);
! 960: if (args_info->proxysecret_given)
! 961: write_into_file(outfile, "proxysecret", args_info->proxysecret_orig, 0);
! 962: if (args_info->dhcpif_given)
! 963: write_into_file(outfile, "dhcpif", args_info->dhcpif_orig, 0);
! 964: if (args_info->dhcpmac_given)
! 965: write_into_file(outfile, "dhcpmac", args_info->dhcpmac_orig, 0);
! 966: if (args_info->dhcpradius_given)
! 967: write_into_file(outfile, "dhcpradius", 0, 0 );
! 968: if (args_info->dhcpgateway_given)
! 969: write_into_file(outfile, "dhcpgateway", args_info->dhcpgateway_orig, 0);
! 970: if (args_info->dhcpgatewayport_given)
! 971: write_into_file(outfile, "dhcpgatewayport", args_info->dhcpgatewayport_orig, 0);
! 972: if (args_info->dhcprelayagent_given)
! 973: write_into_file(outfile, "dhcprelayagent", args_info->dhcprelayagent_orig, 0);
! 974: if (args_info->lease_given)
! 975: write_into_file(outfile, "lease", args_info->lease_orig, 0);
! 976: if (args_info->eapolenable_given)
! 977: write_into_file(outfile, "eapolenable", 0, 0 );
! 978: if (args_info->uamserver_given)
! 979: write_into_file(outfile, "uamserver", args_info->uamserver_orig, 0);
! 980: if (args_info->uamhomepage_given)
! 981: write_into_file(outfile, "uamhomepage", args_info->uamhomepage_orig, 0);
! 982: if (args_info->uamsecret_given)
! 983: write_into_file(outfile, "uamsecret", args_info->uamsecret_orig, 0);
! 984: if (args_info->uamlisten_given)
! 985: write_into_file(outfile, "uamlisten", args_info->uamlisten_orig, 0);
! 986: if (args_info->uamport_given)
! 987: write_into_file(outfile, "uamport", args_info->uamport_orig, 0);
! 988: if (args_info->uamuiport_given)
! 989: write_into_file(outfile, "uamuiport", args_info->uamuiport_orig, 0);
! 990: write_multiple_into_file(outfile, args_info->uamallowed_given, "uamallowed", args_info->uamallowed_orig, 0);
! 991: write_multiple_into_file(outfile, args_info->uamdomain_given, "uamdomain", args_info->uamdomain_orig, 0);
! 992: if (args_info->uamanydns_given)
! 993: write_into_file(outfile, "uamanydns", 0, 0 );
! 994: if (args_info->uamanyip_given)
! 995: write_into_file(outfile, "uamanyip", 0, 0 );
! 996: if (args_info->wisprlogin_given)
! 997: write_into_file(outfile, "wisprlogin", args_info->wisprlogin_orig, 0);
! 998: if (args_info->nouamsuccess_given)
! 999: write_into_file(outfile, "nouamsuccess", 0, 0 );
! 1000: if (args_info->nouamwispr_given)
! 1001: write_into_file(outfile, "nouamwispr", 0, 0 );
! 1002: if (args_info->uamlogoutip_given)
! 1003: write_into_file(outfile, "uamlogoutip", args_info->uamlogoutip_orig, 0);
! 1004: if (args_info->defsessiontimeout_given)
! 1005: write_into_file(outfile, "defsessiontimeout", args_info->defsessiontimeout_orig, 0);
! 1006: if (args_info->defidletimeout_given)
! 1007: write_into_file(outfile, "defidletimeout", args_info->defidletimeout_orig, 0);
! 1008: if (args_info->defbandwidthmaxdown_given)
! 1009: write_into_file(outfile, "defbandwidthmaxdown", args_info->defbandwidthmaxdown_orig, 0);
! 1010: if (args_info->defbandwidthmaxup_given)
! 1011: write_into_file(outfile, "defbandwidthmaxup", args_info->defbandwidthmaxup_orig, 0);
! 1012: if (args_info->definteriminterval_given)
! 1013: write_into_file(outfile, "definteriminterval", args_info->definteriminterval_orig, 0);
! 1014: if (args_info->macauth_given)
! 1015: write_into_file(outfile, "macauth", 0, 0 );
! 1016: if (args_info->macauthdeny_given)
! 1017: write_into_file(outfile, "macauthdeny", 0, 0 );
! 1018: write_multiple_into_file(outfile, args_info->macallowed_given, "macallowed", args_info->macallowed_orig, 0);
! 1019: if (args_info->macsuffix_given)
! 1020: write_into_file(outfile, "macsuffix", args_info->macsuffix_orig, 0);
! 1021: if (args_info->macpasswd_given)
! 1022: write_into_file(outfile, "macpasswd", args_info->macpasswd_orig, 0);
! 1023: if (args_info->macallowlocal_given)
! 1024: write_into_file(outfile, "macallowlocal", 0, 0 );
! 1025: if (args_info->wwwdir_given)
! 1026: write_into_file(outfile, "wwwdir", args_info->wwwdir_orig, 0);
! 1027: if (args_info->wwwbin_given)
! 1028: write_into_file(outfile, "wwwbin", args_info->wwwbin_orig, 0);
! 1029: if (args_info->uamui_given)
! 1030: write_into_file(outfile, "uamui", args_info->uamui_orig, 0);
! 1031: if (args_info->adminuser_given)
! 1032: write_into_file(outfile, "adminuser", args_info->adminuser_orig, 0);
! 1033: if (args_info->adminpasswd_given)
! 1034: write_into_file(outfile, "adminpasswd", args_info->adminpasswd_orig, 0);
! 1035: if (args_info->nasmac_given)
! 1036: write_into_file(outfile, "nasmac", args_info->nasmac_orig, 0);
! 1037: if (args_info->nasip_given)
! 1038: write_into_file(outfile, "nasip", args_info->nasip_orig, 0);
! 1039: if (args_info->ssid_given)
! 1040: write_into_file(outfile, "ssid", args_info->ssid_orig, 0);
! 1041: if (args_info->vlan_given)
! 1042: write_into_file(outfile, "vlan", args_info->vlan_orig, 0);
! 1043: if (args_info->cmdsocket_given)
! 1044: write_into_file(outfile, "cmdsocket", args_info->cmdsocket_orig, 0);
! 1045: if (args_info->radiusoriginalurl_given)
! 1046: write_into_file(outfile, "radiusoriginalurl", 0, 0 );
! 1047: if (args_info->swapoctets_given)
! 1048: write_into_file(outfile, "swapoctets", 0, 0 );
! 1049: if (args_info->usestatusfile_given)
! 1050: write_into_file(outfile, "usestatusfile", 0, 0 );
! 1051: if (args_info->localusers_given)
! 1052: write_into_file(outfile, "localusers", args_info->localusers_orig, 0);
! 1053: if (args_info->postauthproxy_given)
! 1054: write_into_file(outfile, "postauthproxy", args_info->postauthproxy_orig, 0);
! 1055: if (args_info->postauthproxyport_given)
! 1056: write_into_file(outfile, "postauthproxyport", args_info->postauthproxyport_orig, 0);
! 1057: if (args_info->wpaguests_given)
! 1058: write_into_file(outfile, "wpaguests", 0, 0 );
! 1059: if (args_info->openidauth_given)
! 1060: write_into_file(outfile, "openidauth", 0, 0 );
! 1061: if (args_info->papalwaysok_given)
! 1062: write_into_file(outfile, "papalwaysok", 0, 0 );
! 1063: if (args_info->chillixml_given)
! 1064: write_into_file(outfile, "chillixml", 0, 0 );
! 1065: if (args_info->acctupdate_given)
! 1066: write_into_file(outfile, "acctupdate", 0, 0 );
! 1067: if (args_info->dnsparanoia_given)
! 1068: write_into_file(outfile, "dnsparanoia", 0, 0 );
! 1069: if (args_info->usetap_given)
! 1070: write_into_file(outfile, "usetap", 0, 0 );
! 1071: if (args_info->routeif_given)
! 1072: write_into_file(outfile, "routeif", args_info->routeif_orig, 0);
! 1073:
! 1074:
! 1075: i = EXIT_SUCCESS;
! 1076: return i;
! 1077: }
! 1078:
! 1079: int
! 1080: cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info)
! 1081: {
! 1082: FILE *outfile;
! 1083: int i = 0;
! 1084:
! 1085: outfile = fopen(filename, "w");
! 1086:
! 1087: if (!outfile)
! 1088: {
! 1089: fprintf (stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename);
! 1090: return EXIT_FAILURE;
! 1091: }
! 1092:
! 1093: i = cmdline_parser_dump(outfile, args_info);
! 1094: fclose (outfile);
! 1095:
! 1096: return i;
! 1097: }
! 1098:
! 1099: void
! 1100: cmdline_parser_free (struct gengetopt_args_info *args_info)
! 1101: {
! 1102: cmdline_parser_release (args_info);
! 1103: }
! 1104:
! 1105: /** @brief replacement of strdup, which is not standard */
! 1106: char *
! 1107: gengetopt_strdup (const char *s)
! 1108: {
! 1109: char *result = NULL;
! 1110: if (!s)
! 1111: return result;
! 1112:
! 1113: result = (char*)malloc(strlen(s) + 1);
! 1114: if (result == (char*)0)
! 1115: return (char*)0;
! 1116: strcpy(result, s);
! 1117: return result;
! 1118: }
! 1119:
! 1120: static char *
! 1121: get_multiple_arg_token(const char *arg)
! 1122: {
! 1123: char *tok, *ret;
! 1124: size_t len, num_of_escape, i, j;
! 1125:
! 1126: if (!arg)
! 1127: return NULL;
! 1128:
! 1129: tok = strchr (arg, ',');
! 1130: num_of_escape = 0;
! 1131:
! 1132: /* make sure it is not escaped */
! 1133: while (tok)
! 1134: {
! 1135: if (*(tok-1) == '\\')
! 1136: {
! 1137: /* find the next one */
! 1138: tok = strchr (tok+1, ',');
! 1139: ++num_of_escape;
! 1140: }
! 1141: else
! 1142: break;
! 1143: }
! 1144:
! 1145: if (tok)
! 1146: len = (size_t)(tok - arg + 1);
! 1147: else
! 1148: len = strlen (arg) + 1;
! 1149:
! 1150: len -= num_of_escape;
! 1151:
! 1152: ret = (char *) malloc (len);
! 1153:
! 1154: i = 0;
! 1155: j = 0;
! 1156: while (arg[i] && (j < len-1))
! 1157: {
! 1158: if (arg[i] == '\\' &&
! 1159: arg[ i + 1 ] &&
! 1160: arg[ i + 1 ] == ',')
! 1161: ++i;
! 1162:
! 1163: ret[j++] = arg[i++];
! 1164: }
! 1165:
! 1166: ret[len-1] = '\0';
! 1167:
! 1168: return ret;
! 1169: }
! 1170:
! 1171: static char *
! 1172: get_multiple_arg_token_next(const char *arg)
! 1173: {
! 1174: char *tok;
! 1175:
! 1176: if (!arg)
! 1177: return NULL;
! 1178:
! 1179: tok = strchr (arg, ',');
! 1180:
! 1181: /* make sure it is not escaped */
! 1182: while (tok)
! 1183: {
! 1184: if (*(tok-1) == '\\')
! 1185: {
! 1186: /* find the next one */
! 1187: tok = strchr (tok+1, ',');
! 1188: }
! 1189: else
! 1190: break;
! 1191: }
! 1192:
! 1193: if (! tok || strlen(tok) == 1)
! 1194: return 0;
! 1195:
! 1196: return tok+1;
! 1197: }
! 1198:
! 1199: static int
! 1200: check_multiple_option_occurrences(const char *prog_name, unsigned int option_given, int min, int max, const char *option_desc);
! 1201:
! 1202: int
! 1203: check_multiple_option_occurrences(const char *prog_name, unsigned int option_given, int min, int max, const char *option_desc)
! 1204: {
! 1205: int error = 0;
! 1206:
! 1207: if (option_given && ! (min < 0 && max < 0))
! 1208: {
! 1209: if (min >= 0 && max >= 0)
! 1210: {
! 1211: if (min == max)
! 1212: {
! 1213: /* specific occurrences */
! 1214: if (option_given != min)
! 1215: {
! 1216: fprintf (stderr, "%s: %s option occurrences must be %d\n",
! 1217: prog_name, option_desc, min);
! 1218: error = 1;
! 1219: }
! 1220: }
! 1221: else if (option_given < min
! 1222: || option_given > max)
! 1223: {
! 1224: /* range occurrences */
! 1225: fprintf (stderr, "%s: %s option occurrences must be between %d and %d\n",
! 1226: prog_name, option_desc, min, max);
! 1227: error = 1;
! 1228: }
! 1229: }
! 1230: else if (min >= 0)
! 1231: {
! 1232: /* at least check */
! 1233: if (option_given < min)
! 1234: {
! 1235: fprintf (stderr, "%s: %s option occurrences must be at least %d\n",
! 1236: prog_name, option_desc, min);
! 1237: error = 1;
! 1238: }
! 1239: }
! 1240: else if (max >= 0)
! 1241: {
! 1242: /* at most check */
! 1243: if (option_given > max)
! 1244: {
! 1245: fprintf (stderr, "%s: %s option occurrences must be at most %d\n",
! 1246: prog_name, option_desc, max);
! 1247: error = 1;
! 1248: }
! 1249: }
! 1250: }
! 1251:
! 1252: return error;
! 1253: }
! 1254: int
! 1255: cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info)
! 1256: {
! 1257: return cmdline_parser2 (argc, argv, args_info, 0, 1, 1);
! 1258: }
! 1259:
! 1260: int
! 1261: cmdline_parser_ext (int argc, char * const *argv, struct gengetopt_args_info *args_info,
! 1262: struct cmdline_parser_params *params)
! 1263: {
! 1264: int result;
! 1265: result = cmdline_parser_internal (argc, argv, args_info, params, NULL);
! 1266:
! 1267: if (result == EXIT_FAILURE)
! 1268: {
! 1269: cmdline_parser_free (args_info);
! 1270: exit (EXIT_FAILURE);
! 1271: }
! 1272:
! 1273: return result;
! 1274: }
! 1275:
! 1276: int
! 1277: cmdline_parser2 (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required)
! 1278: {
! 1279: int result;
! 1280: struct cmdline_parser_params params;
! 1281:
! 1282: params.override = override;
! 1283: params.initialize = initialize;
! 1284: params.check_required = check_required;
! 1285: params.check_ambiguity = 0;
! 1286: params.print_errors = 1;
! 1287:
! 1288: result = cmdline_parser_internal (argc, argv, args_info, ¶ms, NULL);
! 1289:
! 1290: if (result == EXIT_FAILURE)
! 1291: {
! 1292: cmdline_parser_free (args_info);
! 1293: exit (EXIT_FAILURE);
! 1294: }
! 1295:
! 1296: return result;
! 1297: }
! 1298:
! 1299: int
! 1300: cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name)
! 1301: {
! 1302: int result = EXIT_SUCCESS;
! 1303:
! 1304: if (cmdline_parser_required2(args_info, prog_name, NULL) > 0)
! 1305: result = EXIT_FAILURE;
! 1306:
! 1307: if (result == EXIT_FAILURE)
! 1308: {
! 1309: cmdline_parser_free (args_info);
! 1310: exit (EXIT_FAILURE);
! 1311: }
! 1312:
! 1313: return result;
! 1314: }
! 1315:
! 1316: int
! 1317: cmdline_parser_required2 (struct gengetopt_args_info *args_info, const char *prog_name, const char *additional_error)
! 1318: {
! 1319: int error = 0;
! 1320:
! 1321: /* checks for required options */
! 1322: if (check_multiple_option_occurrences(prog_name, args_info->uamallowed_given, args_info->uamallowed_min, args_info->uamallowed_max, "'--uamallowed'"))
! 1323: error = 1;
! 1324:
! 1325: if (check_multiple_option_occurrences(prog_name, args_info->uamdomain_given, args_info->uamdomain_min, args_info->uamdomain_max, "'--uamdomain'"))
! 1326: error = 1;
! 1327:
! 1328: if (check_multiple_option_occurrences(prog_name, args_info->macallowed_given, args_info->macallowed_min, args_info->macallowed_max, "'--macallowed'"))
! 1329: error = 1;
! 1330:
! 1331:
! 1332: /* checks for dependences among options */
! 1333:
! 1334: return error;
! 1335: }
! 1336:
! 1337:
! 1338: static char *package_name = 0;
! 1339:
! 1340: /**
! 1341: * @brief updates an option
! 1342: * @param field the generic pointer to the field to update
! 1343: * @param orig_field the pointer to the orig field
! 1344: * @param field_given the pointer to the number of occurrence of this option
! 1345: * @param prev_given the pointer to the number of occurrence already seen
! 1346: * @param value the argument for this option (if null no arg was specified)
! 1347: * @param possible_values the possible values for this option (if specified)
! 1348: * @param default_value the default value (in case the option only accepts fixed values)
! 1349: * @param arg_type the type of this option
! 1350: * @param check_ambiguity @see cmdline_parser_params.check_ambiguity
! 1351: * @param override @see cmdline_parser_params.override
! 1352: * @param no_free whether to free a possible previous value
! 1353: * @param multiple_option whether this is a multiple option
! 1354: * @param long_opt the corresponding long option
! 1355: * @param short_opt the corresponding short option (or '-' if none)
! 1356: * @param additional_error possible further error specification
! 1357: */
! 1358: static
! 1359: int update_arg(void *field, char **orig_field,
! 1360: unsigned int *field_given, unsigned int *prev_given,
! 1361: char *value, char *possible_values[], const char *default_value,
! 1362: cmdline_parser_arg_type arg_type,
! 1363: int check_ambiguity, int override,
! 1364: int no_free, int multiple_option,
! 1365: const char *long_opt, char short_opt,
! 1366: const char *additional_error)
! 1367: {
! 1368: char *stop_char = 0;
! 1369: const char *val = value;
! 1370: int found;
! 1371: char **string_field;
! 1372:
! 1373: stop_char = 0;
! 1374: found = 0;
! 1375:
! 1376: if (!multiple_option && prev_given && (*prev_given || (check_ambiguity && *field_given)))
! 1377: {
! 1378: if (short_opt != '-')
! 1379: fprintf (stderr, "%s: `--%s' (`-%c') option given more than once%s\n",
! 1380: package_name, long_opt, short_opt,
! 1381: (additional_error ? additional_error : ""));
! 1382: else
! 1383: fprintf (stderr, "%s: `--%s' option given more than once%s\n",
! 1384: package_name, long_opt,
! 1385: (additional_error ? additional_error : ""));
! 1386: return 1; /* failure */
! 1387: }
! 1388:
! 1389:
! 1390: if (field_given && *field_given && ! override)
! 1391: return 0;
! 1392: if (prev_given)
! 1393: (*prev_given)++;
! 1394: if (field_given)
! 1395: (*field_given)++;
! 1396: if (possible_values)
! 1397: val = possible_values[found];
! 1398:
! 1399: switch(arg_type) {
! 1400: case ARG_FLAG:
! 1401: *((int *)field) = !*((int *)field);
! 1402: break;
! 1403: case ARG_INT:
! 1404: if (val) *((int *)field) = strtol (val, &stop_char, 0);
! 1405: break;
! 1406: case ARG_LONG:
! 1407: if (val) *((long *)field) = (long)strtol (val, &stop_char, 0);
! 1408: break;
! 1409: case ARG_STRING:
! 1410: if (val) {
! 1411: string_field = (char **)field;
! 1412: if (!no_free && *string_field)
! 1413: free (*string_field); /* free previous string */
! 1414: *string_field = gengetopt_strdup (val);
! 1415: }
! 1416: break;
! 1417: default:
! 1418: break;
! 1419: };
! 1420:
! 1421: /* check numeric conversion */
! 1422: switch(arg_type) {
! 1423: case ARG_INT:
! 1424: case ARG_LONG:
! 1425: if (val && !(stop_char && *stop_char == '\0')) {
! 1426: fprintf(stderr, "%s: invalid numeric value: %s\n", package_name, val);
! 1427: return 1; /* failure */
! 1428: }
! 1429: break;
! 1430: default:
! 1431: ;
! 1432: };
! 1433:
! 1434: /* store the original value */
! 1435: switch(arg_type) {
! 1436: case ARG_NO:
! 1437: case ARG_FLAG:
! 1438: break;
! 1439: default:
! 1440: if (value && orig_field) {
! 1441: if (no_free) {
! 1442: *orig_field = value;
! 1443: } else {
! 1444: if (*orig_field)
! 1445: free (*orig_field); /* free previous string */
! 1446: *orig_field = gengetopt_strdup (value);
! 1447: }
! 1448: }
! 1449: };
! 1450:
! 1451: return 0; /* OK */
! 1452: }
! 1453:
! 1454: /**
! 1455: * @brief store information about a multiple option in a temporary list
! 1456: * @param list where to (temporarily) store multiple options
! 1457: */
! 1458: static
! 1459: int update_multiple_arg_temp(struct generic_list **list,
! 1460: unsigned int *prev_given, const char *val,
! 1461: char *possible_values[], const char *default_value,
! 1462: cmdline_parser_arg_type arg_type,
! 1463: const char *long_opt, char short_opt,
! 1464: const char *additional_error)
! 1465: {
! 1466: char *multi_token, *multi_next; /* store single arguments */
! 1467:
! 1468: if (arg_type == ARG_NO) {
! 1469: (*prev_given)++;
! 1470: return 0; /* OK */
! 1471: }
! 1472:
! 1473: multi_token = get_multiple_arg_token(val);
! 1474: multi_next = get_multiple_arg_token_next (val);
! 1475:
! 1476: while (1)
! 1477: {
! 1478: add_node (list);
! 1479: if (update_arg((void *)&((*list)->arg), &((*list)->orig), 0,
! 1480: prev_given, multi_token, possible_values, default_value,
! 1481: arg_type, 0, 1, 1, 1, long_opt, short_opt, additional_error)) {
! 1482: if (multi_token) free(multi_token);
! 1483: return 1; /* failure */
! 1484: }
! 1485:
! 1486: if (multi_next)
! 1487: {
! 1488: multi_token = get_multiple_arg_token(multi_next);
! 1489: multi_next = get_multiple_arg_token_next (multi_next);
! 1490: }
! 1491: else
! 1492: break;
! 1493: }
! 1494:
! 1495: return 0; /* OK */
! 1496: }
! 1497:
! 1498: /**
! 1499: * @brief free the passed list (including possible string argument)
! 1500: */
! 1501: static
! 1502: void free_list(struct generic_list *list, short string_arg)
! 1503: {
! 1504: if (list) {
! 1505: struct generic_list *tmp;
! 1506: while (list)
! 1507: {
! 1508: tmp = list;
! 1509: if (string_arg && list->arg.string_arg)
! 1510: free (list->arg.string_arg);
! 1511: if (list->orig)
! 1512: free (list->orig);
! 1513: list = list->next;
! 1514: free (tmp);
! 1515: }
! 1516: }
! 1517: }
! 1518:
! 1519: /**
! 1520: * @brief updates a multiple option starting from the passed list
! 1521: */
! 1522: static
! 1523: void update_multiple_arg(void *field, char ***orig_field,
! 1524: unsigned int field_given, unsigned int prev_given, union generic_value *default_value,
! 1525: cmdline_parser_arg_type arg_type,
! 1526: struct generic_list *list)
! 1527: {
! 1528: int i;
! 1529: struct generic_list *tmp;
! 1530:
! 1531: if (prev_given && list) {
! 1532: *orig_field = (char **) realloc (*orig_field, (field_given + prev_given) * sizeof (char *));
! 1533:
! 1534: switch(arg_type) {
! 1535: case ARG_INT:
! 1536: *((int **)field) = (int *)realloc (*((int **)field), (field_given + prev_given) * sizeof (int)); break;
! 1537: case ARG_LONG:
! 1538: *((long **)field) = (long *)realloc (*((long **)field), (field_given + prev_given) * sizeof (long)); break;
! 1539: case ARG_STRING:
! 1540: *((char ***)field) = (char **)realloc (*((char ***)field), (field_given + prev_given) * sizeof (char *)); break;
! 1541: default:
! 1542: break;
! 1543: };
! 1544:
! 1545: for (i = (prev_given - 1); i >= 0; --i)
! 1546: {
! 1547: tmp = list;
! 1548:
! 1549: switch(arg_type) {
! 1550: case ARG_INT:
! 1551: (*((int **)field))[i + field_given] = tmp->arg.int_arg; break;
! 1552: case ARG_LONG:
! 1553: (*((long **)field))[i + field_given] = tmp->arg.long_arg; break;
! 1554: case ARG_STRING:
! 1555: (*((char ***)field))[i + field_given] = tmp->arg.string_arg; break;
! 1556: default:
! 1557: break;
! 1558: }
! 1559: (*orig_field) [i + field_given] = list->orig;
! 1560: list = list->next;
! 1561: free (tmp);
! 1562: }
! 1563: } else { /* set the default value */
! 1564: if (default_value && ! field_given) {
! 1565: switch(arg_type) {
! 1566: case ARG_INT:
! 1567: if (! *((int **)field)) {
! 1568: *((int **)field) = (int *)malloc (sizeof (int));
! 1569: (*((int **)field))[0] = default_value->int_arg;
! 1570: }
! 1571: break;
! 1572: case ARG_LONG:
! 1573: if (! *((long **)field)) {
! 1574: *((long **)field) = (long *)malloc (sizeof (long));
! 1575: (*((long **)field))[0] = default_value->long_arg;
! 1576: }
! 1577: break;
! 1578: case ARG_STRING:
! 1579: if (! *((char ***)field)) {
! 1580: *((char ***)field) = (char **)malloc (sizeof (char *));
! 1581: (*((char ***)field))[0] = gengetopt_strdup(default_value->string_arg);
! 1582: }
! 1583: break;
! 1584: default: break;
! 1585: }
! 1586: if (!(*orig_field)) {
! 1587: *orig_field = (char **) malloc (sizeof (char *));
! 1588: (*orig_field)[0] = NULL;
! 1589: }
! 1590: }
! 1591: }
! 1592: }
! 1593:
! 1594: int
! 1595: cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info,
! 1596: struct cmdline_parser_params *params, const char *additional_error)
! 1597: {
! 1598: int c; /* Character of the parsed option. */
! 1599:
! 1600: struct generic_list * uamallowed_list = NULL;
! 1601: struct generic_list * uamdomain_list = NULL;
! 1602: struct generic_list * macallowed_list = NULL;
! 1603: int error = 0;
! 1604: struct gengetopt_args_info local_args_info;
! 1605:
! 1606: int override;
! 1607: int initialize;
! 1608: int check_required;
! 1609: int check_ambiguity;
! 1610:
! 1611: package_name = argv[0];
! 1612:
! 1613: override = params->override;
! 1614: initialize = params->initialize;
! 1615: check_required = params->check_required;
! 1616: check_ambiguity = params->check_ambiguity;
! 1617:
! 1618: if (initialize)
! 1619: cmdline_parser_init (args_info);
! 1620:
! 1621: cmdline_parser_init (&local_args_info);
! 1622:
! 1623: optarg = 0;
! 1624: optind = 0;
! 1625: opterr = params->print_errors;
! 1626: optopt = '?';
! 1627:
! 1628: while (1)
! 1629: {
! 1630: int option_index = 0;
! 1631:
! 1632: static struct option long_options[] = {
! 1633: { "help", 0, NULL, 'h' },
! 1634: { "version", 0, NULL, 'V' },
! 1635: { "fg", 0, NULL, 'f' },
! 1636: { "debug", 0, NULL, 'd' },
! 1637: { "debugfacility", 1, NULL, 0 },
! 1638: { "logfacility", 1, NULL, 0 },
! 1639: { "conf", 1, NULL, 'c' },
! 1640: { "interval", 1, NULL, 0 },
! 1641: { "pidfile", 1, NULL, 0 },
! 1642: { "statedir", 1, NULL, 0 },
! 1643: { "net", 1, NULL, 'n' },
! 1644: { "dhcpstart", 1, NULL, 0 },
! 1645: { "dhcpend", 1, NULL, 0 },
! 1646: { "dynip", 1, NULL, 0 },
! 1647: { "nodynip", 0, NULL, 0 },
! 1648: { "statip", 1, NULL, 0 },
! 1649: { "dns1", 1, NULL, 0 },
! 1650: { "dns2", 1, NULL, 0 },
! 1651: { "domain", 1, NULL, 0 },
! 1652: { "ipup", 1, NULL, 0 },
! 1653: { "ipdown", 1, NULL, 0 },
! 1654: { "conup", 1, NULL, 0 },
! 1655: { "condown", 1, NULL, 0 },
! 1656: { "txqlen", 1, NULL, 0 },
! 1657: { "tundev", 1, NULL, 0 },
! 1658: { "radiuslisten", 1, NULL, 0 },
! 1659: { "radiusserver1", 1, NULL, 0 },
! 1660: { "radiusserver2", 1, NULL, 0 },
! 1661: { "radiusauthport", 1, NULL, 0 },
! 1662: { "radiusacctport", 1, NULL, 0 },
! 1663: { "radiussecret", 1, NULL, 0 },
! 1664: { "radiustimeout", 1, NULL, 0 },
! 1665: { "radiusretry", 1, NULL, 0 },
! 1666: { "radiusretrysec", 1, NULL, 0 },
! 1667: { "radiusnasid", 1, NULL, 0 },
! 1668: { "radiuslocationid", 1, NULL, 0 },
! 1669: { "radiuslocationname", 1, NULL, 0 },
! 1670: { "locationname", 1, NULL, 0 },
! 1671: { "radiusnasporttype", 1, NULL, 0 },
! 1672: { "coaport", 1, NULL, 0 },
! 1673: { "coanoipcheck", 0, NULL, 0 },
! 1674: { "proxylisten", 1, NULL, 0 },
! 1675: { "proxyport", 1, NULL, 0 },
! 1676: { "proxyclient", 1, NULL, 0 },
! 1677: { "proxysecret", 1, NULL, 0 },
! 1678: { "dhcpif", 1, NULL, 0 },
! 1679: { "dhcpmac", 1, NULL, 0 },
! 1680: { "dhcpradius", 0, NULL, 0 },
! 1681: { "dhcpgateway", 1, NULL, 0 },
! 1682: { "dhcpgatewayport", 1, NULL, 0 },
! 1683: { "dhcprelayagent", 1, NULL, 0 },
! 1684: { "lease", 1, NULL, 0 },
! 1685: { "eapolenable", 0, NULL, 0 },
! 1686: { "uamserver", 1, NULL, 0 },
! 1687: { "uamhomepage", 1, NULL, 0 },
! 1688: { "uamsecret", 1, NULL, 0 },
! 1689: { "uamlisten", 1, NULL, 0 },
! 1690: { "uamport", 1, NULL, 0 },
! 1691: { "uamuiport", 1, NULL, 0 },
! 1692: { "uamallowed", 1, NULL, 0 },
! 1693: { "uamdomain", 1, NULL, 0 },
! 1694: { "uamanydns", 0, NULL, 0 },
! 1695: { "uamanyip", 0, NULL, 0 },
! 1696: { "wisprlogin", 1, NULL, 0 },
! 1697: { "nouamsuccess", 0, NULL, 0 },
! 1698: { "nouamwispr", 0, NULL, 0 },
! 1699: { "uamlogoutip", 1, NULL, 0 },
! 1700: { "defsessiontimeout", 1, NULL, 0 },
! 1701: { "defidletimeout", 1, NULL, 0 },
! 1702: { "defbandwidthmaxdown", 1, NULL, 0 },
! 1703: { "defbandwidthmaxup", 1, NULL, 0 },
! 1704: { "definteriminterval", 1, NULL, 0 },
! 1705: { "macauth", 0, NULL, 0 },
! 1706: { "macauthdeny", 0, NULL, 0 },
! 1707: { "macallowed", 1, NULL, 0 },
! 1708: { "macsuffix", 1, NULL, 0 },
! 1709: { "macpasswd", 1, NULL, 0 },
! 1710: { "macallowlocal", 0, NULL, 0 },
! 1711: { "wwwdir", 1, NULL, 0 },
! 1712: { "wwwbin", 1, NULL, 0 },
! 1713: { "uamui", 1, NULL, 0 },
! 1714: { "adminuser", 1, NULL, 0 },
! 1715: { "adminpasswd", 1, NULL, 0 },
! 1716: { "nasmac", 1, NULL, 0 },
! 1717: { "nasip", 1, NULL, 0 },
! 1718: { "ssid", 1, NULL, 0 },
! 1719: { "vlan", 1, NULL, 0 },
! 1720: { "cmdsocket", 1, NULL, 0 },
! 1721: { "radiusoriginalurl", 0, NULL, 0 },
! 1722: { "swapoctets", 0, NULL, 0 },
! 1723: { "usestatusfile", 0, NULL, 0 },
! 1724: { "localusers", 1, NULL, 0 },
! 1725: { "postauthproxy", 1, NULL, 0 },
! 1726: { "postauthproxyport", 1, NULL, 0 },
! 1727: { "wpaguests", 0, NULL, 0 },
! 1728: { "openidauth", 0, NULL, 0 },
! 1729: { "papalwaysok", 0, NULL, 0 },
! 1730: { "chillixml", 0, NULL, 0 },
! 1731: { "acctupdate", 0, NULL, 0 },
! 1732: { "dnsparanoia", 0, NULL, 0 },
! 1733: { "usetap", 0, NULL, 0 },
! 1734: { "routeif", 1, NULL, 0 },
! 1735: { NULL, 0, NULL, 0 }
! 1736: };
! 1737:
! 1738: c = getopt_long (argc, argv, "hVfdc:n:", long_options, &option_index);
! 1739:
! 1740: if (c == -1) break; /* Exit from `while (1)' loop. */
! 1741:
! 1742: switch (c)
! 1743: {
! 1744: case 'h': /* Print help and exit. */
! 1745:
! 1746:
! 1747: if (update_arg( 0 ,
! 1748: 0 , &(args_info->help_given),
! 1749: &(local_args_info.help_given), optarg, 0, 0, ARG_NO,
! 1750: check_ambiguity, override, 0, 0,
! 1751: "help", 'h',
! 1752: additional_error))
! 1753: goto failure;
! 1754: cmdline_parser_free (&local_args_info);
! 1755: return 0;
! 1756:
! 1757: break;
! 1758: case 'V': /* Print version and exit. */
! 1759:
! 1760:
! 1761: if (update_arg( 0 ,
! 1762: 0 , &(args_info->version_given),
! 1763: &(local_args_info.version_given), optarg, 0, 0, ARG_NO,
! 1764: check_ambiguity, override, 0, 0,
! 1765: "version", 'V',
! 1766: additional_error))
! 1767: goto failure;
! 1768: cmdline_parser_free (&local_args_info);
! 1769: return 0;
! 1770:
! 1771: break;
! 1772: case 'f': /* Run in foreground. */
! 1773:
! 1774:
! 1775: if (update_arg((void *)&(args_info->fg_flag), 0, &(args_info->fg_given),
! 1776: &(local_args_info.fg_given), optarg, 0, 0, ARG_FLAG,
! 1777: check_ambiguity, override, 1, 0, "fg", 'f',
! 1778: additional_error))
! 1779: goto failure;
! 1780:
! 1781: break;
! 1782: case 'd': /* Run in debug mode. */
! 1783:
! 1784:
! 1785: if (update_arg((void *)&(args_info->debug_flag), 0, &(args_info->debug_given),
! 1786: &(local_args_info.debug_given), optarg, 0, 0, ARG_FLAG,
! 1787: check_ambiguity, override, 1, 0, "debug", 'd',
! 1788: additional_error))
! 1789: goto failure;
! 1790:
! 1791: break;
! 1792: case 'c': /* Read configuration file. */
! 1793:
! 1794:
! 1795: if (update_arg( (void *)&(args_info->conf_arg),
! 1796: &(args_info->conf_orig), &(args_info->conf_given),
! 1797: &(local_args_info.conf_given), optarg, 0, 0, ARG_STRING,
! 1798: check_ambiguity, override, 0, 0,
! 1799: "conf", 'c',
! 1800: additional_error))
! 1801: goto failure;
! 1802:
! 1803: break;
! 1804: case 'n': /* Network. */
! 1805:
! 1806:
! 1807: if (update_arg( (void *)&(args_info->net_arg),
! 1808: &(args_info->net_orig), &(args_info->net_given),
! 1809: &(local_args_info.net_given), optarg, 0, "192.168.182.0/24", ARG_STRING,
! 1810: check_ambiguity, override, 0, 0,
! 1811: "net", 'n',
! 1812: additional_error))
! 1813: goto failure;
! 1814:
! 1815: break;
! 1816:
! 1817: case 0: /* Long option with no short option */
! 1818: /* Which modules to print debug messages for. */
! 1819: if (strcmp (long_options[option_index].name, "debugfacility") == 0)
! 1820: {
! 1821:
! 1822:
! 1823: if (update_arg( (void *)&(args_info->debugfacility_arg),
! 1824: &(args_info->debugfacility_orig), &(args_info->debugfacility_given),
! 1825: &(local_args_info.debugfacility_given), optarg, 0, "1", ARG_INT,
! 1826: check_ambiguity, override, 0, 0,
! 1827: "debugfacility", '-',
! 1828: additional_error))
! 1829: goto failure;
! 1830:
! 1831: }
! 1832: /* Syslog facility to be used for logging. */
! 1833: else if (strcmp (long_options[option_index].name, "logfacility") == 0)
! 1834: {
! 1835:
! 1836:
! 1837: if (update_arg( (void *)&(args_info->logfacility_arg),
! 1838: &(args_info->logfacility_orig), &(args_info->logfacility_given),
! 1839: &(local_args_info.logfacility_given), optarg, 0, "-1", ARG_INT,
! 1840: check_ambiguity, override, 0, 0,
! 1841: "logfacility", '-',
! 1842: additional_error))
! 1843: goto failure;
! 1844:
! 1845: }
! 1846: /* Re-read configuration file at this interval. */
! 1847: else if (strcmp (long_options[option_index].name, "interval") == 0)
! 1848: {
! 1849:
! 1850:
! 1851: if (update_arg( (void *)&(args_info->interval_arg),
! 1852: &(args_info->interval_orig), &(args_info->interval_given),
! 1853: &(local_args_info.interval_given), optarg, 0, "3600", ARG_INT,
! 1854: check_ambiguity, override, 0, 0,
! 1855: "interval", '-',
! 1856: additional_error))
! 1857: goto failure;
! 1858:
! 1859: }
! 1860: /* Filename of process id file. */
! 1861: else if (strcmp (long_options[option_index].name, "pidfile") == 0)
! 1862: {
! 1863:
! 1864:
! 1865: if (update_arg( (void *)&(args_info->pidfile_arg),
! 1866: &(args_info->pidfile_orig), &(args_info->pidfile_given),
! 1867: &(local_args_info.pidfile_given), optarg, 0, 0, ARG_STRING,
! 1868: check_ambiguity, override, 0, 0,
! 1869: "pidfile", '-',
! 1870: additional_error))
! 1871: goto failure;
! 1872:
! 1873: }
! 1874: /* Directory of nonvolatile data. */
! 1875: else if (strcmp (long_options[option_index].name, "statedir") == 0)
! 1876: {
! 1877:
! 1878:
! 1879: if (update_arg( (void *)&(args_info->statedir_arg),
! 1880: &(args_info->statedir_orig), &(args_info->statedir_given),
! 1881: &(local_args_info.statedir_given), optarg, 0, 0, ARG_STRING,
! 1882: check_ambiguity, override, 0, 0,
! 1883: "statedir", '-',
! 1884: additional_error))
! 1885: goto failure;
! 1886:
! 1887: }
! 1888: /* Network DHCP Starting IP. */
! 1889: else if (strcmp (long_options[option_index].name, "dhcpstart") == 0)
! 1890: {
! 1891:
! 1892:
! 1893: if (update_arg( (void *)&(args_info->dhcpstart_arg),
! 1894: &(args_info->dhcpstart_orig), &(args_info->dhcpstart_given),
! 1895: &(local_args_info.dhcpstart_given), optarg, 0, "0", ARG_INT,
! 1896: check_ambiguity, override, 0, 0,
! 1897: "dhcpstart", '-',
! 1898: additional_error))
! 1899: goto failure;
! 1900:
! 1901: }
! 1902: /* Network DHCP Ending IP. */
! 1903: else if (strcmp (long_options[option_index].name, "dhcpend") == 0)
! 1904: {
! 1905:
! 1906:
! 1907: if (update_arg( (void *)&(args_info->dhcpend_arg),
! 1908: &(args_info->dhcpend_orig), &(args_info->dhcpend_given),
! 1909: &(local_args_info.dhcpend_given), optarg, 0, "0", ARG_INT,
! 1910: check_ambiguity, override, 0, 0,
! 1911: "dhcpend", '-',
! 1912: additional_error))
! 1913: goto failure;
! 1914:
! 1915: }
! 1916: /* Dynamic IP address pool. */
! 1917: else if (strcmp (long_options[option_index].name, "dynip") == 0)
! 1918: {
! 1919:
! 1920:
! 1921: if (update_arg( (void *)&(args_info->dynip_arg),
! 1922: &(args_info->dynip_orig), &(args_info->dynip_given),
! 1923: &(local_args_info.dynip_given), optarg, 0, 0, ARG_STRING,
! 1924: check_ambiguity, override, 0, 0,
! 1925: "dynip", '-',
! 1926: additional_error))
! 1927: goto failure;
! 1928:
! 1929: }
! 1930: /* No Dynamic IP assignment. */
! 1931: else if (strcmp (long_options[option_index].name, "nodynip") == 0)
! 1932: {
! 1933:
! 1934:
! 1935: if (update_arg((void *)&(args_info->nodynip_flag), 0, &(args_info->nodynip_given),
! 1936: &(local_args_info.nodynip_given), optarg, 0, 0, ARG_FLAG,
! 1937: check_ambiguity, override, 1, 0, "nodynip", '-',
! 1938: additional_error))
! 1939: goto failure;
! 1940:
! 1941: }
! 1942: /* Static IP address pool. */
! 1943: else if (strcmp (long_options[option_index].name, "statip") == 0)
! 1944: {
! 1945:
! 1946:
! 1947: if (update_arg( (void *)&(args_info->statip_arg),
! 1948: &(args_info->statip_orig), &(args_info->statip_given),
! 1949: &(local_args_info.statip_given), optarg, 0, 0, ARG_STRING,
! 1950: check_ambiguity, override, 0, 0,
! 1951: "statip", '-',
! 1952: additional_error))
! 1953: goto failure;
! 1954:
! 1955: }
! 1956: /* Primary DNS server IP address. */
! 1957: else if (strcmp (long_options[option_index].name, "dns1") == 0)
! 1958: {
! 1959:
! 1960:
! 1961: if (update_arg( (void *)&(args_info->dns1_arg),
! 1962: &(args_info->dns1_orig), &(args_info->dns1_given),
! 1963: &(local_args_info.dns1_given), optarg, 0, 0, ARG_STRING,
! 1964: check_ambiguity, override, 0, 0,
! 1965: "dns1", '-',
! 1966: additional_error))
! 1967: goto failure;
! 1968:
! 1969: }
! 1970: /* Secondary DNS server IP address. */
! 1971: else if (strcmp (long_options[option_index].name, "dns2") == 0)
! 1972: {
! 1973:
! 1974:
! 1975: if (update_arg( (void *)&(args_info->dns2_arg),
! 1976: &(args_info->dns2_orig), &(args_info->dns2_given),
! 1977: &(local_args_info.dns2_given), optarg, 0, 0, ARG_STRING,
! 1978: check_ambiguity, override, 0, 0,
! 1979: "dns2", '-',
! 1980: additional_error))
! 1981: goto failure;
! 1982:
! 1983: }
! 1984: /* Domain to use for DNS lookups. */
! 1985: else if (strcmp (long_options[option_index].name, "domain") == 0)
! 1986: {
! 1987:
! 1988:
! 1989: if (update_arg( (void *)&(args_info->domain_arg),
! 1990: &(args_info->domain_orig), &(args_info->domain_given),
! 1991: &(local_args_info.domain_given), optarg, 0, "coova.org", ARG_STRING,
! 1992: check_ambiguity, override, 0, 0,
! 1993: "domain", '-',
! 1994: additional_error))
! 1995: goto failure;
! 1996:
! 1997: }
! 1998: /* Script to run after link-up. */
! 1999: else if (strcmp (long_options[option_index].name, "ipup") == 0)
! 2000: {
! 2001:
! 2002:
! 2003: if (update_arg( (void *)&(args_info->ipup_arg),
! 2004: &(args_info->ipup_orig), &(args_info->ipup_given),
! 2005: &(local_args_info.ipup_given), optarg, 0, 0, ARG_STRING,
! 2006: check_ambiguity, override, 0, 0,
! 2007: "ipup", '-',
! 2008: additional_error))
! 2009: goto failure;
! 2010:
! 2011: }
! 2012: /* Script to run after link-down. */
! 2013: else if (strcmp (long_options[option_index].name, "ipdown") == 0)
! 2014: {
! 2015:
! 2016:
! 2017: if (update_arg( (void *)&(args_info->ipdown_arg),
! 2018: &(args_info->ipdown_orig), &(args_info->ipdown_given),
! 2019: &(local_args_info.ipdown_given), optarg, 0, 0, ARG_STRING,
! 2020: check_ambiguity, override, 0, 0,
! 2021: "ipdown", '-',
! 2022: additional_error))
! 2023: goto failure;
! 2024:
! 2025: }
! 2026: /* Script to run after user logon. */
! 2027: else if (strcmp (long_options[option_index].name, "conup") == 0)
! 2028: {
! 2029:
! 2030:
! 2031: if (update_arg( (void *)&(args_info->conup_arg),
! 2032: &(args_info->conup_orig), &(args_info->conup_given),
! 2033: &(local_args_info.conup_given), optarg, 0, 0, ARG_STRING,
! 2034: check_ambiguity, override, 0, 0,
! 2035: "conup", '-',
! 2036: additional_error))
! 2037: goto failure;
! 2038:
! 2039: }
! 2040: /* Script to run after user logoff. */
! 2041: else if (strcmp (long_options[option_index].name, "condown") == 0)
! 2042: {
! 2043:
! 2044:
! 2045: if (update_arg( (void *)&(args_info->condown_arg),
! 2046: &(args_info->condown_orig), &(args_info->condown_given),
! 2047: &(local_args_info.condown_given), optarg, 0, 0, ARG_STRING,
! 2048: check_ambiguity, override, 0, 0,
! 2049: "condown", '-',
! 2050: additional_error))
! 2051: goto failure;
! 2052:
! 2053: }
! 2054: /* TX Queue length for tun interface (linux only). */
! 2055: else if (strcmp (long_options[option_index].name, "txqlen") == 0)
! 2056: {
! 2057:
! 2058:
! 2059: if (update_arg( (void *)&(args_info->txqlen_arg),
! 2060: &(args_info->txqlen_orig), &(args_info->txqlen_given),
! 2061: &(local_args_info.txqlen_given), optarg, 0, "100", ARG_INT,
! 2062: check_ambiguity, override, 0, 0,
! 2063: "txqlen", '-',
! 2064: additional_error))
! 2065: goto failure;
! 2066:
! 2067: }
! 2068: /* TUN/TAP Device, as in tun0 or tap1. */
! 2069: else if (strcmp (long_options[option_index].name, "tundev") == 0)
! 2070: {
! 2071:
! 2072:
! 2073: if (update_arg( (void *)&(args_info->tundev_arg),
! 2074: &(args_info->tundev_orig), &(args_info->tundev_given),
! 2075: &(local_args_info.tundev_given), optarg, 0, 0, ARG_STRING,
! 2076: check_ambiguity, override, 0, 0,
! 2077: "tundev", '-',
! 2078: additional_error))
! 2079: goto failure;
! 2080:
! 2081: }
! 2082: /* IP address to send from. */
! 2083: else if (strcmp (long_options[option_index].name, "radiuslisten") == 0)
! 2084: {
! 2085:
! 2086:
! 2087: if (update_arg( (void *)&(args_info->radiuslisten_arg),
! 2088: &(args_info->radiuslisten_orig), &(args_info->radiuslisten_given),
! 2089: &(local_args_info.radiuslisten_given), optarg, 0, 0, ARG_STRING,
! 2090: check_ambiguity, override, 0, 0,
! 2091: "radiuslisten", '-',
! 2092: additional_error))
! 2093: goto failure;
! 2094:
! 2095: }
! 2096: /* IP address of radius server 1. */
! 2097: else if (strcmp (long_options[option_index].name, "radiusserver1") == 0)
! 2098: {
! 2099:
! 2100:
! 2101: if (update_arg( (void *)&(args_info->radiusserver1_arg),
! 2102: &(args_info->radiusserver1_orig), &(args_info->radiusserver1_given),
! 2103: &(local_args_info.radiusserver1_given), optarg, 0, "rad01.coova.org", ARG_STRING,
! 2104: check_ambiguity, override, 0, 0,
! 2105: "radiusserver1", '-',
! 2106: additional_error))
! 2107: goto failure;
! 2108:
! 2109: }
! 2110: /* IP address of radius server 2. */
! 2111: else if (strcmp (long_options[option_index].name, "radiusserver2") == 0)
! 2112: {
! 2113:
! 2114:
! 2115: if (update_arg( (void *)&(args_info->radiusserver2_arg),
! 2116: &(args_info->radiusserver2_orig), &(args_info->radiusserver2_given),
! 2117: &(local_args_info.radiusserver2_given), optarg, 0, "rad01.coova.org", ARG_STRING,
! 2118: check_ambiguity, override, 0, 0,
! 2119: "radiusserver2", '-',
! 2120: additional_error))
! 2121: goto failure;
! 2122:
! 2123: }
! 2124: /* Authentication UDP port of radius server. */
! 2125: else if (strcmp (long_options[option_index].name, "radiusauthport") == 0)
! 2126: {
! 2127:
! 2128:
! 2129: if (update_arg( (void *)&(args_info->radiusauthport_arg),
! 2130: &(args_info->radiusauthport_orig), &(args_info->radiusauthport_given),
! 2131: &(local_args_info.radiusauthport_given), optarg, 0, "1812", ARG_INT,
! 2132: check_ambiguity, override, 0, 0,
! 2133: "radiusauthport", '-',
! 2134: additional_error))
! 2135: goto failure;
! 2136:
! 2137: }
! 2138: /* Accounting UDP port of radius server. */
! 2139: else if (strcmp (long_options[option_index].name, "radiusacctport") == 0)
! 2140: {
! 2141:
! 2142:
! 2143: if (update_arg( (void *)&(args_info->radiusacctport_arg),
! 2144: &(args_info->radiusacctport_orig), &(args_info->radiusacctport_given),
! 2145: &(local_args_info.radiusacctport_given), optarg, 0, "1813", ARG_INT,
! 2146: check_ambiguity, override, 0, 0,
! 2147: "radiusacctport", '-',
! 2148: additional_error))
! 2149: goto failure;
! 2150:
! 2151: }
! 2152: /* Radius shared secret. */
! 2153: else if (strcmp (long_options[option_index].name, "radiussecret") == 0)
! 2154: {
! 2155:
! 2156:
! 2157: if (update_arg( (void *)&(args_info->radiussecret_arg),
! 2158: &(args_info->radiussecret_orig), &(args_info->radiussecret_given),
! 2159: &(local_args_info.radiussecret_given), optarg, 0, "coova-anonymous", ARG_STRING,
! 2160: check_ambiguity, override, 0, 0,
! 2161: "radiussecret", '-',
! 2162: additional_error))
! 2163: goto failure;
! 2164:
! 2165: }
! 2166: /* Retry timeout in seconds. */
! 2167: else if (strcmp (long_options[option_index].name, "radiustimeout") == 0)
! 2168: {
! 2169:
! 2170:
! 2171: if (update_arg( (void *)&(args_info->radiustimeout_arg),
! 2172: &(args_info->radiustimeout_orig), &(args_info->radiustimeout_given),
! 2173: &(local_args_info.radiustimeout_given), optarg, 0, "30", ARG_INT,
! 2174: check_ambiguity, override, 0, 0,
! 2175: "radiustimeout", '-',
! 2176: additional_error))
! 2177: goto failure;
! 2178:
! 2179: }
! 2180: /* Total number of retries. */
! 2181: else if (strcmp (long_options[option_index].name, "radiusretry") == 0)
! 2182: {
! 2183:
! 2184:
! 2185: if (update_arg( (void *)&(args_info->radiusretry_arg),
! 2186: &(args_info->radiusretry_orig), &(args_info->radiusretry_given),
! 2187: &(local_args_info.radiusretry_given), optarg, 0, "6", ARG_INT,
! 2188: check_ambiguity, override, 0, 0,
! 2189: "radiusretry", '-',
! 2190: additional_error))
! 2191: goto failure;
! 2192:
! 2193: }
! 2194: /* Number of retries before using secondary. */
! 2195: else if (strcmp (long_options[option_index].name, "radiusretrysec") == 0)
! 2196: {
! 2197:
! 2198:
! 2199: if (update_arg( (void *)&(args_info->radiusretrysec_arg),
! 2200: &(args_info->radiusretrysec_orig), &(args_info->radiusretrysec_given),
! 2201: &(local_args_info.radiusretrysec_given), optarg, 0, "3", ARG_INT,
! 2202: check_ambiguity, override, 0, 0,
! 2203: "radiusretrysec", '-',
! 2204: additional_error))
! 2205: goto failure;
! 2206:
! 2207: }
! 2208: /* Radius NAS-Identifier. */
! 2209: else if (strcmp (long_options[option_index].name, "radiusnasid") == 0)
! 2210: {
! 2211:
! 2212:
! 2213: if (update_arg( (void *)&(args_info->radiusnasid_arg),
! 2214: &(args_info->radiusnasid_orig), &(args_info->radiusnasid_given),
! 2215: &(local_args_info.radiusnasid_given), optarg, 0, "nas01", ARG_STRING,
! 2216: check_ambiguity, override, 0, 0,
! 2217: "radiusnasid", '-',
! 2218: additional_error))
! 2219: goto failure;
! 2220:
! 2221: }
! 2222: /* WISPr Location ID. */
! 2223: else if (strcmp (long_options[option_index].name, "radiuslocationid") == 0)
! 2224: {
! 2225:
! 2226:
! 2227: if (update_arg( (void *)&(args_info->radiuslocationid_arg),
! 2228: &(args_info->radiuslocationid_orig), &(args_info->radiuslocationid_given),
! 2229: &(local_args_info.radiuslocationid_given), optarg, 0, 0, ARG_STRING,
! 2230: check_ambiguity, override, 0, 0,
! 2231: "radiuslocationid", '-',
! 2232: additional_error))
! 2233: goto failure;
! 2234:
! 2235: }
! 2236: /* WISPr Location Name. */
! 2237: else if (strcmp (long_options[option_index].name, "radiuslocationname") == 0)
! 2238: {
! 2239:
! 2240:
! 2241: if (update_arg( (void *)&(args_info->radiuslocationname_arg),
! 2242: &(args_info->radiuslocationname_orig), &(args_info->radiuslocationname_given),
! 2243: &(local_args_info.radiuslocationname_given), optarg, 0, 0, ARG_STRING,
! 2244: check_ambiguity, override, 0, 0,
! 2245: "radiuslocationname", '-',
! 2246: additional_error))
! 2247: goto failure;
! 2248:
! 2249: }
! 2250: /* Location Name. */
! 2251: else if (strcmp (long_options[option_index].name, "locationname") == 0)
! 2252: {
! 2253:
! 2254:
! 2255: if (update_arg( (void *)&(args_info->locationname_arg),
! 2256: &(args_info->locationname_orig), &(args_info->locationname_given),
! 2257: &(local_args_info.locationname_given), optarg, 0, 0, ARG_STRING,
! 2258: check_ambiguity, override, 0, 0,
! 2259: "locationname", '-',
! 2260: additional_error))
! 2261: goto failure;
! 2262:
! 2263: }
! 2264: /* Radius NAS-Port-Type. */
! 2265: else if (strcmp (long_options[option_index].name, "radiusnasporttype") == 0)
! 2266: {
! 2267:
! 2268:
! 2269: if (update_arg( (void *)&(args_info->radiusnasporttype_arg),
! 2270: &(args_info->radiusnasporttype_orig), &(args_info->radiusnasporttype_given),
! 2271: &(local_args_info.radiusnasporttype_given), optarg, 0, "19", ARG_INT,
! 2272: check_ambiguity, override, 0, 0,
! 2273: "radiusnasporttype", '-',
! 2274: additional_error))
! 2275: goto failure;
! 2276:
! 2277: }
! 2278: /* Radius disconnect port to listen to. */
! 2279: else if (strcmp (long_options[option_index].name, "coaport") == 0)
! 2280: {
! 2281:
! 2282:
! 2283: if (update_arg( (void *)&(args_info->coaport_arg),
! 2284: &(args_info->coaport_orig), &(args_info->coaport_given),
! 2285: &(local_args_info.coaport_given), optarg, 0, "0", ARG_INT,
! 2286: check_ambiguity, override, 0, 0,
! 2287: "coaport", '-',
! 2288: additional_error))
! 2289: goto failure;
! 2290:
! 2291: }
! 2292: /* Allow radius disconnect from any IP. */
! 2293: else if (strcmp (long_options[option_index].name, "coanoipcheck") == 0)
! 2294: {
! 2295:
! 2296:
! 2297: if (update_arg((void *)&(args_info->coanoipcheck_flag), 0, &(args_info->coanoipcheck_given),
! 2298: &(local_args_info.coanoipcheck_given), optarg, 0, 0, ARG_FLAG,
! 2299: check_ambiguity, override, 1, 0, "coanoipcheck", '-',
! 2300: additional_error))
! 2301: goto failure;
! 2302:
! 2303: }
! 2304: /* IP address to listen to. */
! 2305: else if (strcmp (long_options[option_index].name, "proxylisten") == 0)
! 2306: {
! 2307:
! 2308:
! 2309: if (update_arg( (void *)&(args_info->proxylisten_arg),
! 2310: &(args_info->proxylisten_orig), &(args_info->proxylisten_given),
! 2311: &(local_args_info.proxylisten_given), optarg, 0, 0, ARG_STRING,
! 2312: check_ambiguity, override, 0, 0,
! 2313: "proxylisten", '-',
! 2314: additional_error))
! 2315: goto failure;
! 2316:
! 2317: }
! 2318: /* UDP port to listen to. */
! 2319: else if (strcmp (long_options[option_index].name, "proxyport") == 0)
! 2320: {
! 2321:
! 2322:
! 2323: if (update_arg( (void *)&(args_info->proxyport_arg),
! 2324: &(args_info->proxyport_orig), &(args_info->proxyport_given),
! 2325: &(local_args_info.proxyport_given), optarg, 0, "0", ARG_INT,
! 2326: check_ambiguity, override, 0, 0,
! 2327: "proxyport", '-',
! 2328: additional_error))
! 2329: goto failure;
! 2330:
! 2331: }
! 2332: /* IP address of proxy client(s). */
! 2333: else if (strcmp (long_options[option_index].name, "proxyclient") == 0)
! 2334: {
! 2335:
! 2336:
! 2337: if (update_arg( (void *)&(args_info->proxyclient_arg),
! 2338: &(args_info->proxyclient_orig), &(args_info->proxyclient_given),
! 2339: &(local_args_info.proxyclient_given), optarg, 0, 0, ARG_STRING,
! 2340: check_ambiguity, override, 0, 0,
! 2341: "proxyclient", '-',
! 2342: additional_error))
! 2343: goto failure;
! 2344:
! 2345: }
! 2346: /* Radius proxy shared secret. */
! 2347: else if (strcmp (long_options[option_index].name, "proxysecret") == 0)
! 2348: {
! 2349:
! 2350:
! 2351: if (update_arg( (void *)&(args_info->proxysecret_arg),
! 2352: &(args_info->proxysecret_orig), &(args_info->proxysecret_given),
! 2353: &(local_args_info.proxysecret_given), optarg, 0, 0, ARG_STRING,
! 2354: check_ambiguity, override, 0, 0,
! 2355: "proxysecret", '-',
! 2356: additional_error))
! 2357: goto failure;
! 2358:
! 2359: }
! 2360: /* Local Ethernet interface. */
! 2361: else if (strcmp (long_options[option_index].name, "dhcpif") == 0)
! 2362: {
! 2363:
! 2364:
! 2365: if (update_arg( (void *)&(args_info->dhcpif_arg),
! 2366: &(args_info->dhcpif_orig), &(args_info->dhcpif_given),
! 2367: &(local_args_info.dhcpif_given), optarg, 0, 0, ARG_STRING,
! 2368: check_ambiguity, override, 0, 0,
! 2369: "dhcpif", '-',
! 2370: additional_error))
! 2371: goto failure;
! 2372:
! 2373: }
! 2374: /* Interface MAC address. */
! 2375: else if (strcmp (long_options[option_index].name, "dhcpmac") == 0)
! 2376: {
! 2377:
! 2378:
! 2379: if (update_arg( (void *)&(args_info->dhcpmac_arg),
! 2380: &(args_info->dhcpmac_orig), &(args_info->dhcpmac_given),
! 2381: &(local_args_info.dhcpmac_given), optarg, 0, 0, ARG_STRING,
! 2382: check_ambiguity, override, 0, 0,
! 2383: "dhcpmac", '-',
! 2384: additional_error))
! 2385: goto failure;
! 2386:
! 2387: }
! 2388: /* Map certain DHCP options to RADIUS attributes. */
! 2389: else if (strcmp (long_options[option_index].name, "dhcpradius") == 0)
! 2390: {
! 2391:
! 2392:
! 2393: if (update_arg((void *)&(args_info->dhcpradius_flag), 0, &(args_info->dhcpradius_given),
! 2394: &(local_args_info.dhcpradius_given), optarg, 0, 0, ARG_FLAG,
! 2395: check_ambiguity, override, 1, 0, "dhcpradius", '-',
! 2396: additional_error))
! 2397: goto failure;
! 2398:
! 2399: }
! 2400: /* DHCP gateway addresss for relay. */
! 2401: else if (strcmp (long_options[option_index].name, "dhcpgateway") == 0)
! 2402: {
! 2403:
! 2404:
! 2405: if (update_arg( (void *)&(args_info->dhcpgateway_arg),
! 2406: &(args_info->dhcpgateway_orig), &(args_info->dhcpgateway_given),
! 2407: &(local_args_info.dhcpgateway_given), optarg, 0, 0, ARG_STRING,
! 2408: check_ambiguity, override, 0, 0,
! 2409: "dhcpgateway", '-',
! 2410: additional_error))
! 2411: goto failure;
! 2412:
! 2413: }
! 2414: /* DHCP gateway port for relay. */
! 2415: else if (strcmp (long_options[option_index].name, "dhcpgatewayport") == 0)
! 2416: {
! 2417:
! 2418:
! 2419: if (update_arg( (void *)&(args_info->dhcpgatewayport_arg),
! 2420: &(args_info->dhcpgatewayport_orig), &(args_info->dhcpgatewayport_given),
! 2421: &(local_args_info.dhcpgatewayport_given), optarg, 0, "67", ARG_INT,
! 2422: check_ambiguity, override, 0, 0,
! 2423: "dhcpgatewayport", '-',
! 2424: additional_error))
! 2425: goto failure;
! 2426:
! 2427: }
! 2428: /* DHCP relay agent IP addresss (default uamlisten). */
! 2429: else if (strcmp (long_options[option_index].name, "dhcprelayagent") == 0)
! 2430: {
! 2431:
! 2432:
! 2433: if (update_arg( (void *)&(args_info->dhcprelayagent_arg),
! 2434: &(args_info->dhcprelayagent_orig), &(args_info->dhcprelayagent_given),
! 2435: &(local_args_info.dhcprelayagent_given), optarg, 0, 0, ARG_STRING,
! 2436: check_ambiguity, override, 0, 0,
! 2437: "dhcprelayagent", '-',
! 2438: additional_error))
! 2439: goto failure;
! 2440:
! 2441: }
! 2442: /* Lease time to allocate to clients. */
! 2443: else if (strcmp (long_options[option_index].name, "lease") == 0)
! 2444: {
! 2445:
! 2446:
! 2447: if (update_arg( (void *)&(args_info->lease_arg),
! 2448: &(args_info->lease_orig), &(args_info->lease_given),
! 2449: &(local_args_info.lease_given), optarg, 0, "600", ARG_INT,
! 2450: check_ambiguity, override, 0, 0,
! 2451: "lease", '-',
! 2452: additional_error))
! 2453: goto failure;
! 2454:
! 2455: }
! 2456: /* Enable IEEE 802.1x authentication. */
! 2457: else if (strcmp (long_options[option_index].name, "eapolenable") == 0)
! 2458: {
! 2459:
! 2460:
! 2461: if (update_arg((void *)&(args_info->eapolenable_flag), 0, &(args_info->eapolenable_given),
! 2462: &(local_args_info.eapolenable_given), optarg, 0, 0, ARG_FLAG,
! 2463: check_ambiguity, override, 1, 0, "eapolenable", '-',
! 2464: additional_error))
! 2465: goto failure;
! 2466:
! 2467: }
! 2468: /* URL of authentication web server. */
! 2469: else if (strcmp (long_options[option_index].name, "uamserver") == 0)
! 2470: {
! 2471:
! 2472:
! 2473: if (update_arg( (void *)&(args_info->uamserver_arg),
! 2474: &(args_info->uamserver_orig), &(args_info->uamserver_given),
! 2475: &(local_args_info.uamserver_given), optarg, 0, 0, ARG_STRING,
! 2476: check_ambiguity, override, 0, 0,
! 2477: "uamserver", '-',
! 2478: additional_error))
! 2479: goto failure;
! 2480:
! 2481: }
! 2482: /* URL of homepage to redirect unauthenticated users to. */
! 2483: else if (strcmp (long_options[option_index].name, "uamhomepage") == 0)
! 2484: {
! 2485:
! 2486:
! 2487: if (update_arg( (void *)&(args_info->uamhomepage_arg),
! 2488: &(args_info->uamhomepage_orig), &(args_info->uamhomepage_given),
! 2489: &(local_args_info.uamhomepage_given), optarg, 0, 0, ARG_STRING,
! 2490: check_ambiguity, override, 0, 0,
! 2491: "uamhomepage", '-',
! 2492: additional_error))
! 2493: goto failure;
! 2494:
! 2495: }
! 2496: /* Shared secret between uamserver and chilli. */
! 2497: else if (strcmp (long_options[option_index].name, "uamsecret") == 0)
! 2498: {
! 2499:
! 2500:
! 2501: if (update_arg( (void *)&(args_info->uamsecret_arg),
! 2502: &(args_info->uamsecret_orig), &(args_info->uamsecret_given),
! 2503: &(local_args_info.uamsecret_given), optarg, 0, 0, ARG_STRING,
! 2504: check_ambiguity, override, 0, 0,
! 2505: "uamsecret", '-',
! 2506: additional_error))
! 2507: goto failure;
! 2508:
! 2509: }
! 2510: /* IP address to listen to for authentication requests. */
! 2511: else if (strcmp (long_options[option_index].name, "uamlisten") == 0)
! 2512: {
! 2513:
! 2514:
! 2515: if (update_arg( (void *)&(args_info->uamlisten_arg),
! 2516: &(args_info->uamlisten_orig), &(args_info->uamlisten_given),
! 2517: &(local_args_info.uamlisten_given), optarg, 0, 0, ARG_STRING,
! 2518: check_ambiguity, override, 0, 0,
! 2519: "uamlisten", '-',
! 2520: additional_error))
! 2521: goto failure;
! 2522:
! 2523: }
! 2524: /* TCP port to bind to for authentication requests. */
! 2525: else if (strcmp (long_options[option_index].name, "uamport") == 0)
! 2526: {
! 2527:
! 2528:
! 2529: if (update_arg( (void *)&(args_info->uamport_arg),
! 2530: &(args_info->uamport_orig), &(args_info->uamport_given),
! 2531: &(local_args_info.uamport_given), optarg, 0, "3990", ARG_INT,
! 2532: check_ambiguity, override, 0, 0,
! 2533: "uamport", '-',
! 2534: additional_error))
! 2535: goto failure;
! 2536:
! 2537: }
! 2538: /* TCP port to bind to for UAM UI requests. */
! 2539: else if (strcmp (long_options[option_index].name, "uamuiport") == 0)
! 2540: {
! 2541:
! 2542:
! 2543: if (update_arg( (void *)&(args_info->uamuiport_arg),
! 2544: &(args_info->uamuiport_orig), &(args_info->uamuiport_given),
! 2545: &(local_args_info.uamuiport_given), optarg, 0, "3991", ARG_INT,
! 2546: check_ambiguity, override, 0, 0,
! 2547: "uamuiport", '-',
! 2548: additional_error))
! 2549: goto failure;
! 2550:
! 2551: }
! 2552: /* Domain names exempt from access check . */
! 2553: else if (strcmp (long_options[option_index].name, "uamallowed") == 0)
! 2554: {
! 2555:
! 2556: if (update_multiple_arg_temp(&uamallowed_list,
! 2557: &(local_args_info.uamallowed_given), optarg, 0, 0, ARG_STRING,
! 2558: "uamallowed", '-',
! 2559: additional_error))
! 2560: goto failure;
! 2561:
! 2562: }
! 2563: /* Domain name allowed (active dns filtering; one per line!) . */
! 2564: else if (strcmp (long_options[option_index].name, "uamdomain") == 0)
! 2565: {
! 2566:
! 2567: if (update_multiple_arg_temp(&uamdomain_list,
! 2568: &(local_args_info.uamdomain_given), optarg, 0, 0, ARG_STRING,
! 2569: "uamdomain", '-',
! 2570: additional_error))
! 2571: goto failure;
! 2572:
! 2573: }
! 2574: /* Allow client to use any DNS server. */
! 2575: else if (strcmp (long_options[option_index].name, "uamanydns") == 0)
! 2576: {
! 2577:
! 2578:
! 2579: if (update_arg((void *)&(args_info->uamanydns_flag), 0, &(args_info->uamanydns_given),
! 2580: &(local_args_info.uamanydns_given), optarg, 0, 0, ARG_FLAG,
! 2581: check_ambiguity, override, 1, 0, "uamanydns", '-',
! 2582: additional_error))
! 2583: goto failure;
! 2584:
! 2585: }
! 2586: /* Allow client to use any IP Address. */
! 2587: else if (strcmp (long_options[option_index].name, "uamanyip") == 0)
! 2588: {
! 2589:
! 2590:
! 2591: if (update_arg((void *)&(args_info->uamanyip_flag), 0, &(args_info->uamanyip_given),
! 2592: &(local_args_info.uamanyip_given), optarg, 0, 0, ARG_FLAG,
! 2593: check_ambiguity, override, 1, 0, "uamanyip", '-',
! 2594: additional_error))
! 2595: goto failure;
! 2596:
! 2597: }
! 2598: /* A specific WISPr login url to be used. */
! 2599: else if (strcmp (long_options[option_index].name, "wisprlogin") == 0)
! 2600: {
! 2601:
! 2602:
! 2603: if (update_arg( (void *)&(args_info->wisprlogin_arg),
! 2604: &(args_info->wisprlogin_orig), &(args_info->wisprlogin_given),
! 2605: &(local_args_info.wisprlogin_given), optarg, 0, 0, ARG_STRING,
! 2606: check_ambiguity, override, 0, 0,
! 2607: "wisprlogin", '-',
! 2608: additional_error))
! 2609: goto failure;
! 2610:
! 2611: }
! 2612: /* Do not return to the UAM server on success, original url instead. */
! 2613: else if (strcmp (long_options[option_index].name, "nouamsuccess") == 0)
! 2614: {
! 2615:
! 2616:
! 2617: if (update_arg((void *)&(args_info->nouamsuccess_flag), 0, &(args_info->nouamsuccess_given),
! 2618: &(local_args_info.nouamsuccess_given), optarg, 0, 0, ARG_FLAG,
! 2619: check_ambiguity, override, 1, 0, "nouamsuccess", '-',
! 2620: additional_error))
! 2621: goto failure;
! 2622:
! 2623: }
! 2624: /* Do not send WISPr XML from ChilliSpot, assume back-end does. */
! 2625: else if (strcmp (long_options[option_index].name, "nouamwispr") == 0)
! 2626: {
! 2627:
! 2628:
! 2629: if (update_arg((void *)&(args_info->nouamwispr_flag), 0, &(args_info->nouamwispr_given),
! 2630: &(local_args_info.nouamwispr_given), optarg, 0, 0, ARG_FLAG,
! 2631: check_ambiguity, override, 1, 0, "nouamwispr", '-',
! 2632: additional_error))
! 2633: goto failure;
! 2634:
! 2635: }
! 2636: /* HTTP Auto-Logout IP Address. */
! 2637: else if (strcmp (long_options[option_index].name, "uamlogoutip") == 0)
! 2638: {
! 2639:
! 2640:
! 2641: if (update_arg( (void *)&(args_info->uamlogoutip_arg),
! 2642: &(args_info->uamlogoutip_orig), &(args_info->uamlogoutip_given),
! 2643: &(local_args_info.uamlogoutip_given), optarg, 0, "1.1.1.1", ARG_STRING,
! 2644: check_ambiguity, override, 0, 0,
! 2645: "uamlogoutip", '-',
! 2646: additional_error))
! 2647: goto failure;
! 2648:
! 2649: }
! 2650: /* Default session-timeout if not returned by RADIUS. */
! 2651: else if (strcmp (long_options[option_index].name, "defsessiontimeout") == 0)
! 2652: {
! 2653:
! 2654:
! 2655: if (update_arg( (void *)&(args_info->defsessiontimeout_arg),
! 2656: &(args_info->defsessiontimeout_orig), &(args_info->defsessiontimeout_given),
! 2657: &(local_args_info.defsessiontimeout_given), optarg, 0, "0", ARG_LONG,
! 2658: check_ambiguity, override, 0, 0,
! 2659: "defsessiontimeout", '-',
! 2660: additional_error))
! 2661: goto failure;
! 2662:
! 2663: }
! 2664: /* Default idle-timeout if not returned by RADIUS. */
! 2665: else if (strcmp (long_options[option_index].name, "defidletimeout") == 0)
! 2666: {
! 2667:
! 2668:
! 2669: if (update_arg( (void *)&(args_info->defidletimeout_arg),
! 2670: &(args_info->defidletimeout_orig), &(args_info->defidletimeout_given),
! 2671: &(local_args_info.defidletimeout_given), optarg, 0, "0", ARG_INT,
! 2672: check_ambiguity, override, 0, 0,
! 2673: "defidletimeout", '-',
! 2674: additional_error))
! 2675: goto failure;
! 2676:
! 2677: }
! 2678: /* Default WISPr-Bandwidth-Max-Down if not returned by RADIUS. */
! 2679: else if (strcmp (long_options[option_index].name, "defbandwidthmaxdown") == 0)
! 2680: {
! 2681:
! 2682:
! 2683: if (update_arg( (void *)&(args_info->defbandwidthmaxdown_arg),
! 2684: &(args_info->defbandwidthmaxdown_orig), &(args_info->defbandwidthmaxdown_given),
! 2685: &(local_args_info.defbandwidthmaxdown_given), optarg, 0, "0", ARG_LONG,
! 2686: check_ambiguity, override, 0, 0,
! 2687: "defbandwidthmaxdown", '-',
! 2688: additional_error))
! 2689: goto failure;
! 2690:
! 2691: }
! 2692: /* Default WISPr-Bandwidth-Max-Up if not returned by RADIUS. */
! 2693: else if (strcmp (long_options[option_index].name, "defbandwidthmaxup") == 0)
! 2694: {
! 2695:
! 2696:
! 2697: if (update_arg( (void *)&(args_info->defbandwidthmaxup_arg),
! 2698: &(args_info->defbandwidthmaxup_orig), &(args_info->defbandwidthmaxup_given),
! 2699: &(local_args_info.defbandwidthmaxup_given), optarg, 0, "0", ARG_LONG,
! 2700: check_ambiguity, override, 0, 0,
! 2701: "defbandwidthmaxup", '-',
! 2702: additional_error))
! 2703: goto failure;
! 2704:
! 2705: }
! 2706: /* Default interim-interval for accounting if not returned by RADIUS. */
! 2707: else if (strcmp (long_options[option_index].name, "definteriminterval") == 0)
! 2708: {
! 2709:
! 2710:
! 2711: if (update_arg( (void *)&(args_info->definteriminterval_arg),
! 2712: &(args_info->definteriminterval_orig), &(args_info->definteriminterval_given),
! 2713: &(local_args_info.definteriminterval_given), optarg, 0, "300", ARG_INT,
! 2714: check_ambiguity, override, 0, 0,
! 2715: "definteriminterval", '-',
! 2716: additional_error))
! 2717: goto failure;
! 2718:
! 2719: }
! 2720: /* Authenticate based on MAC address. */
! 2721: else if (strcmp (long_options[option_index].name, "macauth") == 0)
! 2722: {
! 2723:
! 2724:
! 2725: if (update_arg((void *)&(args_info->macauth_flag), 0, &(args_info->macauth_given),
! 2726: &(local_args_info.macauth_given), optarg, 0, 0, ARG_FLAG,
! 2727: check_ambiguity, override, 1, 0, "macauth", '-',
! 2728: additional_error))
! 2729: goto failure;
! 2730:
! 2731: }
! 2732: /* Deny access (even UAM) to MAC addresses given Access-Reject. */
! 2733: else if (strcmp (long_options[option_index].name, "macauthdeny") == 0)
! 2734: {
! 2735:
! 2736:
! 2737: if (update_arg((void *)&(args_info->macauthdeny_flag), 0, &(args_info->macauthdeny_given),
! 2738: &(local_args_info.macauthdeny_given), optarg, 0, 0, ARG_FLAG,
! 2739: check_ambiguity, override, 1, 0, "macauthdeny", '-',
! 2740: additional_error))
! 2741: goto failure;
! 2742:
! 2743: }
! 2744: /* List of allowed MAC addresses. */
! 2745: else if (strcmp (long_options[option_index].name, "macallowed") == 0)
! 2746: {
! 2747:
! 2748: if (update_multiple_arg_temp(&macallowed_list,
! 2749: &(local_args_info.macallowed_given), optarg, 0, 0, ARG_STRING,
! 2750: "macallowed", '-',
! 2751: additional_error))
! 2752: goto failure;
! 2753:
! 2754: }
! 2755: /* Suffix to add to the MAC address. */
! 2756: else if (strcmp (long_options[option_index].name, "macsuffix") == 0)
! 2757: {
! 2758:
! 2759:
! 2760: if (update_arg( (void *)&(args_info->macsuffix_arg),
! 2761: &(args_info->macsuffix_orig), &(args_info->macsuffix_given),
! 2762: &(local_args_info.macsuffix_given), optarg, 0, 0, ARG_STRING,
! 2763: check_ambiguity, override, 0, 0,
! 2764: "macsuffix", '-',
! 2765: additional_error))
! 2766: goto failure;
! 2767:
! 2768: }
! 2769: /* Password used when performing MAC authentication. */
! 2770: else if (strcmp (long_options[option_index].name, "macpasswd") == 0)
! 2771: {
! 2772:
! 2773:
! 2774: if (update_arg( (void *)&(args_info->macpasswd_arg),
! 2775: &(args_info->macpasswd_orig), &(args_info->macpasswd_given),
! 2776: &(local_args_info.macpasswd_given), optarg, 0, 0, ARG_STRING,
! 2777: check_ambiguity, override, 0, 0,
! 2778: "macpasswd", '-',
! 2779: additional_error))
! 2780: goto failure;
! 2781:
! 2782: }
! 2783: /* Do not use RADIUS for authenticating the macallowed. */
! 2784: else if (strcmp (long_options[option_index].name, "macallowlocal") == 0)
! 2785: {
! 2786:
! 2787:
! 2788: if (update_arg((void *)&(args_info->macallowlocal_flag), 0, &(args_info->macallowlocal_given),
! 2789: &(local_args_info.macallowlocal_given), optarg, 0, 0, ARG_FLAG,
! 2790: check_ambiguity, override, 1, 0, "macallowlocal", '-',
! 2791: additional_error))
! 2792: goto failure;
! 2793:
! 2794: }
! 2795: /* Local content served by chilli (for splash page, etc). */
! 2796: else if (strcmp (long_options[option_index].name, "wwwdir") == 0)
! 2797: {
! 2798:
! 2799:
! 2800: if (update_arg( (void *)&(args_info->wwwdir_arg),
! 2801: &(args_info->wwwdir_orig), &(args_info->wwwdir_given),
! 2802: &(local_args_info.wwwdir_given), optarg, 0, 0, ARG_STRING,
! 2803: check_ambiguity, override, 0, 0,
! 2804: "wwwdir", '-',
! 2805: additional_error))
! 2806: goto failure;
! 2807:
! 2808: }
! 2809: /* Script binary (such as haserl) for simple web programming. */
! 2810: else if (strcmp (long_options[option_index].name, "wwwbin") == 0)
! 2811: {
! 2812:
! 2813:
! 2814: if (update_arg( (void *)&(args_info->wwwbin_arg),
! 2815: &(args_info->wwwbin_orig), &(args_info->wwwbin_given),
! 2816: &(local_args_info.wwwbin_given), optarg, 0, 0, ARG_STRING,
! 2817: check_ambiguity, override, 0, 0,
! 2818: "wwwbin", '-',
! 2819: additional_error))
! 2820: goto failure;
! 2821:
! 2822: }
! 2823: /* Program in inetd style to handle all uam requests. */
! 2824: else if (strcmp (long_options[option_index].name, "uamui") == 0)
! 2825: {
! 2826:
! 2827:
! 2828: if (update_arg( (void *)&(args_info->uamui_arg),
! 2829: &(args_info->uamui_orig), &(args_info->uamui_given),
! 2830: &(local_args_info.uamui_given), optarg, 0, 0, ARG_STRING,
! 2831: check_ambiguity, override, 0, 0,
! 2832: "uamui", '-',
! 2833: additional_error))
! 2834: goto failure;
! 2835:
! 2836: }
! 2837: /* RADIUS administrative user login username. */
! 2838: else if (strcmp (long_options[option_index].name, "adminuser") == 0)
! 2839: {
! 2840:
! 2841:
! 2842: if (update_arg( (void *)&(args_info->adminuser_arg),
! 2843: &(args_info->adminuser_orig), &(args_info->adminuser_given),
! 2844: &(local_args_info.adminuser_given), optarg, 0, "chillispot", ARG_STRING,
! 2845: check_ambiguity, override, 0, 0,
! 2846: "adminuser", '-',
! 2847: additional_error))
! 2848: goto failure;
! 2849:
! 2850: }
! 2851: /* RADIUS administrative user login password. */
! 2852: else if (strcmp (long_options[option_index].name, "adminpasswd") == 0)
! 2853: {
! 2854:
! 2855:
! 2856: if (update_arg( (void *)&(args_info->adminpasswd_arg),
! 2857: &(args_info->adminpasswd_orig), &(args_info->adminpasswd_given),
! 2858: &(local_args_info.adminpasswd_given), optarg, 0, "chillispot", ARG_STRING,
! 2859: check_ambiguity, override, 0, 0,
! 2860: "adminpasswd", '-',
! 2861: additional_error))
! 2862: goto failure;
! 2863:
! 2864: }
! 2865: /* Unique MAC address of the NAS (called-station-id). */
! 2866: else if (strcmp (long_options[option_index].name, "nasmac") == 0)
! 2867: {
! 2868:
! 2869:
! 2870: if (update_arg( (void *)&(args_info->nasmac_arg),
! 2871: &(args_info->nasmac_orig), &(args_info->nasmac_given),
! 2872: &(local_args_info.nasmac_given), optarg, 0, 0, ARG_STRING,
! 2873: check_ambiguity, override, 0, 0,
! 2874: "nasmac", '-',
! 2875: additional_error))
! 2876: goto failure;
! 2877:
! 2878: }
! 2879: /* Unique IP address of the NAS (nas-ip-address). */
! 2880: else if (strcmp (long_options[option_index].name, "nasip") == 0)
! 2881: {
! 2882:
! 2883:
! 2884: if (update_arg( (void *)&(args_info->nasip_arg),
! 2885: &(args_info->nasip_orig), &(args_info->nasip_given),
! 2886: &(local_args_info.nasip_given), optarg, 0, 0, ARG_STRING,
! 2887: check_ambiguity, override, 0, 0,
! 2888: "nasip", '-',
! 2889: additional_error))
! 2890: goto failure;
! 2891:
! 2892: }
! 2893: /* SSID of the session. */
! 2894: else if (strcmp (long_options[option_index].name, "ssid") == 0)
! 2895: {
! 2896:
! 2897:
! 2898: if (update_arg( (void *)&(args_info->ssid_arg),
! 2899: &(args_info->ssid_orig), &(args_info->ssid_given),
! 2900: &(local_args_info.ssid_given), optarg, 0, 0, ARG_STRING,
! 2901: check_ambiguity, override, 0, 0,
! 2902: "ssid", '-',
! 2903: additional_error))
! 2904: goto failure;
! 2905:
! 2906: }
! 2907: /* VLAN of the session. */
! 2908: else if (strcmp (long_options[option_index].name, "vlan") == 0)
! 2909: {
! 2910:
! 2911:
! 2912: if (update_arg( (void *)&(args_info->vlan_arg),
! 2913: &(args_info->vlan_orig), &(args_info->vlan_given),
! 2914: &(local_args_info.vlan_given), optarg, 0, 0, ARG_STRING,
! 2915: check_ambiguity, override, 0, 0,
! 2916: "vlan", '-',
! 2917: additional_error))
! 2918: goto failure;
! 2919:
! 2920: }
! 2921: /* path to the command unix socket. */
! 2922: else if (strcmp (long_options[option_index].name, "cmdsocket") == 0)
! 2923: {
! 2924:
! 2925:
! 2926: if (update_arg( (void *)&(args_info->cmdsocket_arg),
! 2927: &(args_info->cmdsocket_orig), &(args_info->cmdsocket_given),
! 2928: &(local_args_info.cmdsocket_given), optarg, 0, 0, ARG_STRING,
! 2929: check_ambiguity, override, 0, 0,
! 2930: "cmdsocket", '-',
! 2931: additional_error))
! 2932: goto failure;
! 2933:
! 2934: }
! 2935: /* Turn on the sending of ChilliSpot-OriginalURL in Access-Request. */
! 2936: else if (strcmp (long_options[option_index].name, "radiusoriginalurl") == 0)
! 2937: {
! 2938:
! 2939:
! 2940: if (update_arg((void *)&(args_info->radiusoriginalurl_flag), 0, &(args_info->radiusoriginalurl_given),
! 2941: &(local_args_info.radiusoriginalurl_given), optarg, 0, 0, ARG_FLAG,
! 2942: check_ambiguity, override, 1, 0, "radiusoriginalurl", '-',
! 2943: additional_error))
! 2944: goto failure;
! 2945:
! 2946: }
! 2947: /* Swap the meaning of input/output octets/packets. */
! 2948: else if (strcmp (long_options[option_index].name, "swapoctets") == 0)
! 2949: {
! 2950:
! 2951:
! 2952: if (update_arg((void *)&(args_info->swapoctets_flag), 0, &(args_info->swapoctets_given),
! 2953: &(local_args_info.swapoctets_given), optarg, 0, 0, ARG_FLAG,
! 2954: check_ambiguity, override, 1, 0, "swapoctets", '-',
! 2955: additional_error))
! 2956: goto failure;
! 2957:
! 2958: }
! 2959: /* Use the status file to keep track of sessions. */
! 2960: else if (strcmp (long_options[option_index].name, "usestatusfile") == 0)
! 2961: {
! 2962:
! 2963:
! 2964: if (update_arg((void *)&(args_info->usestatusfile_flag), 0, &(args_info->usestatusfile_given),
! 2965: &(local_args_info.usestatusfile_given), optarg, 0, 0, ARG_FLAG,
! 2966: check_ambiguity, override, 1, 0, "usestatusfile", '-',
! 2967: additional_error))
! 2968: goto failure;
! 2969:
! 2970: }
! 2971: /* File keep 'Local' usernames and passwords. */
! 2972: else if (strcmp (long_options[option_index].name, "localusers") == 0)
! 2973: {
! 2974:
! 2975:
! 2976: if (update_arg( (void *)&(args_info->localusers_arg),
! 2977: &(args_info->localusers_orig), &(args_info->localusers_given),
! 2978: &(local_args_info.localusers_given), optarg, 0, 0, ARG_STRING,
! 2979: check_ambiguity, override, 0, 0,
! 2980: "localusers", '-',
! 2981: additional_error))
! 2982: goto failure;
! 2983:
! 2984: }
! 2985: /* IP of an upstream transparent proxy. */
! 2986: else if (strcmp (long_options[option_index].name, "postauthproxy") == 0)
! 2987: {
! 2988:
! 2989:
! 2990: if (update_arg( (void *)&(args_info->postauthproxy_arg),
! 2991: &(args_info->postauthproxy_orig), &(args_info->postauthproxy_given),
! 2992: &(local_args_info.postauthproxy_given), optarg, 0, 0, ARG_STRING,
! 2993: check_ambiguity, override, 0, 0,
! 2994: "postauthproxy", '-',
! 2995: additional_error))
! 2996: goto failure;
! 2997:
! 2998: }
! 2999: /* Port of an upstream transparent proxy. */
! 3000: else if (strcmp (long_options[option_index].name, "postauthproxyport") == 0)
! 3001: {
! 3002:
! 3003:
! 3004: if (update_arg( (void *)&(args_info->postauthproxyport_arg),
! 3005: &(args_info->postauthproxyport_orig), &(args_info->postauthproxyport_given),
! 3006: &(local_args_info.postauthproxyport_given), optarg, 0, "0", ARG_INT,
! 3007: check_ambiguity, override, 0, 0,
! 3008: "postauthproxyport", '-',
! 3009: additional_error))
! 3010: goto failure;
! 3011:
! 3012: }
! 3013: /* Allow WPA 'Guest' access. */
! 3014: else if (strcmp (long_options[option_index].name, "wpaguests") == 0)
! 3015: {
! 3016:
! 3017:
! 3018: if (update_arg((void *)&(args_info->wpaguests_flag), 0, &(args_info->wpaguests_given),
! 3019: &(local_args_info.wpaguests_given), optarg, 0, 0, ARG_FLAG,
! 3020: check_ambiguity, override, 1, 0, "wpaguests", '-',
! 3021: additional_error))
! 3022: goto failure;
! 3023:
! 3024: }
! 3025: /* Allow OpenID authentication. */
! 3026: else if (strcmp (long_options[option_index].name, "openidauth") == 0)
! 3027: {
! 3028:
! 3029:
! 3030: if (update_arg((void *)&(args_info->openidauth_flag), 0, &(args_info->openidauth_given),
! 3031: &(local_args_info.openidauth_given), optarg, 0, 0, ARG_FLAG,
! 3032: check_ambiguity, override, 1, 0, "openidauth", '-',
! 3033: additional_error))
! 3034: goto failure;
! 3035:
! 3036: }
! 3037: /* Always allow 'PAP' authentication (depreciated; always on). */
! 3038: else if (strcmp (long_options[option_index].name, "papalwaysok") == 0)
! 3039: {
! 3040:
! 3041:
! 3042: if (update_arg((void *)&(args_info->papalwaysok_flag), 0, &(args_info->papalwaysok_given),
! 3043: &(local_args_info.papalwaysok_given), optarg, 0, 0, ARG_FLAG,
! 3044: check_ambiguity, override, 1, 0, "papalwaysok", '-',
! 3045: additional_error))
! 3046: goto failure;
! 3047:
! 3048: }
! 3049: /* Use ChilliSpot XML in WISPr blocks. */
! 3050: else if (strcmp (long_options[option_index].name, "chillixml") == 0)
! 3051: {
! 3052:
! 3053:
! 3054: if (update_arg((void *)&(args_info->chillixml_flag), 0, &(args_info->chillixml_given),
! 3055: &(local_args_info.chillixml_given), optarg, 0, 0, ARG_FLAG,
! 3056: check_ambiguity, override, 1, 0, "chillixml", '-',
! 3057: additional_error))
! 3058: goto failure;
! 3059:
! 3060: }
! 3061: /* Allow updating of session attributes in Accounting-Response. */
! 3062: else if (strcmp (long_options[option_index].name, "acctupdate") == 0)
! 3063: {
! 3064:
! 3065:
! 3066: if (update_arg((void *)&(args_info->acctupdate_flag), 0, &(args_info->acctupdate_given),
! 3067: &(local_args_info.acctupdate_given), optarg, 0, 0, ARG_FLAG,
! 3068: check_ambiguity, override, 1, 0, "acctupdate", '-',
! 3069: additional_error))
! 3070: goto failure;
! 3071:
! 3072: }
! 3073: /* Inspect DNS packets and drop responses with any non- A, CNAME, SOA, or MX records (to prevent dns tunnels). */
! 3074: else if (strcmp (long_options[option_index].name, "dnsparanoia") == 0)
! 3075: {
! 3076:
! 3077:
! 3078: if (update_arg((void *)&(args_info->dnsparanoia_flag), 0, &(args_info->dnsparanoia_given),
! 3079: &(local_args_info.dnsparanoia_given), optarg, 0, 0, ARG_FLAG,
! 3080: check_ambiguity, override, 1, 0, "dnsparanoia", '-',
! 3081: additional_error))
! 3082: goto failure;
! 3083:
! 3084: }
! 3085: /* Use a TAP instead of TUN (linux only). */
! 3086: else if (strcmp (long_options[option_index].name, "usetap") == 0)
! 3087: {
! 3088:
! 3089:
! 3090: if (update_arg((void *)&(args_info->usetap_flag), 0, &(args_info->usetap_given),
! 3091: &(local_args_info.usetap_given), optarg, 0, 0, ARG_FLAG,
! 3092: check_ambiguity, override, 1, 0, "usetap", '-',
! 3093: additional_error))
! 3094: goto failure;
! 3095:
! 3096: }
! 3097: /* Interface to use as default route; turns on 'manual' routing. */
! 3098: else if (strcmp (long_options[option_index].name, "routeif") == 0)
! 3099: {
! 3100:
! 3101:
! 3102: if (update_arg( (void *)&(args_info->routeif_arg),
! 3103: &(args_info->routeif_orig), &(args_info->routeif_given),
! 3104: &(local_args_info.routeif_given), optarg, 0, 0, ARG_STRING,
! 3105: check_ambiguity, override, 0, 0,
! 3106: "routeif", '-',
! 3107: additional_error))
! 3108: goto failure;
! 3109:
! 3110: }
! 3111:
! 3112: break;
! 3113: case '?': /* Invalid option. */
! 3114: /* `getopt_long' already printed an error message. */
! 3115: goto failure;
! 3116:
! 3117: default: /* bug: option not considered. */
! 3118: fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : ""));
! 3119: abort ();
! 3120: } /* switch */
! 3121: } /* while */
! 3122:
! 3123:
! 3124: update_multiple_arg((void *)&(args_info->uamallowed_arg),
! 3125: &(args_info->uamallowed_orig), args_info->uamallowed_given,
! 3126: local_args_info.uamallowed_given, 0 ,
! 3127: ARG_STRING, uamallowed_list);
! 3128: update_multiple_arg((void *)&(args_info->uamdomain_arg),
! 3129: &(args_info->uamdomain_orig), args_info->uamdomain_given,
! 3130: local_args_info.uamdomain_given, 0 ,
! 3131: ARG_STRING, uamdomain_list);
! 3132: update_multiple_arg((void *)&(args_info->macallowed_arg),
! 3133: &(args_info->macallowed_orig), args_info->macallowed_given,
! 3134: local_args_info.macallowed_given, 0 ,
! 3135: ARG_STRING, macallowed_list);
! 3136:
! 3137: args_info->uamallowed_given += local_args_info.uamallowed_given;
! 3138: local_args_info.uamallowed_given = 0;
! 3139: args_info->uamdomain_given += local_args_info.uamdomain_given;
! 3140: local_args_info.uamdomain_given = 0;
! 3141: args_info->macallowed_given += local_args_info.macallowed_given;
! 3142: local_args_info.macallowed_given = 0;
! 3143:
! 3144: if (check_required)
! 3145: {
! 3146: error += cmdline_parser_required2 (args_info, argv[0], additional_error);
! 3147: }
! 3148:
! 3149: cmdline_parser_release (&local_args_info);
! 3150:
! 3151: if ( error )
! 3152: return (EXIT_FAILURE);
! 3153:
! 3154: return 0;
! 3155:
! 3156: failure:
! 3157: free_list (uamallowed_list, 1 );
! 3158: free_list (uamdomain_list, 1 );
! 3159: free_list (macallowed_list, 1 );
! 3160:
! 3161: cmdline_parser_release (&local_args_info);
! 3162: return (EXIT_FAILURE);
! 3163: }
! 3164:
! 3165: #ifndef CONFIG_FILE_LINE_SIZE
! 3166: #define CONFIG_FILE_LINE_SIZE 2048
! 3167: #endif
! 3168: #define ADDITIONAL_ERROR " in configuration file "
! 3169:
! 3170: #define CONFIG_FILE_LINE_BUFFER_SIZE (CONFIG_FILE_LINE_SIZE+3)
! 3171: /* 3 is for "--" and "=" */
! 3172:
! 3173: static int
! 3174: _cmdline_parser_configfile (char * const filename, int *my_argc)
! 3175: {
! 3176: FILE* file;
! 3177: char my_argv[CONFIG_FILE_LINE_BUFFER_SIZE+1];
! 3178: char linebuf[CONFIG_FILE_LINE_SIZE];
! 3179: int line_num = 0;
! 3180: int result = 0, equal;
! 3181: char *fopt, *farg;
! 3182: char *str_index;
! 3183: size_t len, next_token;
! 3184: char delimiter;
! 3185:
! 3186: if ((file = fopen(filename, "r")) == NULL)
! 3187: {
! 3188: fprintf (stderr, "%s: Error opening configuration file '%s'\n",
! 3189: CMDLINE_PARSER_PACKAGE, filename);
! 3190: return EXIT_FAILURE;
! 3191: }
! 3192:
! 3193: while ((fgets(linebuf, CONFIG_FILE_LINE_SIZE, file)) != NULL)
! 3194: {
! 3195: ++line_num;
! 3196: my_argv[0] = '\0';
! 3197: len = strlen(linebuf);
! 3198: if (len > (CONFIG_FILE_LINE_BUFFER_SIZE-1))
! 3199: {
! 3200: fprintf (stderr, "%s:%s:%d: Line too long in configuration file\n",
! 3201: CMDLINE_PARSER_PACKAGE, filename, line_num);
! 3202: result = EXIT_FAILURE;
! 3203: break;
! 3204: }
! 3205:
! 3206: /* find first non-whitespace character in the line */
! 3207: next_token = strspn (linebuf, " \t\r\n");
! 3208: str_index = linebuf + next_token;
! 3209:
! 3210: if ( str_index[0] == '\0' || str_index[0] == '#')
! 3211: continue; /* empty line or comment line is skipped */
! 3212:
! 3213: fopt = str_index;
! 3214:
! 3215: /* truncate fopt at the end of the first non-valid character */
! 3216: next_token = strcspn (fopt, " \t\r\n=");
! 3217:
! 3218: if (fopt[next_token] == '\0') /* the line is over */
! 3219: {
! 3220: farg = NULL;
! 3221: equal = 0;
! 3222: goto noarg;
! 3223: }
! 3224:
! 3225: /* remember if equal sign is present */
! 3226: equal = (fopt[next_token] == '=');
! 3227: fopt[next_token++] = '\0';
! 3228:
! 3229: /* advance pointers to the next token after the end of fopt */
! 3230: next_token += strspn (fopt + next_token, " \t\r\n");
! 3231:
! 3232: /* check for the presence of equal sign, and if so, skip it */
! 3233: if ( !equal )
! 3234: if ((equal = (fopt[next_token] == '=')))
! 3235: {
! 3236: next_token++;
! 3237: next_token += strspn (fopt + next_token, " \t\r\n");
! 3238: }
! 3239: str_index += next_token;
! 3240:
! 3241: /* find argument */
! 3242: farg = str_index;
! 3243: if ( farg[0] == '\"' || farg[0] == '\'' )
! 3244: { /* quoted argument */
! 3245: str_index = strchr (++farg, str_index[0] ); /* skip opening quote */
! 3246: if (! str_index)
! 3247: {
! 3248: fprintf
! 3249: (stderr,
! 3250: "%s:%s:%d: unterminated string in configuration file\n",
! 3251: CMDLINE_PARSER_PACKAGE, filename, line_num);
! 3252: result = EXIT_FAILURE;
! 3253: break;
! 3254: }
! 3255: }
! 3256: else
! 3257: { /* read up the remaining part up to a delimiter */
! 3258: next_token = strcspn (farg, " \t\r\n#\'\"");
! 3259: str_index += next_token;
! 3260: }
! 3261:
! 3262: /* truncate farg at the delimiter and store it for further check */
! 3263: delimiter = *str_index, *str_index++ = '\0';
! 3264:
! 3265: /* everything but comment is illegal at the end of line */
! 3266: if (delimiter != '\0' && delimiter != '#')
! 3267: {
! 3268: str_index += strspn(str_index, " \t\r\n");
! 3269: if (*str_index != '\0' && *str_index != '#')
! 3270: {
! 3271: fprintf
! 3272: (stderr,
! 3273: "%s:%s:%d: malformed string in configuration file\n",
! 3274: CMDLINE_PARSER_PACKAGE, filename, line_num);
! 3275: result = EXIT_FAILURE;
! 3276: break;
! 3277: }
! 3278: }
! 3279:
! 3280: noarg:
! 3281: if (!strcmp(fopt,"include")) {
! 3282: if (farg && *farg) {
! 3283: result = _cmdline_parser_configfile(farg, my_argc);
! 3284: } else {
! 3285: fprintf(stderr, "%s:%s:%d: include requires a filename argument.\n",
! 3286: CMDLINE_PARSER_PACKAGE, filename, line_num);
! 3287: }
! 3288: continue;
! 3289: }
! 3290: len = strlen(fopt);
! 3291: strcat (my_argv, len > 1 ? "--" : "-");
! 3292: strcat (my_argv, fopt);
! 3293: if (len > 1 && ((farg && *farg) || equal))
! 3294: strcat (my_argv, "=");
! 3295: if (farg && *farg)
! 3296: strcat (my_argv, farg);
! 3297: ++(*my_argc);
! 3298:
! 3299: cmd_line_list_tmp = (struct line_list *) malloc (sizeof (struct line_list));
! 3300: cmd_line_list_tmp->next = cmd_line_list;
! 3301: cmd_line_list = cmd_line_list_tmp;
! 3302: cmd_line_list->string_arg = gengetopt_strdup(my_argv);
! 3303: } /* while */
! 3304:
! 3305: if (file)
! 3306: fclose(file);
! 3307: return result;
! 3308: }
! 3309:
! 3310: int
! 3311: cmdline_parser_configfile (char * const filename,
! 3312: struct gengetopt_args_info *args_info,
! 3313: int override, int initialize, int check_required)
! 3314: {
! 3315: struct cmdline_parser_params params;
! 3316:
! 3317: params.override = override;
! 3318: params.initialize = initialize;
! 3319: params.check_required = check_required;
! 3320: params.check_ambiguity = 0;
! 3321: params.print_errors = 1;
! 3322:
! 3323: return cmdline_parser_config_file (filename, args_info, ¶ms);
! 3324: }
! 3325:
! 3326: int
! 3327: cmdline_parser_config_file (char * const filename,
! 3328: struct gengetopt_args_info *args_info,
! 3329: struct cmdline_parser_params *params)
! 3330: {
! 3331: int i, result;
! 3332: int my_argc = 1;
! 3333: char **my_argv_arg;
! 3334: char *additional_error;
! 3335:
! 3336: /* store the program name */
! 3337: cmd_line_list_tmp = (struct line_list *) malloc (sizeof (struct line_list));
! 3338: cmd_line_list_tmp->next = cmd_line_list;
! 3339: cmd_line_list = cmd_line_list_tmp;
! 3340: cmd_line_list->string_arg = gengetopt_strdup (CMDLINE_PARSER_PACKAGE);
! 3341:
! 3342: result = _cmdline_parser_configfile(filename, &my_argc);
! 3343:
! 3344: if (result != EXIT_FAILURE) {
! 3345: my_argv_arg = (char **) malloc((my_argc+1) * sizeof(char *));
! 3346: cmd_line_list_tmp = cmd_line_list;
! 3347:
! 3348: for (i = my_argc - 1; i >= 0; --i) {
! 3349: my_argv_arg[i] = cmd_line_list_tmp->string_arg;
! 3350: cmd_line_list_tmp = cmd_line_list_tmp->next;
! 3351: }
! 3352:
! 3353: my_argv_arg[my_argc] = 0;
! 3354:
! 3355: additional_error = (char *)malloc(strlen(filename) + strlen(ADDITIONAL_ERROR) + 1);
! 3356: strcpy (additional_error, ADDITIONAL_ERROR);
! 3357: strcat (additional_error, filename);
! 3358: result =
! 3359: cmdline_parser_internal (my_argc, my_argv_arg, args_info,
! 3360: params,
! 3361: additional_error);
! 3362:
! 3363: free (additional_error);
! 3364: free (my_argv_arg);
! 3365: }
! 3366:
! 3367: free_cmd_list();
! 3368: if (result == EXIT_FAILURE)
! 3369: {
! 3370: cmdline_parser_free (args_info);
! 3371: exit (EXIT_FAILURE);
! 3372: }
! 3373:
! 3374: return result;
! 3375: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>