[sr-dev] git:master: pkg: option to suid via start-stop-daemon

Daniel-Constantin Mierla miconda at gmail.com
Sun Mar 6 14:54:01 CET 2011


Module: sip-router
Branch: master
Commit: 367e8a70775c939395e121bce2352876e6c09ced
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=367e8a70775c939395e121bce2352876e6c09ced

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Sun Mar  6 14:51:34 2011 +0100

pkg: option to suid via start-stop-daemon

- start-stop-daemon can do suid before starting the application
- it can be enabled in /etc/default/kamailio via SSD_SUID

---

 pkg/kamailio/deb/debian/kamailio.default |    6 +++
 pkg/kamailio/deb/debian/kamailio.init    |   55 +++++++++++++++++++-----------
 2 files changed, 41 insertions(+), 20 deletions(-)

diff --git a/pkg/kamailio/deb/debian/kamailio.default b/pkg/kamailio/deb/debian/kamailio.default
index 4317664..4d51e42 100644
--- a/pkg/kamailio/deb/debian/kamailio.default
+++ b/pkg/kamailio/deb/debian/kamailio.default
@@ -14,6 +14,12 @@ GROUP=kamailio
 # Amount of memory to allocate for the running Kamailio server (in Mb)
 MEMORY=64
 
+# Switch to USER and GROUP by start-stop-daemon or by kamailio itself
+# - with recent kernels, changing user ID inside applicaton prevents
+#   dumping core files. If the value is 'yes', the suid is done by
+#   start-stop-daemon, otherwise it is done by kamailio itself
+SSD_SUID=no
+
 # Enable the server to leave a core file when it crashes.
 # Set this to 'yes' to enable Kamailio to leave a core file when it crashes
 # or 'no' to disable this feature. This option is case sensitive and only
diff --git a/pkg/kamailio/deb/debian/kamailio.init b/pkg/kamailio/deb/debian/kamailio.init
index dff6e5d..a53ec3e 100644
--- a/pkg/kamailio/deb/debian/kamailio.init
+++ b/pkg/kamailio/deb/debian/kamailio.init
@@ -22,13 +22,14 @@ DESC=kamailio
 HOMEDIR=/var/run/kamailio
 PIDFILE=$HOMEDIR/$NAME.pid
 DEFAULTS=/etc/default/kamailio
+CFGFILE=/etc/kamailio/kamailio.cfg
 RUN_KAMAILIO=no
 
 # Do not start kamailio if fork=no is set in the config file
 # otherwise the boot process will just stop
 check_fork ()
 {
-    if grep -q "^[[:space:]]*fork[[:space:]]*=[[:space:]]*no.*" /etc/kamailio/kamailio.cfg; then
+    if grep -q "^[[:space:]]*fork[[:space:]]*=[[:space:]]*no.*" $CFGFILE; then
 	echo "Not starting $DESC: fork=no specified in config file; run /etc/init.d/kamailio debug instead"
 	exit 1
     fi
@@ -80,7 +81,10 @@ create_radius_seqfile ()
     chmod 660 $RADIUS_SEQ_FILE
 }
 
-test -f $DAEMON || exit 0
+if [ ! -f $DAEMON ]; then
+	echo "No Kamailio daemon at: $DAEMON"
+	exit 0
+fi
 
 # Load startup options if available
 if [ -f $DEFAULTS ]; then
@@ -104,26 +108,23 @@ if test "$DUMP_CORE" = "yes" ; then
     ulimit -c unlimited
     
     # directory for the core dump files
-    # COREDIR=/home/corefiles
+    # COREDIR=/tmp/corefiles
     # [ -d $COREDIR ] || mkdir $COREDIR
     # chmod 777 $COREDIR
     # echo "$COREDIR/core.%e.sig%s.%p" > /proc/sys/kernel/core_pattern
 fi
 
-OPTIONS="-P $PIDFILE -m $MEMORY -u $USER -g $GROUP"
-
-case "$1" in
-  start|debug)
-	check_kamailio_config
-	check_homedir
-	create_radius_seqfile
-
-	if [ "$1" != "debug" ]; then
-	    check_fork
-	fi
+if [ "$SSD_SUID" != "yes" ]; then
+	OPTIONS="-f $CFGFILE -P $PIDFILE -m $MEMORY -u $USER -g $GROUP"
+	SSDOPTS=""
+else
+	OPTIONS="-f $CFGFILE -P $PIDFILE -m $MEMORY"
+	SSDOPTS="--chuid $USER:$GROUP"
+fi
 
-	echo -n "Starting $DESC: $NAME"
-	start-stop-daemon --start --quiet --pidfile $PIDFILE \
+start_kamailio_daemon ()
+{
+	start-stop-daemon --start --quiet --pidfile $PIDFILE $SSDOPTS \
 		--exec $DAEMON -- $OPTIONS || if [ ! -r "$PIDFILE" ]; then
 			echo " error, failed to start."
 			exit 1
@@ -134,9 +135,24 @@ case "$1" in
 			echo " error, failed to start ($PIDFILE exists)."
 			exit 1
 		fi
+}
+
+case "$1" in
+  start|debug)
+	check_kamailio_config
+	check_homedir
+	create_radius_seqfile
+
+	if [ "$1" != "debug" ]; then
+	    check_fork
+	fi
+
+	echo -n "Starting $DESC: $NAME "
+	start_kamailio_daemon
+	echo "."
 	;;
   stop)
-	echo -n "Stopping $DESC: $NAME"
+	echo -n "Stopping $DESC: $NAME "
 	start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
 		--exec $DAEMON
 	echo "."
@@ -146,12 +162,11 @@ case "$1" in
 	check_homedir
 	create_radius_seqfile
 
-	echo -n "Restarting $DESC: $NAME"
+	echo -n "Restarting $DESC: $NAME "
 	start-stop-daemon --oknodo --stop --quiet --pidfile \
 		$PIDFILE --exec $DAEMON
 	sleep 1
-	start-stop-daemon --start --quiet --pidfile \
-		$PIDFILE --exec $DAEMON  -- $OPTIONS
+	start_kamailio_daemon
 	echo "."
 	;;
   status)




More information about the sr-dev mailing list