Example #1
0
int cmd_ifconfig( int argc, char ** argv )
{
	unsigned char IP[16];
		
	printf_P( PSTR(	"IP:        %s\r\n") , iptostr ( myIP, IP ) );		
	printf_P( PSTR(	"Netmask:   %s\r\n") , 		iptostr ( Netmask, IP ) );
	printf_P( PSTR(	"Gateway:   %s\r\n") , iptostr ( Gateway, IP ) );
	#ifdef DNS
		printf_P( PSTR(	"DNS:       %s\r\n") , iptostr ( DNSserver, IP ) );
	#endif
	printf_P( PSTR( "\r\nHW-Adr: %02x:%02x:%02x:%02x:%02x:%02x\r\n\r\n"),mymac[0],mymac[1],mymac[2],mymac[3],mymac[4],mymac[5]);	
}
Example #2
0
/*
 *    DNS event related code
 */
static void dns_event_success(struct resolve *rp, int type)
{
  if (!rp)
    return;

  if (type == T_PTR) {
    debug2("DNS resolved %s to %s", iptostr(rp->ip), rp->hostn);
    call_hostbyip(ntohl(rp->ip), rp->hostn, 1);
  } else if (type == T_A) {
    debug2("DNS resolved %s to %s", rp->hostn, iptostr(rp->ip));
    call_ipbyhost(rp->hostn, ntohl(rp->ip), 1);
  }
}
Example #3
0
void eof_dcc_dnswait(int idx)
{
  putlog(LOG_MISC, "*", "Lost connection while resolving hostname [%s/%d]",
         iptostr(&dcc[idx].sockname.addr.sa), dcc[idx].port);
  killsock(dcc[idx].sock);
  lostdcc(idx);
}
Example #4
0
static void dns_event_failure(struct resolve *rp, int type)
{
  if (!rp)
    return;

  if (type == T_PTR) {
    static char s[UHOSTLEN];

    debug1("DNS resolve failed for %s", iptostr(rp->ip));
    strcpy(s, iptostr(rp->ip));
    call_hostbyip(ntohl(rp->ip), s, 0);
  } else if (type == T_A) {
    debug1("DNS resolve failed for %s", rp->hostn);
    call_ipbyhost(rp->hostn, 0, 0);
  } else
    debug2("DNS resolve failed for unknown %s / %s", iptostr(rp->ip),
           nonull(rp->hostn));
  return;
}
Example #5
0
void block_dns_hostbyip(IP ip)
{
  struct hostent *hp;
  unsigned long addr = my_htonl(ip);
  static char s[UHOSTLEN];

  Context;
  if (!setjmp(alarmret)) {
    alarm(resolve_timeout);
    hp = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET);
    alarm(0);
    if (hp) {
      strncpy(s, hp->h_name, UHOSTLEN - 1);
      s[UHOSTLEN - 1] = 0;
    } else
      strcpy(s, iptostr(addr));
  } else {
    hp = NULL;
    strcpy(s, iptostr(addr));
  }
  /* Call hooks. */
  call_hostbyip(ip, s, hp ? 1 : 0);
  Context;
}
Example #6
0
static void dns_tcl_iporhostres(IP ip, char *hostn, int ok, void *other)
{
  devent_tclinfo_t *tclinfo = (devent_tclinfo_t *) other;
  
  Context;
  if (Tcl_VarEval(interp, tclinfo->proc, " ", iptostr(my_htonl(ip)), " ",
		  hostn, ok ? " 1" : " 0", tclinfo->paras, NULL) == TCL_ERROR)
    putlog(LOG_MISC, "*", DCC_TCLERROR, tclinfo->proc, interp->result);

  /* Free the memory. It will be unused after this event call. */
  nfree(tclinfo->proc);
  if (tclinfo->paras)
    nfree(tclinfo->paras);
  nfree(tclinfo);
}
Example #7
0
/* Show list of current dcc's to a dcc-chatter
 * positive value: idx given -- negative value: sock given
 */
