/* * GProFTPD - A GTK+ frontend for the ProFTPD standalone server. * Copyright (C) 2001 - 2006 Magnus Loef (Magnus-swe) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * */ #include #include #include #include #include "widgets.h" #include "gettext.h" #include "reread_conf.h" #include "show_info.h" #include "apply_server_settings.h" #include "allocate.h" #include "populate_servers.h" #include "populate_server_settings.h" #include "select_first_server.h" #include "populate_conf_tab.h" extern char global_server_address[1024]; extern char global_server_port[1024]; extern char global_server_type[1024]; extern int activated; extern int use_tls; extern int use_ratio; extern int use_quota; void apply_server_settings(struct w *widgets) { /* Change the selected servers configuration. */ FILE *fp; long conf_size; int address_match = 0, port_match = 0; int configuration_changed = 0; gint active_index; gchar *address_line, *port_line, *info; char *change_srv_ident; char *old_buffer, *config, *temp_server, *conf_line, *address_buffer, *port_buffer; gchar *old_server_ident; G_CONST_RETURN gchar *server_name; G_CONST_RETURN gchar *server_port; G_CONST_RETURN gchar *admin_email; G_CONST_RETURN gchar *passive_port_1; G_CONST_RETURN gchar *passive_port_2; G_CONST_RETURN gchar *masquerade_address; G_CONST_RETURN gchar *max_connect; G_CONST_RETURN gchar *idle_timeout; /* TimeoutIdle and TimeoutNoTransfer */ G_CONST_RETURN gchar *server_ident; G_CONST_RETURN gchar *server_user; G_CONST_RETURN gchar *server_group; G_CONST_RETURN gchar *fake_username; G_CONST_RETURN gchar *fake_groupname; G_CONST_RETURN gchar *max_login_attempts; G_CONST_RETURN gchar *login_timeout; G_CONST_RETURN gchar *upload_bandwidth; G_CONST_RETURN gchar *download_bandwidth; G_CONST_RETURN gchar *systemlog; G_CONST_RETURN gchar *default_username_length; G_CONST_RETURN gchar *default_password_length; G_CONST_RETURN gchar *default_home_path; G_CONST_RETURN gchar *default_upload_path; G_CONST_RETURN gchar *default_html_path; /* TLS Entries */ G_CONST_RETURN gchar *tls_protocols = NULL; G_CONST_RETURN gchar *tls_logfile = NULL; G_CONST_RETURN gchar *tls_certfile = NULL; /* Get settings from the entries */ server_name = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[0])); server_ident = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[1])); masquerade_address = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[2])); admin_email = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[3])); default_home_path = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[4])); default_upload_path = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[5])); default_html_path = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[6])); systemlog = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[8])); server_user = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[9])); server_group = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[10])); fake_username = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[11])); fake_groupname = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[12])); /* Get values from the spinbuttons */ server_port = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_spinbutton[0])); passive_port_1 = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_spinbutton[1])); passive_port_2 = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_spinbutton[2])); max_connect = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_spinbutton[3])); max_login_attempts = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_spinbutton[4])); login_timeout = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_spinbutton[5])); idle_timeout = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_spinbutton[6])); default_username_length = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_spinbutton[7])); default_password_length = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_spinbutton[8])); upload_bandwidth = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_spinbutton[9])); download_bandwidth = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_spinbutton[10])); /* Save the old server ident so we know if we should repopulate the server treeview */ old_server_ident = g_strdup_printf("%s", server_ident); if( use_tls ) { /* Get values from the TLS entries */ tls_protocols = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[13])); tls_logfile = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[14])); tls_certfile = gtk_entry_get_text(GTK_ENTRY(widgets->server_set_entry[15])); /* Should we change the certificate entries as well ? */ } address_buffer = allocate(8192+15); port_buffer = allocate(8192+3); if( strstr((char *)global_server_type, "Virtualhost") ) sprintf(address_buffer, "\n", global_server_address); sprintf(port_buffer, "Port %s\n", global_server_port); // use global_server_address if( strlen(address_buffer) == 0 && strstr((char *)global_server_type, "Virtualhost") ) { info = g_strdup_printf(_("Refusing to change a server without a specified name.\n")); show_info(info); g_free(info); free(address_buffer); free(port_buffer); g_free(old_server_ident); return; } // use < 8 or global_server_port if( strlen(port_buffer) == 0 ) { info = g_strdup_printf(_("Refusing to change a server without a specified port.\n")); show_info(info); g_free(info); free(address_buffer); free(port_buffer); g_free(old_server_ident); return; } /* Change the configuration for the selected server */ if((fp=fopen(PROFTPD_CONF, "r"))==NULL) { info = g_strdup_printf(_("Cant open proftpd.conf here: \n%s\n"), PROFTPD_CONF); show_info(info); g_free(info); free(address_buffer); free(port_buffer); g_free(old_server_ident); return; } fseek(fp, 0, SEEK_END); conf_size = ftell(fp); rewind(fp); config = allocate(conf_size+16384); /* Additional bytes */ old_buffer = allocate(conf_size); temp_server = allocate(conf_size); conf_line = allocate(8192); change_srv_ident = allocate(8192); /* ------------- Change the standard server ----------- */ if( strstr("Default server", (char *)global_server_type) ) { configuration_changed = 1; if( conf_size > 1 ) while(fgets(old_buffer, conf_size, fp)!=NULL) { if( strlen(old_buffer) > 4000 ) // 8000... { info = g_strdup_printf(_("A line with over 8000 chars is not valid in: %s\n"), PROFTPD_CONF); show_info(info); g_free(info); free(config); free(old_buffer); free(temp_server); free(conf_line); free(change_srv_ident); free(address_buffer); free(port_buffer); g_free(old_server_ident); fclose(fp); return; } /* Change matching server directives otherwise just gather them */ if( strstr(old_buffer, "server_set_combo[0])); if( active_index == 0 ) sprintf(conf_line, "ServerIdent on \"%s\"\n", server_ident); else sprintf(conf_line, "ServerIdent off \"%s\"\n", server_ident); strcat(config, conf_line); } else if( strstr(old_buffer, "MasqueradeAddress") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[1])); if( active_index == 0 && strlen(masquerade_address) > 4 ) sprintf(conf_line, "MasqueradeAddress %s\n", masquerade_address); else if( strlen(masquerade_address) > 4 ) sprintf(conf_line, "#MasqueradeAddress %s\n", masquerade_address); else sprintf(conf_line, "#MasqueradeAddress None\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "ServerAdmin") ) { sprintf(conf_line, "ServerAdmin %s\n", admin_email); strcat(config, conf_line); } else if( strstr(old_buffer, "Port") && old_buffer[4]==' ' ) { sprintf(conf_line, "Port %s\n", server_port); strcat(config, conf_line); } else if( strstr(old_buffer, "PassivePorts") ) { sprintf(conf_line, "PassivePorts %s %s\n", passive_port_1, passive_port_2); strcat(config, conf_line); } else if( strstr(old_buffer, "MaxInstances") ) { sprintf(conf_line, "MaxInstances %s\n", max_connect); strcat(config, conf_line); } else if( strstr(old_buffer, "TimeoutNoTransfer") ) { sprintf(conf_line, "TimeoutNoTransfer %s\n", idle_timeout); strcat(config, conf_line); } else if( strstr(old_buffer, "TimeoutIdle") ) { sprintf(conf_line, "TimeoutIdle %s\n", idle_timeout); strcat(config, conf_line); } else if( strstr(old_buffer, "AllowStoreRestart") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[10])); if( active_index == 0 ) sprintf(conf_line, "AllowStoreRestart on\n"); else sprintf(conf_line, "AllowStoreRestart off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "AllowRetrieveRestart") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[11])); if( active_index == 0 ) sprintf(conf_line, "AllowRetrieveRestart on\n"); else sprintf(conf_line, "AllowRetrieveRestart off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "TransferRate RETR") ) { sprintf(conf_line, "TransferRate RETR %s\n", download_bandwidth); strcat(config, conf_line); } else if( strstr(old_buffer, "TransferRate STOR") ) { sprintf(conf_line, "TransferRate STOR %s\n", upload_bandwidth); strcat(config, conf_line); } else if( strstr(old_buffer, "TransferRate STOU") ) { sprintf(conf_line, "TransferRate STOU %s\n", upload_bandwidth); strcat(config, conf_line); } else if( strstr(old_buffer, "TransferRate APPE") ) { sprintf(conf_line, "TransferRate APPE %s\n", upload_bandwidth); strcat(config, conf_line); } else if( strstr(old_buffer, "IdentLookups") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[2])); if( active_index == 0 ) sprintf(conf_line, "IdentLookups on\n"); else sprintf(conf_line, "IdentLookups off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "UseReverseDNS") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[3])); if( active_index == 0 ) sprintf(conf_line, "UseReverseDNS on\n"); else sprintf(conf_line, "UseReverseDNS off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "DefaultTransferMode") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[5])); if( active_index == 0 ) sprintf(conf_line, "DefaultTransferMode binary\n"); else sprintf(conf_line, "DefaultTransferMode ascii\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "User") && old_buffer[4]==' ' ) { sprintf(conf_line, "User %s\n", server_user); strcat(config, conf_line); } else if( strstr(old_buffer, "Group") && old_buffer[5]==' ' ) { sprintf(conf_line, "Group %s\n", server_group); strcat(config, conf_line); } else if( strstr(old_buffer, "DirFakeUser") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[8])); if( active_index == 0 ) sprintf(conf_line, "DirFakeUser on %s\n", fake_username); else sprintf(conf_line, "DirFakeUser off %s\n", fake_username); strcat(config, conf_line); } else if( strstr(old_buffer, "DirFakeGroup") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[9])); if( active_index == 0 ) sprintf(conf_line, "DirFakeGroup on %s\n", fake_groupname); else sprintf(conf_line, "DirFakeGroup off %s\n", fake_groupname); strcat(config, conf_line); } else if( strstr(old_buffer, "AllowForeignAddress") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[6])); if( active_index == 0 ) sprintf(conf_line, "AllowForeignAddress on\n"); else sprintf(conf_line, "AllowForeignAddress off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "TimesGMT") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[4])); if( active_index == 0 ) sprintf(conf_line, "TimesGMT on\n"); else sprintf(conf_line, "TimesGMT off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "MaxLoginAttempts") ) { sprintf(conf_line, "MaxLoginAttempts %s\n", max_login_attempts); strcat(config, conf_line); } else if( strstr(old_buffer, "TimeoutLogin") ) { sprintf(conf_line, "TimeoutLogin %s\n", login_timeout); strcat(config, conf_line); } else if( strstr(old_buffer, "DeleteAbortedStores") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[12])); if( active_index == 0 ) sprintf(conf_line, "DeleteAbortedStores on\n"); else sprintf(conf_line, "DeleteAbortedStores off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "SystemLog") ) { sprintf(conf_line, "SystemLog %s\n", systemlog); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_random_username_length") && strlen(default_username_length) <= 128 ) { sprintf(conf_line, "#gp_random_username_length %s\n", default_username_length); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_random_password_length") && strlen(default_password_length) <= 128 ) { sprintf(conf_line, "#gp_random_password_length %s\n", default_password_length); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_randomize_case") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[7])); if( active_index == 0 ) sprintf(conf_line, "#gp_randomize_case upper\n"); else sprintf(conf_line, "#gp_randomize_case lower\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_useradd_root_path") && strlen(default_home_path)<=8000 ) { sprintf(conf_line, "#gp_useradd_root_path %s\n", default_home_path); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_useradd_upload_path") && strlen(default_upload_path)<=8000 ) { sprintf(conf_line, "#gp_useradd_upload_path %s\n", default_upload_path); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_html_path") ) { sprintf(conf_line, "#gp_html_path %s\n", default_html_path); strcat(config, conf_line); } else /* If using TLS */ if( use_tls && strstr(old_buffer, "TLSEngine") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[13])); if( active_index == 0 ) sprintf(conf_line, "TLSEngine on\n"); else sprintf(conf_line, "TLSEngine off\n"); strcat(config, conf_line); } else if( use_tls && strstr(old_buffer, "TLSRequired") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[14])); if( active_index == 0 ) sprintf(conf_line, "TLSRequired on\n"); else if( active_index == 1 ) sprintf(conf_line, "TLSRequired off\n"); else if( active_index == 2 ) sprintf(conf_line, "TLSRequired data\n"); else if( active_index == 3 ) sprintf(conf_line, "TLSRequired ctrl\n"); strcat(config, conf_line); } else if( use_tls && strstr(old_buffer, "TLSVerifyClient") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[15])); if( active_index == 0 ) sprintf(conf_line, "TLSVerifyClient on\n"); else sprintf(conf_line, "TLSVerifyClient off\n"); strcat(config, conf_line); } else if( use_tls && strstr(old_buffer, "TLSProtocol") ) { sprintf(conf_line, "TLSProtocol %s\n", tls_protocols); strcat(config, conf_line); } else if( use_tls && strstr(old_buffer, "TLSLog") ) { sprintf(conf_line, "TLSLog %s\n", tls_logfile); strcat(config, conf_line); } else if( use_tls && strstr(old_buffer, "TLSRSACertificateFile") ) { sprintf(conf_line, "TLSRSACertificateFile %s\n", tls_certfile); strcat(config, conf_line); } else /* If using Ratios */ if( use_ratio && strstr(old_buffer, "Ratios ") && ! strstr(old_buffer, "ave") ) /* Not SaveRatios */ { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[16])); if( active_index == 0 ) sprintf(conf_line, "Ratios on\n"); else sprintf(conf_line, "Ratios off\n"); strcat(config, conf_line); } else if( use_ratio && strstr(old_buffer, "SaveRatios ") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[17])); if( active_index == 0 ) sprintf(conf_line, "SaveRatios on\n"); else sprintf(conf_line, "SaveRatios off\n"); strcat(config, conf_line); } else strcat(config, old_buffer); /* Gather all other values */ } free(old_buffer); free(address_buffer); free(port_buffer); free(temp_server); free(conf_line); free(change_srv_ident); fclose(fp); /* Write the new config if any changes where made */ if( ! configuration_changed ) { g_free(old_server_ident); free(config); return; } /* Write the new conf */ if((fp=fopen(PROFTPD_CONF, "w+"))==NULL) { g_free(old_server_ident); free(config); return; } fputs(config, fp); fclose(fp); free(config); /* The server address, ident or port hasnt changed, dont populate server tab */ if( ! strcmp(global_server_address, server_name) && ! strcmp(old_server_ident, server_ident) && ! strcmp(global_server_port, server_port) ) {} else { /* Populate the server treeview */ populate_servers(widgets); /* Select the first server and set global server values */ select_first_server(widgets); } g_free(old_server_ident); /* Populate the server settings */ populate_server_settings(widgets); populate_conf_tab(widgets); /* Update the server */ reread_conf(widgets); return; } /* ----------------- End of default server changes ------------------ */ /* ------------ Change a virtualhost --------------- */ if( strstr("Virtualhost", (char *)global_server_type) ) { /* Setup the address and port lines to identify it with */ address_line = g_strdup_printf("\n", global_server_address); port_line = g_strdup_printf("Port %s\n", global_server_port); /* Look for these address and port lines, break if they are found */ if( conf_size > 1 ) while(fgets(old_buffer, conf_size, fp)!=NULL) { if( ! strcmp(old_buffer, address_line) ) { address_match = 1; /* Save the old server name line */ snprintf(temp_server, 1024, "%s", old_buffer); /* Go to the next line where we expect Port to be */ while(fgets(old_buffer, conf_size, fp)!=NULL) break; if( address_match && ! strcmp(old_buffer, port_line) ) { port_match = 1; /* Put the new conf settings */ g_free(address_line); g_free(port_line); address_line = g_strdup_printf("\n", server_name); port_line = g_strdup_printf("Port %s\n", server_port); strcat(config, address_line); strcat(config, port_line); break; } else /* This was not the correct server */ { address_match = 0; port_match = 0; /* Put back the old server and port lines */ strcat(config, temp_server); strcat(config, old_buffer); } } else /* Put back all other lines */ strcat(config, old_buffer); } if( address_line !=NULL ) g_free(address_line); if( port_line !=NULL ) g_free(port_line); /* Couldnt find the server */ if( ! address_match || ! port_match ) { // Show info printf("The virtualhost was not found, no changes where made.\n"); fclose(fp); // free(old_buffer); // free(address_buffer); // free(temp_server); // free(port_buffer); free(change_srv_ident); //new free(conf_line); free(config); g_free(old_server_ident); printf("Broken...\n"); return; } /* Change the rest of the values in this vhost */ if( conf_size > 1 ) while(fgets(old_buffer, conf_size, fp)!=NULL) { if( strlen(old_buffer) > 4000 ) continue; /* The end of what we want to change has been reached, * add this end line and everything else */ if( strstr(old_buffer, "server_set_combo[0])); if( active_index == 0 ) sprintf(conf_line, "ServerIdent on \"%s\"\n", server_ident); else sprintf(conf_line, "ServerIdent off \"%s\"\n", server_ident); strcat(config, conf_line); } else if( strstr(old_buffer, "MasqueradeAddress") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[1])); if( active_index == 0 && strlen(masquerade_address) > 4 ) sprintf(conf_line, "MasqueradeAddress %s\n", masquerade_address); else if( strlen(masquerade_address) > 4 ) sprintf(conf_line, "#MasqueradeAddress %s\n", masquerade_address); else sprintf(conf_line, "#MasqueradeAddress None\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "ServerAdmin") ) { sprintf(conf_line, "ServerAdmin %s\n", admin_email); strcat(config, conf_line); } else if( strstr(old_buffer, "PassivePorts") ) { sprintf(conf_line, "PassivePorts %s %s\n", passive_port_1, passive_port_2); strcat(config, conf_line); } else if( strstr(old_buffer, "MaxInstances") ) { sprintf(conf_line, "MaxInstances %s\n", max_connect); strcat(config, conf_line); } else if( strstr(old_buffer, "TimeoutNoTransfer") ) { sprintf(conf_line, "TimeoutNoTransfer %s\n", idle_timeout); strcat(config, conf_line); } else if( strstr(old_buffer, "TimeoutIdle") ) { sprintf(conf_line, "TimeoutIdle %s\n", idle_timeout); strcat(config, conf_line); } else if( strstr(old_buffer, "AllowStoreRestart") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[10])); if( active_index == 0 ) sprintf(conf_line, "AllowStoreRestart on\n"); else sprintf(conf_line, "AllowStoreRestart off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "AllowRetrieveRestart") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[11])); if( active_index == 0 ) sprintf(conf_line, "AllowRetrieveRestart on\n"); else sprintf(conf_line, "AllowRetrieveRestart off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "TransferRate RETR") ) { sprintf(conf_line, "TransferRate RETR %s\n", download_bandwidth); strcat(config, conf_line); } else if( strstr(old_buffer, "TransferRate STOR") ) { sprintf(conf_line, "TransferRate STOR %s\n", upload_bandwidth); strcat(config, conf_line); } else if( strstr(old_buffer, "TransferRate STOU") ) { sprintf(conf_line, "TransferRate STOU %s\n", upload_bandwidth); strcat(config, conf_line); } else if( strstr(old_buffer, "TransferRate APPE") ) { sprintf(conf_line, "TransferRate APPE %s\n", upload_bandwidth); strcat(config, conf_line); } else if( strstr(old_buffer, "IdentLookups") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[2])); if( active_index == 0 ) sprintf(conf_line, "IdentLookups on\n"); else sprintf(conf_line, "IdentLookups off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "UseReverseDNS") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[3])); if( active_index == 0 ) sprintf(conf_line, "UseReverseDNS on\n"); else sprintf(conf_line, "UseReverseDNS off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "DefaultTransferMode") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[5])); if( active_index == 0 ) sprintf(conf_line, "DefaultTransferMode binary\n"); else sprintf(conf_line, "DefaultTransferMode ascii\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "User") && old_buffer[4]==' ' ) { sprintf(conf_line, "User %s\n", server_user); strcat(config, conf_line); } else if( strstr(old_buffer, "Group") && old_buffer[5]==' ' ) { sprintf(conf_line, "Group %s\n", server_group); strcat(config, conf_line); } else if( strstr(old_buffer, "DirFakeUser") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[8])); if( active_index == 0 ) sprintf(conf_line, "DirFakeUser on %s\n", fake_username); else sprintf(conf_line, "DirFakeUser off %s\n", fake_username); strcat(config, conf_line); } else if( strstr(old_buffer, "DirFakeGroup") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[9])); if( active_index == 0 ) sprintf(conf_line, "DirFakeGroup on %s\n", fake_groupname); else sprintf(conf_line, "DirFakeGroup off %s\n", fake_groupname); strcat(config, conf_line); } else if( strstr(old_buffer, "AllowForeignAddress") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[6])); if( active_index == 0 ) sprintf(conf_line, "AllowForeignAddress on\n"); else sprintf(conf_line, "AllowForeignAddress off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "TimesGMT") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[4])); if( active_index == 0 ) sprintf(conf_line, "TimesGMT on\n"); else sprintf(conf_line, "TimesGMT off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "MaxLoginAttempts") ) { sprintf(conf_line, "MaxLoginAttempts %s\n", max_login_attempts); strcat(config, conf_line); } else if( strstr(old_buffer, "TimeoutLogin") ) { sprintf(conf_line, "TimeoutLogin %s\n", login_timeout); strcat(config, conf_line); } else if( strstr(old_buffer, "DeleteAbortedStores") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[12])); if( active_index == 0 ) sprintf(conf_line, "DeleteAbortedStores on\n"); else sprintf(conf_line, "DeleteAbortedStores off\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "SystemLog") ) { sprintf(conf_line, "SystemLog %s\n", systemlog); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_random_username_length") && strlen(default_username_length) <= 128 ) { sprintf(conf_line, "#gp_random_username_length %s\n", default_username_length); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_random_password_length") && strlen(default_password_length) <= 128 ) { sprintf(conf_line, "#gp_random_password_length %s\n", default_password_length); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_randomize_case") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[7])); if( active_index == 0 ) sprintf(conf_line, "#gp_randomize_case upper\n"); else sprintf(conf_line, "#gp_randomize_case lower\n"); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_useradd_root_path") && strlen(default_home_path)<=8000 ) { sprintf(conf_line, "#gp_useradd_root_path %s\n", default_home_path); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_useradd_upload_path") && strlen(default_upload_path)<=8000 ) { sprintf(conf_line, "#gp_useradd_upload_path %s\n", default_upload_path); strcat(config, conf_line); } else if( strstr(old_buffer, "#gp_html_path") ) { sprintf(conf_line, "#gp_html_path %s\n", default_html_path); strcat(config, conf_line); } else /* If using TLS */ if( use_tls && strstr(old_buffer, "TLSEngine") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[13])); if( active_index == 0 ) sprintf(conf_line, "TLSEngine on\n"); else sprintf(conf_line, "TLSEngine off\n"); strcat(config, conf_line); } else if( use_tls && strstr(old_buffer, "TLSRequired") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[14])); if( active_index == 0 ) sprintf(conf_line, "TLSRequired on\n"); else if( active_index == 1 ) sprintf(conf_line, "TLSRequired data\n"); else if( active_index == 2 ) sprintf(conf_line, "TLSRequired ctrl\n"); else if( active_index == 3 ) sprintf(conf_line, "TLSRequired off\n"); strcat(config, conf_line); } else if( use_tls && strstr(old_buffer, "TLSVerifyClient") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[15])); if( active_index == 0 ) sprintf(conf_line, "TLSVerifyClient on\n"); else sprintf(conf_line, "TLSVerifyClient off\n"); strcat(config, conf_line); } else if( use_tls && strstr(old_buffer, "TLSProtocol") ) { sprintf(conf_line, "TLSProtocol %s\n", tls_protocols); strcat(config, conf_line); } else if( use_tls && strstr(old_buffer, "TLSLog") ) { sprintf(conf_line, "TLSLog %s\n", tls_logfile); strcat(config, conf_line); } else if( use_tls && strstr(old_buffer, "TLSRSACertificateFile") ) { sprintf(conf_line, "TLSRSACertificateFile %s\n", tls_certfile); strcat(config, conf_line); } else /* If using Ratios */ if( use_ratio && strstr(old_buffer, "Ratios ") && ! strstr(old_buffer, "ave") ) /* Not SaveRatios */ { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[16])); if( active_index == 0 ) sprintf(conf_line, "Ratios on\n"); else sprintf(conf_line, "Ratios off\n"); strcat(config, conf_line); } else if( use_ratio && strstr(old_buffer, "SaveRatios ") ) { active_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->server_set_combo[17])); if( active_index == 0 ) sprintf(conf_line, "SaveRatios on\n"); else sprintf(conf_line, "SaveRatios off\n"); strcat(config, conf_line); } else strcat(config, old_buffer); /* Gather all other values */ } free(old_buffer); free(address_buffer); free(temp_server); free(port_buffer); free(change_srv_ident); free(conf_line); fclose(fp); /* Write the new config if any changes where made */ if( ! configuration_changed ) { g_free(old_server_ident); free(config); return; } /* Make a space left check here */ if((fp=fopen(PROFTPD_CONF, "w+"))==NULL) { g_free(old_server_ident); free(config); return; } fputs(config, fp); fclose(fp); free(config); /* The server address, ident or port hasnt changed, dont populate_servers */ if( ! strcmp(global_server_address, server_name) && ! strcmp(old_server_ident, server_ident) && ! strcmp(global_server_port, server_port) ) { } else { /* Populate the server treeview */ populate_servers(widgets); /* Select the first server and set global server values */ select_first_server(widgets); } g_free(old_server_ident); /* Populate the server settings */ populate_server_settings(widgets); populate_conf_tab(widgets); /* Update the server */ reread_conf(widgets); } /* Vhost end */ }