diff --git a/data/locale/english.locale b/data/locale/english.locale index 08141e6bb..ead7c801b 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -569,6 +569,7 @@ networkmenu.broadcast Broadcast networkmenu.dhcp DHCP networkmenu.gateway default gateway networkmenu.head Network Settings +networkmenu.hostname Hostname networkmenu.ipaddress IP address networkmenu.mount NFS/CIFS/FTPFS networkmenu.nameserver name server diff --git a/lib/libnet/libnet.c b/lib/libnet/libnet.c index 0fb50ac77..789742777 100644 --- a/lib/libnet/libnet.c +++ b/lib/libnet/libnet.c @@ -205,9 +205,16 @@ char *netGetHostname( void ) void netSetHostname( char *host ) { + FILE * fp; + strcpy(hostbuf,host); hostis=1; sethostname(hostbuf,strlen(hostbuf)+1); + fp = fopen("/etc/hostname", "w"); + if(fp != NULL) { + fprintf(fp, "%s\n", hostbuf); + fclose(fp); + } } void netSetNameserver(const char * const ip) diff --git a/lib/libnet/network_interfaces.cpp b/lib/libnet/network_interfaces.cpp index 320e558ea..341b39628 100644 --- a/lib/libnet/network_interfaces.cpp +++ b/lib/libnet/network_interfaces.cpp @@ -368,6 +368,9 @@ bool setStaticAttributes(const std::string name, const bool automatic_start, con bool setDhcpAttributes(const std::string name, const bool automatic_start) { std::map attribute; + char hostname[100]; + if(gethostname(hostname, sizeof(hostname)) == 0) + attribute["hostname"] = hostname; return write_interface("/etc/network/interfaces", name, automatic_start, "inet", "dhcp", attribute); } diff --git a/src/neutrino_menue.cpp b/src/neutrino_menue.cpp index 9345e3bcc..28da162f6 100644 --- a/src/neutrino_menue.cpp +++ b/src/neutrino_menue.cpp @@ -1874,18 +1874,23 @@ void CNeutrinoApp::InitNetworkSettings(CMenuWidget &networkSettings) CSectionsdConfigNotifier* sectionsdConfigNotifier = new CSectionsdConfigNotifier; CStringInputSMS * networkSettings_NtpServer = new CStringInputSMS(LOCALE_NETWORKMENU_NTPSERVER, &g_settings.network_ntpserver, 30, LOCALE_NETWORKMENU_NTPSERVER_HINT1, LOCALE_NETWORKMENU_NTPSERVER_HINT2, "abcdefghijklmnopqrstuvwxyz0123456789-. ", sectionsdConfigNotifier); + CStringInput * networkSettings_NtpRefresh = new CStringInput(LOCALE_NETWORKMENU_NTPREFRESH, &g_settings.network_ntprefresh, 3,LOCALE_NETWORKMENU_NTPREFRESH_HINT1, LOCALE_NETWORKMENU_NTPREFRESH_HINT2 , "0123456789 ", sectionsdConfigNotifier); + CStringInputSMS * networkSettings_Hostname = new CStringInputSMS(LOCALE_NETWORKMENU_HOSTNAME, &networkConfig.hostname, 30, LOCALE_NETWORKMENU_NTPSERVER_HINT1, LOCALE_NETWORKMENU_NTPSERVER_HINT2, "abcdefghijklmnopqrstuvwxyz0123456789-. "); + CMenuForwarder *m0 = new CMenuForwarder(LOCALE_NETWORKMENU_SETUPNOW, true, NULL, this, "network", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); CMenuForwarder *m1 = new CMenuForwarder(LOCALE_NETWORKMENU_IPADDRESS , networkConfig.inet_static, networkConfig.address , networkSettings_NetworkIP ); CMenuForwarder *m2 = new CMenuForwarder(LOCALE_NETWORKMENU_NETMASK , networkConfig.inet_static, networkConfig.netmask , networkSettings_NetMask ); CMenuForwarder *m3 = new CMenuForwarder(LOCALE_NETWORKMENU_BROADCAST , networkConfig.inet_static, networkConfig.broadcast , networkSettings_Broadcast ); CMenuForwarder *m4 = new CMenuForwarder(LOCALE_NETWORKMENU_GATEWAY , networkConfig.inet_static, networkConfig.gateway , networkSettings_Gateway ); CMenuForwarder *m5 = new CMenuForwarder(LOCALE_NETWORKMENU_NAMESERVER, networkConfig.inet_static, networkConfig.nameserver, networkSettings_NameServer); - CMenuForwarder *m6 = new CMenuForwarder( LOCALE_NETWORKMENU_NTPSERVER, true , g_settings.network_ntpserver, networkSettings_NtpServer ); - CMenuForwarder *m7 = new CMenuForwarder( LOCALE_NETWORKMENU_NTPREFRESH, true , g_settings.network_ntprefresh, networkSettings_NtpRefresh ); + CMenuForwarder *m6 = new CMenuForwarder(LOCALE_NETWORKMENU_NTPSERVER, true , g_settings.network_ntpserver, networkSettings_NtpServer ); + CMenuForwarder *m7 = new CMenuForwarder(LOCALE_NETWORKMENU_NTPREFRESH, true , g_settings.network_ntprefresh, networkSettings_NtpRefresh ); - CDHCPNotifier* dhcpNotifier = new CDHCPNotifier(m1,m2,m3,m4,m5); + CMenuForwarder *m8 = new CMenuForwarder(LOCALE_NETWORKMENU_HOSTNAME, !networkConfig.inet_static, networkConfig.hostname, networkSettings_Hostname); + + CDHCPNotifier* dhcpNotifier = new CDHCPNotifier(m1,m2,m3,m4,m5, m8); network_automatic_start = networkConfig.automatic_start ? 1 : 0; CMenuOptionChooser* oj = new CMenuOptionChooser(LOCALE_NETWORKMENU_SETUPONSTARTUP, &network_automatic_start, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); @@ -1903,6 +1908,7 @@ void CNeutrinoApp::InitNetworkSettings(CMenuWidget &networkSettings) network_dhcp = networkConfig.inet_static ? 0 : 1; oj = new CMenuOptionChooser(LOCALE_NETWORKMENU_DHCP, &network_dhcp, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, dhcpNotifier); networkSettings.addItem(oj); + networkSettings.addItem(m8); networkSettings.addItem(GenericMenuSeparatorLine); networkSettings.addItem( m1); diff --git a/src/system/configure_network.cpp b/src/system/configure_network.cpp index 8b3dbfa7d..cb9b75180 100644 --- a/src/system/configure_network.cpp +++ b/src/system/configure_network.cpp @@ -45,6 +45,8 @@ void CNetworkConfig::init_vars(void) char router[16]; char ip[16]; + hostname = netGetHostname(); + netGetDefaultRoute(router); gateway = router; netGetIP((char *) "eth0", ip, mask, _broadcast); @@ -61,6 +63,7 @@ void CNetworkConfig::copy_to_orig(void) orig_broadcast = broadcast; orig_gateway = gateway; orig_inet_static = inet_static; + orig_hostname = hostname; } bool CNetworkConfig::modified_from_orig(void) @@ -71,6 +74,7 @@ bool CNetworkConfig::modified_from_orig(void) (orig_netmask != netmask ) || (orig_broadcast != broadcast ) || (orig_gateway != gateway ) || + (orig_hostname != hostname ) || (orig_inet_static != inet_static ) ); } @@ -79,6 +83,9 @@ void CNetworkConfig::commitConfig(void) { if (modified_from_orig()) { + if(orig_hostname != hostname) + netSetHostname((char *) hostname.c_str()); + copy_to_orig(); if (inet_static) diff --git a/src/system/configure_network.h b/src/system/configure_network.h index be90eca74..3fd94d7d3 100644 --- a/src/system/configure_network.h +++ b/src/system/configure_network.h @@ -33,6 +33,7 @@ class CNetworkConfig std::string orig_broadcast; std::string orig_gateway; std::string orig_nameserver; + std::string orig_hostname; bool orig_inet_static; void copy_to_orig(void); @@ -46,6 +47,7 @@ class CNetworkConfig std::string broadcast; std::string gateway; std::string nameserver; + std::string hostname; bool inet_static; CNetworkConfig(void); diff --git a/src/system/locals.h b/src/system/locals.h index 0fb38b485..0d3c44863 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -767,6 +767,7 @@ typedef enum { LOCALE_NETWORKMENU_DHCP, LOCALE_NETWORKMENU_GATEWAY, LOCALE_NETWORKMENU_HEAD, + LOCALE_NETWORKMENU_HOSTNAME, LOCALE_NETWORKMENU_IPADDRESS, LOCALE_NETWORKMENU_MOUNT, LOCALE_NETWORKMENU_NAMESERVER, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index ec67ebc57..7232445ca 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -767,6 +767,7 @@ const char *locale_real_names[] = { "networkmenu.dhcp", "networkmenu.gateway", "networkmenu.head", + "networkmenu.hostname", "networkmenu.ipaddress", "networkmenu.mount", "networkmenu.nameserver", diff --git a/src/system/setting_helpers.cpp b/src/system/setting_helpers.cpp index 93912b205..03387696e 100644 --- a/src/system/setting_helpers.cpp +++ b/src/system/setting_helpers.cpp @@ -206,13 +206,14 @@ bool CTP_scanNotifier::changeNotify(const neutrino_locale_t, void * Data) } return true; } -CDHCPNotifier::CDHCPNotifier( CMenuForwarder* a1, CMenuForwarder* a2, CMenuForwarder* a3, CMenuForwarder* a4, CMenuForwarder* a5) +CDHCPNotifier::CDHCPNotifier( CMenuForwarder* a1, CMenuForwarder* a2, CMenuForwarder* a3, CMenuForwarder* a4, CMenuForwarder* a5, CMenuForwarder* a6) { toDisable[0] = a1; toDisable[1] = a2; toDisable[2] = a3; toDisable[3] = a4; toDisable[4] = a5; + toEnable[0] = a6; } @@ -221,6 +222,8 @@ bool CDHCPNotifier::changeNotify(const neutrino_locale_t, void * data) CNeutrinoApp::getInstance()->networkConfig.inet_static = ((*(int*)(data)) == 0); for(int x=0;x<5;x++) toDisable[x]->setActive(CNeutrinoApp::getInstance()->networkConfig.inet_static); + + toEnable[0]->setActive(!CNeutrinoApp::getInstance()->networkConfig.inet_static); return true; } diff --git a/src/system/setting_helpers.h b/src/system/setting_helpers.h index 9c932c6f7..7b83e8587 100644 --- a/src/system/setting_helpers.h +++ b/src/system/setting_helpers.h @@ -82,10 +82,12 @@ class CDHCPNotifier : public CChangeObserver { private: CMenuForwarder* toDisable[5]; + CMenuForwarder* toEnable[1]; public: - CDHCPNotifier( CMenuForwarder*, CMenuForwarder*, CMenuForwarder*, CMenuForwarder*, CMenuForwarder*); + CDHCPNotifier( CMenuForwarder*, CMenuForwarder*, CMenuForwarder*, CMenuForwarder*, CMenuForwarder*, CMenuForwarder*); bool changeNotify(const neutrino_locale_t, void * data); }; + class CStreamingNotifier : public CChangeObserver { private: