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 @@ -1820,23 +1820,37 @@ /* 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) { - /* XXX Only /usr/lib/rpm/rpmrc must exist in default rcfiles list */ - if (rcfiles == rpmRcfiles && 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; + 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 == rpmRcfiles && 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++; } - strcpy(fn, home); - r++; + + } strncat(fn, r, sizeof(fn) - (strlen(fn) + 1)); fn[sizeof(fn)-1] = '\0'; --- rpm-4.4.8/po/pl.po.orig 2007-04-08 16:11:42.125435004 +0200 +++ rpm-4.4.8/po/pl.po 2007-04-08 16:25:11.343549717 +0200 @@ -3251,6 +3251,10 @@ msgid "Cannot expand %s\n" msgstr "Nie można rozwin±ć %s\n" +#: lib/rpmrc.c:1935 +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:1924 #, c-format msgid "Cannot read %s, HOME is too large.\n"