1 diff -Nru rpm-4.1/lib/rpmrc.c rpm-4.1.new/lib/rpmrc.c
2 --- rpm-4.1/lib/rpmrc.c Tue Aug 20 16:53:44 2002
3 +++ rpm-4.1.new/lib/rpmrc.c Tue Mar 11 18:41:48 2003
4 @@ -1756,27 +1756,40 @@
5 /* Expand ~/ to $HOME/ */
7 if (r[0] == '~' && r[1] == '/') {
8 + const char * config_dir = getenv("CONFIG_DIR");
9 const char * home = getenv("HOME");
12 + if (strlen(config_dir) > (sizeof(fn) - strlen(r))) {
13 + rpmError(RPMERR_RPMRC, _("Cannot read %s, CONFIG_DIR is too large.\n"),r);
17 + strcpy(fn, config_dir);
18 + strncat(fn, "/", sizeof(fn) - strlen(fn));
21 + if (r[0] == '.') r++;
24 /* XXX Only /usr/lib/rpm/rpmrc must exist in default rcfiles list */
25 - if (rcfiles == defrcfiles && myrcfiles != r)
27 - rpmError(RPMERR_RPMRC, _("Cannot expand %s\n"), r);
31 - if (strlen(home) > (sizeof(fn) - strlen(r))) {
32 - rpmError(RPMERR_RPMRC, _("Cannot read %s, HOME is too large.\n"),
33 + if (rcfiles == defrcfiles && myrcfiles != r)
35 + rpmError(RPMERR_RPMRC, _("Cannot expand %s\n"), r);
39 + if (strlen(home) > (sizeof(fn) - strlen(r))) {
40 + rpmError(RPMERR_RPMRC, _("Cannot read %s, HOME is too large.\n"),
48 - strncat(fn, r, sizeof(fn) - (strlen(fn) + 1));
49 - fn[sizeof(fn)-1] = '\0';
58 + strncat(fn, r, sizeof(fn) - (strlen(fn) + 1));
59 + fn[sizeof(fn)-1] = '\0';
60 /* Read another rcfile */
61 fd = Fopen(fn, "r.fpio");
62 if (fd == NULL || Ferror(fd)) {
63 diff -Nru rpm-4.1/rpmio/macro.c rpm-4.1.new/rpmio/macro.c
64 --- rpm-4.1/rpmio/macro.c Tue Sep 17 14:58:23 2002
65 +++ rpm-4.1.new/rpmio/macro.c Tue Mar 11 18:21:59 2003
66 @@ -1614,15 +1614,23 @@
68 if (mfile[0] == '~' && mfile[1] == '/') {
70 - if ((home = getenv("HOME")) != NULL) {
72 - strncpy(buf, home, sizeof(buf));
73 - strncat(buf, "/", sizeof(buf) - strlen(buf));
74 + char *config_dir = getenv("CONFIG_DIR");
78 + if (mfile[0] == '.') mfile++;
79 + strncpy(buf, config_dir, sizeof(buf));
80 + strncat(buf, "/", sizeof(buf) - strlen(buf));
82 + if ((home = getenv("HOME")) != NULL) {
84 + strncpy(buf, home, sizeof(buf));
85 + strncat(buf, "/", sizeof(buf) - strlen(buf));
89 strncat(buf, mfile, sizeof(buf) - strlen(buf));
90 buf[sizeof(buf)-1] = '\0';
92 fd = Fopen(buf, "r.fpio");
93 if (fd == NULL || Ferror(fd)) {
94 if (fd) (void) Fclose(fd);