void tell_dcc(int zidx)
{
  int i, j, nicklen = 0;
  char other[160];
  char format[81];

  /* calculate max nicklen */
  for (i = 0; i < dcc_total; i++) {
    if (strlen(dcc[i].nick) > nicklen)
      nicklen = strlen(dcc[i].nick);
  }
  if (nicklen < 9)
    nicklen = 9;

  j = 60 - nicklen;
  if (j < 15)
    j = 15;
  if (j > 40)
    j = 40;
    
  egg_snprintf(format, sizeof format, "%%-3s %%-%u.%us %%-6s %%-%u.%us %%s\n",
               j, j, nicklen, nicklen);
  dprintf(zidx, format, "IDX", "ADDR", "+ PORT", "NICK", "TYPE  INFO");
  dprintf(zidx, format, "---",
          "------------------------------------------------------", "------",
          "--------------------------------", "----- ---------");
  egg_snprintf(format, sizeof format, "%%-3d %%-%u.%us %%c%%5d %%-%u.%us %%s\n",
               j, j, nicklen, nicklen);

  /* Show server */
  for (i = 0; i < dcc_total; i++) {
    if (dcc[i].type && dcc[i].type->display)
      dcc[i].type->display(i, other);
    else {
      sprintf(other, "?:%lX  !! ERROR !!", (long) dcc[i].type);
      break;
    }
      dprintf(zidx, format, dcc[i].sock, iptostr(&dcc[i].sockname.addr.sa),
#ifdef TLS
              dcc[i].ssl ? '+' : ' ', dcc[i].port, dcc[i].nick, other);
#else
              ' ', dcc[i].port, dcc[i].nick, other);
#endif
  }
}
Example #8
0
static void server_resolve_success(int servidx)
{
    int oldserv = dcc[servidx].u.dns->ibuf;
    char s[121], pass[121];

    resolvserv = 0;
    dcc[servidx].addr = dcc[servidx].u.dns->ip;
    strcpy(pass, dcc[servidx].u.dns->cbuf);
    changeover_dcc(servidx, &SERVER_SOCKET, 0);
    serv = open_telnet(iptostr(htonl(dcc[servidx].addr)), dcc[servidx].port);
    if (serv < 0) {
        neterror(s);
        putlog(LOG_SERV, "*", "%s %s (%s)", IRC_FAILEDCONNECT, dcc[servidx].host,
               s);
        lostdcc(servidx);
        if (oldserv == curserv && !never_give_up)
            fatal("NO SERVERS WILL ACCEPT MY CONNECTION.", 0);
    } else {
        dcc[servidx].sock = serv;
        /* Queue standard login */
        dcc[servidx].timeval = now;
        SERVER_SOCKET.timeout_val = &server_timeout;
        /* Another server may have truncated it, so use the original */
        strcpy(botname, origbotname);
        /* Start alternate nicks from the beginning */
        altnick_char = 0;
        if (pass[0])
            dprintf(DP_MODE, "PASS %s\n", pass);
        dprintf(DP_MODE, "NICK %s\n", botname);

        rmspace(botrealname);
        if (botrealname[0] == 0)
            strcpy(botrealname, "/msg LamestBot hello");
        dprintf(DP_MODE, "USER %s . . :%s\n", botuser, botrealname);

        /* Wait for async result now. */
    }
}
Example #9
0
static void dns_tcl_iporhostres(sockname_t *ip, char *hostn, int ok, void *other)
{
  devent_tclinfo_t *tclinfo = (devent_tclinfo_t *) other;
  Tcl_DString list;

  Tcl_DStringInit(&list);
  Tcl_DStringAppendElement(&list, tclinfo->proc);
  Tcl_DStringAppendElement(&list, iptostr(&ip->addr.sa));
  Tcl_DStringAppendElement(&list, hostn);
  Tcl_DStringAppendElement(&list, ok ? "1" : "0");

  if (tclinfo->paras) {
    EGG_CONST char *argv[2];
    char *output;

    argv[0] = Tcl_DStringValue(&list);
    argv[1] = tclinfo->paras;
    output = Tcl_Concat(2, argv);

    if (Tcl_Eval(interp, output) == TCL_ERROR) {
      putlog(LOG_MISC, "*", DCC_TCLERROR, tclinfo->proc, tcl_resultstring());
      Tcl_BackgroundError(interp);
    }
    Tcl_Free(output);
  } else if (Tcl_Eval(interp, Tcl_DStringValue(&list)) == TCL_ERROR) {
    putlog(LOG_MISC, "*", DCC_TCLERROR, tclinfo->proc, tcl_resultstring());
    Tcl_BackgroundError(interp);
  }

  Tcl_DStringFree(&list);

  nfree(tclinfo->proc);
  if (tclinfo->paras)
    nfree(tclinfo->paras);
  nfree(tclinfo);
}
Example #10
0
/*------------------------------------------------------------------------------------------------------------*/
unsigned int NTP_GetTime( unsigned long IP, char * dnsbuffer, char timedif )
	{
		char buffer[ NTP_SIZE ];
		int i=0, socket, timer, retval = NTP_ERROR;

#if defined(NTP_DEBUG)
		char String[30];
#endif
		
		union DATE ZeitInSek;
		
		struct TIME time;

#if defined(NTP_DEBUG)
		printf_P( PSTR("Oeffne neues Socket.\r\n") );
#endif		
		if ( IP == 0 )
		{
#ifdef UDP
	#ifdef DNS
			if ( dnsbuffer != 0 )
			{
				// Host nach IP auflösen
				IP = DNS_ResolveName( dnsbuffer );
				// könnte er aufgelöst werden ?
				if ( IP == DNS_NO_ANSWER ) return( NTP_ERROR );
			}
			else
	#endif
#endif
			return( NTP_ERROR );
		}
		// UDP-socket aufmachen für Bootp
		socket = UDP_RegisterSocket( IP , 37 , NTP_SIZE , buffer);
		// Wenn Fehler aufgetretten, return
		if ( socket == UDP_SOCKET_ERROR ) 
		{
			return ( NTP_ERROR );
		}

#if defined(NTP_DEBUG)
			printf_P( PSTR("UDP-Socket aufgemacht zur %s.\r\n"), iptostr( IP, String ) );
#endif
		// leeres UDP-Packet an Time-server senden
		UDP_SendPacket( socket, 0 , buffer);

#if defined(NTP_DEBUG)
		printf_P( PSTR("UDP-Packet gesendet.\r\n"));
#endif
		// Timeout-counter reservieren und starten
		timer = CLOCK_RegisterCountdowntimer();
		if ( timer == CLOCK_FAILED ) return ( NTP_ERROR );

		CLOCK_SetCountdownTimer( timer , 500, MSECOUND );

#if defined(NTP_DEBUG)
		printf_P( PSTR("Warte auf Antwort."));
#endif
		// Auf Antwort des Timer-Servers warten
		while( 1 )
		{
			// Wenn Time-Server geantwortet hat inerhalb des Timeouts, hier weiter
			if ( UDP_GetSocketState( socket ) == UDP_SOCKET_BUSY && ( CLOCK_GetCountdownTimer( timer ) != 0 ) )
			{
				// Sind 4 Bytes empfangen worden, wenn ja okay, sonst fehler
				if ( UDP_GetByteInBuffer( socket ) >= 4 )
				{				
					// Daten kopieren und Zeit ausrechnen
					for ( i = 0 ; i < 4 ; i++ ) 
						ZeitInSek.DateByte[ i ] = buffer[ 3 - i ];

					CLOCK_GetTime( &time );

					time.time = ZeitInSek.Date;
					time.timezone = timedif;
					
					CLOCK_decode_time( &time );

					CLOCK_SetTime( &time );
					
					retval = NTP_OK;
#if defined(NTP_DEBUG)
					printf_P( PSTR("Antwort erhalten.\r\n"));
#endif
					// fertisch
					break;
				}
				else
				{
#if defined(NTP_DEBUG)
					printf_P( PSTR("Falsches Format der Antwort.\r\n"));
#endif
					retval = NTP_ERROR;
					break;
				}
			}
			// Timeout erreicht ? Wenn ja Fehler.
			if ( CLOCK_GetCountdownTimer( timer ) == 0 )
			{
#if defined(NTP_DEBUG)
				printf_P( PSTR("Timeout beun warten auf Antwort.\r\n"));
#endif
				retval = NTP_ERROR;
				break;
			}
		}
		// timer freigeben und UDP-Socket schliessen
		CLOCK_ReleaseCountdownTimer( timer );
		UDP_CloseSocket( socket );
#if defined(NTP_DEBUG)
		printf_P( PSTR("UDP-Socket geschlossen.\r\n"));
#endif
		return( retval );
	}
