bool ConnectionWidget::validated() const { if (!isValidCredential()) { return false; } return ConnectionRemoteWidget::validated(); }
proxy::IConnectionSettingsRemote* ConnectionWidget::createConnectionRemoteImpl( const proxy::connection_path_t& path) const { proxy::memcached::ConnectionSettings* conn = new proxy::memcached::ConnectionSettings(path); core::memcached::Config config = conn->GetInfo(); if (useSasl_->isChecked() && isValidCredential()) { config.user = common::ConvertToString(userPasswordWidget_->userName()); config.password = common::ConvertToString(userPasswordWidget_->password()); } conn->SetInfo(config); return conn; }
int store_cred_service(const char *user, const char *pw, int mode) { wchar_t pwbuf[MAX_PASSWORD_LENGTH]; wchar_t userbuf[MAX_PASSWORD_LENGTH]; priv_state priv; int answer = FAILURE; lsa_mgr lsa_man; wchar_t *pw_wc; // we'll need a wide-char version of the user name later if ( user ) { swprintf_s(userbuf, COUNTOF(userbuf), L"%S", user); } if (!can_switch_ids()) { answer = FAILURE_NOT_SUPPORTED; } else { priv = set_root_priv(); switch(mode) { case ADD_MODE: bool retval; dprintf( D_FULLDEBUG, "Adding %S to credential storage.\n", userbuf ); retval = isValidCredential(user, pw); if ( ! retval ) { dprintf(D_FULLDEBUG, "store_cred: tried to add invalid credential\n"); answer=FAILURE_BAD_PASSWORD; break; // bail out } if (pw) { swprintf_s(pwbuf, COUNTOF(pwbuf), L"%S", pw); // make a wide-char copy first } // call lsa_mgr api // answer = return code if (!lsa_man.add(userbuf, pwbuf)){ answer = FAILURE; } else { answer = SUCCESS; } SecureZeroMemory(pwbuf, MAX_PASSWORD_LENGTH*sizeof(wchar_t)); break; case DELETE_MODE: dprintf( D_FULLDEBUG, "Deleting %S from credential storage.\n", userbuf ); pw_wc = lsa_man.query(userbuf); if ( !pw_wc ) { answer = FAILURE_NOT_FOUND; break; } else { SecureZeroMemory(pw_wc, wcslen(pw_wc)); delete[] pw_wc; } if (!isValidCredential(user, pw)) { dprintf(D_FULLDEBUG, "store_cred: invalid credential given for delete\n"); answer = FAILURE_BAD_PASSWORD; break; } // call lsa_mgr api // answer = return code if (!lsa_man.remove(userbuf)) { answer = FAILURE; } else { answer = SUCCESS; } break; case QUERY_MODE: { dprintf( D_FULLDEBUG, "Checking for %S in credential storage.\n", userbuf ); char passw[MAX_PASSWORD_LENGTH]; pw_wc = lsa_man.query(userbuf); if ( !pw_wc ) { answer = FAILURE_NOT_FOUND; } else { sprintf(passw, "%S", pw_wc); SecureZeroMemory(pw_wc, wcslen(pw_wc)); delete[] pw_wc; if ( isValidCredential(user, passw) ) { answer = SUCCESS; } else { answer = FAILURE_BAD_PASSWORD; } SecureZeroMemory(passw, MAX_PASSWORD_LENGTH); } break; } default: dprintf( D_ALWAYS, "store_cred: Unknown access mode (%d).\n", mode ); answer=0; break; } dprintf(D_FULLDEBUG, "Switching back to old priv state.\n"); set_priv(priv); } return answer; }