int wpa_config_write(const char *name, struct wpa_config *config) { FILE *f; struct wpa_ssid *ssid; struct wpa_config_blob *blob; int ret = 0; wpa_printf(MSG_DEBUG, "Writing configuration file '%s'", name); f = fopen(name, "w"); if (f == NULL) { wpa_printf(MSG_DEBUG, "Failed to open '%s' for writing", name); return -1; } wpa_config_write_global(f, config); for (ssid = config->ssid; ssid; ssid = ssid->next) { fprintf(f, "\nnetwork={\n"); wpa_config_write_network(f, ssid); fprintf(f, "}\n"); } for (blob = config->blobs; blob; blob = blob->next) { ret = wpa_config_write_blob(f, blob); if (ret) break; } fclose(f); wpa_printf(MSG_DEBUG, "Configuration file '%s' written %ssuccessfully", name, ret ? "un" : ""); return ret; }
int wpa_config_write(const char *name, struct wpa_config *config) { #ifndef CONFIG_NO_CONFIG_WRITE FILE *f; struct wpa_ssid *ssid; struct wpa_cred *cred; #ifndef CONFIG_NO_CONFIG_BLOBS struct wpa_config_blob *blob; #endif /* CONFIG_NO_CONFIG_BLOBS */ int ret = 0; wpa_printf(MSG_DEBUG, "Writing configuration file '%s'", name); f = fopen(name, "w"); if (f == NULL) { wpa_printf(MSG_DEBUG, "Failed to open '%s' for writing", name); return -1; } wpa_config_write_global(f, config); for (cred = config->cred; cred; cred = cred->next) { fprintf(f, "\ncred={\n"); wpa_config_write_cred(f, cred); fprintf(f, "}\n"); } for (ssid = config->ssid; ssid; ssid = ssid->next) { if (ssid->key_mgmt == WPA_KEY_MGMT_WPS || ssid->temporary) continue; /* do not save temporary networks */ if (wpa_key_mgmt_wpa_psk(ssid->key_mgmt) && !ssid->psk_set && !ssid->passphrase) continue; /* do not save invalid network */ fprintf(f, "\nnetwork={\n"); wpa_config_write_network(f, ssid); fprintf(f, "}\n"); } #ifndef CONFIG_NO_CONFIG_BLOBS for (blob = config->blobs; blob; blob = blob->next) { ret = wpa_config_write_blob(f, blob); if (ret) break; } #endif /* CONFIG_NO_CONFIG_BLOBS */ fclose(f); wpa_printf(MSG_DEBUG, "Configuration file '%s' written %ssuccessfully", name, ret ? "un" : ""); return ret; #else /* CONFIG_NO_CONFIG_WRITE */ return -1; #endif /* CONFIG_NO_CONFIG_WRITE */ }
int wpa_config_write(const char *name, struct wpa_config *config) { TCHAR buf[256]; HKEY hk; LONG ret; int errors = 0; struct wpa_ssid *ssid; struct wpa_config_blob *blob; int id; wpa_printf(MSG_DEBUG, "Writing configuration file '%s'", name); #ifdef UNICODE _snwprintf(buf, 256, WPA_KEY_PREFIX TEXT("\\configs\\%S"), name); #else /* UNICODE */ os_snprintf(buf, 256, WPA_KEY_PREFIX TEXT("\\configs\\%s"), name); #endif /* UNICODE */ ret = RegOpenKeyEx(WPA_KEY_ROOT, buf, 0, KEY_SET_VALUE | DELETE, &hk); if (ret != ERROR_SUCCESS) { wpa_printf(MSG_ERROR, "Could not open wpa_supplicant " "configuration registry %s: error %d", buf, (int) GetLastError()); return -1; } if (wpa_config_write_global(config, hk)) { wpa_printf(MSG_ERROR, "Failed to write global configuration " "data"); errors++; } wpa_config_delete_subkeys(hk, TEXT("networks")); for (ssid = config->ssid, id = 0; ssid; ssid = ssid->next, id++) { if (ssid->key_mgmt == WPA_KEY_MGMT_WPS) continue; /* do not save temporary WPS networks */ if (wpa_config_write_network(hk, ssid, id)) errors++; } RegDeleteKey(hk, TEXT("blobs")); for (blob = config->blobs; blob; blob = blob->next) { if (wpa_config_write_blob(hk, blob)) errors++; } RegCloseKey(hk); wpa_printf(MSG_DEBUG, "Configuration '%s' written %ssuccessfully", name, errors ? "un" : ""); return errors ? -1 : 0; }
int wpa_config_write(const char *name, struct wpa_config *config) { FILE *f; struct wpa_ssid *ssid; struct wpa_config_blob *blob; int ret = 0; wpa_printf(MSG_DEBUG, "Writing configuration file '%s'", name); f = fopen(name, "w"); if (f == NULL) { wpa_printf(MSG_DEBUG, "Failed to open '%s' for writing", name); return -1; } wpa_config_write_global(f, config); for (ssid = config->ssid; ssid; ssid = ssid->next) { #ifdef EAP_WPS #ifndef USE_INTEL_SDK if (config->wps->nwid_trying_wps == ssid->id) { /* skip temporary "network" */ continue; } #endif /* USE_INTEL_SDK */ #endif /* EAP_WPS */ fprintf(f, "\nnetwork={\n"); wpa_config_write_network(f, ssid); fprintf(f, "}\n"); } for (blob = config->blobs; blob; blob = blob->next) { ret = wpa_config_write_blob(f, blob); if (ret) break; } #ifdef EAP_WPS #ifndef USE_INTEL_SDK wpa_config_write_wps(f, config->wps); #endif /* USE_INTEL_SDK */ #endif /* EAP_WPS */ fclose(f); wpa_printf(MSG_DEBUG, "Configuration file '%s' written %ssuccessfully", name, ret ? "un" : ""); return ret; }
int wpa_config_write(const char *name, struct wpa_config *config) { #ifndef CONFIG_NO_CONFIG_WRITE FILE *f; struct wpa_ssid *ssid; #ifndef CONFIG_NO_CONFIG_BLOBS struct wpa_config_blob *blob; #endif /* CONFIG_NO_CONFIG_BLOBS */ int ret = 0; #define PERSISTENT_CONFIG_MAX 8 int persistent_num = 0; int persistent_skip_num = 0; wpa_printf(MSG_DEBUG, "Writing configuration file '%s'", name); f = fopen(name, "w"); if (f == NULL) { wpa_printf(MSG_DEBUG, "Failed to open '%s' for writing", name); return -1; } #ifdef CONFIG_P2P /* Eddie remove the older psersistent profile */ if( strstr(name,"p2p_")) { wpa_printf(MSG_DEBUG, "p2p config writing"); for (ssid = config->ssid; ssid; ssid = ssid->next) { if (ssid->key_mgmt == WPA_KEY_MGMT_WPS || ssid->temporary) { continue; /* do not save temporary networks */ } if (wpa_key_mgmt_wpa_psk(ssid->key_mgmt) && !ssid->psk_set && !ssid->passphrase) { continue; /* do not save invalid network */ } persistent_num++; } if(persistent_num > PERSISTENT_CONFIG_MAX ) { persistent_skip_num = persistent_num - PERSISTENT_CONFIG_MAX; } wpa_printf(MSG_DEBUG, "p2p config skip number %d", persistent_skip_num); } #endif wpa_config_write_global(f, config); for (ssid = config->ssid; ssid; ssid = ssid->next) { if (ssid->key_mgmt == WPA_KEY_MGMT_WPS || ssid->temporary) { continue; /* do not save temporary networks */ } if (wpa_key_mgmt_wpa_psk(ssid->key_mgmt) && !ssid->psk_set && !ssid->passphrase) { continue; /* do not save invalid network */ } #ifdef CONFIG_P2P if( persistent_skip_num > 0 ) { persistent_skip_num--; wpa_printf(MSG_DEBUG, "Skip id %u ssid %s",ssid->id, ssid->ssid ); continue; } #endif fprintf(f, "\nnetwork={\n"); wpa_config_write_network(f, ssid); fprintf(f, "}\n"); } #ifndef CONFIG_NO_CONFIG_BLOBS for (blob = config->blobs; blob; blob = blob->next) { ret = wpa_config_write_blob(f, blob); if (ret) break; } #endif /* CONFIG_NO_CONFIG_BLOBS */ fclose(f); wpa_printf(MSG_DEBUG, "Configuration file '%s' written %ssuccessfully", name, ret ? "un" : ""); return ret; #else /* CONFIG_NO_CONFIG_WRITE */ return -1; #endif /* CONFIG_NO_CONFIG_WRITE */ }
int wpa_config_write(const char *name, struct wpa_config *config) { #ifndef CONFIG_NO_CONFIG_WRITE FILE *f; struct wpa_ssid *ssid; struct wpa_cred *cred; #ifndef CONFIG_NO_CONFIG_BLOBS struct wpa_config_blob *blob; #endif /* CONFIG_NO_CONFIG_BLOBS */ int ret = 0; const char *orig_name = name; int tmp_len = os_strlen(name) + 5; /* allow space for .tmp suffix */ char *tmp_name = os_malloc(tmp_len); if (tmp_name) { os_snprintf(tmp_name, tmp_len, "%s.tmp", name); name = tmp_name; } wpa_printf(MSG_DEBUG, "Writing configuration file '%s'", name); f = fopen(name, "w"); if (f == NULL) { wpa_printf(MSG_DEBUG, "Failed to open '%s' for writing", name); os_free(tmp_name); return -1; } wpa_config_write_global(f, config); for (cred = config->cred; cred; cred = cred->next) { if (cred->temporary) continue; fprintf(f, "\ncred={\n"); wpa_config_write_cred(f, cred); fprintf(f, "}\n"); } for (ssid = config->ssid; ssid; ssid = ssid->next) { if (ssid->key_mgmt == WPA_KEY_MGMT_WPS || ssid->temporary) continue; /* do not save temporary networks */ if (wpa_key_mgmt_wpa_psk(ssid->key_mgmt) && !ssid->psk_set && !ssid->passphrase) continue; /* do not save invalid network */ fprintf(f, "\nnetwork={\n"); wpa_config_write_network(f, ssid); fprintf(f, "}\n"); } #ifndef CONFIG_NO_CONFIG_BLOBS for (blob = config->blobs; blob; blob = blob->next) { ret = wpa_config_write_blob(f, blob); if (ret) break; } #endif /* CONFIG_NO_CONFIG_BLOBS */ os_fdatasync(f); fclose(f); if (tmp_name) { int chmod_ret = 0; #ifdef ANDROID chmod_ret = chmod(tmp_name, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); #endif /* ANDROID */ if (chmod_ret != 0 || rename(tmp_name, orig_name) != 0) ret = -1; os_free(tmp_name); } wpa_printf(MSG_DEBUG, "Configuration file '%s' written %ssuccessfully", orig_name, ret ? "un" : ""); return ret; #else /* CONFIG_NO_CONFIG_WRITE */ return -1; #endif /* CONFIG_NO_CONFIG_WRITE */ }
int wpa_config_write(const char *name, struct wpa_config *config) { FILE *f; struct wpa_ssid *ssid; struct wpa_config_blob *blob; int ret = 0; wpa_printf(MSG_DEBUG, "Writing configuration file '%s'", name); f = fopen(name, "w"); if (f == NULL) { wpa_printf(MSG_DEBUG, "Failed to open '%s' for writing", name); return -1; } #ifdef CONFIG_CTRL_IFACE if (config->ctrl_interface) fprintf(f, "ctrl_interface=%s\n", config->ctrl_interface); #ifndef CONFIG_CTRL_IFACE_UDP if (config->ctrl_interface_gid_set) { fprintf(f, "ctrl_interface_group=%d\n", (int) config->ctrl_interface_gid); } #endif /* CONFIG_CTRL_IFACE_UDP */ #endif /* CONFIG_CTRL_IFACE */ if (config->eapol_version != DEFAULT_EAPOL_VERSION) fprintf(f, "eapol_version=%d\n", config->eapol_version); if (config->ap_scan != DEFAULT_AP_SCAN) fprintf(f, "ap_scan=%d\n", config->ap_scan); if (config->fast_reauth != DEFAULT_FAST_REAUTH) fprintf(f, "fast_reauth=%d\n", config->fast_reauth); if (config->opensc_engine_path) fprintf(f, "opensc_engine_path=%s\n", config->opensc_engine_path); if (config->pkcs11_engine_path) fprintf(f, "pkcs11_engine_path=%s\n", config->pkcs11_engine_path); if (config->pkcs11_module_path) fprintf(f, "pkcs11_module_path=%s\n", config->pkcs11_module_path); if (config->driver_param) fprintf(f, "driver_param=%s\n", config->driver_param); if (config->dot11RSNAConfigPMKLifetime) fprintf(f, "dot11RSNAConfigPMKLifetime=%d\n", config->dot11RSNAConfigPMKLifetime); if (config->dot11RSNAConfigPMKReauthThreshold) fprintf(f, "dot11RSNAConfigPMKReauthThreshold=%d\n", config->dot11RSNAConfigPMKReauthThreshold); if (config->dot11RSNAConfigSATimeout) fprintf(f, "dot11RSNAConfigSATimeout=%d\n", config->dot11RSNAConfigSATimeout); if (config->update_config) fprintf(f, "update_config=%d\n", config->update_config); for (ssid = config->ssid; ssid; ssid = ssid->next) { fprintf(f, "\nnetwork={\n"); wpa_config_write_network(f, ssid); fprintf(f, "}\n"); } for (blob = config->blobs; blob; blob = blob->next) { ret = wpa_config_write_blob(f, blob); if (ret) break; } fclose(f); wpa_printf(MSG_DEBUG, "Configuration file '%s' written %ssuccessfully", name, ret ? "un" : ""); return ret; }
int wpa_config_write(const char *name, struct wpa_config *config) { #ifndef CONFIG_NO_CONFIG_WRITE FILE *f; struct wpa_ssid *ssid; #ifndef CONFIG_NO_CONFIG_BLOBS struct wpa_config_blob *blob; #endif /* CONFIG_NO_CONFIG_BLOBS */ int ret = 0; char *tmpfile = NULL; int rc; tmpfile = (char *)malloc(strlen(name) + sizeof(".tmp")); if (tmpfile) { strcpy(tmpfile, name); strcat(tmpfile, ".tmp"); } else { /* Failed to create new config file then rename; revert to overwriting config file directly */ tmpfile = (char *)name; } wpa_printf(MSG_DEBUG, "Writing configuration file '%s'", tmpfile); f = fopen(tmpfile, "w"); if (f == NULL) { wpa_printf(MSG_ERROR, "Failed to open '%s' for writing", tmpfile); return -1; } wpa_config_write_global(f, config); for (ssid = config->ssid; ssid; ssid = ssid->next) { if (ssid->key_mgmt == WPA_KEY_MGMT_WPS) continue; /* do not save temporary WPS networks */ fprintf(f, "\nnetwork={\n"); wpa_config_write_network(f, ssid); fprintf(f, "}\n"); } #ifndef CONFIG_NO_CONFIG_BLOBS for (blob = config->blobs; blob; blob = blob->next) { ret = wpa_config_write_blob(f, blob); if (ret) break; } #endif /* CONFIG_NO_CONFIG_BLOBS */ fflush(f); fsync(fileno(f)); fclose(f); if (tmpfile != name) { rc = rename(tmpfile, name); free(tmpfile); if (rc != 0) { wpa_printf(MSG_ERROR, "Failed to write configuration file '%s'", name); return -1; } } wpa_printf(MSG_DEBUG, "Configuration file '%s' written %ssuccessfully", name, ret ? "un" : ""); return ret; #else /* CONFIG_NO_CONFIG_WRITE */ return -1; #endif /* CONFIG_NO_CONFIG_WRITE */ }