BSD: find_devs_with_freebsd/netbsd use lstrip('LABEL=') which mangles labels starting with L, A, B or E

Aperta Adatta ai principianti
#7,231 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
82/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
backend

Direzione di ricerca

Inizia in cloudinit/util.py, nelle funzioni find_devs_with_freebsd() e find_devs_with_netbsd(), soprattutto nella gestione di LABEL= e TYPE= citata nell’issue. Leggi i test relativi alla ricerca dei dispositivi ed eseguili per verificare entrambe le funzioni. Il lavoro è completato quando le etichette che iniziano con L, A, B o E vengono mantenute e i test continuano a coprire il comportamento di ricerca esistente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Bug report

On FreeBSD and NetBSD, util.find_devs_with_freebsd() / find_devs_with_netbsd() use str.lstrip() to remove the LABEL= / TYPE= prefix:

label = criteria.lstrip("LABEL=")
_type = criteria.lstrip("TYPE=")

lstrip() removes any leading characters in the set {L, A, B, E, =}, not the prefix. Any label that starts with one of those characters is mangled:

criteria expected label actual label
LABEL=BACKUP BACKUP CKUP
LABEL=ALBERT ALBERT RT
LABEL=EFI EFI FI

So the device lookup silently fails for such labels (e.g. a user-defined config/seed disk label, or cc_mounts/cc_disk_setup using LABEL=).

Steps to reproduce the problem

from unittest import mock
from cloudinit import util
with mock.patch("os.path.exists", return_value=True):
    print(util.find_devs_with_freebsd("LABEL=BACKUP"))
# ['/dev/msdosfs/CKUP', '/dev/iso9660/CKUP']

Environment details

  • Cloud-init version: main @ b452c2097 (26.2)
  • Operating System Distribution: FreeBSD, NetBSD
  • Cloud provider, platform or installer type: any

cloud-init logs

N/A – reproduced at unit level (above).

Possible fix

Use criteria[len("LABEL="):] (or str.removeprefix()) for both LABEL= and TYPE=.


Contributor note: I'm happy to raise a PR with the fix and unit tests once a maintainer confirms this is a bug.

Lingua principale
Python
Stelle
3.9k
Fork
1.2k
Merge medio
2g 26m
PR unite (30g)
16

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di canonical/cloud-init

Tutte le issue di canonical/cloud-init

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.