feat(licence): refuser les licences non liees a un poste
Une cle flottante etait sortie. Un schema hors ligne n'a pas de revocation — rien ne peut aller dire a un exe installe qu'une cle ne vaut plus — donc la seule prise est de cesser d'accepter toute la classe. MachineMatches exige desormais une empreinte, et -Floating disparait du script : il ne peut plus fabriquer une cle que l'exe rejetterait. Effet de bord assume : plus de licence de site, et un poste sans empreinte exploitable n'est plus licenciable du tout — mieux qu'une empreinte degeneree qui ouvrirait partout. Verifie : liee a ce poste acceptee, liee a un autre refusee, les deux flottantes deja emises refusees. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -221,14 +221,22 @@ end;
|
||||
// Le liage au poste, verifie APRES la signature — l'empreinte n'a de sens que
|
||||
// dans une charge utile dont on sait deja qu'elle vient de nous.
|
||||
//
|
||||
// UNE EMPREINTE ABSENTE PASSE, ET C'EST VOULU : c'est une licence flottante,
|
||||
// que seule la cle privee peut emettre. Ce n'est pas un contournement — un
|
||||
// tiers ne peut pas retirer le champ d'une licence liee sans casser la
|
||||
// signature. Le script d'emission, lui, exige -Floating pour en fabriquer une,
|
||||
// pour qu'elle ne sorte jamais par distraction.
|
||||
// UNE EMPREINTE ABSENTE EST REFUSEE. Les licences flottantes ont existe le
|
||||
// temps d'une seance, et l'une d'elles est sortie ; les refuser est la SEULE
|
||||
// facon de l'annuler. Un schema hors ligne n'a pas de revocation — rien ne
|
||||
// peut aller dire a un exe deja installe qu'une cle ne vaut plus — donc la
|
||||
// seule prise qui reste est de cesser d'accepter toute une classe de cles.
|
||||
//
|
||||
// Ce que ca coute : plus de licence de site, une cle par poste. Assume.
|
||||
//
|
||||
// Consequence de bord : un poste dont l'empreinte vaut 'unavailable' (ni WMI
|
||||
// ni MachineGuid) ne peut plus etre licencie du tout, puisque le script
|
||||
// d'emission n'accepte que 16 caracteres hexadecimaux. C'est le bon sens de
|
||||
// l'erreur : mieux vaut un poste qu'on ne peut pas licencier qu'une empreinte
|
||||
// degeneree qui ouvrirait partout.
|
||||
function MachineMatches(const AInfo: TLicenceInfo): Boolean;
|
||||
begin
|
||||
Result := (AInfo.Machine = '') or
|
||||
Result := (AInfo.Machine <> '') and
|
||||
SameText(AInfo.Machine, PM.MachineId.MachineFingerprint);
|
||||
end;
|
||||
|
||||
@@ -342,8 +350,8 @@ begin
|
||||
// vecteur lie sans la cle privee de test, jetee — mais c'est MachineMatches
|
||||
// qui porte la regle, et c'est lui qu'il faut voir tomber.
|
||||
LInfo.Machine := '';
|
||||
if not MachineMatches(LInfo) then
|
||||
raise Exception.Create('Auto-test licence ECHOUE : une licence flottante est refusee.');
|
||||
if MachineMatches(LInfo) then
|
||||
raise Exception.Create('Auto-test licence ECHOUE : une licence flottante est acceptee.');
|
||||
LInfo.Machine := 'ffffffffffffffff';
|
||||
if MachineMatches(LInfo) then
|
||||
raise Exception.Create('Auto-test licence ECHOUE : une licence d''un AUTRE poste est acceptee.');
|
||||
|
||||
Reference in New Issue
Block a user