Byla vydána verze 0.84 telnet a ssh klienta PuTTY (Wikipedie). Podrobnosti v přehledu nových vlastností a oprav chyb a Change Logu.
Microsoft představil Azure Linux 4.0 a Azure Container Linux. Na konferenci Open Source Summit North America 2026 organizované konsorciem Linux Foundation a sponzorované také Microsoftem. Azure Linux 4.0 vychází z Fedora Linuxu. Azure Container Linux je založen na projektu Flatcar. Azure Linux (GitHub, Wikipedie) byl původně znám jako CBL-Mariner.
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 165 (pdf).
Byla vydána verze 9.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a informačním videu.
Firefox 151 podporuje Web Serial API. Pro komunikaci s různými mikrokontroléry připojenými přes USB nebo sériové porty už není nutné spouštět Chrome nebo na Chromiu postavené webové prohlížeče.
Byla vydána nová stabilní verze 8.0 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 148. Přehled novinek i s náhledy v příspěvku na blogu.
Ve FreeBSD byla nalezena a opravena zranitelnost FatGid aneb CVE-2026-45250. Jedná se o lokální eskalaci práv. Neprivilegovaný uživatel se může stát rootem.
Společnost Flipper Devices oznámila Flipper One. Zcela nový Flipper postavený od nuly. Jedná se o open-source linuxovou platformu založenou na čipu Rockchip RK3576. Hledají se dobrovolníci pro pomoc s dokončením vývoje (ovladače, testování, tvorba modulů).
Vývojáři Wine oznámili vydání verze 2.0 knihovny vkd3d pro překlad volání Direct3D na Vulkan. Přehled novinek na GitLabu.
Společnost Red Hat oznámila vydání Red Hat Enterprise Linuxu (RHEL) 10.2 a 9.8. Vedle nových vlastností a oprav chyb přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Vypíchnout lze CLI AI asistenta goose. Podrobnosti v poznámkách k vydání (10.2 a 9.8).
Mějme funkci pro změnu uživatelova hesla:
CREATE OR REPLACE FUNCTION zmen_heslo("login" character varying, domena character varying, stare_heslo character varying, nove_heslo character varying)
RETURNS text AS
$BODY$DECLARE pocet integer;
BEGIN
UPDATE uzivatel
SET heslo = md5($4)
WHERE login = $1
AND domena = $2
AND heslo = md5($3);
GET DIAGNOSTICS pocet = ROW_COUNT;
IF pocet = 1 THEN
RETURN 'Změna hesla pro ' || $1 || '@' || $2 || ' proběhla úspěšně.';
ELSE
RAISE EXCEPTION 'Nesprávné heslo, nebo uživatel % neexistuje', $1 || '@' || $2;
END IF;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER
COST 100;
ALTER FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) OWNER TO posta;
GRANT EXECUTE ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) TO public;
GRANT EXECUTE ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) TO posta;
GRANT EXECUTE ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) TO posta_zmena_hesla;
COMMENT ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) IS 'Změní heslo uživatele.';
Podle dokumentace by ROW_COUNT mělo vracet počet záznamů dotčených příkazem (updatem) – tedy 1, právě tehdy když uživatel existuje a zadal správě staré heslo.
Problém je, pokud existují dva uživatelské účty se stejným heslem. ROW_COUNT je v takovém případě 2 a funkce skončí chybou.
Můžu sice změnit podmínku na IF pocet >= 1 THEN, ale to se mi nelíbí. Proč by ROW_COUNT mělo být dva? Vždyť když ten update pustím ručně, ukáže se mi správně: „1 rows affected“. Ve WHERE podmínkách se kontroluje login, doména a staré heslo a takový uživatel je tam jen jeden. Co s tím má společného, že existuje uživatel se stejným heslem (ale jiným jménem nebo doménou)?
Pokud někdo potřebuje širší souvislosti, kompletní zdrojáky jsou tady: mercurial.
Řešení dotazu:
cus
ono ti to fungovat nemuze - mas tam kolizi promenne a sql identifikatoru, kterou sice resis, ale spatne. V plpgsql maji vyssi prioritu plpgsql promenne. Tudiz zapis WHERE ... domena = $2 je fakticky $2 = $2 a tudiz se domena fakticky netestuje. Tak jak jsi to napsal by to fungovalo treba v Oraclu, ale ne v postgresu. To inkriminovane misto uprav (ta sama chyba je i s promennou login.
Pouzij kvalifikatory -
UPDATE uzivatel SET heslo = .. WHERE uzivatel.login = "login" and uzivatel.domena = domena
Pavel
Ahoj,
díky moc, to bylo ono, přidal jsem uzivatel. a na proměnné se radši odkazuji pomocí názvu v uvozovkách, názvy jsem změnil, aby se nepletly se sloupci tabulky. Dřív stačilo zadat správné heslo a jakéhokoli uživatele… ale naštěstí díky podmínce pocet = 1 to neprošlo.
Franta
Používat úvozvoky není zrovna dobrý nápad - stejně, tak jako používat klíčová slova jako identifikátory. Bohatě postačí označit proměnné nějakým prefixem - mezi komunitou se používá podtržítko (a pokud to je možné, tak používat kvantifikátory (nebo aliasy)).
http://www.postgres.cz/index.php/PL/pgSQL#Doporu.C4.8Den.C3.AD_pro_n.C3.A1vrh_ulo.C5.BEen.C3.BDch_procedur_v_jazyce_PL.2FpgSQL
Tiskni
Sdílej: