Subject: | |
From: | |
Reply To: | Keven Miller (3kG) |
Date: | Fri, 5 Apr 2024 07:13:29 -0600 |
Content-Type: | multipart/mixed |
Parts/Attachments: |
|
|
My findings using this included numbered listing:
START_AGENT_CMD is referenced at lines 87, 91, 97
all inside the daemon block 82.
daemon is referenced in 175, inside the start_cpa block 169.
start_cpa is referenced line 199 in start, 208 in condrestart.
start referenced at 273 in restart.
start, condrestart, and restart are entry points
as per Usage command line 283.
start, condrestart check if server is already running;
then calls start_cpa.
start_cpa, check for executables and other files are valid;
then calls daemon.
daemon:
86 if CURRENTUSER (set line 51) = USERNAME (set line 40 "qmaestro2")
Run START_AGENT_CMD
else
89 if user is root (CURRENTUSERID set line 52 = ROOTISERID set line50)
or CURRENTUSER = OWNER (set line 53, creator of this script) then
90 if USERNAME = "" (NEVER: set line 40 as "qmaestro2")
Run START_AGENT_CMD
else
97 su (as user USERNAME "qmaestro2")
Run START_AGENT_CMD
So either
1. Must be user qmaestro2 86
2. Must be user root 89
3. Must be creator of script 89
AND can change user (su) to qmaestro2. 97
Proposed SOLUTION:
How about change line 86
86) if [ "$CURRENTUSER" = "$USERNAME" ]; then
to
86) if [ "$CURRENTUSER" = "$USERNAME" ] || [ "$CURRENTUSER" -ne "" ];
then
You may have issues of the user writting to $OUTFILE
and may need to do something similar in lines 95-96.
Keven Miller
* To join/leave the list, search archives, change list settings, *
* etc., please visit http://raven.utc.edu/archives/hp3000-l.html *
1) #!/bin/sh
2) #
3) # tebctl Start up the Common Platform Agent
4) #
5) # chkconfig: 2345 99 01
6) # description: Common Platform Agent
7) #
8) # processname: agent
9)
10) ### BEGIN INIT INFO
11) # Provides: tebctl-tws_cpa_agent_qmaestro2
12) # Required-Start:
13) # Required-Stop:
14) # Should-Start:
15) # Should-Stop:
16) # Default-Start: 2 3 4 5
17) # Default-Stop: 0 1 6
18) # Short-Description: Common Platform Agent tebctl-tws_cpa_agent_qmaestro2
19) # Description: IBM Tivoli Endpoint Management Infrastructure agent tebctl-tws_cpa_agent_qmaestro2
20) ### END INIT INFO
21)
22) # Copyright (c) 2009 IBM
23) # All rights reserved.
24)
25) PATH=/sbin:/usr/sbin:/usr/bin:$PATH
26) export PATH
27) OSName=`uname`
28)
29) case $OSName in
30) SunOS)
31) PATH=/usr/xpg4/bin:$PATH
32) export PATH
33) ;;
34) esac
35)
36) TEBHOME=/maestro/TWS/IBM_I/TWS/ITA/cpa
37) TEBCFGHOME=/maestro/TWS/IBM_I/TWSDATA/ITA/cpa
38) export TEBCFGHOME
39) SERVICENAME=tebctl-tws_cpa_agent_qmaestro2
40) USERNAME=qmaestro2
41)
42) EXEDIR=$TEBHOME/ita
43) CFGDIR=$TEBCFGHOME/ita
44) PROCNAME=agent
45) AGENTSH=$EXEDIR/agent.sh
46) CPASU=$EXEDIR/cpasu
47) STATUSFILE=$EXEDIR/status.info
48) CFGFILE=$CFGDIR/ita.ini
49) OUTFILE=$CFGDIR/native.out
50) ROOTUSERID=0
51) CURRENTUSER=`id -un`
52) CURRENTUSERID=`id -u`
53) OWNER=`ls -l $0 | awk '{print $3}'`
54)
55) if [ "$OSTYPE" = "os400" ]; then
56) #OS400 user names are case insensitive, for comparison convert both to lowercase
57) CURRENTUSER=`echo $CURRENTUSER | tr [:upper:] [:lower:]`
58) USERNAME=`echo $USERNAME | tr [:upper:] [:lower:]`
59) OWNER=`echo $OWNER | tr [:upper:] [:lower:]`
60) SU_CMD=$CPASU
61) START_AGENT_CMD="sh $AGENTSH"
62) else
63) SU_CMD="su -"
64) START_AGENT_CMD=$AGENTSH
65) fi
66)
67) TERMINATETIMEOUT=60
68) RETVAL=0
69)
70)
71) # These functions follow the RedHat Linux convention
72) success()
73) {
74) printf "OK"
75) }
76)
77) failure()
78) {
79) printf "FAILED"
80) }
81)
82) daemon()
83) {
84) #umask 027
85)
86) if [ "$CURRENTUSER" = "$USERNAME" ]; then
87) $START_AGENT_CMD > $OUTFILE 2>&1
88) else
89) if [ "$CURRENTUSERID" = "$ROOTUSERID" ] || [ "$CURRENTUSER" = "$OWNER" ]; then
90) if [ "$USERNAME" = "" ]; then
91) $START_AGENT_CMD > $OUTFILE 2>&1
92) else
93) # assign OUTFILE to the USERNAME otherwise he will not be able to write on it when
94) # he starts the agent
95) echo >> $OUTFILE 2>/dev/null
96) chown $USERNAME $OUTFILE 2>/dev/null
97) $SU_CMD $USERNAME "$START_AGENT_CMD" > $OUTFILE 2>&1
98) fi
99) else
100) # not root or USERNAME.
101) if [ "$OWNER" = "$USERNAME" ]; then
102) echo "Only root or $OWNER can start the agent!"
103) else
104) echo "Only root, $OWNER or $USERNAME can start the agent!"
105) fi
106) failure
107) return 1
108) fi
109) fi
110)
111) sleep 1
112) get_pid
113)
114) if [ $pid -ne 0 ]; then
115) success
116) return 0
117) else
118) failure
119) return 1
120) fi
121) }
122)
123) status()
124) {
125) get_pid
126) if [ $pid -ne 0 ]; then
127) echo "$SERVICENAME agent running"
128) exit 0
129) else
130) echo "$SERVICENAME agent down"
131) exit 1
132) fi
133) }
134)
135) util_inc ()
136) {
137) cntvar=$1
138) val="`eval echo \\$${cntvar}`<file://$$%7bcntvar%7d%60>"
139) eval ${cntvar}=`expr ${val} + 1`
140) }
141)
142)
143) get_pid()
144) {
145) pid=0
146) if [ -f $STATUSFILE ]; then
147) pid=`cat "$STATUSFILE"`
148) if [ "$pid" = "" ]; then
149) pid=0
150) elif [ $pid -ne 0 ]; then
151) #wait 1 second to let process start
152) sleep 1
153) OSname=`uname`
154) if [ "$OSname" = "OS400" ]; then
155) PROCESS=`ps -p $pid | grep $pid | grep -i agent`
156) if [ $? -ne 0 ]; then
157) pid=0
158) fi
159) else
160) PROCESS=`ps -p $pid | grep $pid | awk '{ print $4 }'`
161) if [ "$PROCESS" != "$PROCNAME" ]; then
162) pid=0
163) fi
164) fi
165) fi
166) fi
167) }
168)
169) start_cpa()
170) {
171) if [ -f $CFGFILE -a -x $AGENTSH -a -x $EXEDIR/$PROCNAME ]; then
172) # Run agent and check the return status...
173) cd $EXEDIR
174) printf "Starting $SERVICENAME agent: "
175) daemon
176) RETVAL=$?
177) printf "\n"
178) else
179) echo "$SERVICENAME agent not installed properly"
180) exit 2
181) fi
182) }
183)
184) case "$1" in
185) start_msg)
186) echo "Starting $SERVICENAME daemon"
187) ;;
188)
189) stop_msg)
190) echo "Stopping $SERVICENAME daemon"
191) ;;
192)
193) condrestart)
194) get_pid
195) if [ $pid -ne 0 ] ; then
196) echo "$SERVICENAME is running"
197) exit 0
198) fi
199) start_cpa
200) ;;
201)
202) start)
203) get_pid
204) if [ $pid -ne 0 ] ; then
205) echo "$SERVICENAME already started"
206) exit 0
207) fi
208) start_cpa
209) ;;
210)
211) stop)
212) if [ "$CURRENTUSER" = "$USERNAME" ] || [ "$CURRENTUSERID" = "$ROOTUSERID" ] || [ "$CURRENTUSER" = "$OWNER" ]; then
213) get_pid
214)
215) if [ $pid -ne 0 ]; then
216) printf "Stopping $SERVICENAME Agent (${pid}):"
217) RETVAL=1
218)
219) kill -TERM ${pid}
220)
221) if [ $? -eq 0 ] ; then
222) cnt=0
223) while [ ${cnt} -lt ${TERMINATETIMEOUT} ] ; do
224) printf "."
225) sleep 1
226) ps -p ${pid} > /dev/null 2>&1
227) if [ $? -ne 0 ] ; then
228) break
229) fi
230) util_inc cnt
231) done
232) else
233) rm -f "${STATUSFILE}"
234) fi
235)
236) ps -p ${pid} > /dev/null 2>&1
237) if [ $? -eq 0 ] ; then
238) printf "Timeout\n"
239) printf "Cannot stop $SERVICENAME Agent - killing it..."
240) kill -9 ${pid}
241) sleep 2
242) ps -p ${pid} > /dev/null 2>&1
243) if [ $? -eq 0 ] ; then
244) printf "Cannot kill $SERVICENAME Agent - giving up.\n"
245) RETVAL=0
246) fi
247) fi
248) rm -f "${STATUSFILE}"
249)
250) if [ $RETVAL -eq 1 ] ; then
251) success
252) RETVAL=0
253) else
254) failure
255) RETVAL=1
256) fi
257) printf "\n"
258) fi
259) else
260) # not root or USERNAME.
261) if [ "$OWNER" = "$USERNAME" ]; then
262) echo "Only root or $OWNER can stop the agent!"
263) else
264) echo "Only root, $OWNER or $USERNAME can stop the agent!"
265) fi
266) failure
267) RETVAL=1
268) fi
269) ;;
270)
271) restart)
272) $0 stop
273) $0 start
274) RETVAL=$?
275) ;;
276)
277) status)
278) status
279) RETVAL=$?
280) ;;
281)
282) *)
283) echo "Usage: $0 {start|stop|condrestart|restart|status}"
284) RETVAL=2
285) ;;
286) esac
287) exit $RETVAL
* To join/leave the list, search archives, change list settings, *
* etc., please visit http://raven.utc.edu/archives/hp3000-l.html *
|
|
|