diff -Nru rpm-4.1/lib/rpmrc.c rpm-4.1.new/lib/rpmrc.c --- rpm-4.1/lib/rpmrc.c Tue Aug 20 16:53:44 2002 +++ rpm-4.1.new/lib/rpmrc.c Tue Mar 11 18:41:48 2003 @@ -1756,27 +1756,39 @@ /* Expand ~/ to $HOME/ */ fn[0] = '\0'; if (r[0] == '~' && r[1] == '/') { + const char * etc_dir = getenv("HOME_ETC"); const char * home = getenv("HOME"); - if (home == NULL) { + if (etc_dir) { + if (strlen(etc_dir) > (sizeof(fn) - strlen(r))) { + rpmError(RPMERR_RPMRC, _("Cannot read %s, HOME_ETC is too large.\n"),r); + rc = 1; + break; + } + strcpy(fn, etc_dir); + strncat(fn, "/", sizeof(fn) - strlen(fn)); + r+=2; + + } else { + if (home == NULL) { /* XXX Only /usr/lib/rpm/rpmrc must exist in default rcfiles list */ - if (rcfiles == defrcfiles && myrcfiles != r) - continue; - rpmError(RPMERR_RPMRC, _("Cannot expand %s\n"), r); - rc = 1; - break; - } - if (strlen(home) > (sizeof(fn) - strlen(r))) { - rpmError(RPMERR_RPMRC, _("Cannot read %s, HOME is too large.\n"), + if (rcfiles == defrcfiles && myrcfiles != r) + continue; + rpmError(RPMERR_RPMRC, _("Cannot expand %s\n"), r); + rc = 1; + break; + } + if (strlen(home) > (sizeof(fn) - strlen(r))) { + rpmError(RPMERR_RPMRC, _("Cannot read %s, HOME is too large.\n"), r); - rc = 1; - break; - } - strcpy(fn, home); - r++; - } - strncat(fn, r, sizeof(fn) - (strlen(fn) + 1)); - fn[sizeof(fn)-1] = '\0'; - + rc = 1; + break; + } + strcpy(fn, home); + r++; + } + } + strncat(fn, r, sizeof(fn) - (strlen(fn) + 1)); + fn[sizeof(fn)-1] = '\0'; /* Read another rcfile */ fd = Fopen(fn, "r.fpio"); if (fd == NULL || Ferror(fd)) { --- rpm-4.4.3/po/pl.po.orig 2005-11-18 22:46:19.577151784 +0100 +++ rpm-4.4.3/po/pl.po 2005-11-18 22:48:30.947180504 +0100 @@ -3176,6 +3176,10 @@ msgid "bad option '%s' at %s:%d\n" msgstr "błędna opcja '%s' w %s:%d\n" +#: lib/rpmrc.c:1796 +msgid "Cannot read %s, HOME_ETC is too large.\n" +msgstr "Nie można odczytać %s, HOME_ETC jest zbyt duże.\n" + #: lib/rpmrc.c:1797 #, c-format msgid "Cannot expand %s\n"