J'aurais tendance à lire la valeur de l'élément enforceSmartCard
directement à partir de l'écran com.apple.security.smartcard.plist
situé dans le dossier /Library/Preferences
dossier.
Cela peut être fait en utilisant l'option defaults
qui sera nettement plus rapide que l'outil en ligne de commande system_profiler
et vous n'aurez pas besoin de grep
sa sortie :
defaults read /Library/Preferences/com.apple.security.smartcard enforceSmartCard
Voici les sorties possibles pour le system_profiler | grep
y defaults
les commandements, ainsi que leur signification :
system_profiler | grep
defaults
enforceSmartCard=0
0
En enforceSmartCard
est réglé,
et sa valeur est false
enforceSmartCard=1
1
En enforceSmartCard
est réglé,
et sa valeur est true
statut de sortie non nul
Message d'erreur et
statut de sortie non nul
En enforceSmartCard
La clé est pas
set, ou ( defaults
seulement) la propriété
la liste n'existe pas
La valeur par défaut pour enforceSmartCard
est false
Par conséquent, un statut de sortie non nul est essentiellement équivalent en termes de signification - pour nos besoins - à enforceSmartCard=0
. Dans le cas de la defaults
un message d'erreur est également imprimé et ressemble à ceci :
The domain/default pair of (/Library/Preferences/com.apple.security.smartcard, enforceSmartCard) does not exist
donc, s'il n'y a pas d'erreur typographique lorsque vous lancez la commande, alors soit le fichier /Bibliothèque/Préférences/com.apple.security.smartcard.plist n'existe pas, ou bien elle existe et le enforceSmartCard
n'est pas réglé. Dans tous les cas, le message d'erreur n'a que peu d'intérêt, il peut donc être supprimé en redirigeant le fichier stderr
dans le vide :
defaults read /Library/Preferences/com.apple.security.smartcard enforceSmartCard 2>/dev/null
Ainsi, le prédicat sur lequel nous discriminerons sera de savoir si oui ou non cette commande sort "1"
(sans guillemets) : si c'est le cas, l'utilisateur doit s'authentifier à l'aide de sa carte à puce (en plus de toute autre forme d'authentification requise) ; tout autre résultat (soit une sortie de "0"
ou un statut de sortie non nul sans sortie) déduit qu'un utilisateur peut s'authentifier sans utiliser de carte à puce.
Voici le script final qui devrait être équivalent au vôtre :
#!/usr/bin/env zsh
plist=/Library/Preferences/com.apple.security.smartcard
(( $( defaults read "$plist" \
enforceSmartCard 2>/dev/null )
)) && i=1 _not= ||
i=2 _not=not
printf '%s ' The system is ${_not} configured to \
enforce multi-factor authentication \
>/dev/fd/$i