Example #11
0
/*------------------------------------------------------------------------------------------------------------*/
void cgi_network( void * pStruct )
{
	struct HTTP_REQUEST * http_request;
	http_request = (struct HTTP_REQUEST *) pStruct;
	
	unsigned char IP[32];

/*	printf_P( PSTR(		"<HTML>\r\n"
						"<HEAD>\r\n"
						"<TITLE>network</TITLE>\r\n"
						"</HEAD>\r\n"
						" <BODY>\r\n"));
*/
	cgi_PrintHttpheaderStart();

	if ( http_request->argc == 0 )
	{
					   
		printf_P( PSTR( "<pre>\r\n") );
#ifdef TELNETSERVER
		TELNET_runcmdextern_P( PSTR("ifconfig") );
		TELNET_runcmdextern_P( PSTR("stats") );
#endif		
		printf_P( PSTR( "</pre>\r\n") );
	}
	else if( PharseCheckName_P( http_request, PSTR("config") ) )
	{	
		
		printf_P( PSTR(	"<form action=\"network.cgi\">\r"
					   	" <table border=\"0\" cellpadding=\"5\" cellspacing=\"0\">" ));
#ifdef DHCP
		readConfig_P( PSTR("DHCP"), IP );
  		printf_P( PSTR( "  <tr>\r"
					   	"   <td align=\"right\">DHCP aktivieren</td>"
					    "   <td><input type=\"checkbox\" name=\"DHCP\" value=\"on\" " )); 
		if ( !strcmp_P( IP, PSTR("on") ) )
						printf_P( PSTR("checked"));
		printf_P( PSTR(	"></td>\r"
  						"  </tr>\r") );
#endif
		if ( readConfig_P ( PSTR("IP"), IP ) != 1 )
			iptostr ( myIP, IP );
  		printf_P( PSTR(	"  <tr>\r"
					   	"   <td align=\"right\">IP-Adresse</td>"
  						"   <td><input name=\"IP\" type=\"text\" size=\"15\" value=\"%s\" maxlength=\"15\"></td>"
  						"  </tr>\r") , IP );
		if ( readConfig_P ( PSTR("MASK"), IP ) != 1 )
			iptostr ( Netmask, IP );		
  		printf_P( PSTR(	"  <tr>\r"
					   	"   <td align=\"right\">Netzwerkmaske</td>"
  						"   <td><input name=\"MASK\" type=\"text\" size=\"15\" value=\"%s\" maxlength=\"15\"></td>"
  						"  </tr>\r") , IP );
		if ( readConfig_P ( PSTR("GATE"), IP ) != 1 )
			iptostr ( Gateway, IP );		
  		printf_P( PSTR(	"  <tr>\r"
					   	"   <td align=\"right\">Gateway</td>"
						"   <td><input name=\"GATE\" type=\"text\" size=\"15\" value=\"%s\" maxlength=\"15\"></td>"
  						"  </tr>\r") , IP );
#ifdef DNS
		if ( readConfig_P ( PSTR("DNS"), IP ) != 1 )
			iptostr ( DNSserver, IP );		
		printf_P( PSTR(	"  <tr>\r"
					   	"   <td align=\"right\">DNS-Server</td>"
						"   <td><input name=\"DNS\" type=\"text\" size=\"15\" value=\"%s\" maxlength=\"15\"></td>"
  						"  </tr>\r" ), IP );
#endif
		readConfig_P( PSTR("ETH_FLDX"), IP );
  		printf_P( PSTR( "  <tr>\r"
					   	"   <td align=\"right\">Fullduplex aktivieren</td>"
					    "   <td><input type=\"checkbox\" name=\"ETH_FLDX\" value=\"on\" " )); 
		if ( !strcmp_P( IP, PSTR("on") ) )
						printf_P( PSTR("checked"));
		printf_P( PSTR(	"></td>\r"
  						"  </tr>\r") );

		if ( readConfig_P ( PSTR("MAC"), IP ) != 1 )
			mactostr( mymac, IP );
  		printf_P( PSTR(	"  <tr>\r"
					   	"   <td align=\"right\">Hardware-MAC</td>"
						"   <td><input name=\"MAC\" type=\"text\" size=\"17\" value=\"%s\" maxlength=\"17\"></td>"
  						"  </tr>\r"
		  				"  <tr>\r"
   						"   <td></td><td><input type=\"submit\" value=\" Einstellung &Uuml;bernehmen \"></td>"
  						"  </tr>\r"
					   	" </table>\r"
						"</form>") , IP );
	}
	else
	{
#ifdef DHCP
		if ( PharseCheckName_P( http_request, PSTR("DHCP") ) )
			changeConfig_P( PSTR("DHCP"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("DHCP") ) ] );
		else
			changeConfig_P( PSTR("DHCP"), "off" );
#endif
		if ( PharseCheckName_P( http_request, PSTR("IP") ) )
			changeConfig_P( PSTR("IP"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("IP") ) ] );
		if ( PharseCheckName_P( http_request, PSTR("MASK") ) )
			changeConfig_P( PSTR("MASK"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("MASK") ) ] );
		if ( PharseCheckName_P( http_request, PSTR("GATE") ) )
			changeConfig_P( PSTR("GATE"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("GATE") ) ] );
		#ifdef DNS
		if ( PharseCheckName_P( http_request, PSTR("DNS") ) )
			changeConfig_P( PSTR("DNS"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("DNS") ) ] );
		#endif
		if ( PharseCheckName_P( http_request, PSTR("MAC") ) )
			changeConfig_P( PSTR("MAC"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("MAC") ) ] );
		if ( PharseCheckName_P( http_request, PSTR("ETH_FLDX") ) )
			changeConfig_P( PSTR("ETH_FLDX"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("ETH_FLDX") ) ] );
		else
			changeConfig_P( PSTR("ETH_FLDX"), "off" );
		printf_P( PSTR("Einstellungen uebernommen!\r\n"));
	}
	
	cgi_PrintHttpheaderEnd();
	
/*	printf_P( PSTR( " </BODY>\r\n"
					"</HTML>\r\n"
					"\r\n"), IP);
*/
}