⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 omshell.c

📁 open source dhcp server client etc...
💻 C
📖 第 1 页 / 共 2 页
字号:
							    secret.data,							    secret.len);			if (status != ISC_R_SUCCESS) {			    fprintf (stderr,				     "Cannot create authenticator: %s\n",				     isc_result_totext (status));			    break;			}		    }		    memset (&connection, 0, sizeof connection);		    status = dhcpctl_connect (&connection,					      server, port, authenticator);		    if (status != ISC_R_SUCCESS) {			    fprintf (stderr, "dhcpctl_connect: %s\n",				     isc_result_totext (status));			    break;		    }		    connected = 1;		    break;		  case TOKEN_NEW:		    token = next_token (&val, (unsigned *)0, cfile);		    if ((!is_identifier (token) && token != STRING)) {			    printf ("usage: new <object-type>\n");			    break;		    }		    		    if (oh) {			    printf ("an object is already open.\n");			    skip_to_semi (cfile);			    break;		    }		    		    if (!connected) {			    printf ("not connected.\n");			    skip_to_semi (cfile);			    break;		    }		    status = dhcpctl_new_object (&oh, connection, val);		    if (status != ISC_R_SUCCESS) {			    printf ("can't create object: %s\n",				    isc_result_totext (status));			    break;		    }		    		    token = next_token (&val, (unsigned *)0, cfile);		    if (token != END_OF_FILE && token != EOL) {			    printf ("usage: new <object-type>\n");			    skip_to_semi (cfile);			    break;		    }		    break;		  case TOKEN_CLOSE:		    token = next_token (&val, (unsigned *)0, cfile);		    if (token != END_OF_FILE && token != EOL) {			    printf ("usage: close\n");			    skip_to_semi (cfile);			    break;		    }		    if (!connected) {			    printf ("not connected.\n");			    skip_to_semi (cfile);			    break;		    }		    omapi_object_dereference (&oh, MDL);		    		    break;		  case TOKEN_SET:		    token = next_token (&val, (unsigned *)0, cfile);		    if ((!is_identifier (token) && token != STRING)) {			  set_usage:			    printf ("usage: set <name> = <value>\n");			    skip_to_semi (cfile);			    break;		    }		    		    if (oh == NULL) {			    printf ("no open object.\n");			    skip_to_semi (cfile);			    break;		    }		    		    if (!connected) {			    printf ("not connected.\n");			    skip_to_semi (cfile);			    break;		    }		    s1[0] = '\0';		    strncat (s1, val, sizeof(s1)-1);		    		    token = next_token (&val, (unsigned *)0, cfile);		    if (token != EQUAL)			    goto set_usage;		    token = next_token (&val, (unsigned *)0, cfile);		    switch (token) {			  case STRING:			    dhcpctl_set_string_value (oh, val, s1);			    token = next_token (&val, (unsigned *)0, cfile);			    break;			    			  case NUMBER:			    strcpy (buf, val);			    token = peek_token (&val, (unsigned *)0, cfile);			    /* Colon-seperated hex list? */			    if (token == COLON)				goto cshl;			    else if (token == DOT) {				s = buf;				val = buf;				do {				    int intval = atoi (val);				    if (intval > 255) {					parse_warn (cfile,						    "dotted octet > 255: %s",						    val);					skip_to_semi (cfile);					goto badnum;				    }				    *s++ = intval;				    token = next_token (&val,							(unsigned *)0, cfile);				    if (token != DOT)					    break;				    token = next_token (&val,							(unsigned *)0, cfile);				} while (token == NUMBER);				dhcpctl_set_data_value (oh, buf,							(unsigned)(s - buf),							s1);				break;			    }			    dhcpctl_set_int_value (oh, atoi (buf), s1);			    token = next_token (&val, (unsigned *)0, cfile);			  badnum:			    break;			    			  case NUMBER_OR_NAME:			    strcpy (buf, val);			  cshl:			    s = buf;			    val = buf;			    do {				convert_num (cfile, (unsigned char *)s,					     val, 16, 8);				++s;				token = next_token (&val,						    (unsigned *)0, cfile);				if (token != COLON)				    break;				token = next_token (&val,						    (unsigned *)0, cfile);			    } while (token == NUMBER ||				     token == NUMBER_OR_NAME);			    dhcpctl_set_data_value (oh, buf,						    (unsigned)(s - buf), s1);			    break;			  default:			    printf ("invalid value.\n");			    skip_to_semi (cfile);		    }		    		    if (token != END_OF_FILE && token != EOL)			    goto set_usage;		    break;		    		  case UNSET:		    token = next_token (&val, (unsigned *)0, cfile);		    if ((!is_identifier (token) && token != STRING)) {			  unset_usage:			    printf ("usage: unset <name>\n");			    skip_to_semi (cfile);			    break;		    }		    		    if (!oh) {			    printf ("no open object.\n");			    skip_to_semi (cfile);			    break;		    }		    		    if (!connected) {			    printf ("not connected.\n");			    skip_to_semi (cfile);			    break;		    }		    s1[0] = '\0';		    strncat (s1, val, sizeof(s1)-1);		    		    token = next_token (&val, (unsigned *)0, cfile);		    if (token != END_OF_FILE && token != EOL)			    goto unset_usage;		    dhcpctl_set_null_value (oh, s1);		    break;			    		  case TOKEN_CREATE:		  case TOKEN_OPEN:		    i = token;		    token = next_token (&val, (unsigned *)0, cfile);		    if (token != END_OF_FILE && token != EOL) {			    printf ("usage: %s\n", val);			    skip_to_semi (cfile);			    break;		    }		    		    if (!connected) {			    printf ("not connected.\n");			    skip_to_semi (cfile);			    break;		    }		    if (!oh) {			    printf ("you must make a new object first!\n");			    skip_to_semi (cfile);			    break;		    }		    if (i == TOKEN_CREATE)			    i = DHCPCTL_CREATE | DHCPCTL_EXCL;		    else			    i = 0;		    		    status = dhcpctl_open_object (oh, connection, i);		    if (status == ISC_R_SUCCESS)			    status = dhcpctl_wait_for_completion				    (oh, &waitstatus);		    if (status == ISC_R_SUCCESS)			    status = waitstatus;		    if (status != ISC_R_SUCCESS) {			    printf ("can't open object: %s\n",				    isc_result_totext (status));			    break;		    }		    		    break;		  case UPDATE:		    token = next_token (&val, (unsigned *)0, cfile);		    if (token != END_OF_FILE && token != EOL) {			    printf ("usage: %s\n", val);			    skip_to_semi (cfile);			    break;		    }		    		    if (!connected) {			    printf ("not connected.\n");			    skip_to_semi (cfile);			    break;		    }		    if (!oh) {			    printf ("you haven't opened an object yet!\n");			    skip_to_semi (cfile);			    break;		    }		    status = dhcpctl_object_update(connection, oh);		    if (status == ISC_R_SUCCESS)			    status = dhcpctl_wait_for_completion				    (oh, &waitstatus);		    if (status == ISC_R_SUCCESS)			    status = waitstatus;		    if (status != ISC_R_SUCCESS) {			    printf ("can't update object: %s\n",				    isc_result_totext (status));			    break;		    }		    		    break;		  case REMOVE:		    token = next_token (&val, (unsigned *)0, cfile);		    if (token != END_OF_FILE && token != EOL) {			    printf ("usage: remove\n");			    skip_to_semi (cfile);			    break;		    }		    		    if (!connected) {			    printf ("not connected.\n");			    break;		    }		    if (!oh) {			    printf ("no object.\n");			    break;		    }		    status = dhcpctl_object_remove(connection, oh);		    if (status == ISC_R_SUCCESS)			    status = dhcpctl_wait_for_completion				    (oh, &waitstatus);		    if (status == ISC_R_SUCCESS)			    status = waitstatus;		    if (status != ISC_R_SUCCESS) {			    printf ("can't destroy object: %s\n",				    isc_result_totext (status));			    break;		    }		    omapi_object_dereference (&oh, MDL);		    break;		  case REFRESH:		    token = next_token (&val, (unsigned *)0, cfile);		    if (token != END_OF_FILE && token != EOL) {			    printf ("usage: refresh\n");			    skip_to_semi (cfile);			    break;		    }		    		    if (!connected) {			    printf ("not connected.\n");			    break;		    }		    if (!oh) {			    printf ("no object.\n");			    break;		    }		    status = dhcpctl_object_refresh(connection, oh);		    if (status == ISC_R_SUCCESS)			    status = dhcpctl_wait_for_completion				    (oh, &waitstatus);		    if (status == ISC_R_SUCCESS)			    status = waitstatus;		    if (status != ISC_R_SUCCESS) {			    printf ("can't refresh object: %s\n",				    isc_result_totext (status));			    break;		    }		    		    break;	    }	} while (1);	exit (0);}/* Sigh */isc_result_t dhcp_set_control_state (control_object_state_t oldstate,				     control_object_state_t newstate){	return ISC_R_SUCCESS;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -