1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
diff -urN mpich2-1.0.8/src/pm/mpd/Makefile.in mpich2-1.0.8_p/src/pm/mpd/Makefile.in
--- mpich2-1.0.8/src/pm/mpd/Makefile.in 2008-11-01 16:55:07.409787116 -0400
+++ mpich2-1.0.8_p/src/pm/mpd/Makefile.in 2008-11-04 20:37:19.510506041 -0500
@@ -78,7 +78,7 @@
$(C_LINK) -o mpdroot ${mpdroot_OBJECTS} $(LIBS)
mpdroot.o: ${srcdir}/mpdroot.c ${srcdir}/mpdroot.h mpdconf.h
- ${C_COMPILE} -c $<
+ ${C_COMPILE} -DSYSCONFDIR=\"@sysconfdir@\" -c $<
# The following lines provide the right libraries for all example programs
.c:
@@ -136,7 +136,10 @@
fi
-@for cmd in ${PYTHON_SOURCE} ; do \
if [ ! -s $(srcdir)/$$cmd.py ] ; then continue ; fi ; \
- sed -e 's#/usr/bin/env python.*#/usr/bin/env ${PYTHON}#' ${srcdir}/$$cmd.py > $(DESTDIR)${bindir}/temp$$cmd.py ; \
+ sed \
+ -e 's#/usr/bin/env python.*#/usr/bin/env ${PYTHON}#' \
+ -e 's,/etc/mpd.conf,@sysconfdir@/mpd.conf,g' \
+ ${srcdir}/$$cmd.py > $(DESTDIR)${bindir}/temp$$cmd.py ; \
${INSTALL} -m 755 $(DESTDIR)${bindir}/temp$$cmd.py $(DESTDIR)${PYTHONDIR}/$$cmd.py; \
( rm -f $(DESTDIR)${bindir}/temp$$cmd.py >/dev/null 2>&1 || exit 0 ) ; \
done
@@ -218,7 +221,7 @@
mpich2-mpdroot.o: ${srcdir}/mpdroot.c ${srcdir}/mpdroot.h mpdconf.h
${INSTALL} -m 644 ${srcdir}/mpdroot.c mpich2-mpdroot.c
- ${C_COMPILE} -c mpich2-mpdroot.c
+ ${C_COMPILE} -DSYSCONFDIR=\"@sysconfdir@\" -c mpich2-mpdroot.c
rm -f mpich2-mpdroot.c
# A special alternate installation target when using multiple process managers
@@ -238,7 +241,10 @@
fi
for cmd in ${PYTHON_SOURCE} ; do \
if [ ! -s $(srcdir)/$$cmd.py ] ; then continue ; fi ; \
- sed -e 's#/usr/bin/env python.*#/usr/bin/env ${PYTHON}#' ${srcdir}/$$cmd.py > $(DESTDIR)${bindir}/temp$$cmd.py ; \
+ sed \
+ -e 's#/usr/bin/env python.*#/usr/bin/env ${PYTHON}#' \
+ -e 's,/etc/mpd.conf,@sysconfdir@/mpd.conf,g' \
+ ${srcdir}/$$cmd.py > $(DESTDIR)${bindir}/temp$$cmd.py ; \
${INSTALL} -m 755 $(DESTDIR)${bindir}/temp$$cmd.py $(DESTDIR)${PYTHONDIR}/$$cmd.py; \
( rm -f $(DESTDIR)${bindir}/temp$$cmd.py >/dev/null 2>&1 || exit 0 ) ; \
done
diff -urN mpich2-1.0.8/src/pm/mpd/mpdlib.py mpich2-1.0.8_p/src/pm/mpd/mpdlib.py
--- mpich2-1.0.8/src/pm/mpd/mpdlib.py 2007-11-08 18:47:44.000000000 -0500
+++ mpich2-1.0.8_p/src/pm/mpd/mpdlib.py 2008-11-04 20:40:36.812894529 -0500
@@ -1341,11 +1341,11 @@
if os.environ.has_key(k):
self[('env',k)] = os.environ[k]
def get_parms_from_rcfile(self,parmsToOverride,errIfMissingFile=0):
- if os.environ.has_key('MPD_CONF_FILE'):
+ if os.environ.has_key('MPD_CONF_FILE') and os.access(os.environ['MPD_CONF_FILE'], os.R_OK):
parmsRCFilename = os.environ['MPD_CONF_FILE']
elif hasattr(os,'getuid') and os.getuid() == 0: # if ROOT
parmsRCFilename = os.path.abspath('/etc/mpd.conf')
- elif os.environ.has_key('HOME'):
+ elif os.environ.has_key('HOME') and os.access(os.path.join(os.environ['HOME'],'.mpd.conf'), os.R_OK):
parmsRCFilename = os.path.join(os.environ['HOME'],'.mpd.conf')
elif os.environ.has_key('HOMEPATH'): # e.g. win32
parmsRCFilename = os.path.join(os.environ['HOMEPATH'],'.mpd.conf')
diff -urN mpich2-1.0.8/src/pm/mpd/mpdroot.c mpich2-1.0.8_p/src/pm/mpd/mpdroot.c
--- mpich2-1.0.8/src/pm/mpd/mpdroot.c 2007-11-02 18:50:19.000000000 -0400
+++ mpich2-1.0.8_p/src/pm/mpd/mpdroot.c 2008-11-07 13:45:10.560017904 -0500
@@ -19,6 +19,7 @@
struct passwd *pwent;
char input_line[NAME_LEN+1], secretword[NAME_LEN+1];
FILE *conf_file;
+ char *mpdconf_path = NULL;
if ((pwent = getpwuid(getuid())) == NULL) /* for real id */
{
@@ -26,10 +27,32 @@
exit(-1);
}
- conf_file = fopen("/etc/mpd.conf","r");
+ /*
+ * We look for a readable mpd.conf in the following order.
+ * - MPD_CONF_FILE set in environment
+ * - .mpd.conf in the user's home directory
+ * - The system wide default in SYSCONFDIR/mpd.conf
+ */
+ mpdconf_path = getenv("MPD_CONF_FILE");
+ if ( ! (mpdconf_path && access( mpdconf_path, R_OK ) == 0) ){
+ /* By far, the largest we'll need */
+ size_t mpdconf_path_len = strlen(pwent->pw_dir) \
+ + strlen(SYSCONFDIR) + strlen("/.mpd.conf");
+
+ mpdconf_path = (char*) malloc( sizeof(char) * mpdconf_path_len );
+ if ( ! mpdconf_path ){
+ fprintf( stderr, "%s: Failed to allocate a buffer for path to mpd.conf\n", argv[0]);
+ exit(-1);
+ }
+ snprintf( mpdconf_path, mpdconf_path_len-1, "%s/.mpd.conf", pwent->pw_dir );
+ if ( access( mpdconf_path, R_OK ) != 0 )
+ snprintf( mpdconf_path, mpdconf_path_len-1, "%s/mpd.conf", SYSCONFDIR );
+ }
+ conf_file = fopen( mpdconf_path, "r");
+
if (conf_file == NULL)
{
- printf("%s: open failed for root's mpd conf file",argv[0]);
+ printf("%s: open failed for root's mpd conf file\n",argv[0]);
exit(-1);
}
secretword[0] = '\0';
|