( TCH | 2019. 09. 13., p – 22:09 )

> Vendor-specific (/usr/lib/systemd/system/*.[unit-type]) < System-specific override (/etc/systemd/system/*.[unit-type]) < System-specific drop-in (/etc/systemd/system/FOO.[unit-type].d/*, lexikografikus sorrendben).

Ha override-olsz egy unit-ot, az abban levők lesznek érvényesek. Ha drop-innel felülbírálsz, akkor minden direktívánál a legutolsó előfordulás (értelemszerűen, ami nincs drop-inben felülbírálva, ott az eredeti unit fájlban szereplő érték) szerepel.

A kérdésnek az volt a költői fele, a lényegi az volt, hogy amennyiben az adattípust egy külön direktívával adod meg, akkor mi gátol meg, hogy ugyanezt az override mechanizmust kövesd?

> Oks, és ha nincs getpwnam, akkor kimarad a teljes ág és az strtoul visszatérési értéke azonnal uid lesz (szevasz K&R-féle miazahibakezeléslol hozzáállás). Ami 0pointerre... uid=0 lesz.
> Ha gondolod, jelentsd náluk secu bugként, tied lehet a dicsőség a megtalálásáért, az oldalukon levő stable (5.8) verzióban még biztosan ott van.

A

system.c

1437. sorától kezdődő

int netsnmp_str_to_uid()

függvényre gondolsz?

int netsnmp_str_to_uid(const char *useroruid) {
    int uid;
#if HAVE_GETPWNAM && HAVE_PWD_H
    struct passwd *pwd;
#endif

    uid = atoi(useroruid);

    if (uid == 0) {
#if HAVE_GETPWNAM && HAVE_PWD_H
        pwd = getpwnam(useroruid);
        uid = pwd ? pwd->pw_uid : 0;
        endpwent();
#endif
        if (uid == 0)
            snmp_log(LOG_WARNING, "Can't identify user (%s).\n", useroruid);
    }
    return uid;
    
}

Ez a

0pointer

-ra, amennyiben nincs

getpwnam

, azt fogja csinálni, hogy kiszórja a logba, hogy

Can't identify user (0pointer).

ugyanis, ha az uid=0 akkor az invalid, tehát ezt hiába jelenteném secu bugnak, mert nem az.

> Szerk.: sőt, rosszabb, ha nincs getpwnam, akkor _minden_ nem numerikus értékre 0 lesz, vagyis azt csinálja, amit fentebb a systemd-re láttatni akartál (root-ra fallbackel)...

Alámszerkesztettél, ld. feljebb, ez sosem fallbackel root-ra, mert az uid 0 invalid. Nem tűnik fel a commentben felette, hogy

 * @return Either a user number > 0 or 0 if useroruid is not a valid user
 *   name, not a valid user number or the name of the root user.

Keress rá a használatra:

snmpSSHDomain.c:957

és

agentx_config.c:99

; mind a két esetben le van kezelve, hogy uid=0: error.

Azonfelül, ez egy tool; most komolyan ezt akarjuk ráhúzni az egész UNIX világra, hogy egy tool-ban is így van?