mirror of
https://gitea.osmocom.org/sim-card/pysim.git
synced 2026-03-28 08:18:36 +03:00
pySim.cards: Make file_exists() check for activated/deactivated
The Card.file_exists() method is only called by legacy pySim-{read,prog}
when it wants to determine if it can read/write a file. Therefore
it actually doesn't only want to know if the file exists, but also
if it's not deactivated.
Change-Id: I73bd1ab3780e475c96a10cd5dbdd45b829c67335
Closes: OS#6530
This commit is contained in:
@@ -23,7 +23,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
from typing import Optional, Tuple
|
from typing import Optional, Tuple
|
||||||
from pySim.ts_102_221 import EF_DIR
|
from pySim.ts_102_221 import EF_DIR, CardProfileUICC
|
||||||
from pySim.ts_51_011 import DF_GSM
|
from pySim.ts_51_011 import DF_GSM
|
||||||
|
|
||||||
from pySim.utils import *
|
from pySim.utils import *
|
||||||
@@ -54,10 +54,17 @@ class CardBase:
|
|||||||
print("warning: erasing is not supported for specified card type!")
|
print("warning: erasing is not supported for specified card type!")
|
||||||
|
|
||||||
def file_exists(self, fid: Path) -> bool:
|
def file_exists(self, fid: Path) -> bool:
|
||||||
|
"""Determine if the file exists (and is not deactivated)."""
|
||||||
res_arr = self._scc.try_select_path(fid)
|
res_arr = self._scc.try_select_path(fid)
|
||||||
for res in res_arr:
|
for res in res_arr:
|
||||||
if res[1] != '9000':
|
if res[1] != '9000':
|
||||||
return False
|
return False
|
||||||
|
try:
|
||||||
|
d = CardProfileUICC.decode_select_response(res_arr[-1][0])
|
||||||
|
if d.get('life_cycle_status_integer', 'operational_activated') != 'operational_activated':
|
||||||
|
return False
|
||||||
|
except:
|
||||||
|
pass
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def read_aids(self) -> List[Hexstr]:
|
def read_aids(self) -> List[Hexstr]:
|
||||||
|
|||||||
Reference in New Issue
Block a user