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)) { diff -Nru rpm-4.1/rpmio/macro.c rpm-4.1.new/rpmio/macro.c --- rpm-4.1/rpmio/macro.c Tue Sep 17 14:58:23 2002 +++ rpm-4.1.new/rpmio/macro.c Tue Mar 11 18:21:59 2003 @@ -1614,15 +1614,22 @@ buf[0] = '\0'; if (mfile[0] == '~' && mfile[1] == '/') { char *home; - if ((home = getenv("HOME")) != NULL) { - mfile += 2; - strncpy(buf, home, sizeof(buf)); - strncat(buf, "/", sizeof(buf) - strlen(buf)); + char *etc_dir = getenv("HOME_ETC"); + + if (etc_dir) { + mfile += 2; + strncpy(buf, etc_dir, sizeof(buf)); + strncat(buf, "/", sizeof(buf) - strlen(buf)); + } else { + if ((home = getenv("HOME")) != NULL) { + mfile += 2; + strncpy(buf, home, sizeof(buf)); + strncat(buf, "/", sizeof(buf) - strlen(buf)); } + } } strncat(buf, mfile, sizeof(buf) - strlen(buf)); buf[sizeof(buf)-1] = '\0'; - fd = Fopen(buf, "r.fpio"); if (fd == NULL || Ferror(fd)) { if (fd) (void) Fclose(fd); --- rpm-4.3/po/pl.po.orig 2003-06-10 23:59:11.000000000 +0200 +++ rpm-4.3/po/pl.po 2003-06-11 00:06:16.000000000 +0200 @@ -2834,6 +2834,10 @@ msgid "Please contact rpm-list@redhat.com\n" msgstr "Proszę skontaktować się z rpm-list@redhat.com\n" +#: lib/rpmrc.c:1764 +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:1765 #, c-format msgid "Cannot expand %s\n"